~rabbits/drifblim

b5b706ef74952163fdc1b21791fa1f0e383dac75 — Devine Lu Linvega 20 days ago cd961b7
Housekeeping
1 files changed, 44 insertions(+), 41 deletions(-)

M src/drifblim.tal
M src/drifblim.tal => src/drifblim.tal +44 -41
@@ 203,29 203,20 @@ JMP2r
		,&head LDR2 ;write/length STA2
		&no-record

!move-head

(
@|helpers )

@get-hex ( str* -- value* )
( >> )

	DUP2 is-hex ?&valid
		;err/number !on-error
		&valid
@move-head ( -- )

!shex
	;write/head LDA2 INC2

@get-rel ( label* -- distance )
@set-head ( v* -- )

	;write/skip LDA ?&fill
	LDA2k ;write/head LDA2 SUB2 #0003 SUB2
	DUP2 #0080 ADD2 POP ?&fail
	NIP2 NIP
	;write/head STA2

JMP2r
	&fail POP2 #0003 ADD2 ;err/distance !on-error
	&fill POP2 #ff JMP2r

(
@|labels )

@get-ref ( token* -- <label*> )



@@ 271,6 262,42 @@ JMP2r

JMP2r

@find-label ( name* -- <addr*> )

	STH2
	;symbols
	&w
		#0003 ADD2 DUP2 STH2kr scmp ?&found
		scap INC2 INC2k INC2 INC2 LDA ?&w
	POP2
	POP2r
	#ffff

JMP2r
	&found #0003 SUB2 POP2r JMP2r

(
@|helpers )

@get-hex ( str* -- value* )

	DUP2 is-hex ?&valid
		;err/number !on-error
		&valid

!shex

@get-rel ( label* -- distance )

	;write/skip LDA ?&fill
	LDA2k ;write/head LDA2 SUB2 #0003 SUB2
	DUP2 #0080 ADD2 POP ?&fail
	NIP2 NIP

JMP2r
	&fail POP2 #0003 ADD2 ;err/distance !on-error
	&fill POP2 #ff JMP2r

@is-hex ( str* -- f )

	&w


@@ 317,30 344,6 @@ JMP2r

JMP2r

@find-label ( name* -- <addr*> )

	STH2
	;symbols
	&w
		#0003 ADD2 DUP2 STH2kr scmp ?&found
		scap INC2 INC2k INC2 INC2 LDA ?&w
	POP2
	POP2r
	#ffff

JMP2r
	&found #0003 SUB2 POP2r JMP2r

@move-head ( -- )

	;write/head LDA2 INC2

@set-head ( v* -- )

	;write/head STA2

JMP2r

@print-summary ( -- )

	;create-label/ptr LDA2 ;symbols