To ease the debugging phase, here is an emulator for the ternary programs:
https://github.com/ssloy/triador
A very simple sample program that computes R2+R3 and stores the results back in R3:
R1 NNN # N.B. the memory is not guaranteed to be initialized
RR NNN # initialize R13 with -13, this chooses segment NNN for jumps
R2 ONP # write -2 to R2 ┌─────────────────────────────────┐
R3 PPP # write 13 to R3 │ This program computes R2+R3, │
RR OPO # copy R3 to R1 <─┐ │ the result is stored in R3. │
SK NPO # skip if R2!=0 │ │ Here is a C++ world equavalent: │
JP PNO # R2==0, terminate│ ────┐ │ │
SK PNP # skip if R2>0 │ │ │ int R2 = -2; │
RR OON # R1-- │ │ │ int R3 = 13; │
SK PNN # skip if R2<0 │ │ │ while (R2!=0) { │
RR OOP # R1++ │ │ │ int R1 = R3; │
RR ONO # copy R1 to R3 │ │ │ if (R2>0) R1++; │
RR OPN # copy R2 to R1 │ │ │ if (R2<0) R1--; │
SK PNP # skip if R2>0 │ │ │ R3 = R1; │
RR OOP # R1++ │ │ │ R1 = R2; │
SK PNN # skip if R2<0 │ │ │ if (R2>0) R1--; │
RR OON # R1-- │ │ │ if (R2<0) R1++; │
RR ONP # copy R1 to R2 │ │ │ R2 = R1; │
JP NOO # jump here ──────┘ │ │ } │
EX PPP # halt and catch fire <─┘ └─────────────────────────────────┘
Dmitry V. Sokolov
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.
Link from the log is not working for me because it says https//github.com/ssloy/triador - it should be
https://github.com/ssloy/triador
Are you sure? yes | no