uxn-notebook/one_line_canvas.tal

80 lines
1.9 KiB
Tal

|00 @System &vector $2 &expansion $2 &wst $1 &rst $1 &metadata $2 &r $2 &g $2 &b $2 &debug $1 &state $1
|10 @Console &vector $2 &read $1 &pad $4 &type $1 &write $1 &error $1
|20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1
|58 @canvas-width
|1f @canvas-height
(to run gui: `./run_ui.sh one_line_canvas.tal`)
(to run debugger: `../uxn/bin/uxnasm one_line_canvas.tal one_line_canvas.rom && ../uxn/bin/uxnemu ../beetbug.rom ./one_line_canvas.rom`)
%dbug { #01 .System/debug DEO }
%PX { #01 .Screen/pixel DEO }
|0100
@on-reset
setup-gui
#58 #58 #1f draw-h-line
#58 #58 #1f #02 MUL draw-h-line
#1f #58 #1f draw-v-line
#1f #02 #58 MUL #1f draw-v-line
BRK
@draw-v-line ( l x y )
SWP ( l y x )
#00 ( l y x 00 )
SWP .Screen/x DEO2 ( l y )
( store vars )
!{ &y $1 &l $1 }
,/y STR ,/l STR
&loop
( set y )
,/y LDR DUP ( y y )
#00 SWP ( y 00 y )
.Screen/y DEO2 ( y )
( draw pixel )
PX
( incrment y )
INC ( y+1 )
,/y STR ( )
( decrement l )
,/l LDR #01 ( l 01 )
SUB ( l-1 )
,/l STRk POP ( l )
#00 NEQ ?&loop
JMP2r
@draw-h-line ( l x y )
#00 ( l x y 00 )
SWP .Screen/y DEO2 ( l x )
( store vars )
!{ &x $1 &l $1 }
,/x STR ,/l STR
&loop
( set x )
,/x LDR DUP ( x x )
#00 SWP ( x 00 x )
.Screen/x DEO2 ( x )
( draw pixel )
PX
( incrment x )
INC ( x+1 )
,/x STR ( )
( decrement l )
,/l LDR #01 ( l 01 )
SUB ( l-1 )
,/l STRk POP ( l )
#00 NEQ ?&loop
JMP2r
@setup-gui ( -- )
(set screen height and width the 3x canvas size)
LIT2 =canvas-width #0003 MUL2 .Screen/width DEO2
LIT2 =canvas-height #0003 MUL2 .Screen/height DEO2
(set basic color scheme)
#f07f .System/r DEO2
#f0d6 .System/g DEO2
#f0b2 .System/b DEO2
JMP2r