... | ... |
@@ -1,10 +1,5 @@ |
1 | 1 |
( launcher ) |
2 | 2 |
|
3 |
-%+ { ADD } %- { SUB } %* { MUL } %/ { DIV } |
|
4 |
-%< { LTH } %> { GTH } %= { EQU } %! { NEQ } |
|
5 |
-%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 } |
|
6 |
-%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 } |
|
7 |
- |
|
8 | 3 |
%2* { #10 SFT } %2/ { #01 SFT } %2** { #10 SFT2 } %2// { #01 SFT2 } |
9 | 4 |
%4* { #20 SFT } %4/ { #02 SFT } %4** { #20 SFT2 } %4// { #02 SFT2 } |
10 | 5 |
%8* { #30 SFT } %8/ { #03 SFT } %8** { #30 SFT2 } %8// { #03 SFT2 } |
... | ... |
@@ -26,7 +21,7 @@ |
26 | 21 |
%DEBUG { ;print-hex/byte JSR2 #0a EMIT } |
27 | 22 |
%DEBUG2 { ;print-hex JSR2 #0a EMIT } |
28 | 23 |
|
29 |
-%LINES-COUNT { .browser/y2 LDZ2 .browser/y LDZ2 -- 10// NIP } |
|
24 |
+%LINES-COUNT { .browser/y2 LDZ2 .browser/y LDZ2 SUB2 10// NIP } |
|
30 | 25 |
|
31 | 26 |
( devices ) |
32 | 27 |
|
... | ... |
@@ -82,7 +77,7 @@ |
82 | 77 |
( place ) |
83 | 78 |
#0088 .browser/x STZ2 |
84 | 79 |
#0010 .browser/y STZ2 |
85 |
- .Screen/height DEI2 #33 SFT2 #0011 -- .browser/y2 STZ2 |
|
80 |
+ .Screen/height DEI2 #33 SFT2 #0011 SUB2 .browser/y2 STZ2 |
|
86 | 81 |
|
87 | 82 |
( draw mascot ) |
88 | 83 |
#0010 #0010 #0060 #0060 ;mascot-icn #01 ;draw-icn JSR2 |
... | ... |
@@ -115,28 +110,28 @@ BRK |
115 | 110 |
( draw new cursor ) |
116 | 111 |
.Mouse/x DEI2 DUP2 .pointer/x STZ2 .Screen/x DEO2 |
117 | 112 |
.Mouse/y DEI2 DUP2 .pointer/y STZ2 .Screen/y DEO2 |
118 |
- #41 .Mouse/state DEI #01 = + .Screen/sprite DEO |
|
113 |
+ #41 .Mouse/state DEI #01 EQU ADD .Screen/sprite DEO |
|
119 | 114 |
|
120 | 115 |
( wheel ) |
121 | 116 |
.Mouse/scrolly INC DEI |
122 |
- DUP #ff ! ,&no-up JCN |
|
123 |
- .browser/scroll LDZ #00 = ,&no-up JCN |
|
124 |
- DUP .browser/scroll LDZ + ;scroll-to JSR2 |
|
117 |
+ DUP #ff NEQ ,&no-up JCN |
|
118 |
+ .browser/scroll LDZ #00 EQU ,&no-up JCN |
|
119 |
+ DUP .browser/scroll LDZ ADD ;scroll-to JSR2 |
|
125 | 120 |
&no-up |
126 |
- DUP #01 ! ,&no-down JCN |
|
127 |
- .browser/scroll LDZ .browser/lines LDZ = ,&no-down JCN |
|
128 |
- DUP .browser/scroll LDZ + ;scroll-to JSR2 |
|
121 |
+ DUP #01 NEQ ,&no-down JCN |
|
122 |
+ .browser/scroll LDZ .browser/lines LDZ EQU ,&no-down JCN |
|
123 |
+ DUP .browser/scroll LDZ ADD ;scroll-to JSR2 |
|
129 | 124 |
&no-down |
130 | 125 |
POP |
131 | 126 |
|
132 | 127 |
( within browser ) |
133 |
- .Mouse/y DEI2 .browser/y LDZ2 << ,&outside JCN |
|
134 |
- .Mouse/y DEI2 .browser/y2 LDZ2 #0010 -- >> ,&outside JCN |
|
128 |
+ .Mouse/y DEI2 .browser/y LDZ2 LTH2 ,&outside JCN |
|
129 |
+ .Mouse/y DEI2 .browser/y2 LDZ2 #0010 SUB2 GTH2 ,&outside JCN |
|
135 | 130 |
( select choice ) |
136 |
- .Mouse/y DEI2 .browser/y LDZ2 -- |
|
137 |
- 10// NIP .browser/scroll LDZ + ;select-file JSR2 |
|
131 |
+ .Mouse/y DEI2 .browser/y LDZ2 SUB2 |
|
132 |
+ 10// NIP .browser/scroll LDZ ADD ;select-file JSR2 |
|
138 | 133 |
( run choice ) |
139 |
- .Mouse/state DEI #00 = ,&no-click JCN |
|
134 |
+ .Mouse/state DEI #00 EQU ,&no-click JCN |
|
140 | 135 |
.browser/sel LDZ ;run-file JSR2 |
141 | 136 |
&no-click |
142 | 137 |
&outside |
... | ... |
@@ -147,26 +142,26 @@ BRK |
147 | 142 |
|
148 | 143 |
( controller ) |
149 | 144 |
.Controller/button DEI |
150 |
- DUP #10 ! ,&no-up JCN |
|
151 |
- .browser/sel LDZ #00 = ,&no-up JCN |
|
152 |
- .browser/sel LDZ #01 - ;select-file JSR2 |
|
145 |
+ DUP #10 NEQ ,&no-up JCN |
|
146 |
+ .browser/sel LDZ #00 EQU ,&no-up JCN |
|
147 |
+ .browser/sel LDZ #01 SUB ;select-file JSR2 |
|
153 | 148 |
;follow-selection JSR2 |
154 | 149 |
POP BRK |
155 | 150 |
&no-up |
156 |
- DUP #20 ! ,&no-down JCN |
|
157 |
- .browser/sel LDZ INC .browser/lines LDZ = ,&no-down JCN |
|
151 |
+ DUP #20 NEQ ,&no-down JCN |
|
152 |
+ .browser/sel LDZ INC .browser/lines LDZ EQU ,&no-down JCN |
|
158 | 153 |
.browser/sel LDZ INC ;select-file JSR2 |
159 | 154 |
;follow-selection JSR2 |
160 | 155 |
POP BRK |
161 | 156 |
&no-down |
162 |
- DUP #01 ! ,&no-a JCN |
|
157 |
+ DUP #01 NEQ ,&no-a JCN |
|
163 | 158 |
.browser/sel LDZ ;run-file JSR2 |
164 | 159 |
POP BRK |
165 | 160 |
&no-a |
166 | 161 |
POP |
167 | 162 |
( keyboard ) |
168 | 163 |
.Controller/key DEI |
169 |
- DUP #0d ! ,&no-enter JCN |
|
164 |
+ DUP #0d NEQ ,&no-enter JCN |
|
170 | 165 |
.browser/sel LDZ ;run-file JSR2 |
171 | 166 |
POP BRK |
172 | 167 |
&no-enter |
... | ... |
@@ -185,7 +180,7 @@ BRK |
185 | 180 |
( split with null-char ) |
186 | 181 |
;dir/data |
187 | 182 |
&while |
188 |
- LDAk #1f > ,&no-lb JCN |
|
183 |
+ LDAk #1f GTH ,&no-lb JCN |
|
189 | 184 |
( split ) STH2k #00 STH2r STA |
190 | 185 |
( count lines ) .browser/lines LDZk INC SWP STZ |
191 | 186 |
&no-lb |
... | ... |
@@ -197,23 +192,23 @@ RTN |
197 | 192 |
@select-file ( id -- ) |
198 | 193 |
|
199 | 194 |
( has changed ) |
200 |
- DUP .browser/last LDZ ! ,&has-changed JCN |
|
195 |
+ DUP .browser/last LDZ NEQ ,&has-changed JCN |
|
201 | 196 |
POP RTN |
202 | 197 |
&has-changed |
203 | 198 |
( beyond ) |
204 |
- DUP .browser/lines LDZ < ,&valid JCN |
|
199 |
+ DUP .browser/lines LDZ LTH ,&valid JCN |
|
205 | 200 |
POP RTN |
206 | 201 |
&valid |
207 | 202 |
|
208 | 203 |
#00 ;draw-browser JSR2 |
209 | 204 |
DUP .browser/sel STZ |
210 | 205 |
DUP .browser/last STZ |
211 |
- #30 + .Audio0/pitch DEO |
|
206 |
+ #30 ADD .Audio0/pitch DEO |
|
212 | 207 |
#01 ;draw-browser JSR2 |
213 | 208 |
|
214 | 209 |
( draw mascot ) |
215 | 210 |
#0010 #0010 #0060 #0060 |
216 |
- ;mascot-icn [ .browser/sel LDZ #03 AND TOS #0480 ** ++ ] #01 |
|
211 |
+ ;mascot-icn [ .browser/sel LDZ #03 AND TOS #0480 MUL2 ADD2 ] #01 |
|
217 | 212 |
;draw-icn JSR2 |
218 | 213 |
|
219 | 214 |
( draw position ) |
... | ... |
@@ -222,18 +217,18 @@ RTN |
222 | 217 |
#0080 .Screen/y DEO2 |
223 | 218 |
.browser/sel LDZ #02 ;draw-byte JSR2 |
224 | 219 |
LIT '/ #02 ;draw-char JSR2 |
225 |
- .browser/lines LDZ #01 - #02 ;draw-byte JSR2 |
|
220 |
+ .browser/lines LDZ #01 SUB #02 ;draw-byte JSR2 |
|
226 | 221 |
AUTO-NONE |
227 | 222 |
|
228 | 223 |
RTN |
229 | 224 |
|
230 | 225 |
@follow-selection ( -- ) |
231 | 226 |
|
232 |
- LINES-COUNT .browser/sel LDZ .browser/scroll LDZ - |
|
233 |
- DUP2 > ,&no-down JCN |
|
227 |
+ LINES-COUNT .browser/sel LDZ .browser/scroll LDZ SUB |
|
228 |
+ DUP2 GTH ,&no-down JCN |
|
234 | 229 |
.browser/scroll LDZ INC ,scroll-to JSR |
235 | 230 |
&no-down |
236 |
- DUP2 SWP < ,&no-up JCN |
|
231 |
+ DUP2 SWP LTH ,&no-up JCN |
|
237 | 232 |
.browser/sel LDZ ,scroll-to JSR |
238 | 233 |
&no-up |
239 | 234 |
POP2 |
... | ... |
@@ -245,11 +240,11 @@ RTN |
245 | 240 |
STH |
246 | 241 |
( more lines than visible ) |
247 | 242 |
.browser/lines LDZ LINES-COUNT |
248 |
- DUP2 > ,&can-scroll JCN |
|
243 |
+ DUP2 GTH ,&can-scroll JCN |
|
249 | 244 |
POPr POP2 RTN |
250 | 245 |
&can-scroll |
251 | 246 |
( less than max scroll ) |
252 |
- - INC STHkr > ,&valid-scroll JCN |
|
247 |
+ SUB INC STHkr GTH ,&valid-scroll JCN |
|
253 | 248 |
POPr RTN |
254 | 249 |
&valid-scroll |
255 | 250 |
#00 ;draw-browser JSR2 |
... | ... |
@@ -264,11 +259,11 @@ RTN |
264 | 259 |
#0000 .Controller/button DEO2 |
265 | 260 |
#00 .Mouse/state DEO |
266 | 261 |
|
267 |
- ;get-entry JSR2 #0005 ++ |
|
262 |
+ ;get-entry JSR2 #0005 ADD2 |
|
268 | 263 |
|
269 | 264 |
DUP2 ;check-rom JSR2 ,&valid JCN |
270 | 265 |
( check if tal file ) |
271 |
- DUP2 ;scap JSR2 #0004 -- ;&tal-ext ;scmp JSR2 #01 ! ,&no-tal JCN |
|
266 |
+ DUP2 ;scap JSR2 #0004 SUB2 ;&tal-ext ;scmp JSR2 #01 NEQ ,&no-tal JCN |
|
272 | 267 |
( assemble tal file ) |
273 | 268 |
DUP2 ;&output-path ;scpy JSR2 |
274 | 269 |
;&rom-ext ;&output-path ;scat JSR2 |
... | ... |
@@ -297,26 +292,26 @@ RTN |
297 | 292 |
@draw-browser ( mask -- ) |
298 | 293 |
|
299 | 294 |
( when empty ) |
300 |
- .browser/lines LDZ #01 = ;draw-browser-empty JCN2 |
|
295 |
+ .browser/lines LDZ #01 EQU ;draw-browser-empty JCN2 |
|
301 | 296 |
|
302 | 297 |
STH |
303 | 298 |
|
304 | 299 |
( draw hand ) |
305 |
- .browser/x LDZ2 #0018 -- .browser/y LDZ2 |
|
306 |
- .browser/sel LDZ .browser/scroll LDZ - TOS 10** ++ |
|
300 |
+ .browser/x LDZ2 #0018 SUB2 .browser/y LDZ2 |
|
301 |
+ .browser/sel LDZ .browser/scroll LDZ SUB TOS 10** ADD2 |
|
307 | 302 |
#0010 #0010 |
308 |
- ;hand-icn STHkr #02 * ;draw-icn JSR2 |
|
303 |
+ ;hand-icn STHkr #02 MUL ;draw-icn JSR2 |
|
309 | 304 |
( draw files ) |
310 | 305 |
LINES-COUNT #00 |
311 | 306 |
&loop |
312 | 307 |
( reached end ) |
313 |
- DUP INC .browser/lines LDZ > ,&end JCN |
|
308 |
+ DUP INC .browser/lines LDZ GTH ,&end JCN |
|
314 | 309 |
( has file ) |
315 | 310 |
.browser/x LDZ2 .Screen/x DEO2 |
316 |
- #00 OVR 10** .browser/y LDZ2 ++ .Screen/y DEO2 |
|
317 |
- DUP .browser/scroll LDZ + ;get-entry JSR2 |
|
311 |
+ #00 OVR 10** .browser/y LDZ2 ADD2 .Screen/y DEO2 |
|
312 |
+ DUP .browser/scroll LDZ ADD ;get-entry JSR2 |
|
318 | 313 |
DUP2 ;get-type JSR2 ;draw-type JSR2 |
319 |
- #01 STHkr * ;draw-str JSR2 |
|
314 |
+ #01 STHkr MUL ;draw-str JSR2 |
|
320 | 315 |
INC GTHk ,&loop JCN |
321 | 316 |
&end |
322 | 317 |
POP2 |
... | ... |
@@ -337,7 +332,7 @@ RTN |
337 | 332 |
|
338 | 333 |
@get-type ( line* -- type ) |
339 | 334 |
|
340 |
- ;scap JSR2 #0004 -- ;&rom-ext ;scmp JSR2 |
|
335 |
+ ;scap JSR2 #0004 SUB2 ;&rom-ext ;scmp JSR2 |
|
341 | 336 |
|
342 | 337 |
RTN |
343 | 338 |
&rom-ext ".rom $1 |
... | ... |
@@ -348,10 +343,10 @@ RTN |
348 | 343 |
( counter ) LITr 00 |
349 | 344 |
;dir/length LDA2 #0000 |
350 | 345 |
&loop |
351 |
- EQUkr STHr #00 = ,&no-reached JCN |
|
352 |
- POP2r NIP2 ;dir/data ++ RTN |
|
346 |
+ EQUkr STHr #00 EQU ,&no-reached JCN |
|
347 |
+ POP2r NIP2 ;dir/data ADD2 RTN |
|
353 | 348 |
&no-reached |
354 |
- DUP2 ;dir/data ++ LDA #00 ! ,&no-lb JCN |
|
349 |
+ DUP2 ;dir/data ADD2 LDA #00 NEQ ,&no-lb JCN |
|
355 | 350 |
INCr |
356 | 351 |
&no-lb |
357 | 352 |
INC2 GTH2k ,&loop JCN |
... | ... |
@@ -363,17 +358,17 @@ RTN |
363 | 358 |
|
364 | 359 |
@draw-type ( type -- ) |
365 | 360 |
|
366 |
- STHk TOS 20** ;file-icns ++ .Screen/addr DEO2 |
|
361 |
+ STHk TOS 20** ;file-icns ADD2 .Screen/addr DEO2 |
|
367 | 362 |
AUTO-XADDR |
368 |
- #02 STHkr - .Screen/sprite DEOk DEO |
|
363 |
+ #02 STHkr SUB .Screen/sprite DEOk DEO |
|
369 | 364 |
|
370 |
- .Screen/x DEI2k #0010 -- ROT DEO2 |
|
371 |
- .Screen/y DEI2k #0008 ++ ROT DEO2 |
|
365 |
+ .Screen/x DEI2k #0010 SUB2 ROT DEO2 |
|
366 |
+ .Screen/y DEI2k #0008 ADD2 ROT DEO2 |
|
372 | 367 |
|
373 |
- #02 STHr - .Screen/sprite DEOk DEO |
|
368 |
+ #02 STHr SUB .Screen/sprite DEOk DEO |
|
374 | 369 |
|
375 |
- .Screen/x DEI2k #0008 ++ ROT DEO2 |
|
376 |
- .Screen/y DEI2k #0008 -- ROT DEO2 |
|
370 |
+ .Screen/x DEI2k #0008 ADD2 ROT DEO2 |
|
371 |
+ .Screen/y DEI2k #0008 SUB2 ROT DEO2 |
|
377 | 372 |
AUTO-NONE |
378 | 373 |
|
379 | 374 |
RTN |
... | ... |
@@ -431,10 +426,10 @@ RTN |
431 | 426 |
@draw-char ( char color -- ) |
432 | 427 |
|
433 | 428 |
SWP |
434 |
- [ #20 - #00 SWP #40 SFT2 ;font ++ ] .Screen/addr DEO2 |
|
429 |
+ [ #20 SUB #00 SWP #40 SFT2 ;font ADD2 ] .Screen/addr DEO2 |
|
435 | 430 |
.Screen/sprite DEOk DEO |
436 |
- .Screen/x DEI2k #0008 ++ ROT DEO2 |
|
437 |
- .Screen/y DEI2k #0010 -- ROT DEO2 |
|
431 |
+ .Screen/x DEI2k #0008 ADD2 ROT DEO2 |
|
432 |
+ .Screen/y DEI2k #0010 SUB2 ROT DEO2 |
|
438 | 433 |
|
439 | 434 |
JMP2r |
440 | 435 |
|
... | ... |
@@ -448,7 +443,7 @@ JMP2r |
448 | 443 |
#0006 .File/length DEO2 |
449 | 444 |
#fffa .File/read DEO2 |
450 | 445 |
|
451 |
- .File/success DEI2 #0006 !! ,&ignore JCN |
|
446 |
+ .File/success DEI2 #0006 NEQ2 ,&ignore JCN |
|
452 | 447 |
#fffa LDA2 .System/r DEO2 |
453 | 448 |
#fffc LDA2 .System/g DEO2 |
454 | 449 |
#fffe LDA2 .System/b DEO2 |
... | ... |
@@ -484,10 +479,10 @@ JMP2r |
484 | 479 |
|
485 | 480 |
STH2 |
486 | 481 |
&loop |
487 |
- LDAk LDAkr STHr = ,¬-diff JCN |
|
482 |
+ LDAk LDAkr STHr EQU ,¬-diff JCN |
|
488 | 483 |
POP2 POP2r #00 RTN |
489 | 484 |
¬-diff |
490 |
- LDAk LDAkr STHr #0000 !! ,¬-end JCN |
|
485 |
+ LDAk LDAkr STHr #0000 NEQ2 ,¬-end JCN |
|
491 | 486 |
POP2 POP2r #01 RTN |
492 | 487 |
¬-end |
493 | 488 |
INC2 INC2r |
... | ... |
@@ -54,8 +54,8 @@ static char ops[][4] = { |
54 | 54 |
"LDZ", "STZ", "LDR", "STR", "LDA", "STA", "DEI", "DEO", |
55 | 55 |
"ADD", "SUB", "MUL", "DIV", "AND", "ORA", "EOR", "SFT" |
56 | 56 |
}; |
57 |
-static char sym_glyph[] = {'?', '!', '>', '<', '+', '-', '*', '/'}; |
|
58 |
-static Uint8 sym_value[] = {0x08, 0x09, 0x0a, 0x1b, 0x18, 0x19, 0x1a, 0x1b}; |
|
57 |
+static char symchr[] = {'?', '!', '>', '<', '+', '-', '*', '/'}; |
|
58 |
+static Uint8 symval[] = {0x08, 0x09, 0x0a, 0x1b, 0x18, 0x19, 0x1a, 0x1b}; |
|
59 | 59 |
|
60 | 60 |
static int scmp(char *a, char *b, int len) { int i = 0; while(a[i] == b[i]) if(!a[i] || ++i >= len) return 1; return 0; } /* string compare */ |
61 | 61 |
static int sihx(char *s) { int i = 0; char c; while((c = s[i++])) if(!(c >= '0' && c <= '9') && !(c >= 'a' && c <= 'f')) return 0; return i > 1; } /* string is hexadecimal */ |
... | ... |
@@ -101,27 +101,34 @@ findlabel(char *name) |
101 | 101 |
return NULL; |
102 | 102 |
} |
103 | 103 |
|
104 |
+static Uint8 |
|
105 |
+findmode(char *s) |
|
106 |
+{ |
|
107 |
+ int i = 0; |
|
108 |
+ while(s[0]) { |
|
109 |
+ switch(s[0]) { |
|
110 |
+ case '2': i |= (1 << 5); break; /* mode: short */ |
|
111 |
+ case 'r': i |= (1 << 6); break; /* mode: return */ |
|
112 |
+ case 'k': i |= (1 << 7); break; /* mode: keep */ |
|
113 |
+ } |
|
114 |
+ s++; |
|
115 |
+ } |
|
116 |
+ return i; |
|
117 |
+} |
|
118 |
+ |
|
104 | 119 |
static Uint8 |
105 | 120 |
findopcode(char *s) |
106 | 121 |
{ |
107 | 122 |
int i; |
108 | 123 |
for(i = 0; i < 0x20; i++) { |
109 |
- int m = 0; |
|
110 | 124 |
if(!scmp(ops[i], s, 3)) |
111 | 125 |
continue; |
112 | 126 |
if(!i) i |= (1 << 7); /* force keep for LIT */ |
113 |
- while(s[3 + m]) { |
|
114 |
- if(s[3 + m] == '2') |
|
115 |
- i |= (1 << 5); /* mode: short */ |
|
116 |
- else if(s[3 + m] == 'r') |
|
117 |
- i |= (1 << 6); /* mode: return */ |
|
118 |
- else if(s[3 + m] == 'k') |
|
119 |
- i |= (1 << 7); /* mode: keep */ |
|
120 |
- else |
|
121 |
- return 0; /* failed to match */ |
|
122 |
- m++; |
|
123 |
- } |
|
124 |
- return i; |
|
127 |
+ return i |= findmode(s + 3); |
|
128 |
+ } |
|
129 |
+ for(i = 0; i < 0x08; ++i) { |
|
130 |
+ if(s[0] == symchr[i]) |
|
131 |
+ return symval[i] |= findmode(s + 1); |
|
125 | 132 |
} |
126 | 133 |
return 0; |
127 | 134 |
} |