( dev/console )

%RTN { JMP2r }
%PRINT { ;print JSR2 }
%BR { #0a .Console/write DEO }

( devices )

|10 @Console    [ &pad $8 &write $1 ]

( variables )

|0000

@number [ &started $1 ]

( init )

|0100 ( -> )
		
	;char-txt PRINT #42 .Console/write DEO BR
	;byte-txt PRINT #ab ;print-byte JSR2 BR
	;short-txt PRINT #cdef ;print-short JSR2 BR
	;string-txt PRINT ;hello-word ;print JSR2 BR

	;hello-word ;print JSR2
	#ffff ;print-short JSR2
	;is-word ;print JSR2
	#ffff ;print-short-decimal JSR2
	
BRK

@print ( addr* -- )
	
	&loop
		( send ) DUP2 LDA .Console/write DEO
		( incr ) #0001 ADD2
		( loop ) DUP2 LDA ,&loop JCN
	POP2

RTN

@print-short ( short* -- )
	LIT '0 .Console/write DEO
	LIT 'x .Console/write DEO
	OVR #04 SFT ,&hex JSR
	SWP #0f AND ,&hex JSR
	DUP #04 SFT ,&hex JSR
	    #0f AND ,&hex JMP

	&hex
	#30 ADD DUP #3a LTH ,&not-alpha JCN
	#27 ADD
	&not-alpha
	.Console/write DEO
RTN

@print-byte ( byte -- )
	LIT '0 .Console/write DEO
	LIT 'x .Console/write DEO
	DUP #04 SFT ,&hex JSR
	    #0f AND ,&hex JMP

	&hex
	#30 ADD DUP #39 GTH #27 MUL ADD .Console/write DEO
RTN

@print-short-decimal ( short -- )
	#00 .number/started STZ
	DUP2 #2710 DIV2 DUP2 ,&digit JSR #2710 MUL2 SUB2
	DUP2 #03e8 DIV2 DUP2 ,&digit JSR #03e8 MUL2 SUB2
	DUP2 #0064 DIV2 DUP2 ,&digit JSR #0064 MUL2 SUB2
	DUP2 #000a DIV2 DUP2 ,&digit JSR #000a MUL2 SUB2
	                     ,&digit JSR
	.number/started LDZ ,&end JCN
	LIT '0 .Console/write DEO
	&end
RTN

	&digit
	NIP
	DUP .number/started LDZ ORA #02 JCN
	POP JMP2r
	LIT '0 ADD .Console/write DEO
	#01 .number/started STZ
RTN

@char-txt "char: 20 $1
@byte-txt "byte: 20 $1
@short-txt "short: 20 $1
@string-txt "string: 20 $1

@hello-word "hello 20 "World! 0a 00
@is-word 20 "is 20 00