~rabbits/drifblim

28689620c617e39c4516d4e0a6d881caa64bc098 — neauoire 3 months ago 9707d8b
Housekeeping
1 files changed, 16 insertions(+), 11 deletions(-)

M src/drifblim.tal
M src/drifblim.tal => src/drifblim.tal +16 -11
@@ 62,7 62,7 @@ BRK
JMP2

(
@|main )
@|stream )

@assemble-top ( file* -- )



@@ 79,7 79,7 @@ JMP2
	&s
		;&c .File1/read DEO2
		.File1/success DEI2 #0000 EQU2 ,&eof JCN
		[ LIT &c $1 ] ,read-char JSR
		[ LIT &c $1 ] ,stream JSR
		,&s JMP &eof
	( check if file exists )
	,&c LDR #00 EQU ,&empty JCN


@@ 88,7 88,7 @@ JMP2
JMP2r
	&empty ;err/source ;crash JMP2

@read-char ( char -- )
@stream ( char -- )

	#20 GTHk NIP ,&append JCN POP
	;token LDAk ,&run JCN


@@ 96,7 96,8 @@ JMP2r

JMP2r
	&run ( token* -- )
		DUP2 ,walk-token JSR ;sclr JMP2
		DUP2 ,read-token JSR
		;sclr JMP2
	&append ( char -- )
		;token
			DUP2 ;slen JSR2 #0018 EQU2 ,&overflow JCN


@@ 104,15 105,19 @@ JMP2r
	&overflow ( char token* -- )
		ROT POP ;err/token ;crash JMP2

@walk-token ( token* -- )
(
@|token )

@read-token ( token* -- )

	LDAk LIT "( EQU ,&on-parens JCN
	LDAk LIT ") EQU ,&on-parens JCN
	[ LIT &sleep $1 ] ,&on-sleep JCN
	( parse ) DUP2 ,tokenize JSR INC2 LDA2 ( .. )
	DUP2 ,tokenize JSR
		INC2 LDA2 ( .. )

JMP2
	&on-parens LDA #29 SUB ,&sleep STR JMP2r
	&on-parens LDA LIT "( EQU ,&sleep STR JMP2r
	&on-sleep POP2 JMP2r

@tokenize ( token* -- type* )


@@ 127,7 132,7 @@ JMP2
	( variable )
	STH2r
		DUP2 ;is-opcode JSR2 ,&on-opcode JCN
		DUP2 ;sihx JSR2 ,&on-rawhex JCN
		DUP2 ;is-hex JSR2 ,&on-rawhex JCN
	( error )
	POP2 ;pass1/err



@@ 231,7 236,7 @@ JMP2r

@write-lithex ( str* -- )

	DUP2 ;sihx JSR2 #00 EQU ,&invalid JCN
	DUP2 ;is-hex JSR2 #00 EQU ,&invalid JCN
	DUP2 ;slen JSR2 #0004 NEQ2 ,&no-short JCN
		;shex JSR2 ,write-litshort JMP
		&no-short


@@ 245,7 250,7 @@ JMP2

@write-rawhex ( str* -- )

	DUP2 ;sihx JSR2 #00 EQU ,&invalid JCN
	DUP2 ;is-hex JSR2 #00 EQU ,&invalid JCN
	DUP2 ;slen JSR2 #0004 NEQ2 ,&no-short JCN
		;shex JSR2 ,write-short JMP
		&no-short


@@ 413,7 418,7 @@ BRK

JMP2r

@sihx ( str* -- flag )
@is-hex ( str* -- flag )

	&w
		LDAk ,chex JSR INC ,&valid JCN