| ... | ... |
@@ -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])) |