mirror of
https://git.sr.ht/~rabbits/uxn
synced 2024-11-08 23:35:05 +00:00
161 lines
5 KiB
Text
161 lines
5 KiB
Text
( draw routines )
|
|
|
|
%RTN { JMP2r }
|
|
%++ { #0001 ADD2 }
|
|
%-- { #0001 SUB2 }
|
|
%8+ { #0008 ADD2 }
|
|
%ABS2 { DUP2 #000f SFT2 EQU #04 JNZ #ffff MUL2 }
|
|
|
|
;pict { x 2 y 2 width 2 height 2 color 1 addr 2 }
|
|
;rect { x1 2 y1 2 x2 2 y2 2 }
|
|
;line { x0 2 y0 2 x 2 y 2 sx 2 sy 2 dx 2 dy 2 e1 2 e2 2 }
|
|
;color { byte 1 }
|
|
|
|
;circle { xc 2 yc 2 x 2 y 2 r 2 d 2 }
|
|
|
|
|0110 ;Screen { width 2 height 2 pad 4 x 2 y 2 color 1 }
|
|
|0120 ;Sprite { pad 8 x 2 y 2 addr 2 color 1 }
|
|
|01F0 .RESET .FRAME .ERROR ( vectors )
|
|
|01F8 [ 13fd 1ef3 1bf2 ] ( palette )
|
|
|
|
|0200 @RESET
|
|
|
|
#0010 #0020 #0040 #0060 #01 ,fill-rect JSR2
|
|
#0020 #0030 #0050 #0070 #02 ,fill-rect JSR2
|
|
#0030 #0040 #0060 #0080 #03 ,fill-rect JSR2
|
|
#0070 #0020 #00a0 #0060 #01 ,line-rect JSR2
|
|
#0080 #0030 #00b0 #0070 #02 ,line-rect JSR2
|
|
#0090 #0040 #00c0 #0080 #03 ,line-rect JSR2
|
|
|
|
#0000 #0080 #0020 #0020 #01 ,pict_small ,draw-picture JSR2
|
|
#0010 #0088 #0020 #0020 #02 ,pict_small ,draw-picture JSR2
|
|
#0020 #0090 #0020 #0020 #03 ,pict_small ,draw-picture JSR2
|
|
#0030 #0098 #0020 #0020 #04 ,pict_small ,draw-picture JSR2
|
|
|
|
#0020 #0020 #0070 #0080 #01 ,draw-line JSR2
|
|
#0020 #0080 #0070 #0030 #02 ,draw-line JSR2
|
|
#00a0 #0020 #0050 #00b0 #03 ,draw-line JSR2
|
|
#00b0 #0090 #0030 #0010 #01 ,draw-line JSR2
|
|
|
|
#0040 #0040 #0030 #01 ,draw-circle JSR2
|
|
#0070 #0030 #0040 #02 ,draw-circle JSR2
|
|
#0050 #0080 #0050 #03 ,draw-circle JSR2
|
|
|
|
BRK
|
|
|
|
@draw-line ( x1 y1 x2 y2 color )
|
|
|
|
( load ) =color =line.y0 =line.x0 =line.y =line.x
|
|
~line.x0 ~line.x SUB2 ABS2 =line.dx
|
|
~line.y0 ~line.y SUB2 ABS2 #0000 SWP2 SUB2 =line.dy
|
|
#ffff #00 ~line.x ~line.x0 LTS2 #0002 MUL2 ADD2 =line.sx
|
|
#ffff #00 ~line.y ~line.y0 LTS2 #0002 MUL2 ADD2 =line.sy
|
|
~line.dx ~line.dy ADD2 =line.e1
|
|
$loop
|
|
~line.x =Screen.x ~line.y =Screen.y ~color =Screen.color
|
|
~line.x ~line.x0 EQU2 ~line.y ~line.y0 EQU2 #0101 EQU2 ^$end JNZ
|
|
~line.e1 #0002 MUL2 =line.e2
|
|
~line.e2 ~line.dy LTS2 ^$skipy JNZ
|
|
~line.e1 ~line.dy ADD2 =line.e1
|
|
~line.x ~line.sx ADD2 =line.x
|
|
$skipy
|
|
~line.e2 ~line.dx GTS2 ^$skipx JNZ
|
|
~line.e1 ~line.dx ADD2 =line.e1
|
|
~line.y ~line.sy ADD2 =line.y
|
|
$skipx
|
|
,$loop JMP2
|
|
|
|
$end
|
|
|
|
RTN
|
|
|
|
@line-rect ( x1 y1 x2 y2 color )
|
|
|
|
( load ) =color =rect.y2 =rect.x2 DUP2 =Screen.y =rect.y1 DUP2 =Screen.x =rect.x1
|
|
$hor
|
|
( incr ) ~Screen.x ++ =Screen.x
|
|
( draw ) ~rect.y1 =Screen.y ~color =Screen.color
|
|
( draw ) ~rect.y2 =Screen.y ~color =Screen.color
|
|
~Screen.x ~rect.x2 LTH2 ^$hor JNZ
|
|
~rect.y1 =Screen.y
|
|
$ver
|
|
( draw ) ~rect.x1 =Screen.x ~color =Screen.color
|
|
( draw ) ~rect.x2 =Screen.x ~color =Screen.color
|
|
( incr ) ~Screen.y ++ =Screen.y
|
|
~Screen.y ~rect.y2 ++ LTH2 ^$ver JNZ
|
|
|
|
RTN
|
|
|
|
@fill-rect ( x1 y1 x2 y2 color )
|
|
|
|
( load ) =color =rect.y2 =rect.x2 DUP2 =Screen.y =rect.y1 DUP2 =Screen.x =rect.x1
|
|
$ver
|
|
~rect.x1 =Screen.x
|
|
$hor
|
|
( draw ) ~color =Screen.color
|
|
( incr ) ~Screen.x ++ =Screen.x
|
|
~Screen.x ~rect.x2 LTH2 ^$hor JNZ
|
|
( incr ) ~Screen.y ++ =Screen.y
|
|
~Screen.y ~rect.y2 LTH2 ^$ver JNZ
|
|
|
|
RTN
|
|
|
|
@draw-picture ( x y width height color addr )
|
|
|
|
( load ) DUP2 =Sprite.addr =pict.addr =pict.color =pict.height =pict.width DUP2 =Sprite.y =pict.y =pict.x
|
|
$ver
|
|
~pict.x =Sprite.x
|
|
$hor
|
|
( draw ) ~pict.color =Sprite.color
|
|
( incr ) ~Sprite.x 8+ =Sprite.x
|
|
( incr ) ~Sprite.addr 8+ =Sprite.addr
|
|
~Sprite.x ~pict.width ~pict.x ADD2 LTH2 ^$hor JNZ
|
|
( incr ) ~Sprite.y 8+ =Sprite.y
|
|
~Sprite.y ~pict.height ~pict.y ADD2 LTH2 ^$ver JNZ
|
|
|
|
RTN
|
|
|
|
@draw-circle ( xc yc r color )
|
|
|
|
( load ) =color =circle.r =circle.yc =circle.xc
|
|
#0000 =circle.x ~circle.r =circle.y
|
|
~circle.r #0002 MUL2 #0003 SUB2 =circle.d
|
|
( draw ) ,$seg JSR2
|
|
$loop
|
|
( incr ) ~circle.x ++ =circle.x
|
|
~circle.d #0000 #0001 ADD2 LTS2 ^$else JNZ
|
|
( decr ) ~circle.y -- =circle.y
|
|
~circle.x ~circle.y SUB2 #0004 MUL2 ~circle.d ADD2 #000a ADD2 =circle.d
|
|
,$end JMP2
|
|
$else
|
|
~circle.x #0004 MUL2 ~circle.d ADD2 #0006 ADD2 =circle.d
|
|
$end
|
|
( draw ) ,$seg JSR2
|
|
~circle.y ~circle.x #0001 SUB2 GTS2 ^$loop JNZ
|
|
RTN
|
|
$seg
|
|
~circle.xc ~circle.x ADD2 =Screen.x ~circle.yc ~circle.y ADD2 =Screen.y ~color =Screen.color
|
|
~circle.xc ~circle.x SUB2 =Screen.x ~circle.yc ~circle.y ADD2 =Screen.y ~color =Screen.color
|
|
~circle.xc ~circle.x ADD2 =Screen.x ~circle.yc ~circle.y SUB2 =Screen.y ~color =Screen.color
|
|
~circle.xc ~circle.x SUB2 =Screen.x ~circle.yc ~circle.y SUB2 =Screen.y ~color =Screen.color
|
|
~circle.xc ~circle.y ADD2 =Screen.x ~circle.yc ~circle.x ADD2 =Screen.y ~color =Screen.color
|
|
~circle.xc ~circle.y SUB2 =Screen.x ~circle.yc ~circle.x ADD2 =Screen.y ~color =Screen.color
|
|
~circle.xc ~circle.y ADD2 =Screen.x ~circle.yc ~circle.x SUB2 =Screen.y ~color =Screen.color
|
|
~circle.xc ~circle.y SUB2 =Screen.x ~circle.yc ~circle.x SUB2 =Screen.y ~color =Screen.color
|
|
|
|
RTN
|
|
|
|
@pict_small [
|
|
|
|
ff80 8080 8080 8088 ffff fffc f8f9 f1f4
|
|
ffff 0010 c721 2120 ffff 3f0f 0717 c343
|
|
8888 8080 8080 8080 f0f1 f2f5 f2f1 f0f4
|
|
1208 804c 9212 4c00 7303 0343 1b1b fbfb
|
|
8080 8f83 8383 8393 f0f3 f1f0 e4c0 80ff
|
|
00c7 c7c6 4606 00ff c3d3 c307 870f 3fff
|
|
8f83 8383 8383 83ff fff7 fdff c0e2 f1ff
|
|
7fef bfff 07af 5fff ffff ffff ffff ffff
|
|
]
|
|
|
|
@FRAME BRK
|
|
@ERROR BRK
|