( Dev/Mouse ) %RTN { JMP2r } %8+ { #0008 ADD2 } %++ { #0001 ADD2 } %-- { #0001 SUB2 } ;touch1 { xc 2 yc 2 r 2 } ;touch2 { xc 2 yc 2 r 2 } ;color { byte 1 } ;addr { short 2 } ;pointer { x 2 y 2 } ;circle { xc 2 yc 2 x 2 y 2 r 2 d 2 } ( devices ) |0100 ;System { vector 2 pad 6 r 2 g 2 b 2 } |0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 addr 2 color 1 } |0160 ;Mouse { vector 2 x 2 y 2 state 1 chord 1 } ( program ) |0200 ( theme ) #03fd =System.r #0ef3 =System.g #0bf2 =System.b ( vectors ) ,on-screen =Screen.vector ( vectors ) ,on-mouse =Mouse.vector BRK @on-screen ( clear ) ~touch1.xc ~touch1.yc ~touch1.r #00 ,draw-circle JSR2 ( clear ) ~touch2.xc ~touch2.yc ~touch2.r #00 ,draw-circle JSR2 ~touch1.r ++ =touch1.r ~touch2.r ++ =touch2.r ( draw ) ~touch1.xc ~touch1.yc ~touch1.r #03 ,draw-circle JSR2 ( draw ) ~touch2.xc ~touch2.yc ~touch2.r #02 ,draw-circle JSR2 ~touch1.xc ~touch1.yc #23 ,touch1.r #0001 ADD2 ,draw-byte JSR2 ~touch2.xc ~touch2.yc #28 ,touch2.r #0001 ADD2 ,draw-byte JSR2 BRK @on-mouse ,draw-cursor JSR2 ~Mouse.state #01 NEQ ,$no-touch1 JNZ2 ( clear ) ~touch1.xc ~touch1.yc ~touch1.r #00 ,draw-circle JSR2 ( update ) ~Mouse.x =touch1.xc ~Mouse.y =touch1.yc #0000 =touch1.r ( release ) #00 =Mouse.state $no-touch1 ~Mouse.state #10 NEQ ,$no-touch2 JNZ2 ( clear ) ~touch2.xc ~touch2.yc ~touch2.r #00 ,draw-circle JSR2 ( update ) ~Mouse.x =touch2.xc ~Mouse.y =touch2.yc #0000 =touch2.r ( release ) #00 =Mouse.state $no-touch2 BRK @draw-cursor ( -- ) ( clear last cursor ) ,clear_icn =Screen.addr ~pointer.x =Screen.x ~pointer.y =Screen.y #30 =Screen.color ( record pointer positions ) ~Mouse.x =pointer.x ~Mouse.y =pointer.y ( draw new cursor ) ,cursor_icn =Screen.addr ~pointer.x =Screen.x ~pointer.y =Screen.y #31 ~Mouse.state #00 NEQ ADD =Screen.color 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 @draw-byte ( x y color addr -- ) =addr STH =Screen.y =Screen.x ,font_hex #00 ~addr PEK2 #04 SFT #0008 MUL2 ADD2 =Screen.addr STHr DUP STH =Screen.color ,font_hex #00 ~addr PEK2 #0f AND #0008 MUL2 ADD2 =Screen.addr ~Screen.x 8+ =Screen.x STHr =Screen.color RTN @clear_icn [ 0000 0000 0000 0000 ] @cursor_icn [ 80c0 e0f0 f8e0 1000 ] @font_hex [ 003c 464a 5262 3c00 0018 0808 0808 1c00 003c 4202 3c40 7e00 003c 421c 0242 3c00 000c 1424 447e 0400 007e 407c 0242 3c00 003c 407c 4242 3c00 007e 0204 0810 1000 003c 423c 4242 3c00 003c 4242 3e02 3c00 003c 4242 7e42 4200 007c 427c 4242 7c00 003c 4240 4042 3c00 007c 4242 4242 7c00 007e 4078 4040 7e00 007e 4078 4040 4000 ]