Browse code

Further progress on assembler

Andrew Alderwick authored on 14/04/2021 21:00:10
Showing 2 changed files
... ...
@@ -12,3 +12,6 @@
12 12
 NOPa2r
13 13
 swap16
14 14
 
15
+@testme
16
+	,Hello.testing
17
+
... ...
@@ -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 }
2
+;assembler { pass 1 state 1 token 2 scope-len 1 scope 80 heap 2 addr 2 subtree 2 vartmp 2 field 2 }
3 3
 
4 4
 %HCF { #0000 DIV }
5 5
 %SHORT_FLAG { #20 }
... ...
@@ -281,11 +281,25 @@
281 281
 
282 282
 @lookup-label ( string-ptr* -- address* node-type if found
283 283
                             OR false-address* 00 if not found )
284
-	( FIXME deal with dotted labels )
284
+	DUP2
285
+	$loop
286
+	DUP2 #0001 ADD2 SWP2 PEK2
287
+	DUP #2e EQU ^$dotted JNZ
288
+	^$loop JNZ
289
+	DUP2 EOR2 ( faster than POP2 #0000 )
290
+	=assembler.field
291
+
292
+	$main
285 293
 	DUP2 ,label-tree SWP2 #ff ,traverse-tree JSR2
286 294
 	^$not-found JNZ
287 295
 
288 296
 	SWP2 POP2
297
+	~assembler.field #0000 EQU2 ^$end JNZ
298
+	DUP2 PEK2 #80 LTH ^$not-found JNZ
299
+	#0003 ADD2 ~assembler.field #ff ,traverse-tree JSR2
300
+	^$not-found JNZ
301
+
302
+	$end
289 303
 	DUP2 #0001 ADD2 LDR2 SWP2 PEK2
290 304
 	JMP2r
291 305
 
... ...
@@ -298,6 +312,11 @@
298 312
 	#00
299 313
 	JMP2r
300 314
 
315
+	$dotted
316
+	DUP OVR2 =assembler.field
317
+	EOR ROT ROT #0001 SUB2 POK2
318
+	^$main JMP
319
+
301 320
 @write-byte ( byte -- )
302 321
 	( FIXME ) =Console.byte
303 322
 	~assembler.addr #0001 ADD2 =assembler.addr