| ... | ... |
@@ -250,10 +250,8 @@ |
| 250 | 250 |
;asma-output/offset STA2 |
| 251 | 251 |
;asma/addr STA2 |
| 252 | 252 |
;asma/state STA |
| 253 |
- #01 ( 0001 ) |
|
| 254 |
- SWPk ( 0001 0100 ) ;asma/written-addr STA2 |
|
| 253 |
+ #01 SWP ( 0100 ) ;asma/written-addr STA2 |
|
| 255 | 254 |
;&preamble-end ;&preamble SUB2k ,asma-assemble-chunk JSR POP2 POP2 |
| 256 |
- ;asma/line STA2 |
|
| 257 | 255 |
JMP2r |
| 258 | 256 |
|
| 259 | 257 |
&preamble |
| ... | ... |
@@ -265,32 +263,22 @@ |
| 265 | 263 |
) |
| 266 | 264 |
|
| 267 | 265 |
@asma-assemble-file-pass ( filename-ptr* -- ) |
| 268 |
- #0000 |
|
| 266 |
+ ;asma-assemble-chunk #0001 ROT2 ( func* line^ filename* ) |
|
| 267 |
+ ;asma-read-buffer DUP2 ;asma-read-buffer/end ROT2 SUB2 ( func* line^ filename* buf* size^ ) |
|
| 268 |
+ ROT2 ( func* line^ buf* size^ filename* ) |
|
| 269 |
+ ,file-read-chunks JSR |
|
| 269 | 270 |
|
| 270 |
- &loop |
|
| 271 |
- OVR2 .File/name DEO2 |
|
| 272 |
- DUP2 .File/offset-ls DEO2 |
|
| 273 |
- ;asma-read-buffer/end ;asma-read-buffer SUB2 STH2k .File/length DEO2 |
|
| 274 |
- ;asma-read-buffer DUP2k .File/load DEO2 |
|
| 275 |
- .File/success DEI2 |
|
| 276 |
- DUP2 STH2r SUB2 ORA ,&last-one JCN |
|
| 277 |
- ,asma-assemble-chunk JSR asma-IF-ERROR ,&error JCN |
|
| 278 |
- SUB2 SUB2 |
|
| 279 |
- ,&loop JMP |
|
| 280 |
- |
|
| 281 |
- &last-one |
|
| 282 |
- ADD2k #00 ROT ROT STA |
|
| 283 |
- INC2 |
|
| 284 |
- ,asma-assemble-chunk JSR asma-IF-ERROR ,&error JCN |
|
| 271 |
+ asma-IF-ERROR ,&error JCN |
|
| 285 | 272 |
|
| 286 | 273 |
( flush output buffer ) |
| 287 | 274 |
;asma-output/ptr LDA2 ;asma-write-buffer SUB2 ;asma/flush-fn LDA2 JSR2 |
| 288 | 275 |
|
| 289 |
- POP2 |
|
| 290 | 276 |
&error |
| 291 |
- POP2 POP2 POP2 |
|
| 277 |
+ POP2 POP2 POP2 POP2 POP2 |
|
| 292 | 278 |
JMP2r |
| 293 | 279 |
|
| 280 |
+include projects/library/file-read-chunks.tal |
|
| 281 |
+ |
|
| 294 | 282 |
( |
| 295 | 283 |
Assemble a chunk of source code, which begins with whitespace or the start |
| 296 | 284 |
of a token and is divided up into tokens separated by whitespace. If the |
| ... | ... |
@@ -300,28 +288,34 @@ |
| 300 | 288 |
of the last token in the chunk. |
| 301 | 289 |
) |
| 302 | 290 |
|
| 303 |
-@asma-assemble-chunk ( ptr* len* -- assembled-up-to-ptr* ) |
|
| 304 |
- OVR2 ADD2 #0001 SUB2 SWP2 STH2k |
|
| 291 |
+@asma-assemble-chunk ( line^ ptr* len^ -- assembled-up-to-ptr* ) |
|
| 292 |
+ ROT2k ( line^ ptr* len^ ptr* len^ line^ ) |
|
| 293 |
+ ;asma/line STA2 ( line^ ptr* len^ ptr* len^ ) |
|
| 294 |
+ ADD2 #0001 SUB2 NIP2 ( line^ ptr* last-ptr* ) |
|
| 295 |
+ SWP2 STH2k ( line^ last-ptr* ptr* / ptr* ) |
|
| 305 | 296 |
,&loop JMP |
| 306 | 297 |
|
| 307 |
- &next-char-pop |
|
| 298 |
+ &next-char-pop ( line^ last-ptr* ptr* char / start-of-token* ) |
|
| 308 | 299 |
POP |
| 309 |
- &next-char |
|
| 310 | 300 |
INC2 |
| 311 |
- &loop ( last-ptr* ptr* / start-of-token* ) |
|
| 312 |
- OVR2 OVR2 LTH2 ,&end JCN |
|
| 313 |
- LDAk ( last-ptr* ptr* char / start-of-token* ) |
|
| 301 |
+ &loop ( line^ last-ptr* ptr* / start-of-token* ) |
|
| 302 |
+ LTH2k ,&end JCN |
|
| 303 |
+ LDAk ( line^ last-ptr* ptr* char / start-of-token* ) |
|
| 314 | 304 |
DUP #20 GTH ,&next-char-pop JCN |
| 315 | 305 |
|
| 316 |
- #00 OVR2 ( last-ptr* ptr* char 00 ptr* / start-of-token* ) |
|
| 317 |
- STA |
|
| 318 |
- STH2r ,asma-assemble-token JSR asma-IF-ERROR ,&error JCN |
|
| 306 |
+ #00 OVR2 ( line^ last-ptr* ptr* char 00 ptr* / start-of-token* ) |
|
| 307 |
+ STA STH2r ( line^ last-ptr* ptr* char start-of-token* ) |
|
| 308 |
+ ,asma-assemble-token JSR ( line^ last-ptr* ptr* char ) |
|
| 309 |
+ asma-IF-ERROR ,&error JCN |
|
| 319 | 310 |
|
| 320 |
- #0a NEQ ,¬-newline JCN |
|
| 321 |
- ;asma/line LDA2 INC2 ;asma/line STA2 |
|
| 311 |
+ #0a NEQ ,¬-newline JCN ( line^ last-ptr* ptr* ) |
|
| 312 |
+ ROT2 INC2 ( last-ptr* ptr* line+1^ ) |
|
| 313 |
+ DUP2 ;asma/line STA2 |
|
| 314 |
+ ROT2 ROT2 ( line^ last-ptr* ptr* ) |
|
| 322 | 315 |
¬-newline |
| 323 | 316 |
|
| 324 |
- DUP2 INC2 STH2 ,&next-char JMP |
|
| 317 |
+ INC2 DUP2 STH2 ( line^ last-ptr* ptr* / start-of-token* ) |
|
| 318 |
+ ,&loop JMP |
|
| 325 | 319 |
|
| 326 | 320 |
&end |
| 327 | 321 |
POP2 POP2 STH2r |