| ... | ... |
@@ -1,5 +1,5 @@ |
| 1 | 1 |
;tree { search-key 2 max-key-len 1 }
|
| 2 |
-;assembler { pass 1 state 1 token 2 scope-len 1 scope 80 heap 2 addr 2 subtree 2 vartmp 2 field 2 }
|
|
| 2 |
+;assembler { pass 1 state 1 token 2 scope-len 1 scope 80 heap 2 addr 2 subtree 2 field_size 2 var_size 2 field 2 }
|
|
| 3 | 3 |
|
| 4 | 4 |
%HCF { #0000 DIV }
|
| 5 | 5 |
%SHORT_FLAG { #20 }
|
| ... | ... |
@@ -22,19 +22,34 @@ |
| 22 | 22 |
|
| 23 | 23 |
@RESET |
| 24 | 24 |
,assembler-heap-start =assembler.heap |
| 25 |
- #0070 =assembler.addr |
|
| 26 | 25 |
|
| 27 |
- ,$read-filename =File.name |
|
| 28 |
- #1000 =File.length |
|
| 29 |
- #f000 =File.load |
|
| 26 |
+ ,$read-filename ^assemble-file JSR |
|
| 27 |
+ HCF |
|
| 30 | 28 |
|
| 31 |
- #f000 #1000 ^assemble-chunk JSR |
|
| 32 | 29 |
HCF |
| 33 | 30 |
|
| 34 |
- $read-filename [ etc/assembler-test.usm 00 ] |
|
| 31 |
+ $read-filename [ projects/software/noodle.usm 00 ] |
|
| 32 |
+ |
|
| 33 |
+@assemble-file ( filename-ptr* -- ) |
|
| 34 |
+ #0000 |
|
| 35 |
+ |
|
| 36 |
+ $loop |
|
| 37 |
+ OVR2 =File.name |
|
| 38 |
+ DUP2 =File.offset |
|
| 39 |
+ #0600 =File.length |
|
| 40 |
+ #f000 DUP2 DUP2 =File.load |
|
| 41 |
+ ~File.success DUP2 #0000 EQU2 ^$end JNZ |
|
| 42 |
+ ^assemble-chunk JSR |
|
| 43 |
+ SUB2 SUB2 |
|
| 44 |
+ ^$loop JMP |
|
| 45 |
+ |
|
| 46 |
+ $end |
|
| 47 |
+ POP2 POP2 POP2 POP2 POP2 |
|
| 48 |
+ JMP2r |
|
| 35 | 49 |
|
| 36 |
-@assemble-chunk ( ptr* len* -- 00 if EOF found in chunk |
|
| 37 |
- OR assembled-up-to-ptr* 01 if reached end of chunk ) |
|
| 50 |
+@assemble-chunk ( ptr* len* -- assembled-up-to-ptr* ) |
|
| 51 |
+ ( FIXME we still return on seeing 00 in source code, |
|
| 52 |
+ while assemble-file is now binary safe ) |
|
| 38 | 53 |
OVR2 ADD2 STH2 |
| 39 | 54 |
#0001 SUB2 |
| 40 | 55 |
|
| ... | ... |
@@ -49,14 +64,14 @@ |
| 49 | 64 |
DUP2 OVR2r STH2r LTS2 ^$valid JNZ |
| 50 | 65 |
SWP2r POP2r POP2 |
| 51 | 66 |
STH2r #0001 ADD2 |
| 52 |
- #01 JMP2r |
|
| 67 |
+ JMP2r |
|
| 53 | 68 |
|
| 54 | 69 |
$valid |
| 55 | 70 |
DUP2 PEK2 #00 OVR2 POK2 |
| 56 | 71 |
STH2r #0001 ADD2 ^assemble-token JSR |
| 57 | 72 |
^$per-token JNZ |
| 58 | 73 |
|
| 59 |
- POP2 POP2r #00 JMP2r |
|
| 74 |
+ POP2r JMP2r |
|
| 60 | 75 |
|
| 61 | 76 |
@assemble-macro ( macro-ptr* -- ) |
| 62 | 77 |
DUP2 ,strlen JSR2 DUP2 #0000 EQU2 ^$end JNZ |
| ... | ... |
@@ -507,7 +522,7 @@ |
| 507 | 522 |
JMP2r |
| 508 | 523 |
|
| 509 | 524 |
@normal-] [ 0000 ] [ 0000 ] [ 5d ] |
| 510 |
- ( this is spurious, but ignore it anyway ) |
|
| 525 |
+ ~assembler.state #df AND =assembler.state |
|
| 511 | 526 |
JMP2r |
| 512 | 527 |
|
| 513 | 528 |
@data-] .normal-( [ 0000 ] [ 5d ] |
| ... | ... |
@@ -638,6 +653,7 @@ |
| 638 | 653 |
@normal-; [ 0000 ] [ 0000 ] [ 3b ] |
| 639 | 654 |
#80 ~assembler.token ,label-tree ,add-label JSR2 |
| 640 | 655 |
~assembler.heap #0000 OVR2 STR2 |
| 656 |
+ DUP2 #0003 SUB2 =assembler.var_size |
|
| 641 | 657 |
DUP2 =assembler.subtree |
| 642 | 658 |
#0002 ADD2 =assembler.heap |
| 643 | 659 |
|
| ... | ... |
@@ -657,7 +673,7 @@ |
| 657 | 673 |
|
| 658 | 674 |
@variable-name |
| 659 | 675 |
#00 ~assembler.token ~assembler.subtree ,add-label JSR2 |
| 660 |
- ~assembler.heap #0003 SUB2 =assembler.vartmp |
|
| 676 |
+ ~assembler.heap #0003 SUB2 =assembler.field_size |
|
| 661 | 677 |
~assembler.state #f7 AND =assembler.state |
| 662 | 678 |
JMP2r |
| 663 | 679 |
|
| ... | ... |
@@ -668,8 +684,11 @@ |
| 668 | 684 |
JMP2r |
| 669 | 685 |
|
| 670 | 686 |
$valid |
| 687 |
+ $no-var-size |
|
| 671 | 688 |
DUP #02 GTH ^$end JNZ |
| 672 |
- DUP ~assembler.vartmp POK2 |
|
| 689 |
+ DUP ~assembler.field_size POK2 |
|
| 690 |
+ ~assembler.var_size #0000 EQU2 ^$end JNZ |
|
| 691 |
+ DUP #80 EOR ~assembler.var_size POK2 |
|
| 673 | 692 |
^$end JMP |
| 674 | 693 |
|
| 675 | 694 |
$loop |
| ... | ... |
@@ -679,6 +698,7 @@ |
| 679 | 698 |
DUP ^$loop JNZ |
| 680 | 699 |
POP |
| 681 | 700 |
~assembler.state #0c ORA =assembler.state |
| 701 |
+ #0000 =assembler.var_size |
|
| 682 | 702 |
JMP2r |
| 683 | 703 |
|
| 684 | 704 |
( |