( launcher )

%+  { ADD } %-   { SUB }  %*  { MUL }  %/  { DIV }
%<  { LTH } %>   { GTH }  %=  { EQU }  %!  { NEQ }
%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 }
%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 }

%AUTO-X      { #01 .Screen/auto DEO }
%AUTO-Y      { #02 .Screen/auto DEO }
%AUTO-YADDR  { #06 .Screen/auto DEO }

%RTN { JMP2r }
%2//  { #01 SFT2 }

( devices )

|20 @Screen     &vector $2 &width    $2 &height $2 &auto   $1 &pad $1 &x      $2 &y      $2 &addr $2 &pixel $1 &sprite $1

( variables )

|0000

( init )

|0100 ( -> )

	;draw-cross JSR2

	AUTO-YADDR
	#0010 #0000 
	&wst
		( working stack )
		#0010 .Screen/y DEO2
		DUP2 #0018 ** #0010 ++ .Screen/x DEO2
		DUP #fe00 LDA ( ptr ) EQU #41 + STH
		DUP2 #fe01 ++ LDA STHr ;draw-hex JSR2
		( return stack )
		#0028 .Screen/y DEO2
		DUP2 #0018 ** #0010 ++ .Screen/x DEO2
		DUP #ff00 LDA ( ptr ) EQU #41 + STH
		DUP2 #ff01 ++ LDA STHr ;draw-hex JSR2
		INC2 GTH2k ,&wst JCN
	POP2 POP2

BRK

@draw-cross ( -- )

	( ver )
	AUTO-Y
	#0000 .Screen/y DEO2
	.Screen/width DEI2 2// .Screen/x DEO2
	.Screen/height DEI2 #0000
	&ver
		#43 .Screen/pixel DEO
		.Screen/y DEI2k INC2 ROT DEO2
		INC2 GTH2k ,&ver JCN
	POP2 POP2

	( hor )
	AUTO-X
	#0000 .Screen/x DEO2
	.Screen/height DEI2 2// .Screen/y DEO2
	.Screen/width DEI2 #0000
	&hor
		#43 .Screen/pixel DEO
		.Screen/x DEI2k INC2 ROT DEO2
		INC2 GTH2k ,&hor JCN
	POP2 POP2

RTN

@draw-hex ( byte color -- )

	STH
	DUP #04 SFT ,&parse JSR STHkr ,draw-char JSR
	#0f AND ,&parse JSR STHr ,draw-char JSR

RTN
	&parse ( byte -- char ) DUP #09 GTH ,&above JCN #30 ADD JMP2r 
	&above #57 ADD JMP2r

@draw-char ( char color -- )

	SWP
	[ #20 - #00 SWP #40 SFT2 ;font ++ ] .Screen/addr DEO2
	.Screen/sprite DEOk DEO
	.Screen/x DEI2k #0008 ++ ROT DEO2
	.Screen/y DEI2k #0010 -- ROT DEO2

JMP2r

~projects/assets/msx01x02.tal