Browse code

(subleq.tal) Added new exercise

neauoire authored on 11/12/2021 18:47:14
Showing 1 changed files
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