... | ... |
@@ -136,6 +136,7 @@ |
136 | 136 |
;asma/pass LDA #01 ADD ;asma/pass STA |
137 | 137 |
#00 ;asma/state STA |
138 | 138 |
#0000 ;asma/addr STA2 |
139 |
+ #0100 ;asma/written-addr STA2 |
|
139 | 140 |
#0001 ;asma/line STA2 |
140 | 141 |
JMP2r |
141 | 142 |
|
... | ... |
@@ -170,7 +171,7 @@ |
170 | 171 |
POP POP2 POP2 |
171 | 172 |
JMP2r |
172 | 173 |
|
173 |
-@asma [ &pass $1 &state $1 &line $2 &token $2 &orig-token $2 &heap $2 &addr $2 &scope-addr $2 &error $2 ] |
|
174 |
+@asma [ &pass $1 &state $1 &line $2 &token $2 &orig-token $2 &heap $2 &addr $2 &written-addr $2 &scope-addr $2 &error $2 ] |
|
174 | 175 |
@asma-trees [ &labels $2 ¯os $2 &opcodes $2 &scope $2 ] |
175 | 176 |
|
176 | 177 |
@asma-assemble-token ( string-ptr* -- ) |
... | ... |
@@ -323,13 +324,30 @@ |
323 | 324 |
JMP2r |
324 | 325 |
|
325 | 326 |
@asma-write-byte ( byte -- ) |
327 |
+ ;asma/addr LDA2 ;asma/written-addr LDA2 |
|
328 |
+ LTH2k ,&rewound JCN |
|
329 |
+ &loop |
|
330 |
+ EQU2k ,&ready JCN |
|
331 |
+ #00 ,&write JSR |
|
332 |
+ #0001 ADD2 |
|
333 |
+ ,&loop JMP |
|
334 |
+ |
|
335 |
+ &ready |
|
336 |
+ POP2 #0001 ADD2 |
|
337 |
+ DUP2 ;asma/addr STA2 |
|
338 |
+ ;asma/written-addr STA2 |
|
339 |
+ |
|
340 |
+ &write |
|
326 | 341 |
#3e .Console/char ;asma/pass LDA asma-DEO |
327 | 342 |
#20 .Console/char ;asma/pass LDA asma-DEO |
328 | 343 |
.Console/byte ;asma/pass LDA asma-DEO ( FIXME actually write! ) |
329 | 344 |
#0a .Console/char ;asma/pass LDA asma-DEO |
330 |
- ;asma/addr LDA2 #0001 ADD2 ;asma/addr STA2 |
|
331 | 345 |
JMP2r |
332 | 346 |
|
347 |
+ &rewound |
|
348 |
+ ;asma-msg-rewound ;asma/error STA2 |
|
349 |
+ POP2 POP2 POP JMP2r |
|
350 |
+ |
|
333 | 351 |
@asma-write-short ( short -- ) |
334 | 352 |
SWP |
335 | 353 |
,asma-write-byte JSR |
... | ... |
@@ -497,7 +515,6 @@ |
497 | 515 |
JMP2r |
498 | 516 |
|
499 | 517 |
&valid |
500 |
- ( FIXME complain if rewind after writing nonzeroes ) |
|
501 | 518 |
ADD2 ;asma/addr STA2 |
502 | 519 |
JMP2r |
503 | 520 |
|
... | ... |
@@ -659,6 +676,7 @@ |
659 | 676 |
@asma-msg-relative "Address 20 "outside 20 "range 00 |
660 | 677 |
@asma-msg-label "Label 20 "not 20 "found 00 |
661 | 678 |
@asma-msg-macro "Macro 20 "already 20 "exists 00 |
679 |
+@asma-msg-rewound "Memory 20 "overwrite 00 |
|
662 | 680 |
|
663 | 681 |
( trees ) |
664 | 682 |
|