| ... | ... |
@@ -10,7 +10,6 @@ |
| 10 | 10 |
BRK |
| 11 | 11 |
|
| 12 | 12 |
&source-file |
| 13 |
- "test.usm 00 |
|
| 14 | 13 |
"projects/demos/piano.usm 00 |
| 15 | 14 |
&dest-file |
| 16 | 15 |
"bin/asma-boot.rom 00 |
| ... | ... |
@@ -40,10 +39,12 @@ |
| 40 | 39 |
;asma/dest-filename STA2 ;asma/src-filename STA2 |
| 41 | 40 |
|
| 42 | 41 |
;asma-init-first-pass JSR2 |
| 42 |
+ ;asma-flush-ignore ;asma/flush-fn STA2 |
|
| 43 | 43 |
;asma/src-filename LDA2 ;asma-assemble-file-pass JSR2 |
| 44 | 44 |
asma-IF-ERROR ,&error JCN |
| 45 | 45 |
|
| 46 | 46 |
;asma-init-next-pass JSR2 |
| 47 |
+ ;asma-flush-to-file ;asma/flush-fn STA2 |
|
| 47 | 48 |
;asma/src-filename LDA2 ;asma-assemble-file-pass JSR2 |
| 48 | 49 |
asma-IF-ERROR ,&error JCN |
| 49 | 50 |
|
| ... | ... |
@@ -142,19 +143,24 @@ |
| 142 | 143 |
|
| 143 | 144 |
@asma-init-first-pass ( -- ) |
| 144 | 145 |
#ff ;asma/pass STA |
| 145 |
- #0000 ;asma/error STA2 |
|
| 146 |
+ #0000 DUP2k |
|
| 147 |
+ ;asma/error STA2 |
|
| 148 |
+ ;asma-trees/labels STA2 |
|
| 149 |
+ ;asma-trees/macros STA2 |
|
| 146 | 150 |
;asma-heap ;asma/heap STA2 |
| 147 |
- #0000 ;asma-trees/labels STA2 |
|
| 148 | 151 |
;asma-opcodes/_entry ;asma-trees/opcodes STA2 |
| 149 |
- #0000 ;asma-trees/macros STA2 |
|
| 150 | 152 |
( fall through ) |
| 151 | 153 |
|
| 152 | 154 |
@asma-init-next-pass ( -- ) |
| 153 | 155 |
;asma/pass LDA #01 ADD ;asma/pass STA |
| 154 |
- #00 ;asma/state STA |
|
| 155 |
- #0000 ;asma/addr STA2 |
|
| 156 |
- #0100 ;asma/written-addr STA2 |
|
| 157 |
- #0001 ;asma/line STA2 |
|
| 156 |
+ ;asma-write-buffer ;asma-output/ptr STA2 |
|
| 157 |
+ #0000 DUP2k |
|
| 158 |
+ ;asma-output/offset STA2 |
|
| 159 |
+ ;asma/addr STA2 |
|
| 160 |
+ ;asma/state STA |
|
| 161 |
+ #01 ( 0001 ) |
|
| 162 |
+ SWPk ( 0001 0100 ) ;asma/written-addr STA2 |
|
| 163 |
+ ;asma/line STA2 |
|
| 158 | 164 |
JMP2r |
| 159 | 165 |
|
| 160 | 166 |
( |
| ... | ... |
@@ -167,8 +173,8 @@ |
| 167 | 173 |
&loop |
| 168 | 174 |
OVR2 .File/name DEO2 |
| 169 | 175 |
DUP2 .File/offset DEO2 |
| 170 |
- #0023 STH2k .File/length DEO2 |
|
| 171 |
- #f000 DUP2k .File/load DEO2 |
|
| 176 |
+ ;asma-read-buffer/end ;asma-read-buffer SUB2 STH2k .File/length DEO2 |
|
| 177 |
+ ;asma-read-buffer DUP2k .File/load DEO2 |
|
| 172 | 178 |
.File/success DEI2 |
| 173 | 179 |
DUP2 STH2r SUB2 ORA ,&last-one JCN |
| 174 | 180 |
,asma-assemble-chunk JSR asma-IF-ERROR ,&error JCN |
| ... | ... |
@@ -179,6 +185,10 @@ |
| 179 | 185 |
ADD2k #00 ROT ROT STA |
| 180 | 186 |
#0001 ADD2 |
| 181 | 187 |
,asma-assemble-chunk JSR asma-IF-ERROR ,&error JCN |
| 188 |
+ |
|
| 189 |
+ ( flush output buffer ) |
|
| 190 |
+ ;asma-output/ptr LDA2 ;asma-write-buffer SUB2 ;asma/flush-fn LDA2 JSR2 |
|
| 191 |
+ |
|
| 182 | 192 |
POP2 |
| 183 | 193 |
&error |
| 184 | 194 |
POP2 POP2 POP2 |
| ... | ... |
@@ -386,6 +396,11 @@ |
| 386 | 396 |
POP2 #01 |
| 387 | 397 |
JMP2r |
| 388 | 398 |
|
| 399 |
+@asma-write-short ( short -- ) |
|
| 400 |
+ SWP |
|
| 401 |
+ ,asma-write-byte JSR |
|
| 402 |
+ ,asma-write-byte JMP ( tail call ) |
|
| 403 |
+ |
|
| 389 | 404 |
@asma-write-byte ( byte -- ) |
| 390 | 405 |
;asma/addr LDA2 ;asma/written-addr LDA2 |
| 391 | 406 |
LTH2k ,&rewound JCN |
| ... | ... |
@@ -395,26 +410,46 @@ |
| 395 | 410 |
#0001 ADD2 |
| 396 | 411 |
,&loop JMP |
| 397 | 412 |
|
| 413 |
+ &rewound |
|
| 414 |
+ ;asma-msg-rewound ;asma/error STA2 |
|
| 415 |
+ POP2 POP2 POP JMP2r |
|
| 416 |
+ |
|
| 398 | 417 |
&ready |
| 399 | 418 |
POP2 #0001 ADD2 |
| 400 | 419 |
DUP2 ;asma/addr STA2 |
| 401 | 420 |
;asma/written-addr STA2 |
| 402 | 421 |
|
| 403 | 422 |
&write |
| 404 |
- #3e .Console/char ;asma/pass LDA asma-DEO |
|
| 423 |
+ ,asma-output/ptr LDR2 |
|
| 424 |
+ DUP2 ;asma-write-buffer/end EQU2 ,&flush JCN |
|
| 425 |
+ &after-flush |
|
| 426 |
+ STH2k STA |
|
| 427 |
+ STH2r #0001 ADD2 ,asma-output/ptr STR2 |
|
| 428 |
+ |
|
| 429 |
+ ( #3e .Console/char ;asma/pass LDA asma-DEO |
|
| 405 | 430 |
#20 .Console/char ;asma/pass LDA asma-DEO |
| 406 |
- .Console/byte ;asma/pass LDA asma-DEO ( FIXME actually write! ) |
|
| 407 |
- #0a .Console/char ;asma/pass LDA asma-DEO |
|
| 431 |
+ #00 .Console/byte ;asma/pass LDA asma-DEO |
|
| 432 |
+ #0a .Console/char ;asma/pass LDA asma-DEO ) |
|
| 408 | 433 |
JMP2r |
| 409 | 434 |
|
| 410 |
- &rewound |
|
| 411 |
- ;asma-msg-rewound ;asma/error STA2 |
|
| 412 |
- POP2 POP2 POP JMP2r |
|
| 435 |
+ &flush ( ptr* -- start-of-buffer* ) |
|
| 436 |
+ ;asma-write-buffer SUB2k ( ptr* start* len* ) |
|
| 437 |
+ ;asma/flush-fn LDA2 JSR2 |
|
| 438 |
+ SWP2 POP2 ( start* ) |
|
| 439 |
+ ,&after-flush JMP |
|
| 413 | 440 |
|
| 414 |
-@asma-write-short ( short -- ) |
|
| 415 |
- SWP |
|
| 416 |
- ,asma-write-byte JSR |
|
| 417 |
- ,asma-write-byte JMP ( tail call ) |
|
| 441 |
+@asma-output [ &ptr $2 &offset $2 &filename $2 ] |
|
| 442 |
+ |
|
| 443 |
+@asma-flush-ignore ( len* -- ) |
|
| 444 |
+ POP2 |
|
| 445 |
+ JMP2r |
|
| 446 |
+ |
|
| 447 |
+@asma-flush-to-file ( len* -- ) |
|
| 448 |
+ DUP2 .File/length DEO2 |
|
| 449 |
+ ,asma-output/offset LDR2 DUP2 .File/offset DEO2 ADD2 ,asma-output/offset STR2 |
|
| 450 |
+ ;asma/dest-filename LDA2 .File/name DEO2 |
|
| 451 |
+ ;asma-write-buffer .File/save DEO2 |
|
| 452 |
+ JMP2r |
|
| 418 | 453 |
|
| 419 | 454 |
@asma-append-heap-byte ( dummy byte -- dummy ) |
| 420 | 455 |
;asma/heap LDA2 |