Skip to content

Instantly share code, notes, and snippets.

@GalileoCap
Created November 28, 2023 09:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save GalileoCap/a5c1bf518f038fbf55a4bcecbf665040 to your computer and use it in GitHub Desktop.
Save GalileoCap/a5c1bf518f038fbf55a4bcecbf665040 to your computer and use it in GitHub Desktop.
Implementation of Rule110 on D--
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