~rabbits/drifblim

8c24bedaf1e0f61fc918ca1e46449392e2937c04 — Devine Lu Linvega a month ago bff8311
Catch rewind error
1 files changed, 31 insertions(+), 23 deletions(-)

M src/drifblim.tal
M src/drifblim.tal => src/drifblim.tal +31 -23
@@ 23,11 23,12 @@ BRK

@on-error ( id* name* -> )

	#0a18 DEO
	;err pstr pstr
	LIT ": #18 DEO #2018 DEO
	pstr ;dict/in pstr
	;scope pstr LIT ". #18 DEO #0a18 DEO
	#010f DEO
	( halt ) #010f DEO

BRK



@@ 138,11 139,15 @@ JMP2r
(
@|primitives )

@write-pad ( addr* -- )
@write-pad ( addr* -- dest* )

	;write/head LDA2 LTH2k ?&no-pad
		SUB2k write-fill
	;write/head LDA2
	LTH2k ?&no-pad
		SUB2k write-fill POP2 JMP2r
		&no-pad
	OVR2 #0100 LTH2 ?&no-err
		;token ;err/rewind !on-error
		&no-err
	POP2

JMP2r


@@ 355,19 360,18 @@ JMP2r
		scap INC2 INC2k INC2 INC2 LDA ?&w
	POP2
	( result )
	;dict/assembled pstr
	;src pstr
	;dict/spacer pstr
	;dst pstr
	;dict/assembled pstr ;src pstr
	;dict/spacer pstr ;dst pstr
	( length )
	;dict/in pstr ;write/length LDA2 #00ff SUB2 pdec ;dict/bytes pstr
	LIT ", #18 DEO #2018 DEO ;create-label/count LDA2 pdec ;dict/labels pstr LIT ". #18 DEO #0a18 DEO
	;create-label/count LDA2 pdec ;dict/labels pstr
	;dict/end pstr

JMP2r

@save-symbols ( -- )

	;dst scap ;&ext OVR2 scpy
	;dst scap ;dict/sym-ext OVR2 scpy
	;dst .File1/name DEO2
	;symbols
	&l


@@ 377,11 381,9 @@ JMP2r
			DUP2 slen INC2 .File1/length DEO2
			DUP2 .File1/write DEO2
		scap INC2 DUP2 #0003 ADD2 LDA ?&l
	POP2
	#00 ROT ROT STA
	POP2 POP2

JMP2r
	&ext ".sym $1

(
@|stdlib )


@@ 402,18 404,21 @@ JMP2r
@pdec ( short* -- )

	#00 ,&z STR
	#2710 ,&parse JSR
	#03e8 ,&parse JSR
	#0064 ,&parse JSR
	#000a ,&parse JSR
	#2710 pdec/parse
	#03e8 pdec/parse
	#0064 pdec/parse
	#000a pdec/parse
	NIP #30 ADD #18 DEO

JMP2r
	&parse
		DIV2k DUPk [ LIT &z $1 ] EQU ?&skip
		DUP #30 ADD #18 DEO #ff ,&z STR
		&skip POP MUL2 SUB2
	JMP2r

&parse ( short* den* -- short* )

	DIV2k DUPk [ LIT &z $1 ] EQU ?&skip
	DUP #30 ADD #18 DEO #ff ,&z STR
	&skip POP MUL2 SUB2

JMP2r

(
@|assets )


@@ 425,9 430,11 @@ JMP2r
	&reset "INIT $1
	&spacer 20 "-> 20 $1
	&in ", 20 "in 20 $1
	&bytes 20 "bytes $1
	&bytes 20 "bytes( $1
	&end "). 0a $1
	&labels 20 "labels $1
	&unused "-- 20 "Unused 20 "label: 20 $1
	&sym-ext ".sym $1

@err "!! 20 "Error 20 $1
	&source "Source $1


@@ 437,6 444,7 @@ JMP2r
	&distance "Distance $1
	&invalid "Invalid $1
	&mode "Mode $1
	&rewind "Rewind $1

@opcodes
	"LIT "INC "POP "NIP "SWP "ROT "DUP "OVR