... | ... |
@@ -13,13 +13,13 @@ |
13 | 13 |
;memory |
14 | 14 |
;program |
15 | 15 |
&while |
16 |
- LDAk LIT '> NEQ ,&movr JCN [ SWP2 INC2 SWP2 ] &movr |
|
17 |
- LDAk LIT '< NEQ ,&movl JCN [ SWP2 #0001 SUB2 SWP2 ] &movl |
|
18 |
- LDAk LIT '+ NEQ ,&incr JCN [ OVR2 STH2k LDA INC STH2r STA ] &incr |
|
19 |
- LDAk LIT '- NEQ ,&decr JCN [ OVR2 STH2k LDA #01 SUB STH2r STA ] &decr |
|
20 |
- LDAk LIT '. NEQ ,&emit JCN [ OVR2 LDA #18 DEO ] &emit |
|
21 |
- LDAk LIT '[ NEQ ,&next JCN [ ,goto-next JSR ] &next |
|
22 |
- LDAk LIT '] NEQ ,&prev JCN [ ,goto-back JSR ] &prev |
|
16 |
+ LDAk LIT "> NEQ ,&movr JCN [ SWP2 INC2 SWP2 ] &movr |
|
17 |
+ LDAk LIT "< NEQ ,&movl JCN [ SWP2 #0001 SUB2 SWP2 ] &movl |
|
18 |
+ LDAk LIT "+ NEQ ,&incr JCN [ OVR2 STH2k LDA INC STH2r STA ] &incr |
|
19 |
+ LDAk LIT "- NEQ ,&decr JCN [ OVR2 STH2k LDA #01 SUB STH2r STA ] &decr |
|
20 |
+ LDAk LIT ". NEQ ,&emit JCN [ OVR2 LDA #18 DEO ] &emit |
|
21 |
+ LDAk LIT "[ NEQ ,&next JCN [ ,goto-next JSR ] &next |
|
22 |
+ LDAk LIT "] NEQ ,&prev JCN [ ,goto-back JSR ] &prev |
|
23 | 23 |
INC2 LDAk ,&while JCN |
24 | 24 |
POP2 |
25 | 25 |
( halt ) #010f DEO |
... | ... |
@@ -32,8 +32,8 @@ BRK |
32 | 32 |
( depth ) LITr 00 |
33 | 33 |
INC2 |
34 | 34 |
&loop |
35 |
- LDAk LIT '[ NEQ JMP INCr |
|
36 |
- LDAk LIT '] NEQ ,&no-end JCN |
|
35 |
+ LDAk LIT "[ NEQ JMP INCr |
|
36 |
+ LDAk LIT "] NEQ ,&no-end JCN |
|
37 | 37 |
STHkr #00 EQU ,&end JCN |
38 | 38 |
LITr 01 SUBr |
39 | 39 |
&no-end |
... | ... |
@@ -49,8 +49,8 @@ JMP2r |
49 | 49 |
( depth ) LITr 00 |
50 | 50 |
#0001 SUB2 |
51 | 51 |
&loop |
52 |
- LDAk LIT '] NEQ JMP INCr |
|
53 |
- LDAk LIT '[ NEQ ,&no-end JCN |
|
52 |
+ LDAk LIT "] NEQ JMP INCr |
|
53 |
+ LDAk LIT "[ NEQ ,&no-end JCN |
|
54 | 54 |
STHkr #00 EQU ,&end JCN |
55 | 55 |
LITr 01 SUBr |
56 | 56 |
&no-end |
... | ... |
@@ -67,4 +67,4 @@ JMP2r |
67 | 67 |
"..+++.>>.<-.<.+++.------.------- |
68 | 68 |
"-.>>+.>++. $1 |
69 | 69 |
|
70 |
-@memory |
|
71 | 70 |
\ No newline at end of file |
71 |
+@memory |
... | ... |
@@ -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 |
|
... | ... |
@@ -96,7 +96,7 @@ JMP2r |
96 | 96 |
;program/accumulator |
97 | 97 |
&w |
98 | 98 |
[ LIT2 &a $2 ] OVR2 ;sseg JSR2 #01 NEQ ,&no-found JCN |
99 |
- ,&b LDR2 LDA LIT '~ EQU ,&output JCN |
|
99 |
+ ,&b LDR2 LDA LIT "~ EQU ,&output JCN |
|
100 | 100 |
( shift ) DUP2 [ ,&b LDR2 ;slen JSR2 ,&a LDR2 ;slen JSR2 SUB2 ] ;ssft JSR2 |
101 | 101 |
( write ) [ LIT2 &b $2 ] SWP2 OVR2 ;slen JSR2 ;mcpy JSR2 |
102 | 102 |
POP2 #01 JMP2r |
... | ... |
@@ -109,7 +109,7 @@ JMP2r |
109 | 109 |
&output |
110 | 110 |
,&a LDR2 ;slen JSR2 #0000 SWP2 SUB2 ;ssft JSR2 |
111 | 111 |
POP2 ,&b LDR2 INC2 |
112 |
- LDAk LIT '` NEQ ,&no-lb JCN |
|
112 |
+ LDAk LIT "` NEQ ,&no-lb JCN |
|
113 | 113 |
#0a18 DEO #01 JMP2r |
114 | 114 |
&no-lb |
115 | 115 |
,print-str JSR #01 |
... | ... |
@@ -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 |
... | ... |
@@ -496,15 +496,15 @@ |
496 | 496 |
JMP2r |
497 | 497 |
|
498 | 498 |
¬-end |
499 |
- DUP LIT '2 NEQ ,¬-two JCN |
|
499 |
+ DUP LIT "2 NEQ ,¬-two JCN |
|
500 | 500 |
POP LIT &short-flag $1 ORA ,&loop JMP |
501 | 501 |
|
502 | 502 |
¬-two |
503 |
- DUP LIT 'r NEQ ,¬-return JCN |
|
503 |
+ DUP LIT "r NEQ ,¬-return JCN |
|
504 | 504 |
POP LIT &return-flag $1 ORA ,&loop JMP |
505 | 505 |
|
506 | 506 |
¬-return |
507 |
- LIT 'k NEQ ,¬-keep JCN |
|
507 |
+ LIT "k NEQ ,¬-keep JCN |
|
508 | 508 |
&set-keep LIT &keep-flag $1 ORA ,&loop JMP |
509 | 509 |
|
510 | 510 |
¬-keep ( 00 byte / end* ) |
... | ... |
@@ -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 |
|
... | ... |
@@ -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 |
... | ... |
@@ -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 |
|
... | ... |
@@ -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,14 +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] = findopcode("JMP2"); |
|
221 |
- jsrlast = 0; |
|
222 |
- return 1; |
|
223 |
- } |
|
224 | 215 |
res = writebyte(findopcode(w)); |
225 |
- if(scmp(w, "JSR2", 4)) |
|
226 |
- jsrlast = 1; |
|
227 | 216 |
return res; |
228 | 217 |
} |
229 | 218 |
|
... | ... |
@@ -238,15 +227,8 @@ writeshort(Uint16 s, int lit) |
238 | 227 |
static int |
239 | 228 |
writelitbyte(Uint8 b) |
240 | 229 |
{ |
241 |
- if(litlast) { /* literals optimization */ |
|
242 |
- Uint8 hb = p.data[p.ptr - 1]; |
|
243 |
- p.ptr -= 2; |
|
244 |
- p.length = p.ptr; |
|
245 |
- return writeshort((hb << 8) + b, 1); |
|
246 |
- } |
|
247 | 230 |
if(!writebyte(findopcode("LIT"))) return 0; |
248 | 231 |
if(!writebyte(b)) return 0; |
249 |
- litlast = 1; |
|
250 | 232 |
return 1; |
251 | 233 |
} |
252 | 234 |
|
... | ... |
@@ -297,24 +279,20 @@ parse(char *w, FILE *f) |
297 | 279 |
if(!sihx(w + 1)) |
298 | 280 |
return error("Invalid padding", w); |
299 | 281 |
p.ptr = shex(w + 1); |
300 |
- litlast = jsrlast = 0; |
|
301 | 282 |
break; |
302 | 283 |
case '$': /* pad-relative */ |
303 | 284 |
if(!sihx(w + 1)) |
304 | 285 |
return error("Invalid padding", w); |
305 | 286 |
p.ptr += shex(w + 1); |
306 |
- litlast = jsrlast = 0; |
|
307 | 287 |
break; |
308 | 288 |
case '@': /* label */ |
309 | 289 |
if(!makelabel(w + 1)) |
310 | 290 |
return error("Invalid label", w); |
311 | 291 |
scpy(w + 1, p.scope, 0x40); |
312 |
- litlast = jsrlast = 0; |
|
313 | 292 |
break; |
314 | 293 |
case '&': /* sublabel */ |
315 | 294 |
if(!makelabel(sublabel(subw, p.scope, w + 1))) |
316 | 295 |
return error("Invalid sublabel", w); |
317 |
- litlast = jsrlast = 0; |
|
318 | 296 |
break; |
319 | 297 |
case '#': /* literals hex */ |
320 | 298 |
if(!sihx(w + 1) || (slen(w) != 3 && slen(w) != 5)) |
... | ... |
@@ -326,11 +304,11 @@ parse(char *w, FILE *f) |
326 | 304 |
} |
327 | 305 |
break; |
328 | 306 |
case '.': /* literal byte zero-page */ |
329 |
- makereference(p.scope, w, p.ptr - litlast); |
|
307 |
+ makereference(p.scope, w, p.ptr); |
|
330 | 308 |
if(!writelitbyte(0xff)) return 0; |
331 | 309 |
break; |
332 | 310 |
case ',': /* literal byte relative */ |
333 |
- makereference(p.scope, w, p.ptr - litlast); |
|
311 |
+ makereference(p.scope, w, p.ptr); |
|
334 | 312 |
if(!writelitbyte(0xff)) return 0; |
335 | 313 |
break; |
336 | 314 |
case ';': /* literal short absolute */ |
... | ... |
@@ -341,9 +319,6 @@ parse(char *w, FILE *f) |
341 | 319 |
makereference(p.scope, w, p.ptr); |
342 | 320 |
if(!writeshort(0xffff, 0)) return 0; |
343 | 321 |
break; |
344 |
- case '\'': /* raw char */ |
|
345 |
- if(!writebyte((Uint8)w[1])) return 0; |
|
346 |
- break; |
|
347 | 322 |
case '"': /* raw string */ |
348 | 323 |
i = 0; |
349 | 324 |
while((c = w[++i])) |