| 1 | 1 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,45 @@ |
| 1 |
+ |
|
| 2 |
+( uxnasm subleq.tal subleq.rom && uxncli subleq.rom ) |
|
| 3 |
+ |
|
| 4 |
+%EMIT { #18 DEO }
|
|
| 5 |
+%HALT { #0101 #0e DEO2 }
|
|
| 6 |
+%RTN { JMP2r }
|
|
| 7 |
+%GET { #10 SFT2 ;program ADD2 LDA2 }
|
|
| 8 |
+%SET { #10 SFT2 ;program ADD2 STA2 }
|
|
| 9 |
+ |
|
| 10 |
+|0000 @a $2 @b $2 @c $2 |
|
| 11 |
+|0100 |
|
| 12 |
+ |
|
| 13 |
+ ( pointer ) #0000 |
|
| 14 |
+ &while |
|
| 15 |
+ ,eval JSR |
|
| 16 |
+ DUP2 #8000 LTH2 ,&while JCN |
|
| 17 |
+ POP2 |
|
| 18 |
+ HALT |
|
| 19 |
+ |
|
| 20 |
+BRK |
|
| 21 |
+ |
|
| 22 |
+@eval ( ip* -- ip* ) |
|
| 23 |
+ |
|
| 24 |
+ DUP2 GET .a STZ2 |
|
| 25 |
+ INC2 DUP2 GET .b STZ2 |
|
| 26 |
+ INC2 DUP2 GET .c STZ2 |
|
| 27 |
+ INC2 |
|
| 28 |
+ ( I/O ) |
|
| 29 |
+ .a LDZ2 #ffff NEQ2 ,&noin JCN |
|
| 30 |
+ ( nothing. ) ,&end JMP2 &noin |
|
| 31 |
+ .b LDZ2 #ffff NEQ2 ,&noout JCN |
|
| 32 |
+ .a LDZ2 GET NIP EMIT ,&end JMP &noout |
|
| 33 |
+ ( SUBLEQ ) |
|
| 34 |
+ .b LDZ2 GET .a LDZ2 GET SUB2 .b LDZ2 SET |
|
| 35 |
+ ( SET ) |
|
| 36 |
+ .b LDZ2 GET #0001 SUB2 #8000 LTH2 ,&end JCN |
|
| 37 |
+ POP2 .c LDZ2 &end |
|
| 38 |
+ |
|
| 39 |
+RTN |
|
| 40 |
+ |
|
| 41 |
+@program ( hello world ) |
|
| 42 |
+ 000f 0011 ffff 0011 ffff ffff 0010 0001 |
|
| 43 |
+ ffff 0010 0003 ffff 000f 000f 0000 0000 |
|
| 44 |
+ ffff 0048 0065 006c 006c 006f 002c 0020 |
|
| 45 |
+ 0077 006f 0072 006c 0064 0021 000a 0000 |