( dev/console )

%RTN { JMP2r }
%PRINT { .Console/string DEO2 }
%BR { #0a .Console/char DEO }

( devices )

|10 @Console    [ &pad $8 &char $1 &byte $1 &short $2 &string $2 ]

( variables )

|0000

@number [ &started $1 ]

( init )

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

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

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

RTN

@print-hexadecimal ( short -- )
	LIT '0 .Console/char DEO
	LIT 'x .Console/char DEO
	DUP2 #0c SFT2 ,&digit JSR
	DUP2 #08 SFT2 ,&digit JSR
	DUP2 #04 SFT2 ,&digit JSR
	              ,&digit JSR
RTN

	&digit
	#0f AND DUP #0a LTH ,&not-alpha JCN
		#27 ADD
	&not-alpha
	LIT '0 ADD .Console/char DEO
	POP
RTN

@print-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/char DEO
	&end
RTN

	&digit
	SWP POP
	DUP .number/started LDZ ORA #02 JCN
	POP JMP2r
	LIT '0 ADD .Console/char 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