... | ... |
@@ -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 |
( |