Browse code

More progress in assembler.

Andrew Alderwick authored on 18/04/2021 11:48:49
Showing 1 changed files
... ...
@@ -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
 (