| ... | ... |
@@ -432,12 +432,11 @@ include projects/library/binary-tree.tal |
| 432 | 432 |
,¬-found JCN |
| 433 | 433 |
|
| 434 | 434 |
;asma-opcodes/_disasm SUB2 #03 SFT2 ( 00 byte / end* ) |
| 435 |
+ DUP #00 EQU ,&set-keep JCN ( force keep flag for LIT ) |
|
| 435 | 436 |
&loop |
| 436 | 437 |
LDAkr STHr LIT2r 0001 ADD2r ( 00 byte char / end* ) |
| 437 | 438 |
DUP ,¬-end JCN |
| 438 | 439 |
POP POP2r |
| 439 |
- DUP ,¬-zero JCN #80 NIP ( LIT by itself needs keep flag, to distinguish from BRK ) |
|
| 440 |
- ¬-zero |
|
| 441 | 440 |
SWP |
| 442 | 441 |
JMP2r |
| 443 | 442 |
|
| ... | ... |
@@ -451,7 +450,7 @@ include projects/library/binary-tree.tal |
| 451 | 450 |
|
| 452 | 451 |
¬-return |
| 453 | 452 |
LIT 'k NEQ ,¬-keep JCN |
| 454 |
- asma-KEEP-FLAG ORA ,&loop JMP |
|
| 453 |
+ &set-keep asma-KEEP-FLAG ORA ,&loop JMP |
|
| 455 | 454 |
|
| 456 | 455 |
¬-keep ( 00 byte / end* ) |
| 457 | 456 |
¬-found ( incoming-ptr* / end* ) |
| ... | ... |
@@ -92,6 +92,7 @@ findopcode(char *s) |
| 92 | 92 |
int m = 0; |
| 93 | 93 |
if(!scmp(ops[i], s, 3)) |
| 94 | 94 |
continue; |
| 95 |
+ if(!i) i |= (1 << 7); /* force keep for LIT */ |
|
| 95 | 96 |
while(s[3 + m]) {
|
| 96 | 97 |
if(s[3 + m] == '2') |
| 97 | 98 |
i |= (1 << 5); /* mode: short */ |
| ... | ... |
@@ -103,7 +104,6 @@ findopcode(char *s) |
| 103 | 104 |
return 0; /* failed to match */ |
| 104 | 105 |
m++; |
| 105 | 106 |
} |
| 106 |
- if(!i) i |= (1 << 7); /* force LIT nonzero (keep is ignored) */ |
|
| 107 | 107 |
return i; |
| 108 | 108 |
} |
| 109 | 109 |
return 0; |
| ... | ... |
@@ -112,7 +112,7 @@ findopcode(char *s) |
| 112 | 112 |
static void |
| 113 | 113 |
pushbyte(Uint8 b, int lit) |
| 114 | 114 |
{
|
| 115 |
- if(lit) pushbyte(findopcode("LITk"), 0);
|
|
| 115 |
+ if(lit) pushbyte(findopcode("LIT"), 0);
|
|
| 116 | 116 |
p.data[p.ptr++] = b; |
| 117 | 117 |
p.length = p.ptr; |
| 118 | 118 |
} |
| ... | ... |
@@ -120,7 +120,7 @@ pushbyte(Uint8 b, int lit) |
| 120 | 120 |
static void |
| 121 | 121 |
pushshort(Uint16 s, int lit) |
| 122 | 122 |
{
|
| 123 |
- if(lit) pushbyte(findopcode("LIT2k"), 0);
|
|
| 123 |
+ if(lit) pushbyte(findopcode("LIT2"), 0);
|
|
| 124 | 124 |
pushbyte((s >> 8) & 0xff, 0); |
| 125 | 125 |
pushbyte(s & 0xff, 0); |
| 126 | 126 |
} |