Browse code

Merge branch 'main' of git.sr.ht:~rabbits/uxn

neauoire authored on 04/09/2022 20:08:49
Showing 48 changed files
... ...
@@ -44,30 +44,6 @@ BRK
44 44
 
45 45
 BRK
46 46
 
47
-@clear-ball ( -- )
48
-
49
-	.ball/x LDZ2 .Screen/x DEO2
50
-	.ball/y LDZ2 .Screen/y DEO2
51
-	#76 .Screen/auto DEO
52
-	#0800
53
-	&loop-bg
54
-		#40 .Screen/sprite DEO
55
-		INC GTHk ,&loop-bg JCN
56
-	POP2
57
-
58
-JMP2r
59
-
60
-@move-ball ( -- )
61
-
62
-	,clear-ball JSR
63
-	.ball/vx LDZ2k STH2k ROT STZ2
64
-	.ball/x LDZ2k STH2r ADD2 ,check-flip-vx JSR ROT STZ2
65
-	.ball/vy LDZ2k INC2 STH2k ROT STZ2
66
-	.ball/y LDZ2k STH2r ADD2 ,check-flip-vy JSR ROT STZ2
67
-	,draw-ball JSR
68
-
69
-JMP2r
70
-
71 47
 @check-flip-vx ( x -- x )
72 48
 
73 49
 	( left ) DUP2 #0010 LTH2 ,&flip JCN 
... ...
@@ -85,6 +61,23 @@ JMP2r
85 61
 
86 62
 JMP2r
87 63
 
64
+@move-ball ( -- )
65
+
66
+	( clear )
67
+	.ball/x LDZ2 .Screen/x DEO2
68
+	.ball/y LDZ2 .Screen/y DEO2
69
+	#76 .Screen/auto DEO
70
+	#0800
71
+	&loop-bg
72
+		#40 .Screen/sprite DEO
73
+		INC GTHk ,&loop-bg JCN
74
+	POP2
75
+
76
+	.ball/vx LDZ2k STH2k ROT STZ2
77
+	.ball/x LDZ2k STH2r ADD2 ,check-flip-vx JSR ROT STZ2
78
+	.ball/vy LDZ2k INC2 STH2k ROT STZ2
79
+	.ball/y LDZ2k STH2r ADD2 ,check-flip-vy JSR ROT STZ2
80
+
88 81
 @draw-ball ( -- )
89 82
 
90 83
 	( shadow )
... ...
@@ -90,9 +90,6 @@ JMP2r
90 90
 	[ .center/x LDZ2 #0008 ADD2 ] 
91 91
 	[ .center/y LDZ2 #0018 ADD2 ] 
92 92
 	.DateTime/second DEI #0a ;mod JSR2 
93
-	;draw-number JSR2
94
-
95
-JMP2r
96 93
 
97 94
 @draw-number ( x* y* n -- )
98 95
 	
... ...
@@ -146,7 +143,7 @@ JMP2r
146 143
 
147 144
 JMP2r
148 145
 
149
-@mod DUP2 DIV MUL SUB JMP2r
146
+@mod DIVk MUL SUB JMP2r
150 147
 
151 148
 @cursor 
152 149
 	80c0 e0f0 f8e0 1000
153 150
similarity index 66%
154 151
rename from projects/examples/demos/logic.tal
155 152
rename to projects/examples/demos/bitwise.tal
... ...
@@ -1,31 +1,4 @@
1
-( logic )
2
-
3
-%+  { ADD } %-   { SUB }              %/   { DIV }  
4
-%<  { LTH } %>   { GTH }  %=  { EQU } %!   { NEQ } 
5
-%++ { ADD2 } %-- { SUB2 }              %// { DIV2 } 
6
-%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 }  
7
-
8
-%2*  { #10 SFT } %2/  { #01 SFT }
9
-%4*  { #20 SFT } %4/  { #02 SFT }
10
-%8*  { #30 SFT } %8/  { #03 SFT }
11
-%10* { #40 SFT } %10/ { #04 SFT }
12
-%20* { #50 SFT } %20/ { #05 SFT }
13
-
14
-%2**  { #10 SFT2 } %2//  { #01 SFT2 }
15
-%4**  { #20 SFT2 } %4//  { #02 SFT2 }
16
-%8**  { #30 SFT2 } %8//  { #03 SFT2 }
17
-%10** { #40 SFT2 } %10// { #04 SFT2 }
18
-%20** { #50 SFT2 } %20// { #05 SFT2 }
19
-
20
-%RELEASE-MOUSE { #0096 DEO }
21
-%AUTO-X { #01 .Screen/auto DEO }
22
-%AUTO-X-ADDR { #05 .Screen/auto DEO }
23
-%AUTO-NONE { #00 .Screen/auto DEO }
24
-
25
-%RTN { JMP2r }
26
-%TOS { #00 SWP }
27
-
28
-( devices )
1
+( bitwise )
29 2
 
30 3
 |00 @System     [ &vector $2 &wst      $1 &rst    $1 &pad   $4 &r      $2 &g      $2 &b    $2 &debug  $1 &halt $1 ]
31 4
 |10 @Console    [ &vector $2 &read     $1 &pad    $5 &write $1 &error  $1 ]
... ...
@@ -63,13 +36,13 @@
63 36
 
64 37
 	;on-mouse   .Mouse/vector DEO2
65 38
 
66
-	.Screen/width DEI2 2// 
67
-		DUP2 #0040 -- .a-frame/x STZ2 DUP2 #0040 ++ .a-frame/x2 STZ2
68
-		DUP2 #0040 -- .b-frame/x STZ2 #0040 ++ .b-frame/x2 STZ2
39
+	.Screen/width DEI2 #01 SFT2
40
+		DUP2 #0040 SUB2 .a-frame/x STZ2 DUP2 #0040 ADD2 .a-frame/x2 STZ2
41
+		DUP2 #0040 SUB2 .b-frame/x STZ2 #0040 ADD2 .b-frame/x2 STZ2
69 42
 
70
-	.Screen/height DEI2 2// #0020 --
71
-		DUP2 #0010 -- .a-frame/y STZ2 DUP2 #0000 ++ .a-frame/y2 STZ2
72
-		DUP2 .b-frame/y STZ2 #0010 ++ .b-frame/y2 STZ2
43
+	.Screen/height DEI2 #01 SFT2 #0020 SUB2
44
+		DUP2 #0010 SUB2 .a-frame/y STZ2 DUP2 .a-frame/y2 STZ2
45
+		DUP2 .b-frame/y STZ2 #0010 ADD2 .b-frame/y2 STZ2
73 46
 
74 47
 	;redraw JSR2
75 48
 
... ...
@@ -79,7 +52,7 @@ BRK
79 52
 
80 53
 	;draw-cursor JSR2 
81 54
 	
82
-	.Mouse/state DEI #00 ! JMP [ BRK ]
55
+	.Mouse/state DEI #00 NEQ JMP [ BRK ]
83 56
 
84 57
 	.Mouse/x DEI2 .Mouse/y DEI2 .a-frame ;within-rect JSR2 
85 58
 		;on-touch-a JCN2
... ...
@@ -90,29 +63,29 @@ BRK
90 63
 
91 64
 @on-touch-a ( -> )
92 65
 
93
-	.Mouse/x DEI2 .a-frame/x LDZ2 -- 
94
-	10// NIP #07 SWP - STH
66
+	.Mouse/x DEI2 .a-frame/x LDZ2 SUB2
67
+	#04 SFT2 NIP #07 SWP SUB STH
95 68
 
96 69
 	.input/a LDZ 
97 70
 		#01 [ STHr #40 SFT ] SFT EOR 
98 71
 		.input/a STZ
99 72
 
100 73
 	;redraw JSR2
101
-	RELEASE-MOUSE
74
+	#00 .Mouse/state DEO
102 75
 
103 76
 BRK
104 77
 
105 78
 @on-touch-b ( -> )
106 79
 
107
-	.Mouse/x DEI2 .b-frame/x LDZ2 -- 
108
-	10// NIP #07 SWP - STH
80
+	.Mouse/x DEI2 .b-frame/x LDZ2 SUB2
81
+	#04 SFT2 NIP #07 SWP SUB STH
109 82
 
110 83
 	.input/b LDZ 
111 84
 		#01 [ STHr #40 SFT ] SFT EOR 
112 85
 		.input/b STZ
113 86
 
114 87
 	;redraw JSR2
115
-	RELEASE-MOUSE
88
+	#00 .Mouse/state DEO
116 89
 
117 90
 BRK
118 91
 
... ...
@@ -127,82 +100,82 @@ BRK
127 100
 	.input/b LDZ #01 ;draw-byte JSR2
128 101
 
129 102
 	.b-frame/x LDZ2 .Screen/x DEO2
130
-	.Screen/y DEI2 #000d ++ .Screen/y DEO2
103
+	.Screen/y DEI2 #000d ADD2 .Screen/y DEO2
131 104
 	.input LDZ2 AND #03 ;draw-byte JSR2
132 105
 
133 106
 	.b-frame/x LDZ2 .Screen/x DEO2
134
-	.Screen/y DEI2 #000d ++ .Screen/y DEO2
107
+	.Screen/y DEI2 #000d ADD2 .Screen/y DEO2
135 108
 	.input LDZ2 ORA #03 ;draw-byte JSR2
136 109
 
137 110
 	.b-frame/x LDZ2 .Screen/x DEO2
138
-	.Screen/y DEI2 #000d ++ .Screen/y DEO2
111
+	.Screen/y DEI2 #000d ADD2 .Screen/y DEO2
139 112
 	.input LDZ2 EOR #03 ;draw-byte JSR2
140 113
 
141 114
 	( labels )
142
-	AUTO-X-ADDR
143
-	.b-frame/x LDZ2 #0020 -- .Screen/x DEO2
115
+	#05 .Screen/auto DEO
116
+	.b-frame/x LDZ2 #0020 SUB2 .Screen/x DEO2
144 117
 	;names-icn/and .Screen/addr DEO2
145
-	.b-frame/y2 LDZ2 #0004 ++ .Screen/y DEO2
118
+	.b-frame/y2 LDZ2 #0004 ADD2 .Screen/y DEO2
146 119
 	,&draw-label JSR
147
-	.b-frame/y2 LDZ2 #0014 ++ .Screen/y DEO2
120
+	.b-frame/y2 LDZ2 #0014 ADD2 .Screen/y DEO2
148 121
 	,&draw-label JSR
149
-	.b-frame/y2 LDZ2 #0024 ++ .Screen/y DEO2
122
+	.b-frame/y2 LDZ2 #0024 ADD2 .Screen/y DEO2
150 123
 	,&draw-label JSR
151
-	AUTO-NONE
124
+	#00 .Screen/auto DEO
152 125
 
153
-RTN
126
+JMP2r
154 127
 	&draw-label
155
-		.b-frame/x LDZ2 #0020 -- .Screen/x DEO2 
128
+		.b-frame/x LDZ2 #0020 SUB2 .Screen/x DEO2
156 129
 		#03 .Screen/sprite DEOk DEOk DEO
157
-	RTN
130
+	JMP2r
158 131
 
159 132
 @draw-byte ( value -- )
160 133
 
161 134
 	STH STH
162 135
 	#0800
163 136
 	&loop
164
-		DUP #07 SWP -
137
+		#07 OVR SUB
165 138
 		STHkr SWP SFT #01 AND OVRr STHr ;draw-bit JSR2
166 139
 		INC GTHk ,&loop JCN
167 140
 	POP2
168
-	.Screen/y DEI2 #0003 ++ .Screen/y DEO2
169
-	.Screen/x DEI2 #0008 ++ .Screen/x DEO2
141
+	.Screen/y DEI2 #0003 ADD2 .Screen/y DEO2
142
+	.Screen/x DEI2 #0008 ADD2 .Screen/x DEO2
170 143
 	STHr ;draw-hex JSR2
171 144
 	POPr
172 145
 
173
-RTN
146
+JMP2r
174 147
 
175 148
 @draw-bit ( value color -- )
176 149
 
177 150
 	STH STH
178 151
 
179
-	AUTO-X-ADDR
180
-	;button-icns/off [ #00 STHkr 20* ++ ] .Screen/addr DEO2
152
+	#05 .Screen/auto DEO
153
+	;button-icns/off [ #00 STHkr #50 SFT ADD2 ] .Screen/addr DEO2
181 154
 	OVRr STHr .Screen/sprite DEO
182 155
 	OVRr STHr .Screen/sprite DEO
183
-	.Screen/y DEI2 #0008 ++ .Screen/y DEO2
184
-	.Screen/x DEI2 #0010 -- .Screen/x DEO2
156
+	.Screen/y DEI2 #0008 ADD2 .Screen/y DEO2
157
+	.Screen/x DEI2 #0010 SUB2 .Screen/x DEO2
185 158
 	OVRr STHr .Screen/sprite DEO
186 159
 	OVRr STHr .Screen/sprite DEO
187
-	AUTO-NONE
188
-	.Screen/y DEI2 #0008 -- .Screen/y DEO2
160
+	#00 .Screen/auto DEO
161
+	.Screen/y DEI2 #0008 SUB2 .Screen/y DEO2
189 162
 
190
-	POPr POPr
163
+	POP2r
191 164
 
192
-RTN
165
+JMP2r
193 166
 
194 167
 @draw-hex ( value -- )
195 168
 
196
-	AUTO-X
169
+	#01 .Screen/auto DEO
197 170
 	DUP #04 SFT ,&draw JSR
198 171
 	#0f AND ,&draw JSR
199
-	AUTO-X
172
+	#01 .Screen/auto DEO
200 173
 
201
-RTN
174
+JMP2r
202 175
 	&draw
203
-		TOS 8** ;font-hex ++ .Screen/addr DEO2
176
+		#00 SWP #30 SFT2 ;font-hex ADD2 .Screen/addr DEO2
204 177
 		( draw ) #01 .Screen/sprite DEO
205
-	RTN
178
+	JMP2r
206 179
 
207 180
 @draw-cursor ( -- )
208 181
 	
... ...
@@ -215,26 +188,26 @@ RTN
215 188
 	.Mouse/x DEI2 DUP2 .pointer/x STZ2 .Screen/x DEO2 
216 189
 	.Mouse/y DEI2 DUP2 .pointer/y STZ2 .Screen/y DEO2  
217 190
 	( colorize on state )
218
-	#42 [ .Mouse/state DEI #00 ! ] + .Screen/sprite DEO
191
+	#42 [ .Mouse/state DEI #00 NEQ ] ADD .Screen/sprite DEO
219 192
 
220
-RTN
193
+JMP2r
221 194
 
222 195
 @within-rect ( x* y* rect -- flag )
223 196
 	
224 197
 	STH
225
-	( y < rect.y1 ) DUP2 STHkr #02 ADD LDZ2 LTH2 ,&skip JCN
198
+	( y < rect.y1 ) DUP2 STHkr INC INC LDZ2 LTH2 ,&skip JCN
226 199
 	( y > rect.y2 ) DUP2 STHkr #06 ADD LDZ2 GTH2 ,&skip JCN
227 200
 	SWP2
228 201
 	( x < rect.x1 ) DUP2 STHkr LDZ2 LTH2 ,&skip JCN
229 202
 	( x > rect.x2 ) DUP2 STHkr #04 ADD LDZ2 GTH2 ,&skip JCN
230 203
 	POP2 POP2 POPr
231 204
 	#01 
232
-RTN
205
+JMP2r
233 206
 	&skip
234 207
 	POP2 POP2 POPr
235 208
 	#00
236 209
 
237
-RTN
210
+JMP2r
238 211
 
239 212
 @cursor 
240 213
 	80c0 e0f0 f8e0 1000 
... ...
@@ -110,9 +110,9 @@ BRK
110 110
 	( top )
111 111
 	[ LDA2k ] #05 SFT2 .Screen/x DEO2
112 112
 	[ INC2 INC2 LDA2 ] #05 SFT2 .Screen/y DEO2
113
-	#85 ,draw-sprite JSR
113
+	#85 ,draw-sprite ( .. )
114 114
 
115
-JMP2r
115
+JMP
116 116
 
117 117
 @draw-sprite ( color -- )
118 118
 
... ...
@@ -183,7 +183,7 @@ JMP2r
183 183
 
184 184
 	;sprite/length LDA2
185 185
 	( don't let length go below 0 )
186
-	DUP2 #0000 EQU2 ,&bail JCN
186
+	ORAk #00 EQU ,&bail JCN
187 187
 	( clear the old sprite location )
188 188
 	DUP2 #0001 SUB2 #30 SFT2 ;sprite/array ADD2
189 189
 	( top )
... ...
@@ -217,7 +217,7 @@ JMP2r
217 217
 	( z = a )
218 218
 	,&a LDR DUP ,&z STR
219 219
 	( a = z ^ t ^ (z >> 1) ^ (t << 1) )
220
-	DUP #10 SFT EOR SWP DUP #01 SFT EOR EOR
220
+	DUPk ADD EOR SWP DUP #01 SFT EOR EOR
221 221
 	DUP ,&a STR
222 222
 
223 223
 JMP2r
... ...
@@ -43,22 +43,22 @@ BRK
43 43
 		STHk
44 44
 		#00 .timer LDZ [ #00 STHkr INC #07 AND #60 SFT ADD2 ] #00ff AND2 ;table ADD2 LDA #01 SFT
45 45
 		#00 .timer LDZ [ #00 STHkr #60 SFT ADD2 ] #00ff AND2 ;table ADD2 LDA #02 SFT [ #00 STHkr #62 SFT2 ADD2 ]
46
-		.cube/v0 STHr #10 SFT ADD STZ2
46
+		.cube/v0 STHr DUP ADD ADD STZ2
47 47
 		INC GTHk ,&loop JCN
48 48
 	POP2
49 49
 	( vertices )
50 50
 	#0800
51 51
 	&ver-loop
52
-		DUP #10 SFT .cube ADD LDZ2 ;draw-vertex JSR2
52
+		DUP DUP ADD .cube ADD LDZ2 ;draw-vertex JSR2
53 53
 		INC GTHk ,&ver-loop JCN
54 54
 	POP2
55 55
 	( lines )
56 56
 	#0400
57 57
 	&line-loop
58 58
 		STHk
59
-		.cube/v0 STHkr #10 SFT ADD .cube/v0 STHkr INC #03 AND #10 SFT ADD ,trace JSR
60
-		.cube/v0 STHkr #10 SFT ADD .cube/v4 STHkr #10 SFT ADD ,trace JSR
61
-		.cube/v4 STHkr #10 SFT ADD .cube/v4 STHr INC #03 AND #10 SFT ADD ,trace JSR
59
+		.cube/v0 STHkr DUP ADD ADD .cube/v0 STHkr INC #03 AND DUP ADD ADD ,trace JSR
60
+		.cube/v0 STHkr DUP ADD ADD .cube/v4 STHkr DUP ADD ADD ,trace JSR
61
+		.cube/v4 STHkr DUP ADD ADD .cube/v4 STHr INC #03 AND DUP ADD ADD ,trace JSR
62 62
 		INC GTHk ,&line-loop JCN
63 63
 	POP2
64 64
 
... ...
@@ -88,15 +88,15 @@ JMP2r
88 88
 	( load ) STH ,&y STR2 ,&x STR2 .line/y STZ2 .line/x STZ2
89 89
 	,&x LDR2 .line/x LDZ2 SUB2 ;abs2 JSR2 .line/dx STZ2
90 90
 	#0000 ,&y LDR2 .line/y LDZ2 SUB2 ;abs2 JSR2 SUB2 .line/dy STZ2
91
-	#ffff #00 .line/x LDZ2 ,&x LDR2 ;lts2 JSR2 #10 SFT2 ADD2 ,&sx STR2
92
-	#ffff #00 .line/y LDZ2 ,&y LDR2 ;lts2 JSR2 #10 SFT2 ADD2 ,&sy STR2
91
+	#ffff #00 .line/x LDZ2 ,&x LDR2 ;lts2 JSR2 DUP2 ADD2 ADD2 ,&sx STR2
92
+	#ffff #00 .line/y LDZ2 ,&y LDR2 ;lts2 JSR2 DUP2 ADD2 ADD2 ,&sy STR2
93 93
 	.line/dx LDZ2 .line/dy LDZ2 ADD2 .line/e1 STZ2
94 94
 	&loop
95 95
 		.line/x LDZ2 DUP2 .Screen/x DEO2 [ LIT2 &x $2 ] EQU2
96 96
 		.line/y LDZ2 DUP2 .Screen/y DEO2 [ LIT2 &y $2 ] EQU2
97 97
 			STHkr .Screen/pixel DEO
98 98
 			AND ,&end JCN
99
-		.line/e1 LDZ2 #10 SFT2 DUP2
99
+		.line/e1 LDZ2 DUP2 ADD2 DUP2
100 100
 		.line/dy LDZ2 ;lts2 JSR2 ,&skipy JCN
101 101
 			.line/e1 LDZ2 .line/dy LDZ2 ADD2 .line/e1 STZ2
102 102
 			.line/x LDZ2 [ LIT2 &sx $2 ] ADD2 .line/x STZ2
... ...
@@ -22,7 +22,7 @@
22 22
 	#00 .DateTime/minute DEI #60 SFT2 EOR2
23 23
 	#00 .DateTime/hour   DEI #c0 SFT2 EOR2 ;prng/x STA2
24 24
 	#00 .DateTime/hour   DEI #04 SFT2
25
-	#00 .DateTime/day    DEI #10 SFT2 EOR2
25
+	#00 .DateTime/day    DEI DUP2 ADD2 EOR2
26 26
 	#00 .DateTime/month  DEI #60 SFT2 EOR2
27 27
 	    .DateTime/year  DEI2 #a0 SFT2 EOR2 ;prng/y STA2
28 28
 	;prng/x LDA2 ;prng/y LDA2 EOR2
... ...
@@ -160,7 +160,7 @@
160 160
 	( rabbit is in-between two frames )
161 161
 	#08 OVR SUB ,&from-weight STR
162 162
 	,&to-weight STR ( color n / frame )
163
-	#00 SWP #10 SFT2 ;rabbits ADD2 #00c8 #00 STHr MUL2 ADD2 ( color from-addr* )
163
+	#00 SWP DUP2 ADD2 ;rabbits ADD2 #00c8 #00 STHr MUL2 ADD2 ( color from-addr* )
164 164
 	LDA2k STH2 #00c8 ADD2 LDA2
165 165
 	&draw ( color to-x to-y / from-x from-y )
166 166
 	STHr ,&mix JSR LIT2 &yoffset $2 ADD2 .Screen/y DEO2
... ...
@@ -181,7 +181,7 @@
181 181
 	&static ( color n counter / frame )
182 182
 	INCr
183 183
 	POP
184
-	#00 SWP #10 SFT2 ;rabbits ADD2 #00c8 #00 STHr MUL2 ADD2
184
+	#00 SWP DUP2 ADD2 ;rabbits ADD2 #00c8 #00 STHr MUL2 ADD2
185 185
 	LDA2 STH2k
186 186
 	,&draw JMP
187 187
 
... ...
@@ -35,13 +35,13 @@ BRK
35 35
 		STH2k #0000 EQU2 ,&flip-x JCN
36 36
 		STH2kr [ LIT2 &hit-hor $2 ] EQU2 ,&flip-x JCN
37 37
 	&no-x
38
-	STH2r [ #00 .dvd/dx LDZ ] #10 SFT2 ADD2 #ffff ADD2 .dvd/x STZ2
38
+	STH2r [ #00 .dvd/dx LDZ ] DUP2 ADD2 ADD2 #ffff ADD2 .dvd/x STZ2
39 39
 	( y )
40 40
 	.dvd/y LDZ2
41 41
 		STH2k #0000 EQU2 ,&flip-y JCN
42 42
 		STH2kr [ LIT2 &hit-ver $2 ] EQU2 ,&flip-y JCN
43 43
 	&no-y
44
-	STH2r [ #00 .dvd/dy LDZ ] #10 SFT2 ADD2 #ffff ADD2 .dvd/y STZ2
44
+	STH2r [ #00 .dvd/dy LDZ ] DUP2 ADD2 ADD2 #ffff ADD2 .dvd/y STZ2
45 45
 	#01 ,draw-dvd JSR
46 46
 
47 47
 BRK
... ...
@@ -31,11 +31,11 @@
31 31
 	;on-mouse .Mouse/vector DEO2
32 32
 	;on-control .Controller/vector DEO2
33 33
 	( glider )
34
-	#07 #03 ;set-cell JSR2
35
-	#07 #04 ;set-cell JSR2
36
-	#05 #04 ;set-cell JSR2
37
-	#07 #05 ;set-cell JSR2
38
-	#06 #05 ;set-cell JSR2
34
+	#0703 ;set-cell JSR2
35
+	#0704 ;set-cell JSR2
36
+	#0504 ;set-cell JSR2
37
+	#0705 ;set-cell JSR2
38
+	#0605 ;set-cell JSR2
39 39
 	( center )
40 40
 	.Screen/width DEI2 #01 SFT2 #0040 SUB2
41 41
 		DUP2 .anchor/x STZ2
... ...
@@ -118,9 +118,9 @@ BRK
118 118
 	( move buffer )
119 119
 	;bank2 ;bank1 #1000 ;mcpy JSR2
120 120
 	( draw )
121
-	;draw-grid JSR2
121
+	;draw-grid ( .. )
122 122
 
123
-JMP2r
123
+JMP2
124 124
 
125 125
 @run-cell ( x y -- )
126 126
 
... ...
@@ -130,13 +130,13 @@ JMP2r
130 130
 	#00 EQU ,&dead JCN
131 131
 		DUP #02 LTH ,&dies JCN
132 132
 		DUP #03 GTH ,&dies JCN
133
-		POP ;&save JSR2 JMP2r
133
+		POP ;&save JMP2
134 134
 		&dies POP POP2 JMP2r
135 135
 	&dead
136 136
 		DUP #03 EQU ,&birth JCN POP POP2 JMP2r
137
-		&birth POP ;&save JSR2
137
+		&birth POP ;&save ( .. )
138 138
 
139
-JMP2r
139
+JMP2
140 140
 	&save ( x y -- ) 
141 141
 		STH2 #01 STH2r ,get-index JSR [ #1000 ADD2 ] STA
142 142
 		.world/count LDZ2 INC2 .world/count STZ2
... ...
@@ -168,7 +168,7 @@ JMP2r
168 168
 	LITr 00
169 169
 	#0800
170 170
 	&loop
171
-		#00 OVR #10 SFT2 ;&mask ADD2 LDA2 [ LIT2 &origin $2 ]
171
+		#00 OVRk ADD2 ;&mask ADD2 LDA2 [ LIT2 &origin $2 ]
172 172
 		ROT ADD STH ADD STHr ;get-cell JSR2 STH ADDr
173 173
 		INC GTHk ,&loop JCN
174 174
 	POP2
... ...
@@ -187,11 +187,11 @@ JMP2r
187 187
 	#00 .Screen/auto DEO
188 188
 	#4000
189 189
 	&ver
190
-		#00 OVR #10 SFT2 .anchor/y LDZ2 ADD2 .Screen/y DEO2
190
+		#00 OVRk ADD2 .anchor/y LDZ2 ADD2 .Screen/y DEO2
191 191
 		STHk
192 192
 		#4000
193 193
 		&hor
194
-			#00 OVR #10 SFT2 .anchor/x LDZ2 ADD2 .Screen/x DEO2
194
+			#00 OVRk ADD2 .anchor/x LDZ2 ADD2 .Screen/x DEO2
195 195
 			DUP STHkr ;get-cell JSR2 INC .Screen/pixel DEO
196 196
 			INC GTHk ,&hor JCN
197 197
 		POP2
... ...
@@ -2,10 +2,8 @@
2 2
 
3 3
 %+  { ADD }  %-  { SUB }  %*  { MUL }  %/  { DIV }
4 4
 %<  { LTH }  %>  { GTH }  %=  { EQU }  %!  { NEQ }
5
-%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 }
6
-%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 }
7 5
 
8
-%GTS2 { #8000 ++ SWP2 #8000 ++ << }
6
+%GTS2 { #8000 ADD2 SWP2 #8000 ADD2 LTH2 }
9 7
 %AUTO-X    { #01 .Screen/auto DEO }
10 8
 %NEXT-LINE { #0000 .Screen/x DEO2 .Screen/y DEI2k INC2 ROT DEO2 }
11 9
 
... ...
@@ -17,8 +15,8 @@
17 15
 %YMIN { #ecc7 } ( -4915 )
18 16
 %YMAX { #1333 } ( 4915 )
19 17
 %MAXI { #20 } ( 32 )
20
-%DX { XMAX XMIN -- WIDTH // } ( (XMAX-XMIN)/W )
21
-%DY { YMAX YMIN -- HEIGHT // } ( (YMAX-YMIN)/H )
18
+%DX { XMAX XMIN SUB2 WIDTH DIV2 } ( (XMAX-XMIN)/W )
19
+%DY { YMAX YMIN SUB2 HEIGHT DIV2 } ( (YMAX-YMIN)/H )
22 20
 %X  { .x LDZ2  } %Y  { .y LDZ2  }
23 21
 %X2 { .x2 LDZ2 } %Y2 { .y2 LDZ2 }
24 22
 
... ...
@@ -54,21 +52,21 @@ BRK
54 52
 		XMAX XMIN
55 53
 		&hor
56 54
 			DUP2 ,&x STR2
57
-			#0000 DUP2 DUP2 DUP2 .x STZ2 .y STZ2 .x2 STZ2 .y2 STZ2
55
+			#0000 DUP2k DUP2 .x STZ2 .y STZ2 .x2 STZ2 .y2 STZ2
58 56
 			MAXI #00
59 57
 			&loop
60
-				X Y ;smul2 JSR2 DUP2 ADD2 [ LIT2 &y $2 ] ++ .y STZ2
61
-				X2 Y2 -- [ LIT2 &x $2 ] ++ .x STZ2
58
+				X Y ;smul2 JSR2 DUP2 ADD2 [ LIT2 &y $2 ] ADD2 .y STZ2
59
+				X2 Y2 SUB2 [ LIT2 &x $2 ] ADD2 .x STZ2
62 60
 				X DUP2 ;smul2 JSR2 .x2 STZ2
63 61
 				Y DUP2 ;smul2 JSR2 .y2 STZ2
64
-				X2 Y2 ++ #4000 >> ,&end JCN
62
+				X2 Y2 ADD2 #4000 GTH2 ,&end JCN
65 63
 				INC GTHk ,&loop JCN
66 64
 				&end
67 65
 			NIP .Screen/pixel DEO
68
-			DX ++ OVR2 OVR2 GTS2 ;&hor JCN2
66
+			DX ADD2 OVR2 OVR2 GTS2 ;&hor JCN2
69 67
 		POP2 POP2
70 68
 		NEXT-LINE
71
-		DY ++ OVR2 OVR2 GTS2 ;&ver JCN2
69
+		DY ADD2 OVR2 OVR2 GTS2 ;&ver JCN2
72 70
 	POP2 POP2
73 71
 
74 72
 JMP2r
... ...
@@ -30,7 +30,7 @@ BRK
30 30
 @on-frame ( -> )
31 31
 
32 32
 	.Controller/button DEI 
33
-	DUP #00 NEQ ,&continue JCN
33
+	DUP ,&continue JCN
34 34
 		POP BRK
35 35
 		&continue
36 36
 	( clear )
... ...
@@ -54,9 +54,9 @@ BRK
54 54
 	#81 .Screen/sprite DEO
55 55
 	( eye/tail )
56 56
 	#00 ,draw-eye JSR
57
-	#00 ;draw-tail JSR2
57
+	#00 ;draw-tail ( .. )
58 58
 
59
-JMP2r
59
+JMP2
60 60
 
61 61
 @on-mouse ( -> )
62 62
 	
... ...
@@ -74,8 +74,7 @@ BRK
74 74
 	DUP ,&last LDR NEQ ,&changed JCN
75 75
 		POP JMP2r &changed
76 76
 	( only redraw on change )
77
-	DUP
78
-	#00 SWP ;eye ADD2 .Screen/addr DEO2
77
+	#00 OVR ;eye ADD2 .Screen/addr DEO2
79 78
 	.cat/y LDZ2 #0008 ADD2 .Screen/y DEO2
80 79
 	.cat/x LDZ2 #0008 SUB2 .Screen/x DEO2
81 80
 	#81 .Screen/sprite DEOk DEO
... ...
@@ -201,7 +201,7 @@ JMP2r
201 201
 
202 202
 @transform ( xy cell -- cell )
203 203
 
204
-	DUP #00 NEQ ,&no-null JCN NIP NIP JMP2r &no-null
204
+	DUP ,&no-null JCN NIP NIP JMP2r &no-null
205 205
 	DUP #03 NEQ ,&no-head JCN POP POP2 #02 JMP2r &no-head
206 206
 	DUP #02 NEQ ,&no-tail JCN POP POP2 #01 JMP2r &no-tail
207 207
 	DUP #01 NEQ ,&no-cond JCN POP
... ...
@@ -217,8 +217,8 @@ JMP2r
217 217
 			( bl ) #0001 SUB2 LDAk #03 NEQ JMP INCr
218 218
 			( bc ) INC2 LDAk #03 NEQ JMP INCr
219 219
 			( br ) INC2 LDA #03 NEQ JMP INCr
220
-		STHkr #02 EQU STHr #01 EQU #0000 GTH2
221
-		#10 SFT INC JMP2r
220
+		STHkr #02 EQU STHr #01 EQU ORA
221
+		DUP ADD INC JMP2r
222 222
 		&no-cond
223 223
 	( unknown )
224 224
 	NIP NIP
... ...
@@ -1,6 +1,6 @@
1 1
 ( dev/audio )
2 2
 
3
-%MOD { DUP2 DIV MUL SUB }
3
+%MOD { DIVk MUL SUB }
4 4
 
5 5
 ( devices )
6 6
 
... ...
@@ -1,13 +1,7 @@
1 1
 ( dev/audio )
2 2
 
3
-%2// { #01 SFT2 }
4
-%4** { #20 SFT2 }
5
-%8** { #30 SFT2 }
6
-%20MOD { #1f AND }
7
-%RTN { JMP2r }
8
-
9 3
 %GET-NOTE { #00 SWP ;melody ADD2 LDA }
10
-%GET-HEXCHAR  { #00 SWP 8** ;font-hex ADD2 .Screen/addr DEO2 }
4
+%GET-HEXCHAR  { #00 SWP #30 SFT2 ;font-hex ADD2 .Screen/addr DEO2 }
11 5
 
12 6
 ( devices )
13 7
 
... ...
@@ -44,8 +38,8 @@
44 38
 	#dd .Audio0/volume DEO ( TODO: turn ON )
45 39
 
46 40
 	( center )
47
-	.Screen/width DEI2 2// #0080 SUB2 .offset/x STZ2
48
-	.Screen/height DEI2 2// #0040 SUB2 .offset/y STZ2
41
+	.Screen/width DEI2 #01 SFT2 #0080 SUB2 .offset/x STZ2
42
+	.Screen/height DEI2 #01 SFT2 #0040 SUB2 .offset/y STZ2
49 43
 
50 44
 	;draw JSR2
51 45
 	#02 ;draw-selector JSR2
... ...
@@ -71,12 +65,12 @@ BRK
71 65
 		&no-down
72 66
 	[ #04 ] NEQk NIP ,&no-left JCN 
73 67
 		#00 ;draw-selector JSR2
74
-		.selection LDZ #01 SUB 20MOD .selection STZ
68
+		.selection LDZ #01 SUB #1f AND .selection STZ
75 69
 		#02 ;draw-selector JSR2
76 70
 		&no-left
77 71
 	[ #08 ] NEQk NIP ,&no-right JCN 
78 72
 		#00 ;draw-selector JSR2
79
-		.selection LDZ INC 20MOD .selection STZ
73
+		.selection LDZ INC #1f AND .selection STZ
80 74
 		#02 ;draw-selector JSR2
81 75
 		&no-right
82 76
 	POP
... ...
@@ -89,9 +83,9 @@ BRK
89 83
 	( skip ) .timer LDZ #10 EQU #01 JCN [ BRK ]
90 84
 	.progress LDZ 
91 85
 	( play note )    DUP GET-NOTE .Audio0/pitch DEO
92
-	( erase last )   DUP #01 SUB 20MOD #01 ,draw-note JSR
86
+	( erase last )   DUP #01 SUB #1f AND #01 ,draw-note JSR
93 87
 	( draw current ) #01 ,draw-note JSR
94
-	( incr ) .progress LDZ INC 20MOD .progress STZ
88
+	( incr ) .progress LDZ INC #1f AND .progress STZ
95 89
 	#00 .timer STZ
96 90
 
97 91
 BRK
... ...
@@ -104,30 +98,30 @@ BRK
104 98
 		INC GTHk ,&loop JCN
105 99
 	POP2
106 100
 
107
-RTN
101
+JMP2r
108 102
 
109 103
 @draw-note ( id color -- )
110 104
 
111 105
 	STH STH
112
-	( set x ) [ #00 STHkr ] 8** .offset/x LDZ2 ADD2 .Screen/x DEO2
113
-	( set y ) [ #00 #00 STHkr ;melody ADD2 LDA ] 4** #0100 SWP2 SUB2 .offset/y LDZ2 ADD2 #0080 ADD2 .Screen/y DEO2
106
+	( set x ) [ #00 STHkr ] #30 SFT2 .offset/x LDZ2 ADD2 .Screen/x DEO2
107
+	( set y ) [ #00 #00 STHkr ;melody ADD2 LDA ] #20 SFT2 #0100 SWP2 SUB2 .offset/y LDZ2 ADD2 #0080 ADD2 .Screen/y DEO2
114 108
 	( set addr ) ;marker-icn [ #00 .progress LDZ STHr EQU #08 MUL ADD2 ] .Screen/addr DEO2
115 109
 	( draw ) STHr .Screen/sprite DEO
116 110
 
117
-RTN
111
+JMP2r
118 112
 
119 113
 @draw-selector ( color -- )
120 114
 	
121 115
 	STH
122
-	[ #00 .selection LDZ ] 8** .offset/x LDZ2 ADD2 .Screen/x DEO2
116
+	[ #00 .selection LDZ ] #30 SFT2 .offset/x LDZ2 ADD2 .Screen/x DEO2
123 117
 	#0070 .offset/y LDZ2 ADD2 .Screen/y DEO2
124 118
 	;selector-icn .Screen/addr DEO2
125 119
 	STHkr .Screen/sprite DEO
126 120
 
127
-	.Screen/y DEI2 #0008 ADD2 .Screen/y DEO2
121
+	.Screen/y DEI2k #0008 ADD2 ROT DEO2
128 122
 	.selection LDZ GET-NOTE STHr ,draw-byte JSR
129 123
 
130
-RTN
124
+JMP2r
131 125
 
132 126
 @draw-byte ( byte color -- )
133 127
 	
... ...
@@ -139,7 +133,7 @@ RTN
139 133
 		#0f AND GET-HEXCHAR 
140 134
 		( draw ) STHr .Screen/sprite DEO
141 135
 
142
-RTN
136
+JMP2r
143 137
 
144 138
 @melody 
145 139
 	54 52 54 4f 4b 4f 48 ff
... ...
@@ -180,4 +174,4 @@ RTN
180 174
 	007c 8282 7c82 827c 007c 8282 7e02 827c
181 175
 	007c 8202 7e82 827e 00fc 8282 fc82 82fc
182 176
 	007c 8280 8080 827c 00fc 8282 8282 82fc
183
-	007c 8280 f080 827c 007c 8280 f080 8080
184 177
\ No newline at end of file
178
+	007c 8280 f080 827c 007c 8280 f080 8080
... ...
@@ -81,7 +81,7 @@ BRK
81 81
 	#03 STHkr #03 SFT #01 AND DUP ADD SUB .Screen/sprite DEO
82 82
 
83 83
 	( buttons )
84
-	.center/y LDZ2 #0000 ADD2 .Screen/y DEO2
84
+	.center/y LDZ2 .Screen/y DEO2
85 85
 	.center/x LDZ2 #0018 ADD2 .Screen/x DEO2
86 86
 	;controller-icn/button .Screen/addr DEO2
87 87
 	#03 STHkr #01 SFT #01 AND SUB .Screen/sprite DEO
... ...
@@ -89,7 +89,7 @@ BRK
89 89
 		;font-hex #0058 ADD2 .Screen/addr DEO2
90 90
 		#03 .Screen/sprite DEO
91 91
 
92
-	.center/y LDZ2 #0000 ADD2 .Screen/y DEO2
92
+	.center/y LDZ2 .Screen/y DEO2
93 93
 	.center/x LDZ2 #0024 ADD2 .Screen/x DEO2
94 94
 	;controller-icn/button .Screen/addr DEO2
95 95
 	#03 STHr #01 AND SUB .Screen/sprite DEO
... ...
@@ -9,18 +9,31 @@
9 9
 
10 10
 @line
11 11
 	&x $2 &y $2 &dx $2 &dy $2 &e1 $2
12
+@length $2
13
+@frame $2
14
+@pen 
15
+	&x $2 &y $2 &x2 $2 &y2 $2
12 16
 @pointer
13 17
 	&x $2 &y $2 &lastx $2 &lasty $2 &state $1
14 18
 
15 19
 |0100 ( -> )
16 20
 
17 21
 	( theme )
18
-	#a0f0 .System/r DEO2
19
-	#40ff .System/g DEO2
20
-	#60ff .System/b DEO2
22
+	#4cfd .System/r DEO2
23
+	#4cf3 .System/g DEO2
24
+	#dcf2 .System/b DEO2
21 25
 
22 26
 	( vectors )
23 27
 	;on-mouse .Mouse/vector DEO2
28
+	;on-frame .Screen/vector DEO2
29
+
30
+BRK
31
+
32
+@on-frame ( -> )
33
+
34
+	.Mouse/state DEI ,&skip JCN
35
+		;run DUP2 JSR2 JSR2
36
+		&skip
24 37
 
25 38
 BRK
26 39
 
... ...
@@ -34,7 +47,7 @@ BRK
34 47
 	( draw new cursor )
35 48
 	.Mouse/x DEI2 DUP2 .pointer/x STZ2 .Screen/x DEO2
36 49
 	.Mouse/y DEI2 DUP2 .pointer/y STZ2 .Screen/y DEO2
37
-	#43 .Mouse/state DEI #00 NEQ DUP ADD SUB .Screen/sprite DEO
50
+	#42 .Mouse/state DEI #00 NEQ ADD .Screen/sprite DEO
38 51
 	( on down )
39 52
 	.Mouse/state DEI #00 NEQ .pointer/state LDZ #00 EQU AND ,on-mouse-down JCN
40 53
 	( on drag )
... ...
@@ -45,6 +58,8 @@ BRK
45 58
 
46 59
 @on-mouse-down ( -> )
47 60
 
61
+	#0000 DUP2 .length STZ2 .frame STZ2
62
+	;clear-screen JSR2
48 63
 	( record start position )
49 64
 	.Mouse/x DEI2 DUP2 .pointer/x STZ2 .pointer/lastx STZ2
50 65
 	.Mouse/y DEI2 DUP2 .pointer/y STZ2 .pointer/lasty STZ2
... ...
@@ -53,36 +68,65 @@ BRK
53 68
 BRK
54 69
 
55 70
 @on-mouse-drag ( -> )
56
-	
71
+
72
+	( record )
73
+	;stroke .length LDZ2 #20 SFT2 ADD2 STH2
74
+		.pointer/x LDZ2 .pointer/lastx LDZ2 SUB2 STH2kr STA2
75
+		.pointer/y LDZ2 .pointer/lasty LDZ2 SUB2 STH2r INC2 INC2 STA2
76
+	( move ptr )
77
+	.length LDZ2 INC2 .length STZ2 
57 78
 	( draw line )
58 79
 	.pointer/lastx LDZ2
59 80
 	.pointer/lasty LDZ2
60 81
 	.pointer/x LDZ2
61 82
 	.pointer/y LDZ2
62
-	.Mouse/state DEI INC
63
-	;draw-line JSR2
64
-
83
+		#01
84
+		;draw-line JSR2
65 85
 	( record last position )
66
-	.Mouse/x DEI2 .pointer/lastx STZ2
67
-	.Mouse/y DEI2 .pointer/lasty STZ2
86
+	.Mouse/x DEI2 
87
+		DUP2 .pointer/lastx STZ2 
88
+		DUP2 .pen/x STZ2
89
+		.pen/x2 STZ2
90
+	.Mouse/y DEI2 
91
+		DUP2 .pointer/lasty STZ2 
92
+		DUP2 .pen/y STZ2
93
+		.pen/y2 STZ2
68 94
 	.Mouse/state DEI .pointer/state STZ
69 95
 
70 96
 BRK
71 97
 
98
+@run ( -- )
99
+
100
+	( read )
101
+	;stroke .frame LDZ2 #20 SFT2 ADD2 STH2
102
+		.pen/x LDZ2 STH2kr LDA2 ADD2 .pen/x STZ2
103
+		.pen/y LDZ2 STH2r INC2 INC2 LDA2 ADD2 .pen/y STZ2
104
+	( line )
105
+	.pen/x LDZ2 .pen/y LDZ2
106
+	.pen/x2 LDZ2 .pen/y2 LDZ2
107
+		.frame LDZ2 #01 SFT2 NIP #01 AND INC ;draw-line JSR2
108
+	( history )
109
+	.pen/x LDZ2 .pen/x2 STZ2
110
+	.pen/y LDZ2 .pen/y2 STZ2
111
+	( incr frame )
112
+	.frame LDZ2 INC2 .length LDZ2 INC2 ( mod2 ) DIV2k MUL2 SUB2 .frame STZ2
113
+
114
+JMP2r
115
+
72 116
 @draw-line ( x1* y1* x2* y2* color -- )
73 117
 
74 118
 	( load ) STH ,&y STR2 ,&x STR2 .line/y STZ2 .line/x STZ2
75 119
 	,&x LDR2 .line/x LDZ2 SUB2 ;abs2 JSR2 .line/dx STZ2
76 120
 	#0000 ,&y LDR2 .line/y LDZ2 SUB2 ;abs2 JSR2 SUB2 .line/dy STZ2
77
-	#ffff #00 .line/x LDZ2 ,&x LDR2 ;lts2 JSR2 #10 SFT2 ADD2 ,&sx STR2
78
-	#ffff #00 .line/y LDZ2 ,&y LDR2 ;lts2 JSR2 #10 SFT2 ADD2 ,&sy STR2
121
+	#ffff #00 .line/x LDZ2 ,&x LDR2 ;lts2 JSR2 DUP2 ADD2 ADD2 ,&sx STR2
122
+	#ffff #00 .line/y LDZ2 ,&y LDR2 ;lts2 JSR2 DUP2 ADD2 ADD2 ,&sy STR2
79 123
 	.line/dx LDZ2 .line/dy LDZ2 ADD2 .line/e1 STZ2
80 124
 	&loop
81 125
 		.line/x LDZ2 DUP2 .Screen/x DEO2 [ LIT2 &x $2 ] EQU2
82 126
 		.line/y LDZ2 DUP2 .Screen/y DEO2 [ LIT2 &y $2 ] EQU2
83 127
 			STHkr .Screen/pixel DEO
84 128
 			AND ,&end JCN
85
-		.line/e1 LDZ2 #10 SFT2 DUP2
129
+		.line/e1 LDZ2 DUP2 ADD2 DUP2
86 130
 		.line/dy LDZ2 ;lts2 JSR2 ,&skipy JCN
87 131
 			.line/e1 LDZ2 .line/dy LDZ2 ADD2 .line/e1 STZ2
88 132
 			.line/x LDZ2 [ LIT2 &sx $2 ] ADD2 .line/x STZ2
... ...
@@ -101,4 +145,24 @@ JMP2r
101 145
 @lts2 #8000 STH2k ADD2 SWP2 STH2r ADD2 GTH2 JMP2r
102 146
 @gts2 #8000 STH2k ADD2 SWP2 STH2r ADD2 LTH2 JMP2r
103 147
 
104
-@pointer-icn 80c0 e0f0 f8e0 1000
148
+@clear-screen ( -- )
149
+
150
+	.Screen/height DEI2 #03 SFT2 NIP #00
151
+	&y
152
+		#00 OVR #30 SFT2 .Screen/y DEO2
153
+		.Screen/width DEI2 #03 SFT2 NIP #00
154
+		&x
155
+			#00 OVR #30 SFT2 .Screen/x DEO2
156
+			#00 .Screen/sprite DEO
157
+			INC GTHk ,&x JCN
158
+		POP2
159
+		INC GTHk ,&y JCN
160
+	POP2
161
+
162
+JMP2r
163
+
164
+@pointer-icn
165
+	80c0 e0f0 f8e0 1000
166
+
167
+@stroke
168
+
105 169
new file mode 100644
... ...
@@ -0,0 +1,15 @@
1
+X::=~_
2
+Y::=~*
3
+Z::=~`
4
+_.::=._X
5
+_*::=*_Y
6
+._|::=.Z-|
7
+*_|::=Z
8
+..-::=.-.
9
+**-::=*-.
10
+*.-::=*-*
11
+.*-::=.-*
12
+@.-::=@_.
13
+@*-::=@_*
14
+::=
15
+@_*...............................|
... ...
@@ -15,7 +15,7 @@ BRK
15 15
 
16 16
 @print ( short* -- )
17 17
 
18
-	&short ( short* -- ) SWP ,&byte JSR
18
+	SWP ,&byte JSR
19 19
 	&byte ( byte -- ) DUP #04 SFT ,&char JSR
20 20
 	&char ( char -- ) #0f AND DUP #09 GTH #27 MUL ADD #30 ADD #18 DEO
21 21
 
... ...
@@ -25,8 +25,8 @@ JMP2r
25 25
 @input-main ( -> )
26 26
 
27 27
 	.Console/read DEI
28
-	LIT '0 EQUk NIP ,&no JCN
29
-	LIT '1 EQUk NIP ,&yes JCN
28
+	LIT "0 EQUk NIP ,&no JCN
29
+	LIT "1 EQUk NIP ,&yes JCN
30 30
 	( ignore other inputs )
31 31
 	POP
32 32
 
... ...
@@ -56,7 +56,7 @@ JMP2r
56 56
 @pstr ( str* -- )
57 57
 
58 58
 	&while
59
-		LDAk DUP LIT '_ EQU #3f MUL SUB .Console/write DEO
59
+		LDAk DUP LIT "_ EQU #3f MUL SUB .Console/write DEO
60 60
 		INC2 LDAk ,&while JCN
61 61
 	POP2
62 62
 
... ...
@@ -4,7 +4,7 @@
4 4
 
5 5
 |0100 ( -> ) @reset
6 6
 
7
-	#0000 #0001
7
+	#0000 INC2k
8 8
 	&loop
9 9
 		DUP2 ,is-prime JSR #00 EQU ,&skip JCN
10 10
 			( print ) DUP2 ,print/short JSR
... ...
@@ -30,14 +30,14 @@ BRK
30 30
  	.a LDZ2 #ffff EQU2 ,&input JCN
31 31
 	.b LDZ2 #ffff EQU2 ,&output JCN
32 32
 	( SUBLEQ )
33
-	.b LDZ2 STH2k ,&get JSR .a LDZ2 ,&get JSR SUB2 STH2r #10 SFT2 ;program ADD2 STA2
33
+	.b LDZ2 STH2k ,&get JSR .a LDZ2 ,&get JSR SUB2 STH2r DUP2 ADD2 ;program ADD2 STA2
34 34
 	( SET )
35 35
 	.b LDZ2 ,&get JSR #0001 SUB2 #8000 LTH2 ,&end JCN POP2 .c LDZ2 &end
36 36
 
37 37
 JMP2r
38 38
 	&input ( -- ) JMP2r
39 39
 	&output ( -- ) .a LDZ2 ,&get JSR NIP #18 DEO JMP2r
40
-	&get ( a* -- b* ) #10 SFT2 ;program ADD2 LDA2 JMP2r
40
+	&get ( a* -- b* ) DUP2 ADD2 ;program ADD2 LDA2 JMP2r
41 41
 
42 42
 @program ( hello world )
43 43
 	000f 0011 ffff 0011 ffff ffff 0010 0001
44 44
new file mode 100644
... ...
@@ -0,0 +1,155 @@
1
+( thue interpreter
2
+	usage: thue.rom demo.t )
3
+
4
+|10 @Console &vector $2 &read $1 &pad $5 &write $1
5
+|a0 @File &vector $2 &success $2 &stat $2 &delete $1 &append $1 &name $2 &length $2 &read $2 &write $2
6
+
7
+|0000
8
+
9
+@src $40
10
+@ptr $2
11
+@len $2
12
+
13
+|0100 ( -> )
14
+
15
+	;on-console .Console/vector DEO2
16
+
17
+BRK
18
+
19
+@on-console ( -> )
20
+
21
+	;src STH2
22
+
23
+	( read )
24
+	.Console/read DEI
25
+	DUP #20 LTH OVR #7f GTH ORA ,&end JCN
26
+	STH2kr ;slen JSR2 #003f GTH2 ,&end JCN
27
+		STH2r ;sput JSR2 BRK
28
+		&end
29
+	POP
30
+
31
+	( parse )
32
+	STH2r .File/name DEO2
33
+	#0001 .File/length DEO2
34
+	;program .ptr STZ2
35
+	&s
36
+		;&buf .File/read DEO2
37
+		.File/success DEI2 #0000 EQU2 ,&eof JCN
38
+		[ LIT &buf $1 ] ;walk JSR2
39
+		,&s JMP
40
+	&eof
41
+
42
+	( assemble )
43
+	;program/assembly .ptr STZ2
44
+	;program
45
+	&w
46
+		( save ) DUP2 .ptr LDZ2 STA2
47
+		( incr ) .ptr LDZ2k INC2 INC2 ROT STZ2
48
+		( next ) &eos INC2 LDAk ,&eos JCN INC2
49
+		LDAk ,&w JCN
50
+
51
+	( save acc )
52
+	INC2 ;program/accumulator ;scpy JSR2
53
+
54
+	( run )
55
+	&eval ,step JSR ,&eval JCN
56
+	#010f DEO
57
+
58
+BRK
59
+
60
+@step ( -- done )
61
+
62
+	;program/assembly
63
+	&while
64
+		DUP2 ;run-rule JSR2 ,&found JCN
65
+		#0004 ADD2 LDA2k ORA ,&while JCN
66
+	POP2
67
+	#00
68
+
69
+JMP2r
70
+	&found #01 JMP2r
71
+
72
+@walk ( char -- )
73
+
74
+	.ptr LDZ2 STA
75
+
76
+	( check for left-side )
77
+	.ptr LDZ2 #0002 SUB2 ;&marker ;scmp JSR2 #01 NEQ ,&no-marker JCN
78
+		#00 .ptr LDZ2 #0002 SUB2 STA
79
+		.ptr LDZ2k #0002 SUB2 ROT STZ2
80
+		.len LDZ2k INC2 ROT STZ2
81
+		&no-marker
82
+	( check for right-side )
83
+	.ptr LDZ2 LDA #0a NEQ ,&no-lb JCN
84
+		#00 .ptr LDZ2 STA
85
+		&no-lb
86
+	.ptr LDZ2k INC2 ROT STZ2
87
+
88
+JMP2r
89
+	&marker "::= $1
90
+
91
+@run-rule ( rule* -- )
92
+
93
+	LDA2k ,&a STR2
94
+	INC2 INC2 LDA2 ,&b STR2
95
+
96
+	;program/accumulator
97
+	&w
98
+		[ LIT2 &a $2 ] OVR2 ;sseg JSR2 #01 NEQ ,&no-found JCN
99
+			,&b LDR2 LDA LIT "~ EQU ,&output JCN
100
+			( shift ) DUP2 [ ,&b LDR2 ;slen JSR2 ,&a LDR2 ;slen JSR2 SUB2 ] ;ssft JSR2
101
+			( write ) [ LIT2 &b $2 ] SWP2 OVR2 ;slen JSR2 ;mcpy JSR2 
102
+			POP2 #01 JMP2r
103
+			&no-found
104
+		INC2 LDAk ,&w JCN
105
+	POP2
106
+	#00
107
+
108
+JMP2r
109
+	&output
110
+		,&a LDR2 ;slen JSR2 #0000 SWP2 SUB2 ;ssft JSR2
111
+		POP2 ,&b LDR2 INC2
112
+		LDAk LIT "` NEQ ,&no-lb JCN
113
+			#0a18 DEO #01 JMP2r
114
+			&no-lb
115
+		,print-str JSR #01
116
+	JMP2r
117
+
118
+@print-str ( str* -- )
119
+
120
+	&while
121
+		LDAk #18 DEO
122
+		INC2 LDAk ,&while JCN
123
+	POP2
124
+
125
+JMP2r
126
+
127
+@ssft ( str* len* -- )
128
+
129
+	STH2 DUP2k ;slen JSR2 ADD2 STH2r
130
+	DUP2 #8000 GTH2 ,&l JCN
131
+	ORAk ,&r JCN
132
+	POP2 POP2 POP2
133
+
134
+JMP2r
135
+	&l #8000 SWP2 SUB2 #8000 ADD2 ,msfl JSR JMP2r
136
+	&r ,msfr JSR JMP2r
137
+
138
+( stdlib )
139
+
140
+@mcpy ( src* dst* len* -- ) SWP2 STH2 OVR2 ADD2 SWP2 &l LDAk STH2kr STA INC2r INC2 GTH2k ,&l JCN POP2 POP2 POP2r JMP2r
141
+@msfl ( b* a* len* -- ) STH2 SWP2 EQU2k ,&e JCN &l DUP2k STH2kr ADD2 LDA ROT ROT STA INC2 GTH2k ,&l JCN POP2 POP2 &e POP2r JMP2r
142
+@msfr ( b* a* len* -- ) STH2 EQU2k ,&e JCN &l DUP2 LDAk ROT ROT STH2kr ADD2 STA #0001 SUB2 LTH2k ,&l JCN POP2 POP2 &e POP2r JMP2r
143
+
144
+@scap ( str* -- end* ) LDAk #00 NEQ JMP JMP2r &w INC2 LDAk ,&w JCN JMP2r
145
+@sput ( chr str* -- ) ,scap JSR STA JMP2r
146
+@slen ( str* -- len* ) DUP2 ,scap JSR SWP2 SUB2 JMP2r
147
+@scpy ( src* dst* -- ) STH2 &w LDAk STH2kr STA INC2r INC2 LDAk ,&w JCN POP2 #00 STH2r STA JMP2r
148
+@scmp ( a* b* -- f ) STH2 &l LDAk LDAkr STHr ANDk #00 EQU ,&e JCN NEQk ,&e JCN POP2 INC2 INC2r ,&l JMP &e NIP2 POP2r EQU JMP2r
149
+@sseg ( a* b* -- f ) STH2 &l LDAk LDAkr STHr NEQ ,&e JCN INC2k LDA #00 EQU ,&e JCN INC2 INC2r ,&l JMP &e LDA LDAr STHr EQU JMP2r
150
+
151
+$10
152
+
153
+@program $4000
154
+	&assembly $4000
155
+	&accumulator $4000
... ...
@@ -13,27 +13,31 @@
13 13
 	#a0dc .System/r DEO2
14 14
 	#a0dc .System/g DEO2
15 15
 	#a0dc .System/b DEO2
16
+
16 17
 	( find screen center )
17 18
 	.Screen/width DEI2 #01 SFT2 .center/x STZ2
18 19
 	.Screen/height DEI2 #01 SFT2 .center/y STZ2
19
-	( ver )
20
+
21
+	( dashed line )
20 22
 	#02 .Screen/auto DEO
21 23
 	#0000 .Screen/y DEO2
22 24
 	.center/x LDZ2 .Screen/x DEO2
23 25
 	.Screen/height DEI2 #0000
24 26
 	&ver
25
-		#43 .Screen/pixel DEO
26
-		.Screen/y DEI2k INC2 ROT DEO2
27
+		DUP #01 AND .Screen/pixel DEO
27 28
 		INC2 GTH2k ,&ver JCN
28 29
 	POP2 POP2
30
+
29 31
 	( left )
30 32
 	.center/x LDZ2 .Screen/x DEO2
31 33
 	.center/y LDZ2 #0018 SUB2 .Screen/y DEO2
32 34
 	;left-txt ,draw-uf2 JSR
35
+
33 36
 	( center )
34 37
 	.center/x LDZ2 .Screen/x DEO2
35 38
 	.center/y LDZ2 .Screen/y DEO2
36 39
 	;center-txt ,draw-uf2-center JSR
40
+
37 41
 	( right )
38 42
 	.center/x LDZ2 .Screen/x DEO2
39 43
 	.center/y LDZ2 #0018 ADD2 .Screen/y DEO2
... ...
@@ -41,23 +45,7 @@
41 45
 
42 46
 BRK
43 47
 
44
-@draw-uf2-center ( text* color -- )
45
-
46
-	DUP2 ,get-width JSR #01 SFT2 STH2 
47
-	.Screen/x DEI2k STH2r SUB2 ROT DEO2
48
-	,draw-uf2 JSR
49
-
50
-JMP2r
51
-
52
-@draw-uf2-right ( text* color -- )
53
-
54
-	DUP2 ,get-width JSR STH2 
55
-	.Screen/x DEI2k STH2r SUB2 ROT DEO2
56
-	,draw-uf2 JSR
57
-
58
-JMP2r
59
-
60
-@get-width ( text* -- width* )
48
+@get-uf2-width ( text* -- width* )
61 49
 
62 50
 	LIT2r 0000
63 51
 	&while
... ...
@@ -68,14 +56,25 @@ JMP2r
68 56
 
69 57
 JMP2r
70 58
 
59
+@draw-uf2-center ( text* -- )
60
+
61
+	DUP2 ,get-uf2-width JSR #01 SFT2 STH2
62
+	.Screen/x DEI2k STH2r SUB2 ROT DEO2
63
+	,draw-uf2 JMP
64
+
65
+@draw-uf2-right ( text* -- )
66
+
67
+	DUP2 ,get-uf2-width JSR STH2
68
+	.Screen/x DEI2k STH2r SUB2 ROT DEO2
69
+
71 70
 @draw-uf2 ( text* -- )
72 71
 
73 72
 	#15 .Screen/auto DEO
74 73
 	&while
75 74
 		LDAk #20 SUB #00 SWP
76 75
 			DUP2 #50 SFT2 ;font/glyphs ADD2 .Screen/addr DEO2
77
-			;font ADD2 LDA #00 SWP .Screen/x DEI2 ADD2
78
-		#01 .Screen/sprite DEOk DEO
76
+			;font ADD2 LDA STHk #00 SWP .Screen/x DEI2 ADD2
77
+		#01 .Screen/sprite DEOk STHr #08 LTH ,&thin JCN DEOk &thin POP2
79 78
 		.Screen/x DEO2
80 79
 		INC2 LDAk ,&while JCN
81 80
 	POP2
... ...
@@ -1,13 +1,8 @@
1 1
 ( GUI Shapes )
2 2
 
3
-%2** { #10 SFT2 }
4
-%4** { #20 SFT2 }
5
-%2// { #01 SFT2 }
6
-%4// { #02 SFT2 }
7 3
 %ABS2 { DUP2 #0f SFT2 EQU #05 JCN #0000 SWP2 SUB2 }
8 4
 %LTS2  { #8000 ADD2 SWP2 #8000 ADD2 GTH2 }
9 5
 %GTS2  { #8000 ADD2 SWP2 #8000 ADD2 LTH2 }
10
-
11 6
 %WIDTH { #0100 } %HEIGHT { #00a0 }
12 7
 
13 8
 ( devices )
... ...
@@ -35,24 +30,24 @@
35 30
 	#f03c .System/g DEO2 
36 31
 	#f03f .System/b DEO2
37 32
 
38
-	( background ) ;checker_icn #03 ;cover-pattern JSR2
33
+	( background ) ;checker-icn #03 ;cover-pattern JSR2
39 34
 
40
-	.Screen/width DEI2 2// WIDTH 2// SUB2 #0008 ADD2
41
-	.Screen/height DEI2 2// HEIGHT 2// SUB2 #0008 ADD2
35
+	.Screen/width DEI2 #01 SFT2 WIDTH #01 SFT2 SUB2 #0008 ADD2
36
+	.Screen/height DEI2 #01 SFT2 HEIGHT #01 SFT2 SUB2 #0008 ADD2
42 37
 	WIDTH HEIGHT
43 38
 	STH2 STH2 OVR2 STH2r ADD2 OVR2 STH2r ADD2 #02 ;fill-rect JSR2
44 39
 
45
-	.Screen/width DEI2 2// WIDTH 2// SUB2
46
-	.Screen/height DEI2 2// HEIGHT 2// SUB2
40
+	.Screen/width DEI2 #01 SFT2 WIDTH #01 SFT2 SUB2
41
+	.Screen/height DEI2 #01 SFT2 HEIGHT #01 SFT2 SUB2
47 42
 	WIDTH HEIGHT
48 43
 	STH2 STH2 OVR2 STH2r ADD2 OVR2 STH2r ADD2 #01 ;fill-rect JSR2
49 44
 
50
-	.Screen/width DEI2 2// WIDTH 2// SUB2  #0008 ADD2
51
-	.Screen/height DEI2 2// HEIGHT 2// SUB2  #0008 ADD2
45
+	.Screen/width DEI2 #01 SFT2 WIDTH #01 SFT2 SUB2  #0008 ADD2
46
+	.Screen/height DEI2 #01 SFT2 HEIGHT #01 SFT2 SUB2  #0008 ADD2
52 47
 	WIDTH #0010 SUB2 HEIGHT #0010 SUB2
53 48
 	STH2 STH2 OVR2 STH2r ADD2 OVR2 STH2r ADD2 #03 ;line-rect JSR2
54 49
 
55
-	.Screen/width DEI2 2// .Screen/height DEI2 2// WIDTH 4// #02 ;draw-circle JSR2
50
+	.Screen/width DEI2 #01 SFT2 .Screen/height DEI2 #01 SFT2 WIDTH #02 SFT2 #02 ;draw-circle JSR2
56 51
 
57 52
 	#0010 #0030 #0068 #02 ;line-hor JSR2
58 53
 	#0020 #0058 #0078 #02 ;line-ver JSR2
... ...
@@ -64,13 +59,13 @@ BRK
64 59
 	( load ) .color STZ #0001 SUB2 .line/y0 STZ2 #0001 SUB2 .line/x0 STZ2 .line/y STZ2 .line/x STZ2
65 60
 	.line/x0 LDZ2 .line/x LDZ2 SUB2 ABS2 .line/dx STZ2
66 61
 	.line/y0 LDZ2 .line/y LDZ2 SUB2 ABS2 #0000 SWP2 SUB2 .line/dy STZ2
67
-	#ffff #00 .line/x LDZ2 .line/x0 LDZ2 LTS2 2** ADD2 .line/sx STZ2
68
-	#ffff #00 .line/y LDZ2 .line/y0 LDZ2 LTS2 2** ADD2 .line/sy STZ2
62
+	#ffff #00 .line/x LDZ2 .line/x0 LDZ2 LTS2 #10 SFT2 ADD2 .line/sx STZ2
63
+	#ffff #00 .line/y LDZ2 .line/y0 LDZ2 LTS2 #10 SFT2 ADD2 .line/sy STZ2
69 64
 	.line/dx LDZ2 .line/dy LDZ2 ADD2 .line/e1 STZ2
70 65
 	&loop
71 66
 		.line/x LDZ2 .Screen/x DEO2 .line/y LDZ2 .Screen/y DEO2 .color LDZ .Screen/pixel DEO
72
-		.line/x LDZ2 .line/x0 LDZ2 EQU2 .line/y LDZ2 .line/y0 LDZ2 EQU2 #0101 EQU2 ,&end JCN
73
-		.line/e1 LDZ2 2** .line/e2 STZ2
67
+		.line/x LDZ2 .line/x0 LDZ2 EQU2 .line/y LDZ2 .line/y0 LDZ2 EQU2 AND ,&end JCN
68
+		.line/e1 LDZ2 #10 SFT2 .line/e2 STZ2
74 69
 		.line/e2 LDZ2 .line/dy LDZ2 LTS2 ,&skipy JCN
75 70
 			.line/e1 LDZ2 .line/dy LDZ2 ADD2 .line/e1 STZ2
76 71
 			.line/x LDZ2 .line/sx LDZ2 ADD2 .line/x STZ2
... ...
@@ -136,16 +131,16 @@ JMP2r
136 131
 
137 132
 	( load ) .color STZ .circle/r STZ2 .circle/yc STZ2 .circle/xc STZ2
138 133
 	#0000 .circle/x STZ2 .circle/r LDZ2 .circle/y STZ2
139
-	.circle/r LDZ2 2** .circle/d STZ2
134
+	.circle/r LDZ2 #10 SFT2 .circle/d STZ2
140 135
 	( draw ) ;&seg JSR2
141 136
 	&loop
142 137
 		( incr ) .circle/x LDZ2 INC2 .circle/x STZ2
143 138
 		.circle/d LDZ2 #0001 LTS2 ,&else JCN
144 139
 			( decr ) .circle/y LDZ2 #0001 SUB2 .circle/y STZ2
145
-			.circle/x LDZ2 .circle/y LDZ2 SUB2 4** .circle/d LDZ2 ADD2 .circle/d STZ2
140
+			.circle/x LDZ2 .circle/y LDZ2 SUB2 #20 SFT2 .circle/d LDZ2 ADD2 .circle/d STZ2
146 141
 			;&end JMP2
147 142
 		&else
148
-			.circle/x LDZ2 4** .circle/d LDZ2 ADD2 .circle/d STZ2
143
+			.circle/x LDZ2 #20 SFT2 .circle/d LDZ2 ADD2 .circle/d STZ2
149 144
 		&end
150 145
 		( draw ) ;&seg JSR2
151 146
 		.circle/y LDZ2 .circle/x LDZ2 #0001 SUB2 GTS2 ,&loop JCN
... ...
@@ -204,4 +199,5 @@ JMP2r
204 199
 
205 200
 JMP2r
206 201
 
207
-@checker_icn [ f0f0 f0f0 0f0f 0f0f ]
202
+@checker-icn
203
+	f0f0 f0f0 0f0f 0f0f
... ...
@@ -34,7 +34,7 @@ BRK
34 34
 @on-button ( -> )
35 35
 
36 36
 	.Controller/key DEI
37
-	DUP #00 NEQ ,&no-null JCN
37
+	DUP ,&no-null JCN
38 38
 		POP BRK
39 39
 		&no-null
40 40
 	DUP #0d NEQ ,&no-enter JCN
... ...
@@ -75,7 +75,7 @@ BRK
75 75
 	LIT 22 #02 ;draw-char JSR2
76 76
 	;buffer #03 ;draw-str JSR2
77 77
 	LIT 22 #02 ;draw-char JSR2
78
-	LIT '. #02 ;draw-char JSR2
78
+	LIT ". #02 ;draw-char JSR2
79 79
 
80 80
 JMP2r
81 81
 
... ...
@@ -85,7 +85,7 @@ JMP2r
85 85
 	#0010 .Screen/x DEO2
86 86
 	.Screen/height DEI2 #0020 SUB2 .Screen/y DEO2
87 87
 
88
-	( marker ) LIT '> #03 ;draw-char JSR2
88
+	( marker ) LIT "> #03 ;draw-char JSR2
89 89
 
90 90
 	;buffer STHr ;draw-str JSR2
91 91
 
... ...
@@ -137,8 +137,8 @@
137 137
 	DUP2 ,asma-print-labels JSR
138 138
 	( here )
139 139
 	DUP2 #0004 ADD2
140
-	LDAk LIT 'A LTH ,&loop JCN
141
-	LDAk LIT 'Z GTH ,&loop JCN
140
+	LDAk LIT "A LTH ,&loop JCN
141
+	LDAk LIT "Z GTH ,&loop JCN
142 142
 	POP2
143 143
 	,&skip-device-label JMP
144 144
 	&loop
... ...
@@ -169,8 +169,8 @@
169 169
 	,asma-print-string JMP
170 170
 
171 171
 @asma-print-short ( short* -- )
172
-	LIT '0 .Console/error DEO
173
-	LIT 'x .Console/error DEO
172
+	LIT "0 .Console/error DEO
173
+	LIT "x .Console/error DEO
174 174
 	OVR #04 SFT ,&hex JSR
175 175
 	SWP #0f AND ,&hex JSR
176 176
 	DUP #04 SFT ,&hex JSR
... ...
@@ -210,9 +210,9 @@
210 210
 	JMP2r
211 211
 
212 212
 	&preamble
213
-	"%BRK 20 '{ 20 "00 20 '} 20
214
-	"%[ 20 '{ 20 '} 20
215
-	"%] 20 '{ 20 '} 20
213
+	"%BRK 20 "{ 20 "00 20 "} 20
214
+	"%[ 20 "{ 20 "} 20
215
+	"%] 20 "{ 20 "} 20
216 216
 	"@on-reset 20
217 217
 	&preamble-end
218 218
 
... ...
@@ -496,15 +496,15 @@
496 496
 	JMP2r
497 497
 
498 498
 	&not-end
499
-	DUP LIT '2 NEQ ,&not-two JCN
499
+	DUP LIT "2 NEQ ,&not-two JCN
500 500
 	POP LIT &short-flag $1 ORA ,&loop JMP
501 501
 
502 502
 	&not-two
503
-	DUP LIT 'r NEQ ,&not-return JCN
503
+	DUP LIT "r NEQ ,&not-return JCN
504 504
 	POP LIT &return-flag $1 ORA ,&loop JMP
505 505
 
506 506
 	&not-return
507
-	LIT 'k NEQ ,&not-keep JCN
507
+	LIT "k NEQ ,&not-keep JCN
508 508
 	&set-keep LIT &keep-flag $1 ORA ,&loop JMP
509 509
 
510 510
 	&not-keep ( 00 byte / end* )
... ...
@@ -947,33 +947,33 @@
947 947
 	            than       than         string         data )
948 948
 
949 949
 @asma-first-char-comment
950
-	&28          $2         $2          '( 00          :asma-comment-more
951
-	&_entry     :&28        $2          ') 00          :asma-comment-less
950
+	&28          $2         $2          "( 00          :asma-comment-more
951
+	&_entry     :&28        $2          ") 00          :asma-comment-less
952 952
 
953 953
 @asma-first-char-macro
954
-	&28          $2         $2          '( 00          :asma-comment-start
955
-	&29         :&28        $2          ') 00          :asma-comment-end
956
-	&_entry     :&29       :&7d         '{ 00          :asma-ignore
957
-	&7d          $2         $2          '} 00          :asma-macro-end
954
+	&28          $2         $2          "( 00          :asma-comment-start
955
+	&29         :&28        $2          ") 00          :asma-comment-end
956
+	&_entry     :&29       :&7d         "{ 00          :asma-ignore
957
+	&7d          $2         $2          "} 00          :asma-macro-end
958 958
 
959 959
 @asma-first-char-normal
960
-	&22          $2         $2          '" 00          :asma-raw-word
961
-	&23         :&22        $2          '# 00          :asma-literal-hex
962
-	&24         :&23       :&25         '$ 00          :asma-pad-relative
963
-	&25          $2         $2          '% 00          :asma-macro-define
960
+	&22          $2         $2          "" 00          :asma-raw-word
961
+	&23         :&22        $2          "# 00          :asma-literal-hex
962
+	&24         :&23       :&25         "$ 00          :asma-pad-relative
963
+	&25          $2         $2          "% 00          :asma-macro-define
964 964
 	&26         :&24       :&29         26 00 ( & )    :asma-sublabel-define
965
-	&27          $2         $2          '' 00          :asma-raw-char
966
-	&28         :&27        $2          '( 00          :asma-comment-start
967
-	&29         :&28       :&2c         ') 00          :asma-comment-end
968
-	&2c          $2         $2          ', 00          :asma-literal-rel-addr
969
-	&_entry     :&26       :&7b         '. 00          :asma-literal-zero-addr
970
-	&3a          $2         $2          ': 00          :asma-abs-addr
971
-	&3b         :&3a       :&40         '; 00          :asma-literal-abs-addr
972
-	&40          $2         $2          '@ 00          :asma-label-define
973
-	&7b         :&3b       :&7d         '{ 00          :asma-ignore
974
-	&7c          $2         $2          '| 00          :asma-pad-absolute
975
-	&7d         :&7c       :&7e         '} 00          :asma-ignore
976
-	&7e          $2         $2          '~ 00          :asma-include
965
+	&27          $2         $2          "' 00          :asma-raw-char
966
+	&28         :&27        $2          "( 00          :asma-comment-start
967
+	&29         :&28       :&2c         ") 00          :asma-comment-end
968
+	&2c          $2         $2          ", 00          :asma-literal-rel-addr
969
+	&_entry     :&26       :&7b         ". 00          :asma-literal-zero-addr
970
+	&3a          $2         $2          ": 00          :asma-abs-addr
971
+	&3b         :&3a       :&40         "; 00          :asma-literal-abs-addr
972
+	&40          $2         $2          "@ 00          :asma-label-define
973
+	&7b         :&3b       :&7d         "{ 00          :asma-ignore
974
+	&7c          $2         $2          "| 00          :asma-pad-absolute
975
+	&7d         :&7c       :&7e         "} 00          :asma-ignore
976
+	&7e          $2         $2          "~ 00          :asma-include
977 977
 
978 978
 @asma-opcodes
979 979
 	&_entry     :&GTH      :&ROT &_disasm "LIT 00
980 980
similarity index 100%
981 981
rename from projects/pictures/akane20x10.bit
982 982
rename to projects/pictures/akane20x10.icn
983 983
similarity index 100%
984 984
rename from projects/pictures/cibo10x10.bit
985 985
rename to projects/pictures/cibo10x10.icn
986 986
similarity index 75%
987 987
rename from projects/pictures/cyr10x8.chr
988 988
rename to projects/pictures/cyr0cx08.chr
989 989
Binary files a/projects/pictures/cyr10x8.chr and b/projects/pictures/cyr0cx08.chr differ
990 990
similarity index 100%
991 991
rename from projects/pictures/dafu10x10.bit
992 992
rename to projects/pictures/dafu10x10.icn
993 993
similarity index 100%
994 994
rename from projects/pictures/ergo100x0c0.bit
995 995
rename to projects/pictures/ergo20x1a.icn
996 996
new file mode 100644
997 997
Binary files /dev/null and b/projects/pictures/logo02x02.icn differ
998 998
new file mode 100644
999 999
Binary files /dev/null and b/projects/pictures/logo04x04.chr differ
1000 1000
similarity index 100%
1001 1001
rename from projects/pictures/logo1x1.bit
1002 1002
rename to projects/pictures/logo08x08.icn
1003 1003
similarity index 100%
1004 1004
rename from projects/pictures/pc98.chr
1005 1005
rename to projects/pictures/pc9820x10.chr
1006 1006
similarity index 100%
1007 1007
rename from projects/pictures/pjw20x20.bit
1008 1008
rename to projects/pictures/pjw20x20.icn
1009 1009
similarity index 100%
1010 1010
rename from projects/pictures/tima2ax1a.bit
1011 1011
rename to projects/pictures/tima2ax1a.icn
1012 1012
deleted file mode 100644
1013 1013
Binary files a/projects/pictures/uxn16.chr and /dev/null differ
1014 1014
deleted file mode 100644
1015 1015
Binary files a/projects/pictures/uxn32.chr and /dev/null differ
... ...
@@ -69,15 +69,15 @@ BRK
69 69
 	[ #1b ] NEQk NIP ,&no-esc JCN ;do-pop JSR2 POP BRK &no-esc
70 70
 	[ #08 ] NEQk NIP ,&no-backspace JCN ;do-erase JSR2 POP BRK &no-backspace
71 71
 	( arithmetic )
72
-	[ LIT '+ ] NEQk NIP ,&no-add JCN ;do-add JSR2 POP BRK &no-add
73
-	[ LIT '- ] NEQk NIP ,&no-sub JCN ;do-sub JSR2 POP BRK &no-sub
74
-	[ LIT '* ] NEQk NIP ,&no-mul JCN ;do-mul JSR2 POP BRK &no-mul
75
-	[ LIT '/ ] NEQk NIP ,&no-div JCN ;do-div JSR2 POP BRK &no-div
72
+	[ LIT "+ ] NEQk NIP ,&no-add JCN ;do-add JSR2 POP BRK &no-add
73
+	[ LIT "- ] NEQk NIP ,&no-sub JCN ;do-sub JSR2 POP BRK &no-sub
74
+	[ LIT "* ] NEQk NIP ,&no-mul JCN ;do-mul JSR2 POP BRK &no-mul
75
+	[ LIT "/ ] NEQk NIP ,&no-div JCN ;do-div JSR2 POP BRK &no-div
76 76
 	( bitwise )
77
-	[ LIT '& ] NEQk NIP ,&no-and JCN ;do-and JSR2 POP BRK &no-and
78
-	[ LIT '| ] NEQk NIP ,&no-ora JCN ;do-ora JSR2 POP BRK &no-ora
79
-	[ LIT '^ ] NEQk NIP ,&no-eor JCN ;do-eor JSR2 POP BRK &no-eor
80
-	[ LIT '~ ] NEQk NIP ,&no-not JCN ;do-not JSR2 POP BRK &no-not
77
+	[ LIT "& ] NEQk NIP ,&no-and JCN ;do-and JSR2 POP BRK &no-and
78
+	[ LIT "| ] NEQk NIP ,&no-ora JCN ;do-ora JSR2 POP BRK &no-ora
79
+	[ LIT "^ ] NEQk NIP ,&no-eor JCN ;do-eor JSR2 POP BRK &no-eor
80
+	[ LIT "~ ] NEQk NIP ,&no-not JCN ;do-not JSR2 POP BRK &no-not
81 81
 	( value )
82 82
 	;key-value JSR2 ;push-input JSR2
83 83
 
... ...
@@ -131,7 +131,7 @@ BRK
131 131
 
132 132
 	( y ) .modpad-frame/y LDZ2 SUB2 #24 SFT2 NIP STH
133 133
 	( x ) .modpad-frame/x LDZ2 SUB2 #04 SFT2
134
-	( lookup ) STHr ADD #10 SFT2 ;keypad/ops ADD2 LDA2 JSR2
134
+	( lookup ) STHr ADD DUP2 ADD2 ;keypad/ops ADD2 LDA2 JSR2
135 135
 	;draw-bitpad JSR2
136 136
 	#00 .Mouse/state DEO POP2
137 137
 
... ...
@@ -141,7 +141,7 @@ BRK
141 141
 
142 142
 	POP2
143 143
 	.input-frame/x LDZ2 SUB2 #03 SFT2 NIP
144
-	DUP #00 NEQ ,&no-push JCN
144
+	DUP ,&no-push JCN
145 145
 		;do-push JSR2 &no-push
146 146
 	DUP #01 NEQ ,&no-pop JCN
147 147
 		;do-pop JSR2 &no-pop
... ...
@@ -183,7 +183,7 @@ JMP2r
183 183
 
184 184
 @push ( value* -- )
185 185
 
186
-	( store ) .stack/length LDZ #10 SFT .stack/items ADD STZ2
186
+	( store ) .stack/length LDZ DUP ADD .stack/items ADD STZ2
187 187
 	( INCZ ) .stack/length LDZk INC SWP STZ
188 188
 	( reset ) #0000 .input/value STZ2
189 189
 	#00 ;draw-input JSR2
... ...
@@ -193,8 +193,8 @@ JMP2r
193 193
 
194 194
 @pop ( -- value* )
195 195
 
196
-	.stack/length LDZ #01 SUB #10 SFT .stack/items ADD LDZ2
197
-	( clear ) #0000 [ .stack/length LDZ #01 SUB #10 SFT .stack/items ADD ] STZ2
196
+	.stack/length LDZ #01 SUB DUP ADD .stack/items ADD LDZ2
197
+	( clear ) #0000 [ .stack/length LDZ #01 SUB DUP ADD .stack/items ADD ] STZ2
198 198
 	( DECZ ) .stack/length LDZk #01 SUB SWP STZ
199 199
 	#01 ;draw-input JSR2
200 200
 	;draw-stack JSR2
... ...
@@ -396,7 +396,7 @@ JMP2r
396 396
 		.input-frame/x LDZ2 #0018 ADD2 .Screen/x DEO2
397 397
 		#00 OVR #30 SFT2 .input-frame/y LDZ2 ADD2 #004c SUB2 .Screen/y DEO2
398 398
 		( color ) DUP #08 .stack/length LDZ SUB #01 SUB GTH STH
399
-		( value ) DUP #10 SFT .stack/items ADD [ #10 .stack/length LDZ #10 SFT SUB SUB ] LDZ2
399
+		( value ) DUP DUP ADD .stack/items ADD [ #10 .stack/length LDZ DUP ADD SUB SUB ] LDZ2
400 400
 			STHr ;draw-number JSR2
401 401
 		INC GTHk ,&loop JCN
402 402
 	POP2
... ...
@@ -47,7 +47,7 @@
47 47
 		#006c ADD2 .time/y STZ2
48 48
 	;draw-watchface JSR2
49 49
 	( time buffer )
50
-	LIT ':
50
+	LIT ":
51 51
 		DUP .buf/s1 STZ
52 52
 		.buf/s2 STZ
53 53
 
... ...
@@ -121,8 +121,8 @@ JMP2r
121 121
 		DUP ;is-lc JSR2 ,&lc JCN
122 122
 		DUP ;is-uc JSR2 ,&uc JCN
123 123
 		DUP ;is-num JSR2 ,&num JCN
124
-		DUP LIT '/ EQU ,&slash JCN
125
-		DUP LIT ': EQU ,&colon JCN
124
+		DUP LIT "/ EQU ,&slash JCN
125
+		DUP LIT ": EQU ,&colon JCN
126 126
 		POP ;font/blank
127 127
 		&end
128 128
 		.Screen/addr DEO2
... ...
@@ -144,15 +144,15 @@ JMP2r
144 144
 	( load ) STH ,&y STR2 ,&x STR2 .line/y STZ2 .line/x STZ2
145 145
 	,&x LDR2 .line/x LDZ2 SUB2 ;abs2 JSR2 .line/dx STZ2
146 146
 	#0000 ,&y LDR2 .line/y LDZ2 SUB2 ;abs2 JSR2 SUB2 .line/dy STZ2
147
-	#ffff #00 .line/x LDZ2 ,&x LDR2 ;lts2 JSR2 #10 SFT2 ADD2 ,&sx STR2
148
-	#ffff #00 .line/y LDZ2 ,&y LDR2 ;lts2 JSR2 #10 SFT2 ADD2 ,&sy STR2
147
+	#ffff #00 .line/x LDZ2 ,&x LDR2 ;lts2 JSR2 DUP2 ADD2 ADD2 ,&sx STR2
148
+	#ffff #00 .line/y LDZ2 ,&y LDR2 ;lts2 JSR2 DUP2 ADD2 ADD2 ,&sy STR2
149 149
 	.line/dx LDZ2 .line/dy LDZ2 ADD2 .line/e1 STZ2
150 150
 	&loop
151 151
 		.line/x LDZ2 DUP2 .Screen/x DEO2 [ LIT2 &x $2 ] EQU2
152 152
 		.line/y LDZ2 DUP2 .Screen/y DEO2 [ LIT2 &y $2 ] EQU2
153 153
 			STHkr .Screen/pixel DEO
154 154
 			AND ,&end JCN
155
-		.line/e1 LDZ2 #10 SFT2 DUP2
155
+		.line/e1 LDZ2 DUP2 ADD2 DUP2
156 156
 		.line/dy LDZ2 ;lts2 JSR2 ,&skipy JCN
157 157
 			.line/e1 LDZ2 .line/dy LDZ2 ADD2 .line/e1 STZ2
158 158
 			.line/x LDZ2 [ LIT2 &sx $2 ] ADD2 .line/x STZ2
... ...
@@ -172,12 +172,12 @@ JMP2r
172 172
 	#3c00
173 173
 	&loop
174 174
 		( dots )
175
-		#00 OVR #10 SFT2 ;table ADD2 LDA2
175
+		#00 OVRk ADD2 ;table ADD2 LDA2
176 176
 			#0018 ;circle JSR2
177 177
 			.Screen/x DEO2 .Screen/y DEO2 #01 .Screen/pixel DEO
178 178
 		( markers )
179 179
 		DUP #05 ;mod JSR2 ,&no-marker JCN
180
-			#00 OVR #10 SFT2 ;table ADD2 LDA2
180
+			#00 OVRk ADD2 ;table ADD2 LDA2
181 181
 			STH2k #0018 ;circle JSR2 SWP2
182 182
 			STH2r #001c ;circle JSR2 SWP2
183 183
 				#01 ;draw-line JSR2
... ...
@@ -189,14 +189,14 @@ JMP2r
189 189
 
190 190
 @make-needles ( -- )
191 191
 
192
-	[ #00 .DateTime/second DEI #1e ADD #3c ;mod JSR2 ] #10 SFT2 ;table ADD2 LDA2
192
+	[ #00 .DateTime/second DEI #1e ADD #3c ;mod JSR2 ] DUP2 ADD2 ;table ADD2 LDA2
193 193
 		#00a0 ,circle JSR .needles/zx STZ2 .needles/zy STZ2
194
-	[ #00 .DateTime/second DEI ] #10 SFT2 ;table ADD2 LDA2
194
+	[ #00 .DateTime/second DEI ] DUP2 ADD2 ;table ADD2 LDA2
195 195
 		#0020 ,circle JSR .needles/sx STZ2 .needles/sy STZ2
196
-	[ #00 .DateTime/minute DEI ] #10 SFT2 ;table ADD2 LDA2
196
+	[ #00 .DateTime/minute DEI ] DUP2 ADD2 ;table ADD2 LDA2
197 197
 		#0022 ,circle JSR .needles/mx STZ2 .needles/my STZ2
198 198
 	[ #00 .DateTime/hour DEI #0c ;mod JSR2 #20 SFTk NIP ADD ]
199
-	( minute offset ) [ #00 .DateTime/minute DEI #0f DIV ADD2 ] #10 SFT2 ;table ADD2 LDA2
199
+	( minute offset ) [ #00 .DateTime/minute DEI #0f DIV ADD2 ] DUP2 ADD2 ;table ADD2 LDA2
200 200
 		#002a ,circle JSR .needles/hx STZ2 .needles/hy STZ2
201 201
 
202 202
 JMP2r
... ...
@@ -219,7 +219,7 @@ JMP2r
219 219
 
220 220
 JMP2r
221 221
 
222
-@mod DUP2 DIV MUL SUB JMP2r
222
+@mod DIVk MUL SUB JMP2r
223 223
 @abs2 DUP2 #0f SFT2 EQU #05 JCN #0000 SWP2 SUB2 JMP2r
224 224
 @lts2 #8000 STH2k ADD2 SWP2 STH2r ADD2 GTH2 JMP2r
225 225
 @gts2 #8000 STH2k ADD2 SWP2 STH2r ADD2 LTH2 JMP2r
226 226
deleted file mode 100644
... ...
@@ -1,705 +0,0 @@
1
-( UXN-DOS )
2
-
3
-%+  { ADD }  %-  { SUB }  %*  { MUL }  %/  { DIV }
4
-%<  { LTH }  %>  { GTH }  %=  { EQU }  %!  { NEQ }
5
-%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 }
6
-%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 }
7
-
8
-%HALT   { #010f DEO }
9
-%EMIT   { #18 DEO }
10
-%PRINT  { ;print-str JSR2 #0a EMIT }
11
-%DEBUG  { ;print-hex/byte JSR2 #0a EMIT }
12
-%DEBUG2 { ;print-hex JSR2 #0a EMIT }
13
-
14
-%2*  { #10 SFT } %2/  { #01 SFT } %2**  { #10 SFT2 } %2//  { #01 SFT2 }
15
-%4*  { #20 SFT } %4/  { #02 SFT } %4**  { #20 SFT2 } %4//  { #02 SFT2 }
16
-%8*  { #30 SFT } %8/  { #03 SFT } %8**  { #30 SFT2 } %8//  { #03 SFT2 }
17
-%10* { #40 SFT } %10/ { #04 SFT } %10** { #40 SFT2 } %10// { #04 SFT2 }
18
-%20* { #50 SFT } %20/ { #05 SFT } %20** { #50 SFT2 } %20// { #05 SFT2 }
19
-
20
-%2MOD  { #01 AND } %2MOD2  { #0001 AND2 }
21
-%4MOD  { #03 AND } %4MOD2  { #0003 AND2 }
22
-%8MOD  { #07 AND } %8MOD2  { #0007 AND2 }
23
-%10MOD { #0f AND } %10MOD2 { #000f AND2 }
24
-
25
-%MOD  { DIVk MUL SUB }
26
-%MOD2 { DIV2k MUL2 SUB2 }
27
-
28
-%AUTO-X      { #01 .Screen/auto DEO }
29
-%AUTO-Y      { #02 .Screen/auto DEO }
30
-%AUTO-XY     { #03 .Screen/auto DEO }
31
-%AUTO-ADDR   { #04 .Screen/auto DEO }
32
-%AUTO-XADDR  { #05 .Screen/auto DEO }
33
-%AUTO-YADDR  { #06 .Screen/auto DEO }
34
-%AUTO-XYADDR { #07 .Screen/auto DEO }
35
-%RELEASE-MOUSE { #0096 DEO }
36
-
37
-%RTN { JMP2r }
38
-
39
-%WIDTH { #38 }
40
-%HEIGHT { #20 }
41
-%PAD { #0018 }
42
-
43
-( devices )
44
-
45
-|00 @System     &vector $2 &wst      $1 &rst    $1 &eaddr  $2 &ecode  $1 &pad     $1 &r       $2 &g      $2 &b     $2 &debug  $1 &halt $1
46
-|20 @Screen     &vector $2 &width   $2 &height $2 &auto  $1 &pad   $1 &x     $2 &y $2 &addr $2 &pixel $1 &sprite $1
47
-|80 @Controller &vector $2 &button $1 &key    $1
48
-|a0 @File       &vector $2 &success  $2 &stat   $2 &delete $1 &append $1 &name    $2 &length  $2 &read   $2 &write $2
49
-|c0 @DateTime   [ &year   $2 &month    $1 &day    $1 &hour  $1 &minute $1 &second $1 &dotw $1 &doty $2 &isdst $1 ]
50
-
51
-( variables )
52
-
53
-|0000
54
-
55
-@buffer $3
56
-	&input $80
57
-@path $40
58
-@frame $1
59
-
60
-( init )
61
-
62
-|0100 ( -> )
63
-
64
-	( theme ) 
65
-	#50f8 .System/r DEO2 
66
-	#c0f8 .System/g DEO2 
67
-	#a0f8 .System/b DEO2
68
-
69
-	( vectors ) 
70
-	;on-button .Controller/vector DEO2
71
-
72
-	( resize )
73
-	#00 WIDTH 8** PAD 2** ++ .Screen/width DEO2
74
-	#00 HEIGHT 8** PAD 2** ++ .Screen/height DEO2
75
-
76
-	#04 ;draw-input JSR2
77
-
78
-	LIT '. .path STZ
79
-
80
-	;clear JSR2
81
-
82
-BRK
83
-
84
-@on-button ( -> )
85
-
86
-	.Controller/key DEI
87
-	DUP #00 ! ,&no-null JCN
88
-		POP BRK
89
-		&no-null
90
-	DUP #0d ! ,&no-enter JCN
91
-		#00 ;draw-input JSR2
92
-		;validate JSR2
93
-		#01 ;draw-input JSR2
94
-		.frame LDZk INC SWP STZ
95
-		&no-enter
96
-	DUP #08 ! ,&no-backspace JCN
97
-		#00 ;draw-input JSR2
98
-		;buffer ;spop JSR2
99
-		#04 ;draw-input JSR2
100
-		.frame LDZk INC SWP STZ
101
-		&no-backspace
102
-	DUP STHk #1f > STHr #7b < #0101 !! ,&no-valid JCN
103
-	;buffer ;slen JSR2 #007f >> ,&no-valid JCN
104
-		STHk ;buffer STHr ;sput JSR2
105
-		#04 ;draw-input JSR2
106
-		.frame LDZk INC SWP STZ
107
-		&no-valid
108
-	POP
109
-
110
-BRK
111
-
112
-@clear ( -- )
113
-
114
-	PAD .Screen/x DEO2
115
-	PAD .Screen/y DEO2
116
-	;&blank-icn .Screen/addr DEO2
117
-	AUTO-X
118
-	HEIGHT #00
119
-	&ver
120
-		WIDTH #00
121
-		&hor
122
-			#02 .Screen/sprite DEO
123
-			INC GTHk ,&hor JCN
124
-		POP2
125
-		PAD .Screen/x DEO2
126
-		.Screen/y DEI2k #0008 ++ ROT DEO2
127
-		INC GTHk ,&ver JCN
128
-	POP2
129
-	#00 .Screen/auto DEO
130
-
131
-RTN
132
-	&blank-icn 8000 0000 0000 0000
133
-
134
-( DOS )
135
-
136
-@validate ( -- )
137
-	
138
-	;clear JSR2
139
-
140
-	PAD .Screen/x DEO2
141
-	PAD .Screen/y DEO2
142
-
143
-	;get-cmd JSR2 ;commands-func ++ LDA2 JSR2
144
-	;buffer #0080 ;mclr JSR2
145
-
146
-JMP2r
147
-
148
-@get-cmd ( -- cmd* )
149
-
150
-	;commands/end ;commands
151
-	&loop
152
-		LDA2k ;buffer ;scmp-seg JSR2 #00 = ,&continue JCN
153
-			NIP2 ;commands -- RTN
154
-			&continue
155
-		INC2 INC2 GTH2k ,&loop JCN
156
-	POP2 ;commands --
157
-
158
-RTN
159
-
160
-@cmd-ls "ls $1 &docs "list 20 "folder 20 "content $1 &func
161
-
162
-	( load )
163
-	;path .File/name DEO2
164
-	#8000 .File/length DEO2
165
-	;view .File/read DEO2
166
-
167
-	;view #01 ;draw-tx JSR2
168
-
169
-RTN
170
-
171
-@cmd-mk "mk $1 &docs "make 20 "file $1 &func
172
-
173
-	;buffer/input ;file-exists JSR2 #01 ! ,&no-exists JCN
174
-		;error-exists-txt ;buffer/input ;draw-message JSR2 RTN
175
-		&no-exists
176
-	( save )
177
-	;buffer/input .File/name DEO2
178
-	#0001 .File/length DEO2
179
-	;&buf .File/write DEO2
180
-	( message ) 
181
-	;make-success-txt ;buffer/input ;draw-message JSR2
182
-
183
-RTN
184
-	&buf 0a
185
-
186
-@cmd-cp "cp $1 &docs "copy 20 "file 20 "to 20 "name $1 &func
187
-
188
-	( b ) ;buffer/input #20 ;next-char JSR2 STH2k INC2
189
-	#00 STH2r STA
190
-	( a ) ;buffer/input
191
-	( a exists )
192
-	;buffer/input ;file-exists JSR2 ,&valid JCN
193
-		;error-unexists-txt ;buffer/input ;draw-message JSR2 POP2 POP2 RTN
194
-		&valid
195
-	( b unexists )
196
-	OVR2 ;file-exists JSR2 #00 = ,&available JCN
197
-		OVR2 ;error-exists-txt SWP2 ;draw-message JSR2 POP2 POP2 RTN
198
-		&available
199
-	( load )
200
-	.File/name DEO2
201
-	#8000 .File/length DEO2
202
-	;view .File/read DEO2
203
-	( save )
204
-	DUP2 .File/name DEO2
205
-	#8000 .File/length DEO2
206
-	;view .File/write DEO2
207
-	( message ) 
208
-	;copy-success-txt SWP2 ;draw-message JSR2
209
-
210
-RTN
211
-
212
-@cmd-mv "mv $1 &docs "move 20 "file 20 "to 20 "name $1
213
-	&func
214
-
215
-	( todo )
216
-
217
-RTN
218
-
219
-@cmd-rm "rm $1 &docs "remove 20 "file $1
220
-	&func
221
-
222
-	( exists )
223
-	;buffer/input ;file-exists JSR2 ,&valid JCN
224
-		;error-unexists-txt ;buffer/input ;draw-message JSR2 RTN
225
-		&valid
226
-	( delete )
227
-	;buffer/input .File/name DEO2
228
-	#01 .File/delete DEO
229
-	( message ) 
230
-	;remove-success-txt ;buffer/input ;draw-message JSR2
231
-
232
-RTN
233
-
234
-@cmd-tx "tx $1 &docs "display 20 "file 20 "as 20 "text $1
235
-	&func
236
-
237
-	( exists )
238
-	;buffer/input ;file-exists JSR2 ,&valid JCN
239
-		;error-unexists-txt ;buffer/input ;draw-message JSR2 RTN
240
-		&valid
241
-	( load )
242
-	;buffer/input .File/name DEO2
243
-	#8000 .File/length DEO2
244
-	;view .File/read DEO2
245
-	( message )
246
-	;view #01 ;draw-tx JSR2
247
-
248
-RTN
249
-
250
-@cmd-hx "hx $1 &docs "display 20 "file 20 "as 20 "hex $1
251
-	&func
252
-
253
-	( exists )
254
-	;buffer/input ;file-exists JSR2 ,&valid JCN
255
-		;error-unexists-txt ;buffer/input ;draw-message JSR2 RTN
256
-		&valid
257
-	( load )
258
-	;buffer/input .File/name DEO2
259
-	#8000 .File/length DEO2
260
-	;view .File/read DEO2
261
-	( message )
262
-	AUTO-YADDR
263
-	.File/success DEI2 #0000
264
-	&loop
265
-		DUP2 ;view ++ LDA #01 ;draw-hex JSR2
266
-		( make shorts )
267
-		DUP2 #0001 AND2 #0000 == ,&no-short JCN
268
-			.Screen/x DEI2k #0008 ++ ROT DEO2
269
-			&no-short
270
-		( make lines )
271
-		DUP2 #000f AND2 #000f !! ,&no-lines JCN
272
-			.Screen/y DEI2k #0010 ++ ROT DEO2
273
-			PAD .Screen/x DEO2
274
-			.Screen/y DEI2 .Screen/height DEI2 PAD -- #0010 -- >> ,&end JCN
275
-			&no-lines
276
-		INC2 GTH2k ,&loop JCN
277
-	&end
278
-	POP2 POP2
279
-
280
-RTN
281
-
282
-@cmd-do "do $1 &docs "run 20 "file 20 "as 20 "rom $1
283
-	&func
284
-
285
-	( release inputs )
286
-	#0000 .Controller/button DEO2
287
-
288
-	;buffer/input
289
-	DUP2 ;check-rom JSR2 ,&valid JCN
290
-		PAD .Screen/x DEO2
291
-		PAD .Screen/y DEO2
292
-		;&invalid-txt #02 ;draw-str JSR2
293
-		#01 ;draw-str JSR2
294
-		RTN
295
-		&valid
296
-	;load-rom JSR2 
297
-
298
-RTN
299
-	&invalid-txt "invalid 20 "rom: $1
300
-
301
-@cmd-tm "tm $1 &docs "display 20 "time $1
302
-	&func
303
-
304
-	#00 .DateTime/month DEI 4* ;month-txt ++ #01 ;draw-str JSR2
305
-	#20 #01 ;draw-char JSR2
306
-	.DateTime/day DEI #01 ;draw-dec JSR2
307
-	#20 #01 ;draw-char JSR2
308
-	#00 .DateTime/dotw DEI 4* ;week-txt ++ #01 ;draw-str JSR2
309
-	#20 #01 ;draw-char JSR2
310
-	.DateTime/hour DEI #01 ;draw-dec JSR2
311
-	LIT ': #01 ;draw-char JSR2
312
-	.DateTime/minute DEI #01 ;draw-dec JSR2
313
-	LIT ': #01 ;draw-char JSR2
314
-	.DateTime/second DEI #01 ;draw-dec JSR2
315
-
316
-RTN
317
-
318
-@cmd-1b "1b $1 &docs "display 20 "1bit 20 "file $1
319
-	&func
320
-
321
-	( todo )
322
-
323
-RTN
324
-
325
-@cmd-2b "2b $1 &docs "display 20 "2bit 20 "file $1
326
-	&func
327
-
328
-	( todo )
329
-
330
-RTN
331
-
332
-@cmd-sn "sn $1 &docs "play 20 "sound 20 "file $1
333
-	&func
334
-
335
-	( todo )
336
-
337
-RTN
338
-
339
-@cmd-?? "-- $1 &docs "display 20 "commands $1
340
-	&func
341
-
342
-	;&help-txt #01 ;draw-tx JSR2
343
-	PAD #0010 ++ .Screen/y DEO2
344
-
345
-	;commands/end ;commands
346
-	&loop
347
-		PAD .Screen/x DEO2
348
-		( name ) LDA2k #04 ;draw-str JSR2
349
-		PAD #0020 ++ .Screen/x DEO2
350
-		( docs ) DUP2 ;commands -- ;commands-docs ++ LDA2 #01 ;draw-str JSR2
351
-		.Screen/y DEI2k #0010 ++ ROT DEO2
352
-		INC2 INC2 GTH2k ,&loop JCN
353
-	POP2 POP2
354
-
355
-RTN
356
-	&help-txt "Commands: $1
357
-
358
-@commands
359
-	:cmd-ls :cmd-mk :cmd-cp :cmd-mv :cmd-rm 
360
-	:cmd-hx :cmd-tx :cmd-do :cmd-tm
361
-	:cmd-1b :cmd-2b :cmd-sn
362
-	&end :cmd-??
363
-@commands-docs
364
-	:cmd-ls/docs :cmd-mk/docs :cmd-cp/docs :cmd-mv/docs :cmd-rm/docs 
365
-	:cmd-hx/docs :cmd-tx/docs :cmd-do/docs :cmd-tm/docs
366
-	:cmd-1b/docs :cmd-2b/docs :cmd-sn/docs
367
-	&end :cmd-??/docs
368
-@commands-func
369
-	:cmd-ls/func :cmd-mk/func :cmd-cp/func :cmd-mv/func :cmd-rm/func 
370
-	:cmd-hx/func :cmd-tx/func :cmd-do/func :cmd-tm/func
371
-	:cmd-1b/func :cmd-2b/func :cmd-sn/func
372
-	&end :cmd-??/func
373
-
374
-@file-exists ( name* -- bool )
375
-
376
-	.File/name DEO2
377
-	#0040 .File/length DEO2
378
-	;&buf .File/stat DEO2
379
-	.File/success DEI2 #0000 >>
380
-
381
-RTN
382
-	&buf $40
383
-
384
-( gui )
385
-
386
-@draw-input ( color -- )
387
-
388
-	AUTO-YADDR
389
-	STH
390
-	PAD .Screen/x DEO2
391
-	.Screen/height DEI2 PAD -- .Screen/y DEO2
392
-
393
-	( flower )
394
-	;flowers-icn #00 .frame LDZ #06 MOD 20** ++ .Screen/addr DEO2
395
-	#81 .Screen/sprite DEOk DEO
396
-	.Screen/y DEI2 #0010 -- .Screen/y DEO2
397
-	.Screen/x DEI2 #0008 ++ .Screen/x DEO2
398
-
399
-	#20 #00 ;draw-char JSR2
400
-
401
-	;buffer STHkr ;draw-str JSR2
402
-
403
-	;cursor-icn .Screen/addr DEO2
404
-	STHr .Screen/sprite DEOk DEO
405
-	.Screen/y DEI2 #0010 -- .Screen/y DEO2
406
-	.Screen/x DEI2 #0008 ++ .Screen/x DEO2
407
-
408
-JMP2r
409
-
410
-@draw-message ( a* b* -- )
411
-
412
-	SWP2 #02 ;draw-str JSR2
413
-	#01 ;draw-str JSR2
414
-	
415
-RTN
416
-
417
-@draw-tx ( str* color -- )
418
-
419
-	AUTO-YADDR
420
-	.Screen/x DEI2 ,&anchor STR2
421
-	STH
422
-	&while
423
-		( outside view )
424
-		.Screen/x DEI2 .Screen/width DEI2 PAD -- #0010 -- >> ,&lb JCN
425
-		( linebreak )
426
-		LDAk #0a ! ,&no-lb JCN
427
-			&lb
428
-			LIT2 &anchor $2 .Screen/x DEO2
429
-			.Screen/y DEI2k #0010 ++ STH2k ROT DEO2
430
-			STH2r .Screen/height DEI2 PAD -- #0010 -- >> ,&end JCN
431
-			,&skip JMP
432
-			&no-lb
433
-		LDAk STHkr ,draw-char JSR
434
-		&skip
435
-		INC2 LDAk ,&while JCN
436
-	&end
437
-	POP2
438
-	POPr
439
-
440
-RTN
441
-
442
-@draw-dec ( byte color -- )
443
-
444
-	STH
445
-	DUP #0a DIV LIT '0 + STHkr ,draw-char JSR
446
-	#0a MOD LIT '0 + STHr ,draw-char JSR
447
-
448
-RTN
449
-
450
-@draw-hex ( byte color -- )
451
-
452
-	STH
453
-	DUP #04 SFT ,&parse JSR STHkr ,draw-char JSR
454
-	#0f AND ,&parse JSR STHr ,draw-char JSR
455
-	RTN
456
-	&parse ( value -- char )
457
-		DUP #09 > ,&above JCN
458
-			#30 + RTN
459
-		&above
460
-			#09 - #60 + RTN
461
-
462
-RTN
463
-
464
-@draw-str ( str* color -- )
465
-
466
-	AUTO-YADDR
467
-	STH
468
-	&while
469
-		LDAk STHkr ,draw-char JSR
470
-		INC2 LDAk ,&while JCN
471
-	POP2
472
-	POPr
473
-
474
-RTN
475
-
476
-@draw-char ( char color -- )
477
-
478
-	SWP
479
-	[ #20 - #00 SWP #40 SFT2 ;font ++ ] .Screen/addr DEO2
480
-	.Screen/sprite DEOk DEO
481
-	.Screen/y DEI2 #0010 -- .Screen/y DEO2
482
-	.Screen/x DEI2 #0008 ++ .Screen/x DEO2
483
-
484
-RTN
485
-
486
-( utils )
487
-
488
-@next-char ( addr* char -- addr* )
489
-
490
-	STH
491
-	&while
492
-		LDAk STHkr = ,&end JCN
493
-		LDAk #00 = ,&end JCN
494
-		INC2 LDAk ,&while JCN
495
-	&end
496
-		POPr
497
-
498
-RTN
499
-
500
-@slen ( str* -- len* )
501
-
502
-	DUP2 ,scap JSR SWP2 --
503
-
504
-RTN
505
-
506
-@scap ( str* -- str-end* )
507
-
508
-	( clamp ) LDAk #00 ! JMP RTN
509
-	&while INC2 LDAk ,&while JCN
510
-
511
-RTN
512
-
513
-@sput ( str* char -- )
514
-
515
-	ROT ROT ,scap JSR STA
516
-
517
-RTN
518
-
519
-@spop ( str* -- )
520
-
521
-	( clamp ) LDAk #00 ! JMP RTN
522
-	#00 ROT ROT ,scap JSR #0001 -- STA
523
-
524
-RTN
525
-
526
-@scmp-seg ( a* b* -- flag )
527
-
528
-	STH2
529
-	&loop
530
-		LDAk LDAkr STHr = ,&not-diff JCN
531
-			POP2 POP2r #00 RTN
532
-			&not-diff
533
-		INC2k LDA #00 ! ,&continue JCN
534
-			POP2 POP2r #01 RTN
535
-			&continue
536
-		INC2 INC2r
537
-		,&loop JMP
538
-	POP2 POP2r #00
539
-
540
-RTN
541
-
542
-@mclr ( addr* len* -- )
543
-
544
-	OVR2 ++ SWP2
545
-	&loop
546
-		STH2k #00 STH2r STA
547
-		INC2 GTH2k ,&loop JCN
548
-	POP2 POP2
549
-
550
-JMP2r
551
-
552
-@print-hex ( value* -- )
553
-
554
-	SWP ,&byte JSR 
555
-	&byte ( byte -- )
556
-		STHk #04 SFT ,&parse JSR #18 DEO
557
-		STHr #0f AND ,&parse JSR #18 DEO
558
-	JMP2r
559
-	&parse ( byte -- char ) DUP #09 GTH ,&above JCN #30 ADD JMP2r 
560
-	&above #57 ADD JMP2r
561
-
562
-JMP2r
563
-
564
-@print-str ( string* -- )
565
-
566
-	#0001 SUB2 
567
-	&while
568
-		INC2 LDAk DUP #18 DEO ,&while JCN 
569
-	POP2
570
-
571
-JMP2r
572
-
573
-@error-exists-txt "file_exists: 20 $1
574
-@error-unexists-txt "file_does_not_exists: 20 $1
575
-
576
-@make-success-txt "made: 20 $1
577
-@copy-success-txt "copied: 20 $1
578
-@remove-success-txt "removed: 20 $1
579
-
580
-@week-txt
581
-	"Sun $1 "Mon $1 "Tue $1 "Wed $1 "Thu $1 "Fri $1 
582
-	"Sat $1
583
-
584
-@month-txt
585
-	"Jan $1 "Feb $1 "Mar $1 "Apr $1 "May $1 "Jun $1
586
-	"Jul $1 "Aug $1 "Sep $1 "Oct $1 "Nov $1 "Dec $1
587
-
588
-@cursor-icn
589
-	aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55
590
-	aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55
591
-
592
-@flowers-icn ( by elioat )
593
-	0000 0020 1408 0810 40a0 4205 0200 40a0
594
-	0810 103c 7e7e 3c18 4205 0234 7e7e 3c18
595
-	0000 0020 100c 0818 0040 a042 0522 5024
596
-	0008 083c 7e7e 3c18 0a04 002c 7e7e 3c18
597
-	0000 0000 0000 000c 0000 0000 0000 0000
598
-	1c10 083c 7e7e 3c18 0000 002c 7e7e 3c18
599
-	0000 0000 0000 0004 0000 0000 0002 0502
600
-	0810 103c 7e7e 3c18 0000 0034 7e7e 3c18
601
-	0000 0000 0000 0010 0000 0000 0020 5225
602
-	080c 083c 7e7e 3c18 0200 002c 7e7e 3c18
603
-	0000 0000 0800 1800 0000 040a 2450 240a
604
-	1010 103c 7e7e 3c18 0400 0034 7e7e 3c18
605
-
606
-@font ( terminus01x02 )
607
-	0000 0000 0000 0000 0000 0000 0000 0000
608
-	0000 183c 3c3c 1818 1800 1818 0000 0000
609
-	0066 6666 2400 0000 0000 0000 0000 0000
610
-	0000 006c 6cfe 6c6c 6cfe 6c6c 0000 0000
611
-	1818 7cc6 c2c0 7c06 0686 c67c 1818 0000
612
-	0000 0000 c2c6 0c18 3060 c686 0000 0000
613
-	0000 386c 6c38 76dc cccc cc76 0000 0000
614
-	0030 3030 6000 0000 0000 0000 0000 0000
615
-	0000 0c18 3030 3030 3030 180c 0000 0000
616
-	0000 3018 0c0c 0c0c 0c0c 1830 0000 0000
617
-	0000 0000 0066 3cff 3c66 0000 0000 0000
618
-	0000 0000 0018 187e 1818 0000 0000 0000
619
-	0000 0000 0000 0000 0018 1818 3000 0000
620
-	0000 0000 0000 00fe 0000 0000 0000 0000
621
-	0000 0000 0000 0000 0000 1818 0000 0000
622
-	0000 0000 0206 0c18 3060 c080 0000 0000
623
-	0000 386c c6c6 d6d6 c6c6 6c38 0000 0000
624
-	0000 1838 7818 1818 1818 187e 0000 0000
625
-	0000 7cc6 060c 1830 60c0 c6fe 0000 0000
626
-	0000 7cc6 0606 3c06 0606 c67c 0000 0000
627
-	0000 0c1c 3c6c ccfe 0c0c 0c1e 0000 0000
628
-	0000 fec0 c0c0 fc06 0606 c67c 0000 0000
629
-	0000 3860 c0c0 fcc6 c6c6 c67c 0000 0000
630
-	0000 fec6 0606 0c18 3030 3030 0000 0000
631
-	0000 7cc6 c6c6 7cc6 c6c6 c67c 0000 0000
632
-	0000 7cc6 c6c6 7e06 0606 0c78 0000 0000
633
-	0000 0000 1818 0000 0018 1800 0000 0000
634
-	0000 0000 1818 0000 0018 1830 0000 0000
635
-	0000 0006 0c18 3060 3018 0c06 0000 0000
636
-	0000 0000 007e 0000 7e00 0000 0000 0000
637
-	0000 0060 3018 0c06 0c18 3060 0000 0000
638
-	0000 7cc6 c60c 1818 1800 1818 0000 0000
639
-	0000 007c c6c6 dede dedc c07c 0000 0000
640
-	0000 1038 6cc6 c6fe c6c6 c6c6 0000 0000
641
-	0000 fc66 6666 7c66 6666 66fc 0000 0000
642
-	0000 3c66 c2c0 c0c0 c0c2 663c 0000 0000
643
-	0000 f86c 6666 6666 6666 6cf8 0000 0000
644
-	0000 fe66 6268 7868 6062 66fe 0000 0000
645
-	0000 fe66 6268 7868 6060 60f0 0000 0000
646
-	0000 3c66 c2c0 c0de c6c6 663a 0000 0000
647
-	0000 c6c6 c6c6 fec6 c6c6 c6c6 0000 0000
648
-	0000 3c18 1818 1818 1818 183c 0000 0000
649
-	0000 1e0c 0c0c 0c0c cccc cc78 0000 0000
650
-	0000 e666 666c 7878 6c66 66e6 0000 0000
651
-	0000 f060 6060 6060 6062 66fe 0000 0000
652
-	0000 c6ee fefe d6c6 c6c6 c6c6 0000 0000
653
-	0000 c6e6 f6fe dece c6c6 c6c6 0000 0000
654
-	0000 7cc6 c6c6 c6c6 c6c6 c67c 0000 0000
655
-	0000 fc66 6666 7c60 6060 60f0 0000 0000
656
-	0000 7cc6 c6c6 c6c6 c6d6 de7c 0c0e 0000
657
-	0000 fc66 6666 7c6c 6666 66e6 0000 0000
658
-	0000 7cc6 c660 380c 06c6 c67c 0000 0000
659
-	0000 7e7e 5a18 1818 1818 183c 0000 0000
660
-	0000 c6c6 c6c6 c6c6 c6c6 c67c 0000 0000
661
-	0000 c6c6 c6c6 c6c6 c66c 3810 0000 0000
662
-	0000 c6c6 c6c6 d6d6 d6fe ee6c 0000 0000
663
-	0000 c6c6 6c7c 3838 7c6c c6c6 0000 0000
664
-	0000 6666 6666 3c18 1818 183c 0000 0000
665
-	0000 fec6 860c 1830 60c2 c6fe 0000 0000
666
-	0000 3c30 3030 3030 3030 303c 0000 0000
667
-	0000 0080 c0e0 7038 1c0e 0602 0000 0000
668
-	0000 3c0c 0c0c 0c0c 0c0c 0c3c 0000 0000
669
-	1038 6cc6 0000 0000 0000 0000 0000 0000
670
-	0000 0000 0000 0000 0000 0000 00ff 0000
671
-	3030 1800 0000 0000 0000 0000 0000 0000
672
-	0000 0000 0078 0c7c cccc cc76 0000 0000
673
-	0000 e060 6078 6c66 6666 667c 0000 0000
674
-	0000 0000 007c c6c0 c0c0 c67c 0000 0000
675
-	0000 1c0c 0c3c 6ccc cccc cc76 0000 0000
676
-	0000 0000 007c c6fe c0c0 c67c 0000 0000
677
-	0000 386c 6460 f060 6060 60f0 0000 0000
678
-	0000 0000 0076 cccc cccc cc7c 0ccc 7800
679
-	0000 e060 606c 7666 6666 66e6 0000 0000
680
-	0000 1818 0038 1818 1818 183c 0000 0000
681
-	0000 0606 000e 0606 0606 0606 6666 3c00
682
-	0000 e060 6066 6c78 786c 66e6 0000 0000
683
-	0000 3818 1818 1818 1818 183c 0000 0000
684
-	0000 0000 00ec fed6 d6d6 d6c6 0000 0000
685
-	0000 0000 00dc 6666 6666 6666 0000 0000
686
-	0000 0000 007c c6c6 c6c6 c67c 0000 0000
687
-	0000 0000 00dc 6666 6666 667c 6060 f000
688
-	0000 0000 0076 cccc cccc cc7c 0c0c 1e00
689
-	0000 0000 00dc 7666 6060 60f0 0000 0000
690
-	0000 0000 007c c660 380c c67c 0000 0000
691
-	0000 1030 30fc 3030 3030 361c 0000 0000
692
-	0000 0000 00cc cccc cccc cc76 0000 0000
693
-	0000 0000 0066 6666 6666 3c18 0000 0000
694
-	0000 0000 00c6 c6d6 d6d6 fe6c 0000 0000
695
-	0000 0000 00c6 6c38 3838 6cc6 0000 0000
696
-	0000 0000 00c6 c6c6 c6c6 c67e 060c f800
697
-	0000 0000 00fe cc18 3060 c6fe 0000 0000
698
-	0000 0e18 1818 7018 1818 180e 0000 0000
699
-	0000 1818 1818 0018 1818 1818 0000 0000
700
-	0000 7018 1818 0e18 1818 1870 0000 0000
701
-
702
-~projects/library/check-rom.tal
703
-~projects/library/load-rom.tal
704
-
705
-@view
... ...
@@ -191,7 +191,7 @@ JMP2r
191 191
 	#0010 .Screen/x DEO2
192 192
 	#0080 .Screen/y DEO2
193 193
 	.browser/sel LDZ #02 ;draw-byte JSR2
194
-	LIT '/ #02 ;draw-char JSR2
194
+	LIT "/ #02 ;draw-char JSR2
195 195
 	.browser/lines LDZ #01 SUB #02 ;draw-byte JSR2
196 196
 	#00 .Screen/auto DEO
197 197
 
... ...
@@ -200,7 +200,7 @@ JMP2r
200 200
 @follow-selection ( -- )
201 201
 
202 202
 	.browser/y2 LDZ2 .browser/y LDZ2 SUB2 #04 SFT2 NIP .browser/sel LDZ .browser/scroll LDZ SUB
203
-	DUP2 GTH ,&no-down JCN
203
+	GTHk ,&no-down JCN
204 204
 		.browser/scroll LDZ INC ,scroll-to JSR
205 205
 		&no-down
206 206
 	DUP2 SWP LTH ,&no-up JCN
... ...
@@ -215,7 +215,7 @@ JMP2r
215 215
 	STH
216 216
 	( more lines than visible )
217 217
 	.browser/lines LDZ .browser/y2 LDZ2 .browser/y LDZ2 SUB2 #04 SFT2 NIP
218
-	DUP2 GTH ,&can-scroll JCN
218
+	GTHk ,&can-scroll JCN
219 219
 		POPr POP2 JMP2r
220 220
 		&can-scroll
221 221
 	( less than max scroll )
... ...
@@ -321,7 +321,7 @@ JMP2r
321 321
 		EQUkr STHr #00 EQU ,&no-reached JCN
322 322
 			POP2r NIP2 ;dir/data ADD2 JMP2r
323 323
 			&no-reached
324
-		DUP2 ;dir/data ADD2 LDA #00 NEQ ,&no-lb JCN
324
+		DUP2 ;dir/data ADD2 LDA ,&no-lb JCN
325 325
 			INCr
326 326
 			&no-lb
327 327
 		INC2 GTH2k ,&loop JCN
... ...
@@ -1,40 +1,14 @@
1
-(
2
-	app/neralie : clock with arvelie date
3
-
4
-	TODO
5
-		- use splash screen when FPS calculation is unstable
6
-)
7
-
8
-%+  { ADD } %-   { SUB }              %/   { DIV }  
9
-%<  { LTH } %>   { GTH }  %=  { EQU } %!   { NEQ } 
10
-%++ { ADD2 } %-- { SUB2 }              %// { DIV2 } 
11
-%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 }  
12
-
13
-%2*  { #10 SFT } %2/  { #01 SFT }
14
-%4*  { #20 SFT } %4/  { #02 SFT }
15
-%8*  { #30 SFT } %8/  { #03 SFT }
16
-%10* { #40 SFT } %10/ { #04 SFT }
17
-%20* { #50 SFT } %20/ { #05 SFT }
18
-
19
-%2**  { #10 SFT2 } %2//  { #01 SFT2 }
20
-%4**  { #20 SFT2 } %4//  { #02 SFT2 }
21
-%8**  { #30 SFT2 } %8//  { #03 SFT2 }
22
-%10** { #40 SFT2 } %10// { #04 SFT2 }
23
-%20** { #50 SFT2 } %20// { #05 SFT2 }
24
-
25
-%MOD  { DUP2 DIV MUL SUB }
1
+( app/neralie : clock with arvelie date )
2
+
3
+%PAD { #0018 }
4
+
5
+%MOD  { DIVk MUL SUB }
26 6
 %MOD2 { DIV2k MUL2 SUB2 }
27
-%TOS { #00 SWP }
28 7
 
29 8
 %h { .DateTime/hour   DEI }
30 9
 %m { .DateTime/minute DEI }
31 10
 %s { .DateTime/second DEI }
32 11
 
33
-%1-- { #0001 -- }
34
-
35
-%PAD { #0018 }
36
-%RTN { JMP2r }
37
-
38 12
 ( devices )
39 13
 
40 14
 |00 @System [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ]
... ...
@@ -76,15 +50,15 @@
76 50
 	PAD
77 51
 	DUP2 .frame/x1 STZ2
78 52
 	DUP2 .frame/y1 STZ2
79
-	DUP2 .Screen/width DEI2 SWP2 -- #0001 -- .frame/x2 STZ2
80
-	     .Screen/height DEI2 SWP2 -- .frame/y2 STZ2
53
+	DUP2 .Screen/width DEI2 SWP2 SUB2 #0001 SUB2 .frame/x2 STZ2
54
+	     .Screen/height DEI2 SWP2 SUB2 .frame/y2 STZ2
81 55
 
82 56
 	#01 .neralie/color STZ
83 57
 
84 58
 	.frame/x1 LDZ2 .frame/x2 LDZ2
85 59
 	OVR2 OVR2 .frame/y1 LDZ2 ;h JSR2
86 60
 	          .frame/y2 LDZ2 ;h JSR2
87
-	.frame/y1 LDZ2 #0001 -- .frame/y2 LDZ2 INC2
61
+	.frame/y1 LDZ2 #0001 SUB2 .frame/y2 LDZ2 INC2
88 62
 	OVR2 OVR2 .frame/x1 LDZ2 ;v JSR2
89 63
 	          .frame/x2 LDZ2 ;v JSR2
90 64
 
... ...
@@ -108,7 +82,7 @@ BRK
108 82
 	#0120 #00 h MUL2
109 83
 	#00c0 #00 m MUL2 ADD2
110 84
 	#00f8 #00 s MUL2 ADD2
111
-	#0271 #00 .fps/next LDZ MUL2 #00 .fps/current LDZ DIV2 8** ADD2
85
+	#0271 #00 .fps/next LDZ MUL2 #00 .fps/current LDZ DIV2 #30 SFT2 ADD2
112 86
 	#01b0 ;modf JSR2 SWP2 #0017 MUL2 #03e8 DIV2 .neralie/n6 STZ POP
113 87
 
114 88
 	( add up units and tens of pulses, store in n5 and n4 )
... ...
@@ -122,29 +96,29 @@ BRK
122 96
 	#01a0 #00 h MUL2 ADD2
123 97
 	#0006 #00 m MUL2 ADD2 .neralie/n0123 STZ2
124 98
 
125
-RTN
99
+JMP2r
126 100
 
127 101
 @draw-date ( -- )
128 102
 
129 103
 	( auto x ) #01 .Screen/auto DEO
130 104
 
131
-	.Screen/width DEI2 2// #0034 -- .Screen/x DEO2
132
-	.Screen/height DEI2 #0010 -- .Screen/y DEO2
105
+	.Screen/width DEI2 #01 SFT2 #0034 SUB2 .Screen/x DEO2
106
+	.Screen/height DEI2 #0010 SUB2 .Screen/y DEO2
133 107
 
134 108
 	( arvelie )
135
-	.DateTime/year DEI2 #07d6 -- NIP 
136
-		DUP #0a DIV TOS 8** ;font-numbers ++ .Screen/addr DEO2
109
+	.DateTime/year DEI2 #07d6 SUB2 NIP
110
+		DUP #0a DIV #00 SWP #30 SFT2 ;font-numbers ADD2 .Screen/addr DEO2
137 111
 			#01 .Screen/sprite DEO
138
-		#0a MOD TOS 8** ;font-numbers ++ .Screen/addr DEO2
112
+		#0a MOD #00 SWP #30 SFT2 ;font-numbers ADD2 .Screen/addr DEO2
139 113
 			#01 .Screen/sprite DEO
140 114
 	.DateTime/doty DEI2
141
-		DUP2 #000e DIV2 8** ;font-letters ++ .Screen/addr DEO2
115
+		DUP2 #000e DIV2 #30 SFT2 ;font-letters ADD2 .Screen/addr DEO2
142 116
 			#01 .Screen/sprite DEO
143 117
 		#000e MOD2
144 118
 		DUP2 #000a DIV2 ,digit JSR
145 119
 		#000a MOD2 ,digit JSR
146 120
 
147
-	.Screen/x DEI2 #0008 ++ .Screen/x DEO2
121
+	.Screen/x DEI2 #0008 ADD2 .Screen/x DEO2
148 122
 
149 123
 	( neralie )
150 124
 	.neralie/n0123 LDZ2 
... ...
@@ -158,14 +132,14 @@ RTN
158 132
 
159 133
 	( auto none ) #00 .Screen/auto DEO
160 134
 
161
-RTN
135
+JMP2r
162 136
 
163 137
 @digit ( index* -- )
164 138
 
165
-	8** ;font-numbers ++ .Screen/addr DEO2
139
+	#30 SFT2 ;font-numbers ADD2 .Screen/addr DEO2
166 140
 	.neralie/color LDZ .Screen/sprite DEO
167 141
 	
168
-RTN
142
+JMP2r
169 143
 
170 144
 @draw-clock ( -- )
171 145
 
... ...
@@ -197,7 +171,7 @@ RTN
197 171
 
198 172
 	&next ( digit-addr number* -- next-digit-addr next-number* prev-digit* )
199 173
 	#03e8 ;modf JSR2 STH2 #000a MUL2
200
-	ROT DUP STH INC ROT ROT
174
+	ROT STHk INC ROT ROT
201 175
 	#00 STHr LDZ ADD2
202 176
 	STH2r
203 177
 	JMP2r
... ...
@@ -233,7 +207,7 @@ RTN
233 207
 	.Screen/y .lines/addr STZ
234 208
 
235 209
 	&draw-line ( v1* v2* -- )
236
-	OVR2 OVR2 LTH2 #01 JCN SWP2
210
+	LTH2k #01 JCN SWP2
237 211
 	STH2
238 212
 
239 213
 	&loop
... ...
@@ -256,8 +230,8 @@ RTN
256 230
 	#00 .fps/next STZ
257 231
 	JMP2r
258 232
 
259
-@modf ( dividend* divisor* -- remainder* quotient* )
260
-	OVR2 OVR2 DIV2 DUP2 STH2 MUL2 SUB2 STH2r JMP2r
233
+@modf ( dividend* divisor* SUB2 remainder* quotient* )
234
+	DIV2k STH2k MUL2 SUB2 STH2r JMP2r
261 235
 
262 236
 @mul2hi ( a* b* -- product-top-16-bits* )
263 237
 	(
... ...
@@ -88,14 +88,14 @@ BRK
88 88
 	#40 .Screen/sprite DEO
89 89
 
90 90
 	.Controller/key DEI
91
-	[ LIT 'a ] NEQk NIP ,&no-c JCN #30 .octave LDZ #0c MUL ADD ;play JSR2 &no-c
92
-	[ LIT 's ] NEQk NIP ,&no-d JCN #32 .octave LDZ #0c MUL ADD ;play JSR2 &no-d
93
-	[ LIT 'd ] NEQk NIP ,&no-e JCN #34 .octave LDZ #0c MUL ADD ;play JSR2 &no-e
94
-	[ LIT 'f ] NEQk NIP ,&no-f JCN #35 .octave LDZ #0c MUL ADD ;play JSR2 &no-f
95
-	[ LIT 'g ] NEQk NIP ,&no-g JCN #37 .octave LDZ #0c MUL ADD ;play JSR2 &no-g
96
-	[ LIT 'h ] NEQk NIP ,&no-a JCN #39 .octave LDZ #0c MUL ADD ;play JSR2 &no-a
97
-	[ LIT 'j ] NEQk NIP ,&no-b JCN #3b .octave LDZ #0c MUL ADD ;play JSR2 &no-b
98
-	[ LIT 'k ] NEQk NIP ,&no-c2 JCN #3c .octave LDZ #0c MUL ADD ;play JSR2 &no-c2
91
+	[ LIT "a ] NEQk NIP ,&no-c JCN #30 .octave LDZ #0c MUL ADD ;play JSR2 &no-c
92
+	[ LIT "s ] NEQk NIP ,&no-d JCN #32 .octave LDZ #0c MUL ADD ;play JSR2 &no-d
93
+	[ LIT "d ] NEQk NIP ,&no-e JCN #34 .octave LDZ #0c MUL ADD ;play JSR2 &no-e
94
+	[ LIT "f ] NEQk NIP ,&no-f JCN #35 .octave LDZ #0c MUL ADD ;play JSR2 &no-f
95
+	[ LIT "g ] NEQk NIP ,&no-g JCN #37 .octave LDZ #0c MUL ADD ;play JSR2 &no-g
96
+	[ LIT "h ] NEQk NIP ,&no-a JCN #39 .octave LDZ #0c MUL ADD ;play JSR2 &no-a
97
+	[ LIT "j ] NEQk NIP ,&no-b JCN #3b .octave LDZ #0c MUL ADD ;play JSR2 &no-b
98
+	[ LIT "k ] NEQk NIP ,&no-c2 JCN #3c .octave LDZ #0c MUL ADD ;play JSR2 &no-c2
99 99
 	[ #1b ] NEQk NIP ,&no-esc JCN #010f DEO &no-esc
100 100
 	POP
101 101
 
... ...
@@ -28,15 +28,14 @@ BRK
28 28
 	LIT2r 0000
29 29
 	&stream
30 30
 		#0000 ,&buf STR2
31
-		;&buf
32
-			DUP2 .File/read DEO2
33
-			LDA2 ,print JSR #2018 DEO
31
+		;&buf .File/read DEO2
32
+		.File/success DEI2 #0000 EQU2 ,&eof JCN
33
+		;&buf LDA2 ,print JSR #2018 DEO
34 34
 		INC2r
35 35
 		( linebreak )
36
-		STH2kr #0007 AND2 ORA ,&no-lb JCN
37
-			#0a18 DEO
38
-			&no-lb
39
-		.File/success DEI2 ORA ,&stream JCN
36
+		STH2kr #000f AND2 ORA ,&no-lb JCN
37
+			#0a18 DEO &no-lb
38
+		,&stream JMP &eof
40 39
 	POP2r
41 40
 	#010f DEO
42 41
 
... ...
@@ -2,9 +2,7 @@
2 2
 
3 3
 ( Requirements: 
4 4
 	EQU/EQU2 should put #00 or #01 on the stack
5
-	#18 DEO should output ascii character to console
6
-	#02 DEO should set location of working stack in memory
7
-	#03 DEO should set location of return stack in memory )
5
+	#18 DEO should output ascii character to console )
8 6
 
9 7
 %EMIT { #18 DEO }
10 8
 %TEST-SHORT { EQU2 #30 ADD EMIT }
... ...
@@ -12,11 +10,6 @@
12 10
 %MODE { #20 EMIT }
13 11
 %OPCODE { #0a EMIT }
14 12
 %TYPE { OPCODE OPCODE }
15
-%GET-ERR { #fe LDA }
16
-%WST { #ff }
17
-%RST { #fe }
18
-
19
-|00 @System &vector $2 &stacks &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2
20 13
 
21 14
 |0000
22 15
 
... ...
@@ -25,9 +18,6 @@
25 18
 
26 19
 |0100
27 20
 
28
-	( set stacks location ) 
29
-	WST RST .System/stacks DEO2
30
-
31 21
 	( Logic )
32 22
 
33 23
 	( EQU )
... ...
@@ -40,6 +30,16 @@
40 30
 	#01f8 #01f8 EQU2 [ #01 ] TEST-BYTE
41 31
 	#f801 #01f8 EQU2 [ #00 ] TEST-BYTE
42 32
 	#01f8 #f801 EQU2 [ #00 ] TEST-BYTE
33
+	MODE
34
+	#f8 #f8 EQUk ADD ADD [ #f1 ] TEST-BYTE
35
+	#01 #01 EQUk ADD ADD [ #03 ] TEST-BYTE
36
+	#f8 #01 EQUk ADD ADD [ #f9 ] TEST-BYTE
37
+	#01 #f8 EQUk ADD ADD [ #f9 ] TEST-BYTE
38
+	MODE
39
+	#f801 #f801 EQU2k #00 ADD2 ADD2 [ #f102 ] TEST-SHORT
40
+	#01f8 #01f8 EQU2k #00 ADD2 ADD2 [ #04f0 ] TEST-SHORT
41
+	#f801 #01f8 EQU2k #00 ADD2 ADD2 [ #f9f9 ] TEST-SHORT
42
+	#01f8 #f801 EQU2k #00 ADD2 ADD2 [ #f9f9 ] TEST-SHORT
43 43
 	OPCODE
44 44
 
45 45
 	( NEQ )
... ...
@@ -52,6 +52,16 @@
52 52
 	#01f8 #01f8 NEQ2 [ #00 ] TEST-BYTE
53 53
 	#f801 #01f8 NEQ2 [ #01 ] TEST-BYTE
54 54
 	#01f8 #f801 NEQ2 [ #01 ] TEST-BYTE
55
+	MODE
56
+	#f8 #f8 NEQk ADD ADD [ #f0 ] TEST-BYTE
57
+	#01 #01 NEQk ADD ADD [ #02 ] TEST-BYTE
58
+	#f8 #01 NEQk ADD ADD [ #fa ] TEST-BYTE
59
+	#01 #f8 NEQk ADD ADD [ #fa ] TEST-BYTE
60
+	MODE
61
+	#f801 #f801 NEQ2k #00 ADD2 ADD2 [ #f002 ] TEST-SHORT
62
+	#01f8 #01f8 NEQ2k #00 ADD2 ADD2 [ #03f0 ] TEST-SHORT
63
+	#f801 #01f8 NEQ2k #00 ADD2 ADD2 [ #faf9 ] TEST-SHORT
64
+	#01f8 #f801 NEQ2k #00 ADD2 ADD2 [ #faf9 ] TEST-SHORT
55 65
 	OPCODE
56 66
 
57 67
 	( GTH )
... ...
@@ -64,6 +74,16 @@
64 74
 	#01f8 #01f8 GTH2 [ #00 ] TEST-BYTE
65 75
 	#f801 #01f8 GTH2 [ #01 ] TEST-BYTE
66 76
 	#01f8 #f801 GTH2 [ #00 ] TEST-BYTE
77
+	MODE
78
+	#f8 #f8 GTHk ADD ADD [ #f0 ] TEST-BYTE
79
+	#01 #01 GTHk ADD ADD [ #02 ] TEST-BYTE
80
+	#f8 #01 GTHk ADD ADD [ #fa ] TEST-BYTE
81
+	#01 #f8 GTHk ADD ADD [ #f9 ] TEST-BYTE
82
+	MODE
83
+	#f801 #f801 GTH2k #00 ADD2 ADD2 [ #f002 ] TEST-SHORT
84
+	#01f8 #01f8 GTH2k #00 ADD2 ADD2 [ #03f0 ] TEST-SHORT
85
+	#f801 #01f8 GTH2k #00 ADD2 ADD2 [ #faf9 ] TEST-SHORT
86
+	#01f8 #f801 GTH2k #00 ADD2 ADD2 [ #f9f9 ] TEST-SHORT
67 87
 	OPCODE
68 88
 
69 89
 	( LTH )
... ...
@@ -76,6 +96,16 @@
76 96
 	#01f8 #01f8 LTH2 [ #00 ] TEST-BYTE
77 97
 	#f801 #01f8 LTH2 [ #00 ] TEST-BYTE
78 98
 	#01f8 #f801 LTH2 [ #01 ] TEST-BYTE
99
+	MODE
100
+	#f8 #f8 LTHk ADD ADD [ #f0 ] TEST-BYTE
101
+	#01 #01 LTHk ADD ADD [ #02 ] TEST-BYTE
102
+	#f8 #01 LTHk ADD ADD [ #f9 ] TEST-BYTE
103
+	#01 #f8 LTHk ADD ADD [ #fa ] TEST-BYTE
104
+	MODE
105
+	#f801 #f801 LTH2k #00 ADD2 ADD2 [ #f002 ] TEST-SHORT
106
+	#01f8 #01f8 LTH2k #00 ADD2 ADD2 [ #03f0 ] TEST-SHORT
107
+	#f801 #01f8 LTH2k #00 ADD2 ADD2 [ #f9f9 ] TEST-SHORT
108
+	#01f8 #f801 LTH2k #00 ADD2 ADD2 [ #faf9 ] TEST-SHORT
79 109
 	TYPE
80 110
 
81 111
 	( Arithmetic )
... ...
@@ -91,6 +121,15 @@
91 121
 	#ffff #ffff ADD2 [ #fffe ] TEST-SHORT
92 122
 	#fffe #ffff ADD2 [ #fffd ] TEST-SHORT
93 123
 	MODE
124
+	#ff #00 ADDk ADD ADD [ #fe ] TEST-BYTE
125
+	#01 #ff ADDk ADD ADD [ #00 ] TEST-BYTE
126
+	#ff #ff ADDk ADD ADD [ #fc ] TEST-BYTE
127
+	#fe #ff ADDk ADD ADD [ #fa ] TEST-BYTE
128
+	MODE
129
+	#ffff #0000 ADD2k ADD2 ADD2 [ #fffe ] TEST-SHORT
130
+	#0001 #ffff ADD2k ADD2 ADD2 [ #0000 ] TEST-SHORT
131
+	#ffff #ffff ADD2k ADD2 ADD2 [ #fffc ] TEST-SHORT
132
+	#fffe #ffff ADD2k ADD2 ADD2 [ #fffa ] TEST-SHORT
94 133
 	OPCODE
95 134
 
96 135
 	( SUB )
... ...
@@ -104,6 +143,15 @@
104 143
 	#ffff #ffff SUB2 [ #0000 ] TEST-SHORT
105 144
 	#fffe #ffff SUB2 [ #ffff ] TEST-SHORT
106 145
 	MODE
146
+	#ff #00 SUBk ADD ADD [ #fe ] TEST-BYTE
147
+	#01 #ff SUBk ADD ADD [ #02 ] TEST-BYTE
148
+	#ff #ff SUBk ADD ADD [ #fe ] TEST-BYTE
149
+	#fe #ff SUBk ADD ADD [ #fc ] TEST-BYTE
150
+	MODE
151
+	#ffff #0000 SUB2k ADD2 ADD2 [ #fffe ] TEST-SHORT
152
+	#0001 #ffff SUB2k ADD2 ADD2 [ #0002 ] TEST-SHORT
153
+	#ffff #ffff SUB2k ADD2 ADD2 [ #fffe ] TEST-SHORT
154
+	#fffe #ffff SUB2k ADD2 ADD2 [ #fffc ] TEST-SHORT
107 155
 	OPCODE
108 156
 
109 157
 	( MUL )
... ...
@@ -116,6 +164,16 @@
116 164
 	#abcd #1234 MUL2 [ #4fa4 ] TEST-SHORT
117 165
 	#8000 #0200 MUL2 [ #0000 ] TEST-SHORT
118 166
 	#2222 #0003 MUL2 [ #6666 ] TEST-SHORT
167
+	MODE
168
+	#00 #01 MULk ADD ADD [ #01 ] TEST-BYTE
169
+	#3f #e7 MULk ADD ADD [ #ff ] TEST-BYTE
170
+	#37 #3f MULk ADD ADD [ #ff ] TEST-BYTE
171
+	#10 #02 MULk ADD ADD [ #32 ] TEST-BYTE
172
+	MODE
173
+	#1000 #0003 MUL2k ADD2 ADD2 [ #4003 ] TEST-SHORT
174
+	#abcd #1234 MUL2k ADD2 ADD2 [ #0da5 ] TEST-SHORT
175
+	#8000 #0200 MUL2k ADD2 ADD2 [ #8200 ] TEST-SHORT
176
+	#2222 #0003 MUL2k ADD2 ADD2 [ #888b ] TEST-SHORT
119 177
 	OPCODE
120 178
 
121 179
 	( DIV )
... ...
@@ -128,6 +186,16 @@
128 186
 	#abcd #1234 DIV2 [ #0009 ] TEST-SHORT
129 187
 	#8000 #0200 DIV2 [ #0040 ] TEST-SHORT
130 188
 	#2222 #0003 DIV2 [ #0b60 ] TEST-SHORT
189
+	MODE
190
+	#10 #02 DIVk ADD ADD [ #1a ] TEST-BYTE
191
+	#20 #20 DIVk ADD ADD [ #41 ] TEST-BYTE
192
+	#34 #01 DIVk ADD ADD [ #69 ] TEST-BYTE
193
+	#02 #ef DIVk ADD ADD [ #f1 ] TEST-BYTE
194
+	MODE
195
+	#1000 #0040 DIV2k ADD2 ADD2 [ #1080 ] TEST-SHORT
196
+	#abcd #1234 DIV2k ADD2 ADD2 [ #be0a ] TEST-SHORT
197
+	#8000 #0200 DIV2k ADD2 ADD2 [ #8240 ] TEST-SHORT
198
+	#2222 #0003 DIV2k ADD2 ADD2 [ #2d85 ] TEST-SHORT
131 199
 	TYPE
132 200
 
133 201
 	( Stack )
... ...
@@ -142,6 +210,16 @@
142 210
 	#ffff INC2 [ #0000 ] TEST-SHORT
143 211
 	#fffe INC2 [ #ffff ] TEST-SHORT
144 212
 	#0000 INC2 [ #0001 ] TEST-SHORT
213
+	MODE
214
+	#01 INCk ADD [ #03 ] TEST-BYTE
215
+	#ff INCk ADD [ #ff ] TEST-BYTE
216
+	#fe INCk ADD [ #fd ] TEST-BYTE
217
+	#00 INCk ADD [ #01 ] TEST-BYTE
218
+	MODE
219
+	#0001 INC2k ADD2 [ #0003 ] TEST-SHORT
220
+	#ffff INC2k ADD2 [ #ffff ] TEST-SHORT
221
+	#fffe INC2k ADD2 [ #fffd ] TEST-SHORT
222
+	#0000 INC2k ADD2 [ #0001 ] TEST-SHORT
145 223
 	OPCODE
146 224
 
147 225
 	( POP )
... ...
@@ -154,36 +232,66 @@
154 232
 	#0a0b #0c0d #0e0f POP2 POP2 [ #0a0b ] TEST-SHORT
155 233
 	#0a0b #0c0d #0e0f ADD2 POP2 [ #0a0b ] TEST-SHORT
156 234
 	#0a0b #0c0d #0e0f POP2 ADD2 [ #1618 ] TEST-SHORT
235
+	MODE
236
+	#0a #0b POPk [ #0b ] TEST-BYTE POP
237
+	#0a #0b #0c POPk POP [ #0b ] TEST-BYTE POP
238
+	#0a #0b #0c ADD POPk [ #17 ] TEST-BYTE POP
239
+	#0a #0b #0c POPk ADD [ #17 ] TEST-BYTE POP
240
+	MODE
241
+	#0a0b #0c0d POP2k [ #0c0d ] TEST-SHORT POP2
242
+	#0a0b #0c0d #0e0f POP2k POP2 [ #0c0d ] TEST-SHORT POP2
243
+	#0a0b #0c0d #0e0f ADD2 POP2k [ #1a1c ] TEST-SHORT POP2
244
+	#0a0b #0c0d #0e0f POP2k ADD2 [ #1a1c ] TEST-SHORT POP2
157 245
 	OPCODE
158 246
 
159 247
 	( DUP )
160 248
 	#0a #0b DUP ADD ADD [ #20 ] TEST-BYTE
161 249
 	MODE
162 250
 	#0a0b DUP2 ADD2 [ #1416 ] TEST-SHORT
251
+	MODE
252
+	#0a #0b DUPk ADD ADD ADD [ #2b ] TEST-BYTE
253
+	MODE
254
+	#0a0b DUP2k ADD2 ADD2 [ #1e21 ] TEST-SHORT
163 255
 	OPCODE
164 256
 
165 257
 	( NIP )
166 258
 	#12 #34 #56 NIP ADD [ #68 ] TEST-BYTE
167 259
 	MODE
168 260
 	#1234 #5678 #9abc NIP2 ADD2 [ #acf0 ] TEST-SHORT
169
-
261
+	MODE
262
+	#12 #34 #56 NIPk ADD ADD [ #e0 ] TEST-BYTE POP
263
+	MODE
264
+	#1234 #5678 #9abc NIP2k ADD2 ADD2 [ #8bf0 ] TEST-SHORT POP2
170 265
 	OPCODE
266
+
171 267
 	( SWP )
172 268
 	#02 #10 SWP DIV [ #08 ] TEST-BYTE
173 269
 	MODE
174 270
 	#0a0b #0c0d SWP2 NIP2 [ #0a0b ] TEST-SHORT
175
-
271
+	MODE
272
+	#02 #10 SWPk DIV ADD ADD [ #1a ] TEST-BYTE
273
+	MODE
274
+	#0a0b #0c0d SWP2k POP2 POP2 POP2 [ #0a0b ] TEST-SHORT
176 275
 	OPCODE
276
+
177 277
 	( OVR )
178 278
 	#02 #10 OVR DIV ADD [ #0a ] TEST-BYTE
179 279
 	MODE
180 280
 	#0a0b #0c0d OVR2 NIP2 ADD2 [ #1416 ] TEST-SHORT
281
+	MODE
282
+	#02 #10 OVRk DIV ADD ADD ADD [ #1c ] TEST-BYTE
283
+	MODE
284
+	#0a0b #0c0d OVR2k NIP2 ADD2 ADD2 ADD2 [ #2a2e ] TEST-SHORT
181 285
 	OPCODE
182 286
 
183 287
 	( ROT )
184 288
 	#02 #04 #10 ROT DIV ADD [ #0c ] TEST-BYTE
185 289
 	MODE
186 290
 	#0a0b #0c0d #0c0f ROT2 ADD2 NIP2 [ #161a ] TEST-SHORT
291
+	MODE
292
+	#02 #04 #10 ROTk DIV ADD ADD ADD ADD [ #22 ] TEST-BYTE
293
+	MODE
294
+	#0a0b #0c0d #0c0f ROT2k ADD2 NIP2 ADD2 ADD2 ADD2 [ #3841 ] TEST-SHORT
187 295
 	TYPE
188 296
 
189 297
 	( Bitwise )
... ...
@@ -198,6 +306,16 @@
198 306
 	#aaaa #5555 AND2 [ #0000 ] TEST-SHORT
199 307
 	#ffff #1234 AND2 [ #1234 ] TEST-SHORT
200 308
 	#abcd #0a0c AND2 [ #0a0c ] TEST-SHORT
309
+	MODE
310
+	#fc #3f ANDk ADD ADD [ #77 ] TEST-BYTE
311
+	#f0 #0f ANDk ADD ADD [ #ff ] TEST-BYTE
312
+	#ff #3c ANDk ADD ADD [ #77 ] TEST-BYTE
313
+	#02 #03 ANDk ADD ADD [ #07 ] TEST-BYTE
314
+	MODE
315
+	#f0f0 #00f0 AND2k ADD2 ADD2 [ #f2d0 ] TEST-SHORT
316
+	#aaaa #5555 AND2k ADD2 ADD2 [ #ffff ] TEST-SHORT
317
+	#ffff #1234 AND2k ADD2 ADD2 [ #2467 ] TEST-SHORT
318
+	#abcd #0a0c AND2k ADD2 ADD2 [ #bfe5 ] TEST-SHORT
201 319
 	OPCODE
202 320
 
203 321
 	( ORA )
... ...
@@ -210,6 +328,16 @@
210 328
 	#abab #cdcd ORA2 [ #efef ] TEST-SHORT
211 329
 	#1122 #1234 ORA2 [ #1336 ] TEST-SHORT
212 330
 	#8888 #1000 ORA2 [ #9888 ] TEST-SHORT
331
+	MODE
332
+	#0f #f0 ORAk ADD ADD [ #fe ] TEST-BYTE
333
+	#ab #cd ORAk ADD ADD [ #67 ] TEST-BYTE
334
+	#12 #34 ORAk ADD ADD [ #7c ] TEST-BYTE
335
+	#88 #10 ORAk ADD ADD [ #30 ] TEST-BYTE
336
+	MODE
337
+	#0f0f #f0f0 ORA2k ADD2 ADD2 [ #fffe ] TEST-SHORT
338
+	#abab #cdcd ORA2k ADD2 ADD2 [ #6967 ] TEST-SHORT
339
+	#1122 #1234 ORA2k ADD2 ADD2 [ #368c ] TEST-SHORT
340
+	#8888 #1000 ORA2k ADD2 ADD2 [ #3110 ] TEST-SHORT
213 341
 	OPCODE
214 342
 
215 343
 	( EOR )
... ...
@@ -222,6 +350,16 @@
222 350
 	#aaaa #5555 EOR2 [ #ffff ] TEST-SHORT
223 351
 	#1122 #1234 EOR2 [ #0316 ] TEST-SHORT
224 352
 	#8888 #1000 EOR2 [ #9888 ] TEST-SHORT
353
+	MODE
354
+	#00 #00 EORk ADD ADD [ #00 ] TEST-BYTE
355
+	#ff #00 EORk ADD ADD [ #fe ] TEST-BYTE
356
+	#aa #55 EORk ADD ADD [ #fe ] TEST-BYTE
357
+	#ff #ff EORk ADD ADD [ #fe ] TEST-BYTE
358
+	MODE
359
+	#ffff #ff00 EOR2k ADD2 ADD2 [ #fffe ] TEST-SHORT
360
+	#aaaa #5555 EOR2k ADD2 ADD2 [ #fffe ] TEST-SHORT
361
+	#1122 #1234 EOR2k ADD2 ADD2 [ #266c ] TEST-SHORT
362
+	#8888 #1000 EOR2k ADD2 ADD2 [ #3110 ] TEST-SHORT
225 363
 	OPCODE
226 364
 
227 365
 	( SFT )
... ...
@@ -234,6 +372,16 @@
234 372
 	#ffff #70 SFT2 [ #ff80 ] TEST-SHORT
235 373
 	#ffff #7e SFT2 [ #0180 ] TEST-SHORT
236 374
 	#ffff #e3 SFT2 [ #c000 ] TEST-SHORT
375
+	MODE
376
+	#ff #08 SFTk ADD ADD [ #07 ] TEST-BYTE
377
+	#ff #e0 SFTk ADD ADD [ #df ] TEST-BYTE
378
+	#ff #11 SFTk ADD ADD [ #0e ] TEST-BYTE
379
+	#ff #12 SFTk ADD ADD [ #8f ] TEST-BYTE
380
+	MODE
381
+	#ffff #01 SFT2k ROT POP ADD2 [ #7ffe ] TEST-SHORT
382
+	#ffff #70 SFT2k ROT POP ADD2 [ #ff7f ] TEST-SHORT
383
+	#ffff #7e SFT2k ROT POP ADD2 [ #017f ] TEST-SHORT
384
+	#ffff #e3 SFT2k ROT POP ADD2 [ #bfff ] TEST-SHORT
237 385
 	TYPE
238 386
 
239 387
 	( Memory )
... ...
@@ -267,8 +415,8 @@
267 415
 	OPCODE
268 416
 
269 417
 	( DEI/DEO )
270
-	LIT '1 EMIT
271
-	LIT '1 EMIT
418
+	LIT "1 EMIT
419
+	LIT "1 EMIT
272 420
 	TYPE
273 421
 
274 422
 	( Branching )
... ...
@@ -301,21 +449,6 @@
301 449
 	#12 #34 ADDk ADD ADD [ #8c ] TEST-BYTE
302 450
 	OPCODE
303 451
 
304
-	( Error: Division By Zero )
305
-	;on-error-division #00 DEO2
306
-	#10 #00 DIV
307
-
308
-	@err2
309
-	( Error: Working Stack Underflow )
310
-	;on-error-underflow #00 DEO2
311
-	POP
312
-
313
-	@err3
314
-	( Error: Return Stack Underflow )
315
-	;on-error-underflowr #00 DEO2
316
-	POPr
317
-
318
-	@end
319 452
 	#010e DEO
320 453
 	#010f DEO
321 454
 
... ...
@@ -327,57 +460,5 @@ BRK
327 460
 
328 461
 JMP2r
329 462
 
330
-@on-error-division ( -> )
331
-
332
-	WST ;print-err JSR2
333
-	;err2 JMP2
334
-
335
-BRK
336
-
337
-@on-error-underflow ( -> )
338
-
339
-	WST ;print-err JSR2
340
-	;err3 JMP2
341
-
342
-BRK
343
-
344
-@on-error-underflowr ( -> )
345
-
346
-	RST ;print-err JSR2
347
-	;end JMP2
348
-
349
-BRK
350
-
351
-@print-err ( page -- )
352
-
353
-	;err-txt ;print-str JSR2
354
-	;rst-txt ;print-str JSR2
355
-	#20 EMIT 
356
-	GET-ERR ;print/byte JSR2 
357
-	#0a EMIT
358
-
359
-JMP2r
360
-
361
-@print-str ( str* -- )
362
-
363
-	&while
364
-		LDAk #18 DEO
365
-		INC2 LDAk ,&while JCN
366
-	POP2
367
-
368
-JMP2r
369
-
370
-@print ( short* -- )
371
-
372
-	SWP ,&byte JSR
373
-	&byte ( byte -- ) DUP #04 SFT ,&char JSR
374
-	&char ( char -- ) #0f AND DUP #09 GTH #27 MUL ADD #30 ADD #18 DEO
375
-
376
-JMP2r
377
-
378
-@err-txt "Error $1
379
-@wst-txt "(wst) $1
380
-@rst-txt "(rst) $1
381
-
382 463
 @absolute 
383 464
 	&byte $1 &short $2
... ...
@@ -44,8 +44,6 @@ typedef struct {
44 44
 } Program;
45 45
 
46 46
 Program p;
47
-static int litlast = 0;
48
-static int jsrlast = 0;
49 47
 
50 48
 /* clang-format off */
51 49
 
... ...
@@ -207,8 +205,6 @@ writebyte(Uint8 b)
207 205
 		return error("Memory overwrite", "");
208 206
 	p.data[p.ptr++] = b;
209 207
 	p.length = p.ptr;
210
-	litlast = 0;
211
-	jsrlast = 0;
212 208
 	return 1;
213 209
 }
214 210
 
... ...
@@ -216,16 +212,7 @@ static int
216 212
 writeopcode(char *w)
217 213
 {
218 214
 	Uint8 res;
219
-	if(jsrlast && scmp(w, "JMP2r", 5)) { /* tail-call optimization */
220
-		p.data[p.ptr - 1] = jsrlast == 2 ? findopcode("JMP2") : findopcode("JMP");
221
-		jsrlast = 0;
222
-		return 1;
223
-	}
224 215
 	res = writebyte(findopcode(w));
225
-	if(scmp(w, "JSR2", 4))
226
-		jsrlast = 2;
227
-	else if(scmp(w, "JSR", 3))
228
-		jsrlast = 1;
229 216
 	return res;
230 217
 }
231 218
 
... ...
@@ -240,15 +227,8 @@ writeshort(Uint16 s, int lit)
240 227
 static int
241 228
 writelitbyte(Uint8 b)
242 229
 {
243
-	if(litlast) { /* literals optimization */
244
-		Uint8 hb = p.data[p.ptr - 1];
245
-		p.ptr -= 2;
246
-		p.length = p.ptr;
247
-		return writeshort((hb << 8) + b, 1);
248
-	}
249 230
 	if(!writebyte(findopcode("LIT"))) return 0;
250 231
 	if(!writebyte(b)) return 0;
251
-	litlast = 1;
252 232
 	return 1;
253 233
 }
254 234
 
... ...
@@ -299,24 +279,20 @@ parse(char *w, FILE *f)
299 279
 		if(!sihx(w + 1))
300 280
 			return error("Invalid padding", w);
301 281
 		p.ptr = shex(w + 1);
302
-		litlast = jsrlast = 0;
303 282
 		break;
304 283
 	case '$': /* pad-relative */
305 284
 		if(!sihx(w + 1))
306 285
 			return error("Invalid padding", w);
307 286
 		p.ptr += shex(w + 1);
308
-		litlast = jsrlast = 0;
309 287
 		break;
310 288
 	case '@': /* label */
311 289
 		if(!makelabel(w + 1))
312 290
 			return error("Invalid label", w);
313 291
 		scpy(w + 1, p.scope, 0x40);
314
-		litlast = jsrlast = 0;
315 292
 		break;
316 293
 	case '&': /* sublabel */
317 294
 		if(!makelabel(sublabel(subw, p.scope, w + 1)))
318 295
 			return error("Invalid sublabel", w);
319
-		litlast = jsrlast = 0;
320 296
 		break;
321 297
 	case '#': /* literals hex */
322 298
 		if(!sihx(w + 1) || (slen(w) != 3 && slen(w) != 5))
... ...
@@ -328,11 +304,11 @@ parse(char *w, FILE *f)
328 304
 		}
329 305
 		break;
330 306
 	case '.': /* literal byte zero-page */
331
-		makereference(p.scope, w, p.ptr - litlast);
307
+		makereference(p.scope, w, p.ptr);
332 308
 		if(!writelitbyte(0xff)) return 0;
333 309
 		break;
334 310
 	case ',': /* literal byte relative */
335
-		makereference(p.scope, w, p.ptr - litlast);
311
+		makereference(p.scope, w, p.ptr);
336 312
 		if(!writelitbyte(0xff)) return 0;
337 313
 		break;
338 314
 	case ';': /* literal short absolute */
... ...
@@ -343,9 +319,6 @@ parse(char *w, FILE *f)
343 319
 		makereference(p.scope, w, p.ptr);
344 320
 		if(!writeshort(0xffff, 0)) return 0;
345 321
 		break;
346
-	case '\'': /* raw char */
347
-		if(!writebyte((Uint8)w[1])) return 0;
348
-		break;
349 322
 	case '"': /* raw string */
350 323
 		i = 0;
351 324
 		while((c = w[++i]))