( 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 JNZ2 ~line.e1 #0002 MUL2 =line.e2 ~line.e2 ~line.dy LTS2 ,$skipy JNZ2 ~line.e1 ~line.dy ADD2 =line.e1 ~line.x ~line.sx ADD2 =line.x $skipy ~line.e2 ~line.dx GTS2 ,$skipx JNZ2 ~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 JNZ2 ~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 JNZ2 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 JNZ2 ( incr ) ~Screen.y ++ =Screen.y ~Screen.y ~rect.y2 LTH2 ,$ver JNZ2 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 JNZ2 ( incr ) ~Sprite.y 8+ =Sprite.y ~Sprite.y ~pict.height ~pict.y ADD2 LTH2 ,$ver JNZ2 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 JNZ2 ( 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 JNZ2 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