Created
November 28, 2023 09:29
-
-
Save GalileoCap/a5c1bf518f038fbf55a4bcecbf665040 to your computer and use it in GitHub Desktop.
Implementation of Rule110 on D--
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
SALAD //* S: Machine definitions *********************************** | |
SALAD // Enable execution | |
TACOS INIT 0 NUM | |
SALAD // General registers | |
TACOS R0 0 NUM | |
TACOS R1 0 NUM | |
TACOS R2 0 NUM | |
SALAD // Return registers, used to pass the label to jump to on return and get the return value | |
TACOS RFUN main TEXT | |
TACOS RVAL 0 NUM | |
SALAD // Memory cells | |
TACOS M0 0 NUM | |
TACOS M1 0 NUM | |
TACOS M2 0 NUM | |
SALAD //* S: Step function ***************************************** | |
SALAD // Receives three cells on R0, R1, and R2, and returns the next value for R1 | |
SANDWICH stepRet0 | |
STEAK INIT NUM 1 TACOS RVAL 0 NUM | |
STEAK INIT NUM 1 CURRY $RFUN | |
SANDWICH stepRet1 | |
STEAK INIT NUM 1 TACOS RVAL 1 NUM | |
STEAK INIT NUM 1 CURRY $RFUN | |
SANDWICH step | |
SALAD // 111 => 0 | |
STEAK INIT NUM 1 STEAK R0 NUM 1 STEAK R1 NUM 1 STEAK R2 NUM 1 CURRY stepRet0 | |
SALAD // 110 => 1 | |
STEAK INIT NUM 1 STEAK R0 NUM 1 STEAK R1 NUM 1 STEAK R2 NUM 0 CURRY stepRet1 | |
SALAD // 101 => 1 | |
STEAK INIT NUM 1 STEAK R0 NUM 1 STEAK R1 NUM 0 STEAK R2 NUM 1 CURRY stepRet1 | |
SALAD // 100 => 0 | |
STEAK INIT NUM 1 STEAK R0 NUM 1 STEAK R1 NUM 0 STEAK R2 NUM 0 CURRY stepRet0 | |
SALAD // 011 => 1 | |
STEAK INIT NUM 1 STEAK R0 NUM 0 STEAK R1 NUM 1 STEAK R2 NUM 1 CURRY stepRet1 | |
SALAD // 010 => 1 | |
STEAK INIT NUM 1 STEAK R0 NUM 0 STEAK R1 NUM 1 STEAK R2 NUM 0 CURRY stepRet1 | |
SALAD // 001 => 1 | |
STEAK INIT NUM 1 STEAK R0 NUM 0 STEAK R1 NUM 0 STEAK R2 NUM 1 CURRY stepRet1 | |
SALAD // 000 => 0 | |
STEAK INIT NUM 1 STEAK R0 NUM 0 STEAK R1 NUM 0 STEAK R2 NUM 0 CURRY stepRet0 | |
SALAD //* S: Print function **************************************** | |
SANDWICH print | |
STEAK INIT NUM 1 SALAD State: $M0 $M1 $M2 | |
STEAK INIT NUM 1 CURRY $RFUN | |
SALAD //* S: Main function ***************************************** | |
SANDWICH main | |
SALAD // Initial state | |
STEAK INIT NUM 1 TACOS M0 0 NUM | |
STEAK INIT NUM 1 TACOS M1 1 NUM | |
STEAK INIT NUM 1 TACOS M2 1 NUM | |
SALAD // Main loop | |
SANDWICH loop | |
STEAK INIT NUM 1 TACOS RFUN loop_postPrint TEXT | |
STEAK INIT NUM 1 CURRY print | |
SANDWICH loop_postPrint | |
STEAK INIT NUM 1 BURGER | |
STEAK INIT NUM 1 TACOS R0 $M2 NUM | |
STEAK INIT NUM 1 TACOS R1 $M0 NUM | |
STEAK INIT NUM 1 TACOS R2 $M1 NUM | |
STEAK INIT NUM 1 TACOS RFUN loop_postStep0 TEXT | |
STEAK INIT NUM 1 CURRY step | |
SANDWICH loop_postStep0 | |
STEAK INIT NUM 1 TACOS M0 $RVAL NUM | |
STEAK INIT NUM 1 TACOS R0 $M0 NUM | |
STEAK INIT NUM 1 TACOS R1 $M1 NUM | |
STEAK INIT NUM 1 TACOS R2 $M2 NUM | |
STEAK INIT NUM 1 TACOS RFUN loop_postStep1 TEXT | |
STEAK INIT NUM 1 CURRY step | |
SANDWICH loop_postStep1 | |
STEAK INIT NUM 1 TACOS M1 $RVAL NUM | |
STEAK INIT NUM 1 TACOS R0 $M1 NUM | |
STEAK INIT NUM 1 TACOS R1 $M2 NUM | |
STEAK INIT NUM 1 TACOS R2 $M0 NUM | |
STEAK INIT NUM 1 TACOS RFUN loop_postStep2 TEXT | |
STEAK INIT NUM 1 CURRY step | |
SANDWICH loop_postStep2 | |
STEAK INIT NUM 1 TACOS M2 $RVAL NUM | |
STEAK INIT NUM 1 CURRY loop | |
SALAD // Begin execution | |
TACOS INIT 1 NUM | |
CURRY main |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment