From ffded2f6422b8eabd76267c81c99370023cb4f4e Mon Sep 17 00:00:00 2001 From: neauoire Date: Fri, 9 Apr 2021 10:01:53 -0700 Subject: [PATCH] Merged sprite in screen device --- build.sh | 2 +- projects/examples/dev.audio.usm | 151 ++++++------ projects/examples/dev.controller.usm | 37 ++- projects/examples/dev.keys.usm | 18 +- projects/examples/dev.mouse.usm | 19 +- projects/examples/dev.screen.usm | 101 ++++---- projects/examples/dev.time.usm | 41 ++-- projects/examples/gui.hover.usm | 19 +- projects/examples/gui.label.usm | 35 ++- projects/examples/gui.picture.usm | 25 +- projects/examples/gui.shapes.usm | 27 ++- projects/software/left.usm | 333 +++++++++++++-------------- projects/software/nasu.usm | 193 ++++++++-------- projects/software/neralie.usm | 25 +- projects/software/noodle.usm | 163 +++++++------ projects/software/orca.usm | 2 +- src/emulator.c | 32 +-- src/uxn.h | 6 +- 18 files changed, 597 insertions(+), 632 deletions(-) diff --git a/build.sh b/build.sh index b3063de..cc47c2f 100755 --- a/build.sh +++ b/build.sh @@ -32,7 +32,7 @@ else fi echo "Assembling.." -./bin/assembler projects/software/noodle.usm bin/boot.rom +./bin/assembler projects/examples/gui.shapes.usm bin/boot.rom echo "Running.." if [ "${2}" = '--cli' ]; diff --git a/projects/examples/dev.audio.usm b/projects/examples/dev.audio.usm index ec7426b..f1eaf5d 100644 --- a/projects/examples/dev.audio.usm +++ b/projects/examples/dev.audio.usm @@ -28,8 +28,7 @@ |0100 ;System { vector 2 pad 6 r 2 g 2 b 2 } |0110 ;Console { pad 8 char 1 byte 1 short 2 } -|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 color 1 } -|0130 ;Sprite { vector 2 pad 6 x 2 y 2 addr 2 color 1 } +|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 addr 2 color 1 } |0140 ;Controller { vector 2 button 1 } |0150 ;Keys { vector 2 key 1 } |0160 ;Mouse { vector 2 x 2 y 2 state 1 chord 1 } @@ -223,14 +222,14 @@ RTN @move-head ( -- ) ( clear ) - ~trkframe.y1 8- =Sprite.y - ~trkframe.x1 #00 ~head.pos ADD2 =Sprite.x - ,head_icn =Sprite.addr - #00 =Sprite.color + ~trkframe.y1 8- =Screen.y + ~trkframe.x1 #00 ~head.pos ADD2 =Screen.x + ,head_icn =Screen.addr + #20 =Screen.color ( incr ) ~head.pos #01 ADD =head.pos - ~trkframe.x1 #00 ~head.pos ADD2 =Sprite.x - ,head_icn =Sprite.addr - #01 ( if note ) TRACK #00 ~head.pos #08 DIV ADD2 PEK2 #00 NEQ ADD =Sprite.color + ~trkframe.x1 #00 ~head.pos ADD2 =Screen.x + ,head_icn =Screen.addr + #21 ( if note ) TRACK #00 ~head.pos #08 DIV ADD2 PEK2 #00 NEQ ADD =Screen.color RTN @@ -239,10 +238,10 @@ RTN #00 #20 $loop ( load ) OVR #00 SWP TRACK ADD2 PEK2 - DUP STH #00 SWP #0e SWP SUB 8* ~trkframe.y1 ADD2 =Sprite.y - OVR #00 SWP 8* ~trkframe.x1 ADD2 =Sprite.x + DUP STH #00 SWP #0e SWP SUB 8* ~trkframe.y1 ADD2 =Screen.y + OVR #00 SWP 8* ~trkframe.x1 ADD2 =Screen.x STHr #00 EQU ^$skip JNZ - #00 =Sprite.color + #20 =Screen.color $skip ( incr ) SWP #01 ADD SWP DUP2 LTH ^$loop JNZ @@ -255,11 +254,11 @@ RTN #00 #20 $notes-loop ( load ) OVR #00 SWP TRACK ADD2 PEK2 - DUP STH #00 SWP #0e SWP SUB 8* ~trkframe.y1 ADD2 =Sprite.y - OVR #00 SWP 8* ~trkframe.x1 ADD2 =Sprite.x - ,note_icn =Sprite.addr + DUP STH #00 SWP #0e SWP SUB 8* ~trkframe.y1 ADD2 =Screen.y + OVR #00 SWP 8* ~trkframe.x1 ADD2 =Screen.x + ,note_icn =Screen.addr STHr #00 EQU ^$skip JNZ - #05 =Sprite.color + #25 =Screen.color $skip ( incr ) SWP #01 ADD SWP DUP2 LTH ^$notes-loop JNZ @@ -273,14 +272,14 @@ RTN ~trkframe.x1 ~trkframe.y1 ~trkframe.x2 ~trkframe.y2 #01 ,line-rect JSR2 ( grid ) - ~trkframe.y1 #0010 SUB2 =Sprite.y - ,font_hex =Sprite.addr + ~trkframe.y1 #0010 SUB2 =Screen.y + ,font_hex =Screen.addr #0000 #0100 $loop OVR2 SWP POP #02 DIV #0f AND #00 NEQ ^$skip JNZ - OVR2 ~trkframe.x1 ADD2 =Sprite.x - #02 =Sprite.color - ~Sprite.addr 8+ =Sprite.addr + OVR2 ~trkframe.x1 ADD2 =Screen.x + #22 =Screen.color + ~Screen.addr 8+ =Screen.addr OVR2 ~trkframe.x1 ADD2 ~trkframe.y1 ++ ~trkframe.y2 #01 ,line-vertical-dotted JSR2 $skip OVR2 ~trkframe.x1 ADD2 ~trkframe.y1 ~trkframe.y2 #01 ,line-vertical-dotted JSR2 @@ -295,18 +294,18 @@ RTN @draw-octave ( x y -- ) - =Sprite.y - =Sprite.x - ,octave_icn =Sprite.addr - ~Sprite.y ~Sprite.y #0038 ADD2 + =Screen.y + =Screen.x + ,octave_icn =Screen.addr + ~Screen.y ~Screen.y #0038 ADD2 $loop - OVR2 =Sprite.y - #01 =Sprite.color - ~Sprite.addr 8+ =Sprite.addr - ~Sprite.x 8+ =Sprite.x - #01 =Sprite.color - ~Sprite.addr 8+ =Sprite.addr - ~Sprite.x 8- =Sprite.x + OVR2 =Screen.y + #21 =Screen.color + ~Screen.addr 8+ =Screen.addr + ~Screen.x 8+ =Screen.x + #21 =Screen.color + ~Screen.addr 8+ =Screen.addr + ~Screen.x 8- =Screen.x SWP2 8+ SWP2 OVR2 OVR2 LTH2 ^$loop JNZ POP2 @@ -318,20 +317,20 @@ RTN ~trkframe.x1 #0018 SUB2 DUP2 ~trkframe.y1 ,draw-octave JSR2 ~trkframe.y1 #0038 ADD2 ,draw-octave JSR2 - ~trkframe.x1 #0028 SUB2 =Sprite.x - ~trkframe.y1 #0030 ADD2 =Sprite.y - ,font_hex #0028 ADD2 =Sprite.addr - #03 =Sprite.color - ~trkframe.x1 #0030 SUB2 =Sprite.x - ,font_hex #0060 ADD2 =Sprite.addr - #03 =Sprite.color - ~trkframe.x1 #0028 SUB2 =Sprite.x - ~trkframe.y1 #0068 ADD2 =Sprite.y - ,font_hex #0020 ADD2 =Sprite.addr - #03 =Sprite.color - ~trkframe.x1 #0030 SUB2 =Sprite.x - ,font_hex #0060 ADD2 =Sprite.addr - #03 =Sprite.color + ~trkframe.x1 #0028 SUB2 =Screen.x + ~trkframe.y1 #0030 ADD2 =Screen.y + ,font_hex #0028 ADD2 =Screen.addr + #23 =Screen.color + ~trkframe.x1 #0030 SUB2 =Screen.x + ,font_hex #0060 ADD2 =Screen.addr + #23 =Screen.color + ~trkframe.x1 #0028 SUB2 =Screen.x + ~trkframe.y1 #0068 ADD2 =Screen.y + ,font_hex #0020 ADD2 =Screen.addr + #23 =Screen.color + ~trkframe.x1 #0030 SUB2 =Screen.x + ,font_hex #0060 ADD2 =Screen.addr + #23 =Screen.color RTN @@ -345,19 +344,19 @@ RTN @draw-knob ( x* y* value -- ) ( load ) =knob.value =knob.y =knob.x - ~knob.x =Sprite.x - ~knob.y =Sprite.y ,knob_icns =Sprite.addr #01 =Sprite.color - ~knob.x 8+ =Sprite.x ,knob_icns 8+ =Sprite.addr #01 =Sprite.color - ~knob.y 8+ =Sprite.y ,knob_icns #0018 ADD2 =Sprite.addr #01 =Sprite.color - ~knob.x =Sprite.x ,knob_icns #0010 ADD2 =Sprite.addr #01 =Sprite.color - ~knob.x #00 #00 ~knob.value ,knob_offsetx ADD2 PEK2 ADD2 =Sprite.x - ~knob.y #00 #00 ~knob.value ,knob_offsety ADD2 PEK2 ADD2 =Sprite.y - ,knob_icns #0020 ADD2 =Sprite.addr - #05 =Sprite.color - ~knob.x #0004 ADD2 =Sprite.x - ~knob.y #0010 ADD2 =Sprite.y - ,font_hex #00 ~knob.value #08 MUL ADD2 =Sprite.addr - #01 =Sprite.color + ~knob.x =Screen.x + ~knob.y =Screen.y ,knob_icns =Screen.addr #21 =Screen.color + ~knob.x 8+ =Screen.x ,knob_icns 8+ =Screen.addr #21 =Screen.color + ~knob.y 8+ =Screen.y ,knob_icns #0018 ADD2 =Screen.addr #21 =Screen.color + ~knob.x =Screen.x ,knob_icns #0010 ADD2 =Screen.addr #21 =Screen.color + ~knob.x #00 #00 ~knob.value ,knob_offsetx ADD2 PEK2 ADD2 =Screen.x + ~knob.y #00 #00 ~knob.value ,knob_offsety ADD2 PEK2 ADD2 =Screen.y + ,knob_icns #0020 ADD2 =Screen.addr + #25 =Screen.color + ~knob.x #0004 ADD2 =Screen.x + ~knob.y #0010 ADD2 =Screen.y + ,font_hex #00 ~knob.value #08 MUL ADD2 =Screen.addr + #21 =Screen.color RTN @@ -365,7 +364,7 @@ RTN ~ctlframe.x1 ~ctlframe.y1 ~ctlframe.x2 ~ctlframe.y2 #01 ,line-rect JSR2 ( env ) - ~ctlframe.x1 8+ ~ctlframe.y1 8+ #02 ,env_txt ,draw-label JSR2 + ~ctlframe.x1 8+ ~ctlframe.y1 8+ #22 ,env_txt ,draw-label JSR2 ~ctlframe.x1 8+ ~ctlframe.y1 #0010 ADD2 ,adsr #00 ~track.active #04 MUL ADD2 PEK2 #04 SFT ,draw-knob JSR2 @@ -379,7 +378,7 @@ RTN ,adsr #00 ~track.active #04 MUL ADD2 #0003 ADD2 PEK2 #04 SFT ,draw-knob JSR2 ( vol ) - ~ctlframe.x1 #0058 ADD2 ~ctlframe.y1 8+ #02 ,vol_txt ,draw-label JSR2 + ~ctlframe.x1 #0058 ADD2 ~ctlframe.y1 8+ #22 ,vol_txt ,draw-label JSR2 ~ctlframe.x1 #0058 ADD2 ~ctlframe.y1 #0010 ADD2 ,volume #00 ~track.active ADD2 PEK2 #04 SFT ,draw-knob JSR2 @@ -392,27 +391,27 @@ RTN @draw-channels ~chnframe.x1 ~chnframe.y1 ~chnframe.x2 ~chnframe.y2 #01 ,line-rect JSR2 - ~chnframe.x1 8+ ~chnframe.y1 8+ #01 ~track.active #00 EQU #07 MUL ADD ,ch1_txt ,draw-label JSR2 - ~chnframe.x1 8+ ~chnframe.y1 #0010 ADD2 #01 ~track.active #01 EQU #07 MUL ADD ,ch2_txt ,draw-label JSR2 - ~chnframe.x1 8+ ~chnframe.y1 #0018 ADD2 #01 ~track.active #02 EQU #07 MUL ADD ,ch3_txt ,draw-label JSR2 - ~chnframe.x1 8+ ~chnframe.y1 #0020 ADD2 #01 ~track.active #03 EQU #07 MUL ADD ,ch4_txt ,draw-label JSR2 + ~chnframe.x1 8+ ~chnframe.y1 8+ #21 ~track.active #00 EQU #07 MUL ADD ,ch1_txt ,draw-label JSR2 + ~chnframe.x1 8+ ~chnframe.y1 #0010 ADD2 #21 ~track.active #01 EQU #07 MUL ADD ,ch2_txt ,draw-label JSR2 + ~chnframe.x1 8+ ~chnframe.y1 #0018 ADD2 #21 ~track.active #02 EQU #07 MUL ADD ,ch3_txt ,draw-label JSR2 + ~chnframe.x1 8+ ~chnframe.y1 #0020 ADD2 #21 ~track.active #03 EQU #07 MUL ADD ,ch4_txt ,draw-label JSR2 RTN @draw-cursor ( -- ) ( clear last cursor ) - ,clear_icn =Sprite.addr - ~pointer.x =Sprite.x - ~pointer.y =Sprite.y - #10 =Sprite.color + ,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 =Sprite.addr - ~pointer.x =Sprite.x - ~pointer.y =Sprite.y - #12 ~Mouse.state #00 NEQ ADD =Sprite.color + ,cursor_icn =Screen.addr + ~pointer.x =Screen.x + ~pointer.y =Screen.y + #32 ~Mouse.state #00 NEQ ADD =Screen.color RTN @@ -420,12 +419,12 @@ RTN @draw-label ( x y color addr -- ) - ( load ) =label.addr =label.color =Sprite.y =Sprite.x + ( load ) =label.addr =label.color =Screen.y =Screen.x ~label.addr $loop - ( draw ) DUP2 PEK2 #00 SWP 8* ,font ADD2 =Sprite.addr ~label.color =Sprite.color + ( draw ) DUP2 PEK2 #00 SWP 8* ,font ADD2 =Screen.addr ~label.color =Screen.color ( incr ) ++ - ( incr ) ~Sprite.x 8+ =Sprite.x + ( incr ) ~Screen.x 8+ =Screen.x DUP2 PEK2 #00 NEQ ^$loop JNZ POP2 diff --git a/projects/examples/dev.controller.usm b/projects/examples/dev.controller.usm index f82c074..fca943c 100644 --- a/projects/examples/dev.controller.usm +++ b/projects/examples/dev.controller.usm @@ -11,8 +11,7 @@ ( 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 color 1 } -|0130 ;Sprite { vector 2 pad 6 x 2 y 2 addr 2 color 1 } +|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 addr 2 color 1 } |0140 ;Controller { vector 2 p1 1 } |0200 @@ -21,46 +20,46 @@ ( vectors ) ,FRAME =Screen.vector ( set origin ) - ~Screen.width 2/ =Sprite.x - ~Screen.height 2/ =Sprite.y - ,default_icn =Sprite.addr - #11 =Sprite.color - #0a =slime + ~Screen.width 2/ =Screen.x + ~Screen.height 2/ =Screen.y + ,default_icn =Screen.addr + #31 =Screen.color + #2a =slime BRK @FRAME - #0a =slime - ,default_icn =Sprite.addr + #2a =slime + ,default_icn =Screen.addr ( hold ctrl key to change slime color ) ~Controller.p1 #0f AND - DUP #01 NEQ ^$no-ctrl JNZ #05 =slime $no-ctrl - DUP #02 NEQ ^$no-alt JNZ #0f =slime $no-alt + DUP #01 NEQ ^$no-ctrl JNZ #25 =slime $no-ctrl + DUP #02 NEQ ^$no-alt JNZ #2f =slime $no-alt POP - ( clear ) #10 =Sprite.color + ( clear ) #30 =Screen.color ( detect movement ) ~Controller.p1 #f0 AND DUP #04 SFT #01 AND #01 NEQ ^$no-up JNZ - ( move ) ~Sprite.y -- =Sprite.y ,up_icn =Sprite.addr $no-up + ( move ) ~Screen.y -- =Screen.y ,up_icn =Screen.addr $no-up DUP #05 SFT #01 AND #01 NEQ ^$no-down JNZ - ( move ) ~Sprite.y ++ =Sprite.y ,down_icn =Sprite.addr $no-down + ( move ) ~Screen.y ++ =Screen.y ,down_icn =Screen.addr $no-down DUP #06 SFT #01 AND #01 NEQ ^$no-left JNZ - ( move ) ~Sprite.x -- =Sprite.x ,left_icn =Sprite.addr $no-left + ( move ) ~Screen.x -- =Screen.x ,left_icn =Screen.addr $no-left DUP #07 SFT #01 AND #01 NEQ ^$no-right JNZ - ( move ) ~Sprite.x ++ =Sprite.x ,right_icn =Sprite.addr $no-right + ( move ) ~Screen.x ++ =Screen.x ,right_icn =Screen.addr $no-right POP ( draw face ) - #11 =Sprite.color + #31 =Screen.color ( draw slime ) - ,slime_icn =Sprite.addr - ~slime =Sprite.color + ,slime_icn =Screen.addr + ~slime =Screen.color BRK diff --git a/projects/examples/dev.keys.usm b/projects/examples/dev.keys.usm index fac7a73..c918e4c 100644 --- a/projects/examples/dev.keys.usm +++ b/projects/examples/dev.keys.usm @@ -5,7 +5,7 @@ %8* { #0030 SFT2 } |0100 ;System { vector 2 pad 6 r 2 g 2 b 2 } -|0130 ;Sprite { vector 2 pad 6 x 2 y 2 addr 2 color 1 } +|0120 ;Screen { vector 2 pad 6 x 2 y 2 addr 2 color 1 } |0140 ;Controller { vector 2 button 1 } |0150 ;Keys { vector 2 key 1 } @@ -22,10 +22,10 @@ BRK @KEY - ,cursor_icn =Sprite.addr - ,font #00 ~Keys.key 8* ADD2 =Sprite.addr - ( draw ) #01 =Sprite.color - ~Sprite.x 8+ =Sprite.x + ,cursor_icn =Screen.addr + ,font #00 ~Keys.key 8* ADD2 =Screen.addr + ( draw ) #21 =Screen.color + ~Screen.x 8+ =Screen.x ( release ) #00 =Keys.key ,draw-cursor JSR2 @@ -35,9 +35,9 @@ BRK ( enter key ) ~Controller.button #08 NEQ ^$no-return JNZ - #00 =Sprite.color - #0000 =Sprite.x - ( incr ) ~Sprite.y 8+ =Sprite.y + #20 =Screen.color + #0000 =Screen.x + ( incr ) ~Screen.y 8+ =Screen.y ( release ) #00 =Controller.button ,draw-cursor JSR2 $no-return @@ -46,7 +46,7 @@ BRK @draw-cursor - ,cursor_icn =Sprite.addr #02 =Sprite.color + ,cursor_icn =Screen.addr #22 =Screen.color RTN diff --git a/projects/examples/dev.mouse.usm b/projects/examples/dev.mouse.usm index b4d9291..4982112 100644 --- a/projects/examples/dev.mouse.usm +++ b/projects/examples/dev.mouse.usm @@ -9,8 +9,7 @@ ;circle { xc 2 yc 2 x 2 y 2 r 2 d 2 } |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 color 1 } -|0130 ;Sprite { vector 2 pad 6 x 2 y 2 addr 2 color 1 } +|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 ) @@ -48,19 +47,19 @@ BRK @draw-cursor ( -- ) ( clear last cursor ) - ,clear_icn =Sprite.addr - ~pointer.x =Sprite.x - ~pointer.y =Sprite.y - #10 =Sprite.color + ,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 =Sprite.addr - ~pointer.x =Sprite.x - ~pointer.y =Sprite.y - #11 ~Mouse.state #00 NEQ ADD =Sprite.color + ,cursor_icn =Screen.addr + ~pointer.x =Screen.x + ~pointer.y =Screen.y + #31 ~Mouse.state #00 NEQ ADD =Screen.color RTN diff --git a/projects/examples/dev.screen.usm b/projects/examples/dev.screen.usm index d1bf971..680f6de 100644 --- a/projects/examples/dev.screen.usm +++ b/projects/examples/dev.screen.usm @@ -22,8 +22,7 @@ } |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 color 1 } -|0130 ;Sprite { vector 2 pad 6 x 2 y 2 addr 2 color 1 } +|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 ) @@ -130,11 +129,11 @@ RTN POP2 POP2 ( draw blending modes ) - #0020 =Sprite.x #0020 =Sprite.y ,icon_icn =Sprite.addr - #00 #10 + #0000 =Screen.x #0020 =Screen.y ,icon_icn =Screen.addr + #20 #30 $draw-blends - ( move ) OVR #00 SWP #0008 MUL2 #0020 ADD2 =Sprite.x - ( draw ) OVR =Sprite.color + ( move ) OVR #00 SWP #0008 MUL2 =Screen.x + ( draw ) OVR =Screen.color ( incr ) SWP #01 ADD SWP DUP2 LTH ^$draw-blends JNZ POP POP @@ -149,52 +148,52 @@ RTN ~window.x1 ~window.y1 ~window.x2 ~window.y2 #01 ,line-rect JSR2 ~window.x1 #0002 SUB2 ~window.y1 #0002 SUB2 ~window.x2 #0002 ADD2 ~window.y2 #0002 ADD2 #01 ,line-rect JSR2 - ~window.x1 #0008 ADD2 ~window.y1 #0010 ADD2 #05 ,red_txt ,draw-label JSR2 - ~window.x1 #0008 ADD2 ~window.y1 #0020 ADD2 #05 ,green_txt ,draw-label JSR2 - ~window.x1 #0008 ADD2 ~window.y1 #0030 ADD2 #05 ,blue_txt ,draw-label JSR2 + ~window.x1 #0008 ADD2 ~window.y1 #0010 ADD2 #25 ,red_txt ,draw-label JSR2 + ~window.x1 #0008 ADD2 ~window.y1 #0020 ADD2 #25 ,green_txt ,draw-label JSR2 + ~window.x1 #0008 ADD2 ~window.y1 #0030 ADD2 #25 ,blue_txt ,draw-label JSR2 ~window.x1 #0050 ADD2 ~window.y1 #0010 ADD2 ~window.x1 #0080 ADD2 #00 ,theme.r1 ~selection ADD PEK2 #0004 MUL2 #01 ,draw-slider JSR2 ~window.x1 #0050 ADD2 ~window.y1 #0020 ADD2 ~window.x1 #0080 ADD2 #00 ,theme.g1 ~selection ADD PEK2 #0004 MUL2 #01 ,draw-slider JSR2 ~window.x1 #0050 ADD2 ~window.y1 #0030 ADD2 ~window.x1 #0080 ADD2 #00 ,theme.b1 ~selection ADD PEK2 #0004 MUL2 #01 ,draw-slider JSR2 - ~window.x1 #0050 ADD2 =Sprite.x - ~window.y1 #0040 ADD2 =Sprite.y - ,radio_icns #00 ~selection #00 EQU #0008 MUL2 ADD2 =Sprite.addr - #05 =Sprite.color + ~window.x1 #0050 ADD2 =Screen.x + ~window.y1 #0040 ADD2 =Screen.y + ,radio_icns #00 ~selection #00 EQU #0008 MUL2 ADD2 =Screen.addr + #25 =Screen.color - ~window.x1 #0060 ADD2 =Sprite.x - ~window.y1 #0040 ADD2 =Sprite.y - ,radio_icns #00 ~selection #01 EQU #0008 MUL2 ADD2 =Sprite.addr - #05 =Sprite.color + ~window.x1 #0060 ADD2 =Screen.x + ~window.y1 #0040 ADD2 =Screen.y + ,radio_icns #00 ~selection #01 EQU #0008 MUL2 ADD2 =Screen.addr + #25 =Screen.color - ~window.x1 #0070 ADD2 =Sprite.x - ~window.y1 #0040 ADD2 =Sprite.y - ,radio_icns #00 ~selection #02 EQU #0008 MUL2 ADD2 =Sprite.addr - #05 =Sprite.color + ~window.x1 #0070 ADD2 =Screen.x + ~window.y1 #0040 ADD2 =Screen.y + ,radio_icns #00 ~selection #02 EQU #0008 MUL2 ADD2 =Screen.addr + #25 =Screen.color - ~window.x1 #0080 ADD2 =Sprite.x - ~window.y1 #0040 ADD2 =Sprite.y - ,radio_icns #00 ~selection #03 EQU #0008 MUL2 ADD2 =Sprite.addr - #05 =Sprite.color + ~window.x1 #0080 ADD2 =Screen.x + ~window.y1 #0040 ADD2 =Screen.y + ,radio_icns #00 ~selection #03 EQU #0008 MUL2 ADD2 =Screen.addr + #25 =Screen.color RTN @draw-cursor ( clear last cursor ) - ,clear_icn =Sprite.addr - ~pointer.x =Sprite.x - ~pointer.y =Sprite.y - #10 =Sprite.color + ,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 ) - ,pointer_icn =Sprite.addr - ~pointer.x =Sprite.x - ~pointer.y =Sprite.y - #13 =Sprite.color + ,pointer_icn =Screen.addr + ~pointer.x =Screen.x + ~pointer.y =Screen.y + #33 =Screen.color RTN @@ -202,26 +201,26 @@ RTN ( load ) =color =slider.pos =slider.x2 =slider.y =slider.x1 - ~slider.x1 =Sprite.x - ~slider.y =Sprite.y - ,halftone_icn =Sprite.addr + ~slider.x1 =Screen.x + ~slider.y =Screen.y + ,halftone_icn =Screen.addr - ,slidera_icn =Sprite.addr - ( draw ) #05 =Sprite.color - ,sliderb_icn =Sprite.addr + ,slidera_icn =Screen.addr + ( draw ) #25 =Screen.color + ,sliderb_icn =Screen.addr $loop - ( incr ) ~Sprite.x 8+ =Sprite.x - ( draw ) #05 =Sprite.color - ~Sprite.x ~slider.x2 #0008 ADD2 LTH2 ^$loop JNZ + ( incr ) ~Screen.x 8+ =Screen.x + ( draw ) #25 =Screen.color + ~Screen.x ~slider.x2 #0008 ADD2 LTH2 ^$loop JNZ - ( incr ) ~Sprite.x #0004 ADD2 =Sprite.x - ,sliderc_icn =Sprite.addr - ( draw ) #05 =Sprite.color + ( incr ) ~Screen.x #0004 ADD2 =Screen.x + ,sliderc_icn =Screen.addr + ( draw ) #25 =Screen.color - ~slider.x1 ~slider.pos ADD2 =Sprite.x - ,sliderd_icn =Sprite.addr - ( draw ) #0a =Sprite.color + ~slider.x1 ~slider.pos ADD2 =Screen.x + ,sliderd_icn =Screen.addr + ( draw ) #2a =Screen.color RTN @@ -258,11 +257,11 @@ RTN @draw-label ( x y color addr ) - ( load ) =label.addr =color =Sprite.y =Sprite.x ~label.addr + ( load ) =label.addr =color =Screen.y =Screen.x ~label.addr $loop - ( draw ) DUP2 PEK2 #00 SWP #0008 MUL2 ,font ADD2 =Sprite.addr ~color =Sprite.color + ( draw ) DUP2 PEK2 #00 SWP #0008 MUL2 ,font ADD2 =Screen.addr ~color =Screen.color ( incr ) ++ - ( incr ) ~Sprite.x 8+ =Sprite.x + ( incr ) ~Screen.x 8+ =Screen.x DUP2 PEK2 #00 NEQ ^$loop JNZ POP2 diff --git a/projects/examples/dev.time.usm b/projects/examples/dev.time.usm index cc6ecfc..1ef72df 100644 --- a/projects/examples/dev.time.usm +++ b/projects/examples/dev.time.usm @@ -15,8 +15,7 @@ ( 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 color 1 } -|0130 ;Sprite { vector 2 pad 6 x 2 y 2 addr 2 color 1 } +|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 addr 2 color 1 } |01a0 ;DateTime { year 2 month 1 day 1 hour 1 minute 1 second 1 dotw 1 doty 2 isdst 1 refresh 1 } ( program ) @@ -69,26 +68,26 @@ BRK POP2 ( display ) - ~Screen.height #0002 DIV2 #0048 ADD2 =Sprite.y + ~Screen.height #0002 DIV2 #0048 ADD2 =Screen.y ~Screen.width #0002 DIV2 - DUP2 #0020 SUB2 =Sprite.x - ,font_hex #00 ~DateTime.hour #0a DIV #08 MUL ADD2 =Sprite.addr - #02 =Sprite.color - DUP2 #0018 SUB2 =Sprite.x - ,font_hex #00 ~DateTime.hour #0a MOD #08 MUL ADD2 =Sprite.addr - #02 =Sprite.color - DUP2 #0008 SUB2 =Sprite.x - ,font_hex #00 ~DateTime.minute #0a DIV #08 MUL ADD2 =Sprite.addr - #02 =Sprite.color - DUP2 =Sprite.x - ,font_hex #00 ~DateTime.minute #0a MOD #08 MUL ADD2 =Sprite.addr - #02 =Sprite.color - DUP2 #0010 ADD2 =Sprite.x - ,font_hex #00 ~DateTime.second #0a DIV #08 MUL ADD2 =Sprite.addr - #02 =Sprite.color - DUP2 #0018 ADD2 =Sprite.x - ,font_hex #00 ~DateTime.second #0a MOD #08 MUL ADD2 =Sprite.addr - #02 =Sprite.color + DUP2 #0020 SUB2 =Screen.x + ,font_hex #00 ~DateTime.hour #0a DIV #08 MUL ADD2 =Screen.addr + #22 =Screen.color + DUP2 #0018 SUB2 =Screen.x + ,font_hex #00 ~DateTime.hour #0a MOD #08 MUL ADD2 =Screen.addr + #22 =Screen.color + DUP2 #0008 SUB2 =Screen.x + ,font_hex #00 ~DateTime.minute #0a DIV #08 MUL ADD2 =Screen.addr + #22 =Screen.color + DUP2 =Screen.x + ,font_hex #00 ~DateTime.minute #0a MOD #08 MUL ADD2 =Screen.addr + #22 =Screen.color + DUP2 #0010 ADD2 =Screen.x + ,font_hex #00 ~DateTime.second #0a DIV #08 MUL ADD2 =Screen.addr + #22 =Screen.color + DUP2 #0018 ADD2 =Screen.x + ,font_hex #00 ~DateTime.second #0a MOD #08 MUL ADD2 =Screen.addr + #22 =Screen.color POP2 BRK diff --git a/projects/examples/gui.hover.usm b/projects/examples/gui.hover.usm index b3dc148..7ef1fbe 100644 --- a/projects/examples/gui.hover.usm +++ b/projects/examples/gui.hover.usm @@ -12,8 +12,7 @@ |0100 ;System { vector 2 pad 6 r 2 g 2 b 2 } |0110 ;Console { pad 8 char 1 byte 1 short 2 } -|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 color 1 } -|0130 ;Sprite { vector 2 pad 6 x 2 y 2 addr 2 color 1 } +|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 addr 2 color 1 } |0140 ;Controller { vector 2 button 1 } |0150 ;Keys { vector 2 key 1 } |0160 ;Mouse { vector 2 x 2 y 2 state 1 chord 1 } @@ -65,19 +64,19 @@ BRK @draw-cursor ( clear last cursor ) - ,clear_icn =Sprite.addr - ~pointer.x =Sprite.x - ~pointer.y =Sprite.y - #10 =Sprite.color + ,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 ) - ~pointer.sprite =Sprite.addr - ~pointer.x =Sprite.x - ~pointer.y =Sprite.y - #11 =Sprite.color + ~pointer.sprite =Screen.addr + ~pointer.x =Screen.x + ~pointer.y =Screen.y + #31 =Screen.color RTN diff --git a/projects/examples/gui.label.usm b/projects/examples/gui.label.usm index bfe1959..cd6c765 100644 --- a/projects/examples/gui.label.usm +++ b/projects/examples/gui.label.usm @@ -7,8 +7,7 @@ |0100 ;System { vector 2 pad 6 r 2 g 2 b 2 } |0110 ;Console { pad 8 char 1 byte 1 short 2 } -|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 color 1 } -|0130 ;Sprite { vector 2 pad 6 x 2 y 2 addr 2 color 1 } +|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 addr 2 color 1 } |0140 ;Controller { vector 2 button 1 } |0150 ;Keys { vector 2 key 1 } |0160 ;Mouse { vector 2 x 2 y 2 state 1 chord 1 } @@ -30,22 +29,22 @@ ( incr ) ~Screen.y #0002 ADD2 =Screen.y ~Screen.y ~Screen.height LTH2 ^$draw-ver JNZ - ~center.x ~center.y #0010 SUB2 #0c ,text1 ,draw-label-left JSR2 - ~center.x ~center.y #0c ,text2 ,draw-label-middle JSR2 - ~center.x ~center.y #0010 ADD2 #0c ,text3 ,draw-label-right JSR2 - ~center.x ~center.y #0020 ADD2 #0c ,text4 ,draw-label-middle JSR2 - ~center.x ~center.y #0030 ADD2 #0c ,text5 ,draw-label-middle JSR2 + ~center.x ~center.y #0010 SUB2 #2c ,text1 ,draw-label-left JSR2 + ~center.x ~center.y #2c ,text2 ,draw-label-middle JSR2 + ~center.x ~center.y #0010 ADD2 #2c ,text3 ,draw-label-right JSR2 + ~center.x ~center.y #0020 ADD2 #2c ,text4 ,draw-label-middle JSR2 + ~center.x ~center.y #0030 ADD2 #2c ,text5 ,draw-label-middle JSR2 BRK @draw-label-left ( x y color addr ) - ( load ) =label.addr =label.color =Sprite.y =Sprite.x + ( load ) =label.addr =label.color =Screen.y =Screen.x ~label.addr $loop - ( draw ) DUP2 PEK2 #00 SWP #0008 MUL2 ,font ADD2 =Sprite.addr ~label.color =Sprite.color + ( draw ) DUP2 PEK2 #00 SWP #0008 MUL2 ,font ADD2 =Screen.addr ~label.color =Screen.color ( incr ) #0001 ADD2 - ( incr ) ~Sprite.x #0008 ADD2 =Sprite.x + ( incr ) ~Screen.x #0008 ADD2 =Screen.x DUP2 PEK2 #00 NEQ ^$loop JNZ POP2 @@ -53,13 +52,13 @@ RTN @draw-label-middle ( x y color addr ) - ( load ) =label.addr =label.color =Sprite.y - ( align ) ~label.addr ,get-text-length JSR2 #0008 MUL2 #0002 DIV2 SUB2 =Sprite.x + ( load ) =label.addr =label.color =Screen.y + ( align ) ~label.addr ,get-text-length JSR2 #0008 MUL2 #0002 DIV2 SUB2 =Screen.x ~label.addr $loop - ( draw ) DUP2 PEK2 #00 SWP #0008 MUL2 ,font ADD2 =Sprite.addr ~label.color =Sprite.color + ( draw ) DUP2 PEK2 #00 SWP #0008 MUL2 ,font ADD2 =Screen.addr ~label.color =Screen.color ( incr ) #0001 ADD2 - ( incr ) ~Sprite.x #0008 ADD2 =Sprite.x + ( incr ) ~Screen.x #0008 ADD2 =Screen.x DUP2 PEK2 #00 NEQ ^$loop JNZ POP2 @@ -67,13 +66,13 @@ RTN @draw-label-right ( x y color addr ) - ( load ) =label.addr =label.color =Sprite.y - ( align ) ~label.addr ,get-text-length JSR2 #0008 MUL2 SUB2 #0008 SUB2 =Sprite.x + ( load ) =label.addr =label.color =Screen.y + ( align ) ~label.addr ,get-text-length JSR2 #0008 MUL2 SUB2 #0008 SUB2 =Screen.x ~label.addr $loop - ( draw ) DUP2 PEK2 #00 SWP #0008 MUL2 ,font ADD2 =Sprite.addr ~label.color =Sprite.color + ( draw ) DUP2 PEK2 #00 SWP #0008 MUL2 ,font ADD2 =Screen.addr ~label.color =Screen.color ( incr ) #0001 ADD2 - ( incr ) ~Sprite.x #0008 ADD2 =Sprite.x + ( incr ) ~Screen.x #0008 ADD2 =Screen.x DUP2 PEK2 #00 NEQ ^$loop JNZ POP2 diff --git a/projects/examples/gui.picture.usm b/projects/examples/gui.picture.usm index 64bb3b4..900b949 100644 --- a/projects/examples/gui.picture.usm +++ b/projects/examples/gui.picture.usm @@ -6,8 +6,7 @@ |0100 ;System { vector 2 pad 6 r 2 g 2 b 2 } |0110 ;Console { pad 8 char 1 byte 1 short 2 } -|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 color 1 } -|0130 ;Sprite { vector 2 pad 6 x 2 y 2 addr 2 color 1 } +|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 addr 2 color 1 } |0140 ;Controller { vector 2 button 1 } |0150 ;Keys { vector 2 key 1 } |0160 ;Mouse { vector 2 x 2 y 2 state 1 chord 1 } @@ -18,24 +17,24 @@ ( theme ) #0ffc =System.r #0f0b =System.g #0f03 =System.b - #0000 #0000 #0100 #0100 #01 ,pict_large ,draw-picture JSR2 - #0098 #0060 #0080 #0080 #01 ,pict_medium ,draw-picture JSR2 - #0020 #0090 #0020 #0020 #0a ,pict_small ,draw-picture JSR2 + #0000 #0000 #0100 #0100 #21 ,pict_large ,draw-picture JSR2 + #0098 #0060 #0080 #0080 #21 ,pict_medium ,draw-picture JSR2 + #0020 #0090 #0020 #0020 #2a ,pict_small ,draw-picture JSR2 BRK @draw-picture ( x y width height color addr ) - DUP2 =Sprite.addr =pict.addr =pict.color =pict.height =pict.width DUP2 =Sprite.y =pict.y =pict.x + DUP2 =Screen.addr =pict.addr =pict.color =pict.height =pict.width DUP2 =Screen.y =pict.y =pict.x $ver - ~pict.x =Sprite.x + ~pict.x =Screen.x $hor - ( draw ) ~pict.color =Sprite.color - ( incr ) ~Sprite.x #0008 ADD2 =Sprite.x - ( incr ) ~Sprite.addr #0008 ADD2 =Sprite.addr - ~Sprite.x ~pict.width ~pict.x ADD2 LTH2 ^$hor JNZ - ( incr ) ~Sprite.y #0008 ADD2 =Sprite.y - ~Sprite.y ~pict.height ~pict.y ADD2 LTH2 ^$ver JNZ + ( draw ) ~pict.color =Screen.color + ( incr ) ~Screen.x #0008 ADD2 =Screen.x + ( incr ) ~Screen.addr #0008 ADD2 =Screen.addr + ~Screen.x ~pict.width ~pict.x ADD2 LTH2 ^$hor JNZ + ( incr ) ~Screen.y #0008 ADD2 =Screen.y + ~Screen.y ~pict.height ~pict.y ADD2 LTH2 ^$ver JNZ RTN diff --git a/projects/examples/gui.shapes.usm b/projects/examples/gui.shapes.usm index d560134..7364063 100644 --- a/projects/examples/gui.shapes.usm +++ b/projects/examples/gui.shapes.usm @@ -14,8 +14,7 @@ |0100 ;System { vector 2 pad 6 r 2 g 2 b 2 } |0110 ;Console { pad 8 char 1 byte 1 short 2 } -|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 color 1 } -|0130 ;Sprite { vector 2 pad 6 x 2 y 2 addr 2 color 1 } +|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 addr 2 color 1 } |0140 ;Controller { vector 2 button 1 } |0150 ;Keys { vector 2 key 1 } |0160 ;Mouse { vector 2 x 2 y 2 state 1 chord 1 } @@ -33,10 +32,10 @@ #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 + #0000 #0080 #0020 #0020 #21 ,pict_small ,draw-picture JSR2 + #0010 #0088 #0020 #0020 #22 ,pict_small ,draw-picture JSR2 + #0020 #0090 #0020 #0020 #23 ,pict_small ,draw-picture JSR2 + #0030 #0098 #0020 #0020 #24 ,pict_small ,draw-picture JSR2 #0020 #0020 #0070 #0080 #01 ,draw-line JSR2 #0020 #0080 #0070 #0030 #02 ,draw-line JSR2 @@ -108,16 +107,16 @@ 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 + ( load ) DUP2 =Screen.addr =pict.addr =pict.color =pict.height =pict.width DUP2 =Screen.y =pict.y =pict.x $ver - ~pict.x =Sprite.x + ~pict.x =Screen.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 + ( draw ) ~pict.color =Screen.color + ( incr ) ~Screen.x 8+ =Screen.x + ( incr ) ~Screen.addr 8+ =Screen.addr + ~Screen.x ~pict.width ~pict.x ADD2 LTH2 ^$hor JNZ + ( incr ) ~Screen.y 8+ =Screen.y + ~Screen.y ~pict.height ~pict.y ADD2 LTH2 ^$ver JNZ RTN diff --git a/projects/software/left.usm b/projects/software/left.usm index ff89d6e..03ee775 100644 --- a/projects/software/left.usm +++ b/projects/software/left.usm @@ -44,11 +44,10 @@ |0100 ;System { vector 2 pad 6 r 2 g 2 b 2 } |0110 ;Console { pad 8 char 1 byte 1 short 2 } -|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 color 1 } -|0130 ;Sprite { pad 8 x 2 y 2 addr 2 color 1 } -|0140 ;Controller { buttons 1 } -|0150 ;Keys { key 1 } -|0160 ;Mouse { x 2 y 2 state 1 chord 1 } +|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 addr 2 color 1 } +|0140 ;Controller { vector 2 button 1 } +|0150 ;Keys { vector 2 key 1 } +|0160 ;Mouse { vector 2 x 2 y 2 state 1 chord 1 } |0170 ;File { pad 8 name 2 length 2 load 2 save 2 } ( program ) @@ -56,7 +55,9 @@ |0200 @RESET ( theme ) #e0fa =System.r #30fa =System.g #30fa =System.b - ( vectors ) ,FRAME =Screen.vector + ( vectors ) ,on-mouse =Mouse.vector + ( vectors ) ,on-key =Keys.vector + ( vectors ) ,on-button =Controller.vector ( load file ) ,filepath ,load-file JSR2 @@ -69,102 +70,96 @@ BRK -@FRAME +@on-key - ( ctrl ) - ~Controller #00 EQU ~lock #00 NEQ #0000 NEQ2 ,$ctrl-end JNZ2 - ( lock ) #04 =lock + ~Keys #08 NEQ ^$no-backspace JNZ + ( erase ) + ~selection.to ~selection.from SUB2 #0001 NEQ2 ^$erase-multiple JNZ + ~selection.to ~selection.from SUB2 ,shift-left JSR2 + ,$erase-end JMP2 + $erase-multiple + ~selection.from ++ =selection.from + ~selection.to ~selection.from SUB2 ++ ,shift-left JSR2 + $erase-end + ~selection.from -- =selection.from + ^$keys-end JMP + $no-backspace - ( alt + arrow ) - ~Controller #0f AND #02 NEQ ^$no-alt JNZ - ~Controller #04 SFT - DUP #01 NEQ ^$no-aup JNZ - ( sel word ) ,find-wordstart JSR2 =selection.to $no-aup - DUP #02 NEQ ^$no-adown JNZ - ( sel word ) ,find-wordend JSR2 =selection.to $no-adown - DUP #04 NEQ ^$no-aleft JNZ - ( sel decr ) ~selection.to -- =selection.to $no-aleft - DUP #08 NEQ ^$no-aright JNZ - ( sel incr ) ~selection.to ++ =selection.to $no-aright - POP - ,clamp-selection JSR2 - ,redraw JSR2 - ,$ctrl-end JMP2 - $no-alt + ( insert ) + ~selection.to ~selection.from SUB2 ,shift-right JSR2 + ~Keys ~selection.from POK2 + ~selection.from ++ =selection.from - ( ctrl + arrow ) - ~Controller #0f AND #01 NEQ ^$no-ctrl JNZ - ~Controller #04 SFT - DUP #01 NEQ ^$no-cup JNZ - ( jump scroll ) #0004 ,scroll-up JSR2 $no-cup - DUP #02 NEQ ^$no-cdown JNZ - ( jump scroll ) #0004 ,scroll-down JSR2 $no-cdown - DUP #04 NEQ ^$no-cleft JNZ - ( jump line ) ,goto-linestart JSR2 $no-cleft - DUP #08 NEQ ^$no-cright JNZ - ( jump line ) ,goto-lineend JSR2 $no-cright - POP - ,redraw JSR2 - ,$ctrl-end JMP2 - $no-ctrl + $keys-end + ~selection.from ++ =selection.to + ( release ) #00 =Keys + ,redraw JSR2 - ( arrow ) - ~Controller #f0 AND #00 EQU ,$no-arrow JNZ2 - ~Controller #f0 AND - DUP #10 NEQ ^$no-arrowup JNZ - ( clamp ) ~position.y #0000 EQU2 ^$no-arrowup JNZ - ,find-lineoffset JSR2 =position.x ~position.y -- =position.y - ,find-selection JSR2 DUP2 =selection.from ++ =selection.to $no-arrowup - DUP #20 NEQ ^$no-arrowdown JNZ - ( clamp:TODO ) - ,find-lineoffset JSR2 =position.x ~position.y ++ =position.y - ,find-selection JSR2 DUP2 =selection.from ++ =selection.to $no-arrowdown - DUP #40 NEQ ^$no-arrowleft JNZ - ( clamp ) ~selection.from ,document.body EQU2 ^$no-arrowleft JNZ - ~selection.from -- DUP2 =selection.from ++ =selection.to $no-arrowleft - DUP #80 NEQ ^$no-arrowright JNZ - ( clamp:TODO ) - #aa =Console.byte - ~selection.from ++ DUP2 =selection.from ++ =selection.to $no-arrowright - POP - ,clamp-selection JSR2 - ,follow-selection JSR2 - ,redraw JSR2 - $no-arrow +BRK - $ctrl-end - - ( keys ) - - ~Keys #00 EQU ,$no-keys JNZ2 - - ~Keys #08 NEQ ^$no-backspace JNZ - ( erase ) - ~selection.to ~selection.from SUB2 #0001 NEQ2 ^$erase-multiple JNZ - ~selection.to ~selection.from SUB2 ,shift-left JSR2 - ,$erase-end JMP2 - $erase-multiple - ~selection.from ++ =selection.from - ~selection.to ~selection.from SUB2 ++ ,shift-left JSR2 - $erase-end - ~selection.from -- =selection.from - ^$keys-end JMP - $no-backspace - - ( insert ) - ~selection.to ~selection.from SUB2 ,shift-right JSR2 - ~Keys ~selection.from POK2 - ~selection.from ++ =selection.from - - $keys-end - ~selection.from ++ =selection.to - ( release ) #00 =Keys +@on-button ( -> ) + + ( alt + arrow ) + ~Controller #0f AND #02 NEQ ^$no-alt JNZ + ~Controller #04 SFT + DUP #01 NEQ ^$no-aup JNZ + ( sel word ) ,find-wordstart JSR2 =selection.to $no-aup + DUP #02 NEQ ^$no-adown JNZ + ( sel word ) ,find-wordend JSR2 =selection.to $no-adown + DUP #04 NEQ ^$no-aleft JNZ + ( sel decr ) ~selection.to -- =selection.to $no-aleft + DUP #08 NEQ ^$no-aright JNZ + ( sel incr ) ~selection.to ++ =selection.to $no-aright + POP + ,clamp-selection JSR2 ,redraw JSR2 + BRK + $no-alt - $no-keys + ( ctrl + arrow ) + ~Controller #0f AND #01 NEQ ^$no-ctrl JNZ + ~Controller #04 SFT + DUP #01 NEQ ^$no-cup JNZ + ( jump scroll ) #0004 ,scroll-up JSR2 $no-cup + DUP #02 NEQ ^$no-cdown JNZ + ( jump scroll ) #0004 ,scroll-down JSR2 $no-cdown + DUP #04 NEQ ^$no-cleft JNZ + ( jump line ) ,goto-linestart JSR2 $no-cleft + DUP #08 NEQ ^$no-cright JNZ + ( jump line ) ,goto-lineend JSR2 $no-cright + POP + ,redraw JSR2 + BRK + $no-ctrl - ( mouse ) + ( arrow ) + ~Controller #f0 AND #00 EQU ,$no-arrow JNZ2 + ~Controller #f0 AND + DUP #10 NEQ ^$no-arrowup JNZ + ( clamp ) ~position.y #0000 EQU2 ^$no-arrowup JNZ + ,find-lineoffset JSR2 =position.x ~position.y -- =position.y + ,find-selection JSR2 DUP2 =selection.from ++ =selection.to $no-arrowup + DUP #20 NEQ ^$no-arrowdown JNZ + ( clamp:TODO ) + ,find-lineoffset JSR2 =position.x ~position.y ++ =position.y + ,find-selection JSR2 DUP2 =selection.from ++ =selection.to $no-arrowdown + DUP #40 NEQ ^$no-arrowleft JNZ + ( clamp ) ~selection.from ,document.body EQU2 ^$no-arrowleft JNZ + ~selection.from -- DUP2 =selection.from ++ =selection.to $no-arrowleft + DUP #80 NEQ ^$no-arrowright JNZ + ( clamp:TODO ) + #aa =Console.byte + ~selection.from ++ DUP2 =selection.from ++ =selection.to $no-arrowright + POP + ,clamp-selection JSR2 + ,follow-selection JSR2 + ,redraw JSR2 + $no-arrow +BRK + +@on-mouse ( -> ) + ~Mouse.state #00 EQU ^$touch-end JNZ ~Mouse.x #0010 LTH2 ,touch-linebar JNZ2 ~Mouse.x ~Screen.width 8- LTH2 ,touch-body JNZ2 @@ -173,11 +168,9 @@ BRK ~Mouse.state =touch.state - ( unlock ) ~lock #00 EQU ,skip-unlock JNZ2 ~lock #01 SUB =lock @skip-unlock - ,draw-cursor JSR2 -BRK +BRK @touch-linebar ( -- ) @@ -463,64 +456,60 @@ RTN ,draw-titlebar JSR2 ( save/load icons ) - ~Screen.height 8- =Sprite.y + ~Screen.height 8- =Screen.y - ~Screen.width #0030 SUB2 =Sprite.x - ,eye_icn =Sprite.addr - #02 =Sprite.color + ~Screen.width #0030 SUB2 =Screen.x + ,eye_icn =Screen.addr + #22 =Screen.color - ~Screen.width #0028 SUB2 =Sprite.x - ,name_icn =Sprite.addr - #02 =Sprite.color + ~Screen.width #0028 SUB2 =Screen.x + ,name_icn =Screen.addr + #22 =Screen.color - ~Screen.width #0020 SUB2 =Sprite.x - ,load_icn =Sprite.addr - #02 =Sprite.color + ~Screen.width #0020 SUB2 =Screen.x + ,load_icn =Screen.addr + #22 =Screen.color - ~Screen.width #0018 SUB2 =Sprite.x - ,save_icn =Sprite.addr - #02 =Sprite.color + ~Screen.width #0018 SUB2 =Screen.x + ,save_icn =Screen.addr + #22 =Screen.color RTN @draw-short ( short ) =addr - ,font_hex #00 ,addr PEK2 #f0 AND #04 SFT #08 MUL ADD2 =Sprite.addr - ( draw ) #0e =Sprite.color - ~Sprite.x 8+ =Sprite.x - ,font_hex #00 ,addr PEK2 #0f AND #08 MUL ADD2 =Sprite.addr - ( draw ) #0e =Sprite.color - ~Sprite.x 8+ =Sprite.x - ,font_hex #00 ,addr ++ PEK2 #f0 AND #04 SFT #08 MUL ADD2 =Sprite.addr - ( draw ) #0e =Sprite.color - ~Sprite.x 8+ =Sprite.x - ,font_hex #00 ,addr ++ PEK2 #0f AND #08 MUL ADD2 =Sprite.addr - ( draw ) #0e =Sprite.color + ,font_hex #00 ,addr PEK2 #f0 AND #04 SFT #08 MUL ADD2 =Screen.addr + ( draw ) #2e =Screen.color + ~Screen.x 8+ =Screen.x + ,font_hex #00 ,addr PEK2 #0f AND #08 MUL ADD2 =Screen.addr + ( draw ) #2e =Screen.color + ~Screen.x 8+ =Screen.x + ,font_hex #00 ,addr ++ PEK2 #f0 AND #04 SFT #08 MUL ADD2 =Screen.addr + ( draw ) #2e =Screen.color + ~Screen.x 8+ =Screen.x + ,font_hex #00 ,addr ++ PEK2 #0f AND #08 MUL ADD2 =Screen.addr + ( draw ) #2e =Screen.color RTN @draw-cursor - ~mouse.x ~Mouse.x NEQ2 - ~mouse.y ~Mouse.y NEQ2 - #0000 EQU2 RTN? ( Return if unchanged ) - ( clear last cursor ) - ~mouse.x =Sprite.x - ~mouse.y =Sprite.y - ,blank_icn =Sprite.addr - #10 =Sprite.color + ~mouse.x =Screen.x + ~mouse.y =Screen.y + ,blank_icn =Screen.addr + #30 =Screen.color ( record mouse positions ) ~Mouse.x =mouse.x ~Mouse.y =mouse.y ( draw new cursor ) - ~mouse.x =Sprite.x - ~mouse.y =Sprite.y - ,cursor_icn =Sprite.addr - #1f ~Mouse.state #01 EQU #0a MUL SUB =Sprite.color + ~mouse.x =Screen.x + ~mouse.y =Screen.y + ,cursor_icn =Screen.addr + #3f ~Mouse.state #01 EQU #0a MUL SUB =Screen.color RTN @@ -538,55 +527,55 @@ RTN ~textarea.addr PEK2 #00 NEQ ^$find-offset JNZ $find-offset-end - #0018 =Sprite.x #0000 =Sprite.y + #0018 =Screen.x #0000 =Screen.y ~textarea.addr =i $loop - ~Sprite.y ~Screen.height #0010 SUB2 GTH2 ,$end JNZ2 + ~Screen.y ~Screen.height #0010 SUB2 GTH2 ,$end JNZ2 ~i PEK2 #0a NEQ ~i PEK2 #0d NEQ #0101 EQU2 ,$no-linebreak JNZ2 ( draw linebreak ) - ,linebreak_icn =Sprite.addr + ,linebreak_icn =Screen.addr ( draw ) #02 ~i ~selection.from -- GTH2 ~i ~selection.to LTH2 #0101 EQU2 - #06 MUL ADD =Sprite.color + #26 MUL ADD =Screen.color ( fill clear ) $fill-clear - ( incr ) ~Sprite.x 8+ =Sprite.x - ,font =Sprite.addr - #01 =Sprite.color - ~Sprite.x ~Screen.width 8- LTH2 ^$fill-clear JNZ + ( incr ) ~Screen.x 8+ =Screen.x + ,font =Screen.addr + #21 =Screen.color + ~Screen.x ~Screen.width 8- LTH2 ^$fill-clear JNZ ( draw line number ) - #0000 =Sprite.x - ~scroll.y ~Sprite.y 8/ ADD2 DUP2 SWP POP =k + #0000 =Screen.x + ~scroll.y ~Screen.y 8/ ADD2 DUP2 SWP POP =k ~position.y EQU2 #05 MUL =l - ,font_hex #00 ~k #f0 AND #04 SFT #08 MUL ADD2 =Sprite.addr - #04 ~l ADD =Sprite.color - #0008 =Sprite.x - ,font_hex #00 ~k #0f AND #08 MUL ADD2 =Sprite.addr - #04 ~l ADD =Sprite.color + ,font_hex #00 ~k #f0 AND #04 SFT #08 MUL ADD2 =Screen.addr + #24 ~l ADD =Screen.color + #0008 =Screen.x + ,font_hex #00 ~k #0f AND #08 MUL ADD2 =Screen.addr + #24 ~l ADD =Screen.color - #0010 =Sprite.x - ( incr ) ~Sprite.y 8+ =Sprite.y + #0010 =Screen.x + ( incr ) ~Screen.y 8+ =Screen.y $no-linebreak ( get character ) - ,font #00 ~i PEK2 #20 SUB 8* ADD2 =Sprite.addr + ,font #00 ~i PEK2 #20 SUB 8* ADD2 =Screen.addr ( is a special character ) - ~i PEK2 #20 GTH ^$no-tab JNZ ,font =Sprite.addr $no-tab + ~i PEK2 #20 GTH ^$no-tab JNZ ,font =Screen.addr $no-tab - ( draw ) #01 + ( draw ) #21 ~i ~selection.from -- GTH2 ~i ~selection.to LTH2 #0101 EQU2 - #05 MUL ADD =Sprite.color + #05 MUL ADD =Screen.color ( incr ) ~i ++ =i - ( incr ) ~Sprite.x #0007 ADD2 =Sprite.x + ( incr ) ~Screen.x #0007 ADD2 =Screen.x ~i PEK2 #00 NEQ ,$loop JNZ2 @@ -598,40 +587,40 @@ RTN ,scrollbar_icn ( keeping a copy on stack ) - ~Screen.width 8- =Sprite.x - #0008 =Sprite.y - DUP2 =Sprite.addr + ~Screen.width 8- =Screen.x + #0008 =Screen.y + DUP2 =Screen.addr #0008 ~Screen.height 8- $loop - ( draw ) #01 =Sprite.color - ( incr ) SWP2 8+ DUP2 =Sprite.y SWP2 + ( draw ) #21 =Screen.color + ( incr ) SWP2 8+ DUP2 =Screen.y SWP2 OVR2 OVR2 LTH2 ^$loop JNZ POP2 POP2 - ~scroll.y 8+ =Sprite.y - DUP2 #0008 ADD2 =Sprite.addr - ( draw ) #01 =Sprite.color + ~scroll.y 8+ =Screen.y + DUP2 #0008 ADD2 =Screen.addr + ( draw ) #21 =Screen.color - #0000 =Sprite.y - DUP2 #0010 ADD2 =Sprite.addr - ( draw ) #04 =Sprite.color + #0000 =Screen.y + DUP2 #0010 ADD2 =Screen.addr + ( draw ) #24 =Screen.color - ~Screen.height 8- =Sprite.y - #0018 ADD2 =Sprite.addr - ( draw ) #04 =Sprite.color + ~Screen.height 8- =Screen.y + #0018 ADD2 =Screen.addr + ( draw ) #24 =Screen.color RTN @draw-titlebar - #0018 ~Screen.height 8- #09 ,filepath - ( load ) =label.addr =label.color =Sprite.y =Sprite.x + #0018 ~Screen.height 8- #29 ,filepath + ( load ) =label.addr =label.color =Screen.y =Screen.x ~label.addr $loop - ( draw ) DUP2 PEK2 #00 SWP #20 SUB 8* ,font ADD2 =Sprite.addr ~label.color =Sprite.color + ( draw ) DUP2 PEK2 #00 SWP #20 SUB 8* ,font ADD2 =Screen.addr ~label.color =Screen.color ( incr ) ++ - ( incr ) ~Sprite.x 8+ =Sprite.x + ( incr ) ~Screen.x 8+ =Screen.x DUP2 PEK2 #00 NEQ ^$loop JNZ POP2 ( selection ) diff --git a/projects/software/nasu.usm b/projects/software/nasu.usm index 3930ab1..ee47014 100644 --- a/projects/software/nasu.usm +++ b/projects/software/nasu.usm @@ -33,8 +33,7 @@ |0100 ;System { vector 2 pad 6 r 2 g 2 b 2 } |0110 ;Console { pad 8 char 1 byte 1 short 2 } -|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 color 1 } -|0130 ;Sprite { vector 2 pad 6 x 2 y 2 addr 2 color 1 } +|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 addr 2 color 1 } |0140 ;Controller { vector 2 button 1 } |0150 ;Keys { vector 2 key 1 } |0160 ;Mouse { vector 2 x 2 y 2 state 1 chord 1 } @@ -254,65 +253,65 @@ RTN ( position ) - ~bankview.x =Sprite.x - ~bankview.y #0010 SUB2 =Sprite.y + ~bankview.x =Screen.x + ~bankview.y #0010 SUB2 =Screen.y ~bankview.addr ,draw-short JSR2 ( toolbar ) - ~bankview.x #0068 ADD2 =Sprite.x - ~bankview.y #0010 SUB2 =Sprite.y - ,tool_selector =Sprite.addr - #01 ~bankview.mode #00 EQU ADD =Sprite.color + ~bankview.x #0068 ADD2 =Screen.x + ~bankview.y #0010 SUB2 =Screen.y + ,tool_selector =Screen.addr + #21 ~bankview.mode #00 EQU ADD =Screen.color - ~Sprite.x 8+ =Sprite.x - ,tool_hand =Sprite.addr - #01 ~bankview.mode #01 EQU ADD =Sprite.color + ~Screen.x 8+ =Screen.x + ,tool_hand =Screen.addr + #21 ~bankview.mode #01 EQU ADD =Screen.color - ~Sprite.x 8+ =Sprite.x - ,tool_eraser =Sprite.addr - #01 ~bankview.mode #02 EQU ADD =Sprite.color + ~Screen.x 8+ =Screen.x + ,tool_eraser =Screen.addr + #21 ~bankview.mode #02 EQU ADD =Screen.color - ~tileview.x #0070 ADD2 =Sprite.x - ,load_icn =Sprite.addr - #01 =Sprite.color + ~tileview.x #0070 ADD2 =Screen.x + ,load_icn =Screen.addr + #21 =Screen.color - ~tileview.x #0078 ADD2 =Sprite.x - ,save_icn =Sprite.addr - #01 =Sprite.color + ~tileview.x #0078 ADD2 =Screen.x + ,save_icn =Screen.addr + #21 =Screen.color ( guides ) - #00 =i ,font_hex =Sprite.addr + #00 =i ,font_hex =Screen.addr $guides - ~bankview.x #0010 SUB2 =Sprite.x - ~bankview.y #00 ~i #08 MUL ADD2 =Sprite.y - ( draw ) #02 =Sprite.color - ~bankview.x #00 ~i #08 MUL ADD2 =Sprite.x - ~bankview.y #0088 ADD2 =Sprite.y - ( draw ) #02 =Sprite.color - ~Sprite.addr 8+ =Sprite.addr + ~bankview.x #0010 SUB2 =Screen.x + ~bankview.y #00 ~i #08 MUL ADD2 =Screen.y + ( draw ) #22 =Screen.color + ~bankview.x #00 ~i #08 MUL ADD2 =Screen.x + ~bankview.y #0088 ADD2 =Screen.y + ( draw ) #22 =Screen.color + ~Screen.addr 8+ =Screen.addr ( incr ) ~i #01 ADD =i ~i #10 LTH ^$guides JNZ ( body ) - ~bankview.x =Sprite.x ~bankview.y =Sprite.y - #00 =pt.x #00 =pt.y ~bankview.addr =Sprite.addr + ~bankview.x =Screen.x ~bankview.y =Screen.y + #00 =pt.x #00 =pt.y ~bankview.addr =Screen.addr $ver #00 =pt.x - ~bankview.x =Sprite.x + ~bankview.x =Screen.x $hor - ( draw ) #01 - ~Sprite.addr ~tileview.addr LTH2 - ~Sprite.addr ~tileview.addr #0018 ADD2 GTH2 - #0000 EQU2 #06 MUL ADD =Sprite.color - ( incr ) ~Sprite.x 8+ =Sprite.x - ( incr ) ~Sprite.addr 8+ =Sprite.addr + ( draw ) #21 + ~Screen.addr ~tileview.addr LTH2 + ~Screen.addr ~tileview.addr #0018 ADD2 GTH2 + #0000 EQU2 #06 MUL ADD =Screen.color + ( incr ) ~Screen.x 8+ =Screen.x + ( incr ) ~Screen.addr 8+ =Screen.addr ( incr ) ~pt.x #01 ADD =pt.x ~pt.x #10 LTH ,$hor JNZ2 ( incr ) ~pt.y #01 ADD =pt.y - ( incr ) ~Sprite.y 8+ =Sprite.y + ( incr ) ~Screen.y 8+ =Screen.y ~pt.y #10 LTH ,$ver JNZ2 RTN @@ -321,36 +320,36 @@ RTN ~tileview.x #0002 SUB2 ~tileview.y #0002 SUB2 ~tileview.x #0080 ADD2 ~tileview.y #0081 ADD2 #03 ,line-rect JSR2 - ~tileview.x #0028 ADD2 =Sprite.x - ~tileview.y #0010 SUB2 =Sprite.y - ~tileview.addr =Sprite.addr - #03 =Sprite.color + ~tileview.x #0028 ADD2 =Screen.x + ~tileview.y #0010 SUB2 =Screen.y + ~tileview.addr =Screen.addr + #23 =Screen.color ( position ) - ~tileview.x =Sprite.x - ~tileview.y #0010 SUB2 =Sprite.y + ~tileview.x =Screen.x + ~tileview.y #0010 SUB2 =Screen.y ~tileview.addr ,draw-short JSR2 ( body ) - ~tileview.x =Sprite.x - ~tileview.y =Sprite.y + ~tileview.x =Screen.x + ~tileview.y =Screen.y ~tileview.addr =tileview.addr ,draw-tileview-icn JSR2 - ~tileview.x #0040 ADD2 =Sprite.x - ~tileview.y =Sprite.y + ~tileview.x #0040 ADD2 =Screen.x + ~tileview.y =Screen.y ~tileview.addr 8+ =tileview.addr ,draw-tileview-icn JSR2 - ~tileview.x =Sprite.x - ~tileview.y #0040 ADD2 =Sprite.y + ~tileview.x =Screen.x + ~tileview.y #0040 ADD2 =Screen.y ~tileview.addr 8+ =tileview.addr ,draw-tileview-icn JSR2 - ~tileview.x #0040 ADD2 =Sprite.x - ~tileview.y #0040 ADD2 =Sprite.y + ~tileview.x #0040 ADD2 =Screen.x + ~tileview.y #0040 ADD2 =Screen.y ~tileview.addr 8+ =tileview.addr ,draw-tileview-icn JSR2 @@ -374,43 +373,43 @@ RTN ( bytes ) - ~tileview.y #0018 ADD2 =Sprite.y + ~tileview.y #0018 ADD2 =Screen.y #00 =i $bytes - ~tileview.x #0088 ADD2 =Sprite.x - ,font_hex #00 ~tileview.addr #00 ~i ADD2 PEK2 #f0 AND #04 SFT #08 MUL ADD2 =Sprite.addr - ( draw ) #02 =Sprite.color - ~Sprite.x 8+ =Sprite.x - ,font_hex #00 ~tileview.addr #00 ~i ADD2 PEK2 #0f AND #08 MUL ADD2 =Sprite.addr - ( draw ) #02 =Sprite.color + ~tileview.x #0088 ADD2 =Screen.x + ,font_hex #00 ~tileview.addr #00 ~i ADD2 PEK2 #f0 AND #04 SFT #08 MUL ADD2 =Screen.addr + ( draw ) #22 =Screen.color + ~Screen.x 8+ =Screen.x + ,font_hex #00 ~tileview.addr #00 ~i ADD2 PEK2 #0f AND #08 MUL ADD2 =Screen.addr + ( draw ) #22 =Screen.color ( incr ) ~i #01 ADD =i - ( incr ) ~Sprite.y 8+ =Sprite.y + ( incr ) ~Screen.y 8+ =Screen.y ~i #08 LTH ,$bytes JNZ2 ( operations ) - ~Sprite.y 8+ =Sprite.y - ,movedown_icn =Sprite.addr - #01 =Sprite.color - ~Sprite.x 8- =Sprite.x - ,moveup_icn =Sprite.addr - #01 =Sprite.color + ~Screen.y 8+ =Screen.y + ,movedown_icn =Screen.addr + #21 =Screen.color + ~Screen.x 8- =Screen.x + ,moveup_icn =Screen.addr + #21 =Screen.color ( draw tiles ) - ~tileview.y =Sprite.y - #00 =pt.x #00 =pt.y ~tileview.addr =Sprite.addr + ~tileview.y =Screen.y + #00 =pt.x #00 =pt.y ~tileview.addr =Screen.addr $tiles-ver #00 =pt.x - ~tileview.x #0088 ADD2 =Sprite.x + ~tileview.x #0088 ADD2 =Screen.x $tiles-hor - ( draw ) #03 =Sprite.color - ( incr ) ~Sprite.x 8+ =Sprite.x - ( incr ) ~Sprite.addr 8+ =Sprite.addr + ( draw ) #23 =Screen.color + ( incr ) ~Screen.x 8+ =Screen.x + ( incr ) ~Screen.addr 8+ =Screen.addr ( incr ) ~pt.x #01 ADD =pt.x ~pt.x #02 LTH ,$tiles-hor JNZ2 ( incr ) ~pt.y #01 ADD =pt.y - ( incr ) ~Sprite.y 8+ =Sprite.y + ( incr ) ~Screen.y 8+ =Screen.y ~pt.y #02 LTH ,$tiles-ver JNZ2 RTN @@ -424,14 +423,14 @@ RTN ( get bit ) ,blank_icn #00 ~tileview.addr #00 ~pt.y ADD2 PEK2 #07 ~pt.x SUB SFT #01 AND ( get bit ) - 8* ADD2 =Sprite.addr ( add *8 ) - ( draw ) #01 =Sprite.color - ( incr ) ~Sprite.x 8+ =Sprite.x + 8* ADD2 =Screen.addr ( add *8 ) + ( draw ) #21 =Screen.color + ( incr ) ~Screen.x 8+ =Screen.x ( incr ) ~pt.x #01 ADD =pt.x ~pt.x #08 LTH ,$hor JNZ2 - ( incr ) ~Sprite.y 8+ =Sprite.y + ( incr ) ~Screen.y 8+ =Screen.y ( incr ) ~pt.y #01 ADD =pt.y - ~Sprite.x #0040 SUB2 =Sprite.x + ~Screen.x #0040 SUB2 =Screen.x ~pt.y #08 LTH ,$ver JNZ2 RTN @@ -444,37 +443,37 @@ RTN #0000 EQU2 RTN? ( Return if unchanged ) ( clear last cursor ) - ~mouse.x =Sprite.x - ~mouse.y =Sprite.y - ,blank_icn =Sprite.addr - #10 =Sprite.color + ~mouse.x =Screen.x + ~mouse.y =Screen.y + ,blank_icn =Screen.addr + #30 =Screen.color ( record mouse positions ) ~Mouse.x =mouse.x ~Mouse.y =mouse.y ( draw new cursor ) - ~mouse.x =Sprite.x - ~mouse.y =Sprite.y - ,tool_selector #00 ~bankview.mode #08 MUL ADD2 =Sprite.addr - #12 =Sprite.color + ~mouse.x =Screen.x + ~mouse.y =Screen.y + ,tool_selector #00 ~bankview.mode #08 MUL ADD2 =Screen.addr + #32 =Screen.color RTN @draw-short ( short ) =addr - ,font_hex #00 ,addr PEK2 #f0 AND #04 SFT #08 MUL ADD2 =Sprite.addr - ( draw ) #02 =Sprite.color - ~Sprite.x 8+ =Sprite.x - ,font_hex #00 ,addr PEK2 #0f AND #08 MUL ADD2 =Sprite.addr - ( draw ) #02 =Sprite.color - ~Sprite.x 8+ =Sprite.x - ,font_hex #00 ,addr ++ PEK2 #f0 AND #04 SFT #08 MUL ADD2 =Sprite.addr - ( draw ) #02 =Sprite.color - ~Sprite.x 8+ =Sprite.x - ,font_hex #00 ,addr ++ PEK2 #0f AND #08 MUL ADD2 =Sprite.addr - ( draw ) #02 =Sprite.color + ,font_hex #00 ,addr PEK2 #f0 AND #04 SFT #08 MUL ADD2 =Screen.addr + ( draw ) #22 =Screen.color + ~Screen.x 8+ =Screen.x + ,font_hex #00 ,addr PEK2 #0f AND #08 MUL ADD2 =Screen.addr + ( draw ) #22 =Screen.color + ~Screen.x 8+ =Screen.x + ,font_hex #00 ,addr ++ PEK2 #f0 AND #04 SFT #08 MUL ADD2 =Screen.addr + ( draw ) #22 =Screen.color + ~Screen.x 8+ =Screen.x + ,font_hex #00 ,addr ++ PEK2 #0f AND #08 MUL ADD2 =Screen.addr + ( draw ) #22 =Screen.color RTN diff --git a/projects/software/neralie.usm b/projects/software/neralie.usm index 10c6409..b19edc6 100644 --- a/projects/software/neralie.usm +++ b/projects/software/neralie.usm @@ -13,8 +13,7 @@ |0100 ;System { vector 2 pad 6 r 2 g 2 b 2 } |0110 ;Console { pad 8 char 1 byte 1 short 2 } -|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 color 1 } -|0130 ;Sprite { pad 8 x 2 y 2 addr 2 color 1 } +|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 addr 2 color 1 } |01a0 ;DateTime { year 2 month 1 day 1 hour 1 minute 1 second 1 dotw 1 doty 2 isdst 1 pad 4 refresh 1 } ( program ) @@ -50,7 +49,7 @@ ,neralie-lines JSR2 BRK - #02 =Sprite.color + #22 =Screen.color #0000 #00 ~number.count DUP2 ,h JSR2 ~number.count #01 ADD =number.count @@ -76,8 +75,8 @@ JMP2r @arvelie-text ( -- ) - ~Screen.width #0002 DIV2 #0034 SUB2 =Sprite.x - ~Screen.height #0008 SUB2 =Sprite.y + ~Screen.width #0002 DIV2 #0034 SUB2 =Screen.x + ~Screen.height #0008 SUB2 =Screen.y ~DateTime.year #07d6 SUB2 #000a ,modf JSR2 ,digit JSR2 ,digit JSR2 @@ -88,7 +87,7 @@ JMP2r @neralie-text ( -- ) - ~Screen.width #0002 DIV2 #0004 SUB2 =Sprite.x + ~Screen.width #0002 DIV2 #0004 SUB2 =Screen.x ~neralie.n0123 #03e8 ,modf JSR2 ^digit JSR #0064 ,modf JSR2 ^digit JSR @@ -100,14 +99,14 @@ JMP2r @letter ( index* -- ) - #0008 MUL2 ,font-letters ADD2 =Sprite.addr + #0008 MUL2 ,font-letters ADD2 =Screen.addr ^digit-middle JMP @digit ( index* -- ) - #0008 MUL2 ,font-numbers ADD2 =Sprite.addr + #0008 MUL2 ,font-numbers ADD2 =Screen.addr $middle - ~neralie.color =Sprite.color - ~Sprite.x #0008 ADD2 =Sprite.x + ~neralie.color #20 ADD =Screen.color + ~Screen.x #0008 ADD2 =Screen.x JMP2r @neralie-lines ( -- ) @@ -116,14 +115,14 @@ ,neralie.n4 SWP POP ~neralie.n0123 DUP2 ,$h JSR2 - ,$next JSR2 #0001 =Sprite.x ~neralie.y #0003 SUB2 =Sprite.y ^digit JSR + ,$next JSR2 #0001 =Screen.x ~neralie.y #0003 SUB2 =Screen.y ^digit JSR DUP2 ,$v JSR2 #04 ,v-spacing POK2 ~lines.y1 #0003 SUB2 ~neralie.y ~neralie.x ,v JSR2 #01 ,v-spacing POK2 - ^$next JSR #0001 =Sprite.y ~neralie.x #0003 SUB2 =Sprite.x ,digit JSR2 + ^$next JSR #0001 =Screen.y ~neralie.x #0003 SUB2 =Screen.x ,digit JSR2 DUP2 ^$h JSR - ^$next JSR ~Screen.width #0009 SUB2 =Sprite.x ~neralie.y #0003 SUB2 =Sprite.y ,digit JSR2 + ^$next JSR ~Screen.width #0009 SUB2 =Screen.x ~neralie.y #0003 SUB2 =Screen.y ,digit JSR2 DUP2 ^$v JSR ^$next JSR POP2 DUP2 ^$h JSR diff --git a/projects/software/noodle.usm b/projects/software/noodle.usm index 0a01ff6..bb5d303 100644 --- a/projects/software/noodle.usm +++ b/projects/software/noodle.usm @@ -53,8 +53,7 @@ |0100 ;System { vector 2 pad 6 r 2 g 2 b 2 } |0110 ;Console { pad 8 char 1 byte 1 short 2 } -|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 color 1 } -|0130 ;Sprite { vector 2 pad 6 x 2 y 2 addr 2 color 1 } +|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 addr 2 color 1 } |0140 ;Controller { vector 2 button 1 } |0150 ;Keys { vector 2 key 1 } |0160 ;Mouse { vector 2 x 2 y 2 state 1 chord 1 } @@ -99,12 +98,12 @@ BRK @on-screen ( -- ) ~document.edit #01 NEQ ^$no-edit JNZ - #0008 =Sprite.x - ~Screen.height #0010 SUB2 =Sprite.y + #0008 =Screen.x + ~Screen.height #0010 SUB2 =Screen.y ,path.name #01 ~timer #04 DIV #03 AND #03 MUL ADD ,draw-label JSR2 $clear - #00 =Sprite.color - ~Sprite.x 8+ DUP2 =Sprite.x + #20 =Screen.color + ~Screen.x 8+ DUP2 =Screen.x ~Screen.width LTH2 ^$clear JNZ ( blink ) ~timer #01 ADD =timer $no-edit @@ -623,37 +622,37 @@ RTN ~zoom.active #01 EQU ,draw-canvas-zoom JNZ2 - ~canvas.y1 =Sprite.y - ,data =Sprite.addr + ~canvas.y1 =Screen.y + ,data =Screen.addr $ver - ~canvas.x1 =Sprite.x + ~canvas.x1 =Screen.x $hor - ( draw ) #09 =Sprite.color - ( incr ) ~Sprite.x 8+ =Sprite.x - ( incr ) ~Sprite.addr 8+ =Sprite.addr - ~Sprite.x ~canvas.x2 NEQ2 ^$hor JNZ - ( incr ) ~Sprite.y 8+ =Sprite.y - ~Sprite.y ~canvas.y2 NEQ2 ^$ver JNZ + ( draw ) #29 =Screen.color + ( incr ) ~Screen.x 8+ =Screen.x + ( incr ) ~Screen.addr 8+ =Screen.addr + ~Screen.x ~canvas.x2 NEQ2 ^$hor JNZ + ( incr ) ~Screen.y 8+ =Screen.y + ~Screen.y ~canvas.y2 NEQ2 ^$ver JNZ RTN @draw-canvas-zoom ( -- ) ~zoom.y =pt1.y - ~canvas.y1 =Sprite.y - ,data =Sprite.addr + ~canvas.y1 =Screen.y + ,data =Screen.addr $ver - ~canvas.x1 =Sprite.x + ~canvas.x1 =Screen.x ~zoom.x =pt1.x $hor - ( incr ) ,bigpixel_icn #0008 #00 ~pt1.x ~pt1.y ,get-pixel JSR2 MUL2 ADD2 =Sprite.addr - ( draw ) #09 =Sprite.color - ( incr ) ~Sprite.x 8+ =Sprite.x + ( incr ) ,bigpixel_icn #0008 #00 ~pt1.x ~pt1.y ,get-pixel JSR2 MUL2 ADD2 =Screen.addr + ( draw ) #29 =Screen.color + ( incr ) ~Screen.x 8+ =Screen.x ( incr ) ~pt1.x ++ =pt1.x - ~Sprite.x ~canvas.x2 NEQ2 ^$hor JNZ - ( incr ) ~Sprite.y 8+ =Sprite.y + ~Screen.x ~canvas.x2 NEQ2 ^$hor JNZ + ( incr ) ~Screen.y 8+ =Screen.y ( incr ) ~pt1.y ++ =pt1.y - ~Sprite.y ~canvas.y2 NEQ2 ^$ver JNZ + ~Screen.y ~canvas.y2 NEQ2 ^$ver JNZ RTN @@ -666,11 +665,11 @@ RTN #00 NEQ #0101 EQU2 RTN? ( Return if unchanged ) - ,blank_icn =Sprite.addr + ,blank_icn =Screen.addr ( clear brush size ) - ~cursor.x #0003 SUB2 =Sprite.x ~cursor.y #0003 SUB2 =Sprite.y #10 =Sprite.color + ~cursor.x #0003 SUB2 =Screen.x ~cursor.y #0003 SUB2 =Screen.y #30 =Screen.color ( clear last cursor ) - ~cursor.x =Sprite.x ~cursor.y =Sprite.y #10 =Sprite.color + ~cursor.x =Screen.x ~cursor.y =Screen.y #30 =Screen.color ( record cursor positions ) ~Mouse.x =cursor.x ~Mouse.y =cursor.y ( draw size cursor ) @@ -683,15 +682,15 @@ RTN ~Mouse.x CLN2r ~toolpane.x1 GTH2 STH2r ~toolpane.x2 LTH2 #0101 EQU2 ~Mouse.y CLN2r ~toolpane.y1 GTH2 STH2r ~toolpane.y2 LTH2 #0101 EQU2 #0101 EQU2 ,$outside-canvas JNZ2 ~Mouse.x CLN2r ~sizepane.x1 GTH2 STH2r ~sizepane.x2 LTH2 #0101 EQU2 ~Mouse.y CLN2r ~sizepane.y1 GTH2 STH2r ~sizepane.y2 LTH2 #0101 EQU2 #0101 EQU2 ,$outside-canvas JNZ2 ~Mouse.x CLN2r ~pattpane.x1 GTH2 STH2r ~pattpane.x2 LTH2 #0101 EQU2 ~Mouse.y CLN2r ~pattpane.y1 GTH2 STH2r ~pattpane.y2 LTH2 #0101 EQU2 #0101 EQU2 ,$outside-canvas JNZ2 - ~cursor.x #0003 SUB2 =Sprite.x ~cursor.y #0003 SUB2 =Sprite.y - ,brush_icns #00 ~brush.size 8* ADD2 =Sprite.addr - #11 ~Mouse.state #02 MUL ADD =Sprite.color + ~cursor.x #0003 SUB2 =Screen.x ~cursor.y #0003 SUB2 =Screen.y + ,brush_icns #00 ~brush.size 8* ADD2 =Screen.addr + #31 ~Mouse.state #02 MUL ADD =Screen.color ~Mouse.state #00 EQU ^$outside-canvas JNZ RTN $outside-canvas ( draw new cursor ) - ~cursor.x =Sprite.x ~cursor.y =Sprite.y - ,pointers_icn #00 ~Controller.button #02 EQU 8* ADD2 =Sprite.addr - #1f ~Mouse.state #01 EQU #0a MUL SUB =Sprite.color + ~cursor.x =Screen.x ~cursor.y =Screen.y + ,pointers_icn #00 ~Controller.button #02 EQU 8* ADD2 =Screen.addr + #3f ~Mouse.state #01 EQU #0a MUL SUB =Screen.color RTN @@ -703,18 +702,18 @@ RTN ~toolpane.x1 -- ~toolpane.y1 -- ~toolpane.x2 ~toolpane.y2 #00 ,line-rect JSR2 ~toolpane.x1 #0002 SUB2 ~toolpane.y1 #0002 SUB2 ~toolpane.x2 ~toolpane.y2 #01 ,line-rect JSR2 - ~toolpane.x1 =Sprite.x ~toolpane.y1 =Sprite.y ,tool_icns =Sprite.addr + ~toolpane.x1 =Screen.x ~toolpane.y1 =Screen.y ,tool_icns =Screen.addr $loop - ( draw ) #01 ~Sprite.x ~toolpane.x1 SUB2 8/ SWP POP ~brush.tool EQU #02 MUL ADD =Sprite.color - ( incr ) ~Sprite.x 8+ =Sprite.x - ( incr ) ~Sprite.addr 8+ =Sprite.addr - ~Sprite.x ~toolpane.x2 LTH2 ^$loop JNZ + ( draw ) #21 ~Screen.x ~toolpane.x1 SUB2 8/ SWP POP ~brush.tool EQU #02 MUL ADD =Screen.color + ( incr ) ~Screen.x 8+ =Screen.x + ( incr ) ~Screen.addr 8+ =Screen.addr + ~Screen.x ~toolpane.x2 LTH2 ^$loop JNZ ~zoom.active #01 NEQ ^$no-zoom JNZ - ~Sprite.x #0008 SUB2 =Sprite.x - ,tool_icns #0028 ADD2 =Sprite.addr - #01 #04 ~brush.tool EQU #02 MUL ADD =Sprite.color + ~Screen.x #0008 SUB2 =Screen.x + ,tool_icns #0028 ADD2 =Screen.addr + #21 #04 ~brush.tool EQU #02 MUL ADD =Screen.color $no-zoom RTN @@ -727,13 +726,13 @@ RTN ~pattpane.x1 -- ~pattpane.y1 -- ~pattpane.x2 ~pattpane.y2 #00 ,line-rect JSR2 ~pattpane.x1 #0002 SUB2 ~pattpane.y1 #0002 SUB2 ~pattpane.x2 ~pattpane.y2 #01 ,line-rect JSR2 - ~pattpane.x1 =Sprite.x ~pattpane.y1 =Sprite.y ,patt_icns =Sprite.addr + ~pattpane.x1 =Screen.x ~pattpane.y1 =Screen.y ,patt_icns =Screen.addr $loop - ( draw ) #01 ~Sprite.x ~pattpane.x1 SUB2 8/ SWP POP ~brush.patt EQU #02 MUL ADD =Sprite.color - ( incr ) ~Sprite.x 8+ =Sprite.x - ( incr ) ~Sprite.addr 8+ =Sprite.addr - ~Sprite.x ~pattpane.x2 LTH2 ^$loop JNZ + ( draw ) #21 ~Screen.x ~pattpane.x1 SUB2 8/ SWP POP ~brush.patt EQU #02 MUL ADD =Screen.color + ( incr ) ~Screen.x 8+ =Screen.x + ( incr ) ~Screen.addr 8+ =Screen.addr + ~Screen.x ~pattpane.x2 LTH2 ^$loop JNZ RTN @@ -745,13 +744,13 @@ RTN ~sizepane.x1 -- ~sizepane.y1 -- ~sizepane.x2 ~sizepane.y2 #00 ,line-rect JSR2 ~sizepane.x1 #0002 SUB2 ~sizepane.y1 #0002 SUB2 ~sizepane.x2 ~sizepane.y2 #01 ,line-rect JSR2 - ~sizepane.x1 =Sprite.x ~sizepane.y1 =Sprite.y ,size_icns =Sprite.addr + ~sizepane.x1 =Screen.x ~sizepane.y1 =Screen.y ,size_icns =Screen.addr $loop - ( draw ) #01 ~Sprite.x ~sizepane.x1 SUB2 8/ SWP POP ~brush.size EQU #02 MUL ADD =Sprite.color - ( incr ) ~Sprite.x 8+ =Sprite.x - ( incr ) ~Sprite.addr 8+ =Sprite.addr - ~Sprite.x ~sizepane.x2 LTH2 ^$loop JNZ + ( draw ) #21 ~Screen.x ~sizepane.x1 SUB2 8/ SWP POP ~brush.size EQU #02 MUL ADD =Screen.color + ( incr ) ~Screen.x 8+ =Screen.x + ( incr ) ~Screen.addr 8+ =Screen.addr + ~Screen.x ~sizepane.x2 LTH2 ^$loop JNZ RTN @@ -763,13 +762,13 @@ RTN ~viewpane.x1 -- ~viewpane.y1 -- ~viewpane.x2 ~viewpane.y2 #00 ,line-rect JSR2 ~viewpane.x1 #0002 SUB2 ~viewpane.y1 #0002 SUB2 ~viewpane.x2 ~viewpane.y2 #01 ,line-rect JSR2 - ~viewpane.x1 =Sprite.x ~viewpane.y1 =Sprite.y ,view_icns =Sprite.addr + ~viewpane.x1 =Screen.x ~viewpane.y1 =Screen.y ,view_icns =Screen.addr $loop - ( draw ) #01 =Sprite.color - ( incr ) ~Sprite.x 8+ =Sprite.x - ( incr ) ~Sprite.addr 8+ =Sprite.addr - ~Sprite.x ~viewpane.x2 LTH2 ^$loop JNZ + ( draw ) #21 =Screen.color + ( incr ) ~Screen.x 8+ =Screen.x + ( incr ) ~Screen.addr 8+ =Screen.addr + ~Screen.x ~viewpane.x2 LTH2 ^$loop JNZ RTN @@ -791,35 +790,35 @@ RTN ~document.presentation #01 EQU ,$skip-size JNZ2 ( draw size ) - #0010 =Sprite.y + #0010 =Screen.y ( draw width ) - ~Screen.width #00a0 SUB2 =Sprite.x ,font_hex ~canvas.w #f0 AND #04 SFT #08 MUL ADD2 =Sprite.addr - ( draw ) #01 =Sprite.color - ~Sprite.x 8+ =Sprite.x ,font_hex ~canvas.w #0f AND #08 MUL ADD2 =Sprite.addr - ( draw ) #01 =Sprite.color + ~Screen.width #00a0 SUB2 =Screen.x ,font_hex ~canvas.w #f0 AND #04 SFT #08 MUL ADD2 =Screen.addr + ( draw ) #21 =Screen.color + ~Screen.x 8+ =Screen.x ,font_hex ~canvas.w #0f AND #08 MUL ADD2 =Screen.addr + ( draw ) #21 =Screen.color ( draw height ) - ~Sprite.x 8+ =Sprite.x ,font_hex ~canvas.h #f0 AND #04 SFT #08 MUL ADD2 =Sprite.addr - ( draw ) #01 =Sprite.color - ~Sprite.x 8+ =Sprite.x ,font_hex ~canvas.h #0f AND #08 MUL ADD2 =Sprite.addr - ( draw ) #01 =Sprite.color + ~Screen.x 8+ =Screen.x ,font_hex ~canvas.h #f0 AND #04 SFT #08 MUL ADD2 =Screen.addr + ( draw ) #21 =Screen.color + ~Screen.x 8+ =Screen.x ,font_hex ~canvas.h #0f AND #08 MUL ADD2 =Screen.addr + ( draw ) #21 =Screen.color $skip-size ( draw save/load/guides icons ) - ~Screen.height #0010 SUB2 =Sprite.y - ~Screen.width #0028 SUB2 =Sprite.x - ,eye_icn #00 ~document.presentation #08 MUL ADD2 =Sprite.addr - #03 =Sprite.color - ~Sprite.x 8+ =Sprite.x - ,filestate_icn =Sprite.addr - #03 =Sprite.color - ~Sprite.x 8+ =Sprite.x - ,load_icn =Sprite.addr - #03 =Sprite.color - ~Sprite.x 8+ =Sprite.x - ,save_icn =Sprite.addr - #03 =Sprite.color + ~Screen.height #0010 SUB2 =Screen.y + ~Screen.width #0028 SUB2 =Screen.x + ,eye_icn #00 ~document.presentation #08 MUL ADD2 =Screen.addr + #23 =Screen.color + ~Screen.x 8+ =Screen.x + ,filestate_icn =Screen.addr + #23 =Screen.color + ~Screen.x 8+ =Screen.x + ,load_icn =Screen.addr + #23 =Screen.color + ~Screen.x 8+ =Screen.x + ,save_icn =Screen.addr + #23 =Screen.color - #0008 =Sprite.x + #0008 =Screen.x ,path.name #01 ,draw-label JSR2 RTN @@ -861,10 +860,10 @@ RTN =color $loop - DUP2 PEK2 #00 SWP #0008 MUL2 ,font ADD2 =Sprite.addr - ( draw ) ~color =Sprite.color + DUP2 PEK2 #00 SWP #0008 MUL2 ,font ADD2 =Screen.addr + ( draw ) ~color #20 ADD =Screen.color ( incr ) #0001 ADD2 - ( incr ) ~Sprite.x 8+ =Sprite.x + ( incr ) ~Screen.x 8+ =Screen.x ( loop ) DUP2 PEK2 #00 NEQ ^$loop JNZ POP2 diff --git a/projects/software/orca.usm b/projects/software/orca.usm index de9257f..9d1d021 100644 --- a/projects/software/orca.usm +++ b/projects/software/orca.usm @@ -28,7 +28,7 @@ |0100 ;System { vector 2 pad 6 r 2 g 2 b 2 } |0110 ;Console { pad 8 char 1 byte 1 short 2 } -|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 color 1 } +|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 addr 2 color 1 } |0130 ;Sprite { vector 2 pad 6 x 2 y 2 addr 2 color 1 } |0140 ;Controller { vector 2 button 1 } |0150 ;Keys { vector 2 key 1 } diff --git a/src/emulator.c b/src/emulator.c index 921aa33..88ddf8a 100644 --- a/src/emulator.c +++ b/src/emulator.c @@ -210,29 +210,15 @@ console_poke(Uxn *u, Uint16 ptr, Uint8 b0, Uint8 b1) Uint8 screen_poke(Uxn *u, Uint16 ptr, Uint8 b0, Uint8 b1) { - Uint8 *m = u->ram.dat; - ptr += 8; - if(b0 == 0x0c) { - Uint16 x = (m[ptr] << 8) + m[ptr + 1]; - Uint16 y = (m[ptr + 2] << 8) + m[ptr + 3]; - Uint8 *layer = b1 >> 4 & 0xf ? ppu.fg : ppu.bg; - putpixel(&ppu, layer, x, y, b1 & 0xf); - reqdraw = 1; - } - return b1; -} - -Uint8 -sprite_poke(Uxn *u, Uint16 ptr, Uint8 b0, Uint8 b1) -{ - Uint8 *m = u->ram.dat; - ptr += 8; if(b0 == 0x0e) { - Uint16 x = (m[ptr] << 8) + m[ptr + 1]; - Uint16 y = (m[ptr + 2] << 8) + m[ptr + 3]; - Uint8 *layer = (b1 >> 4) & 0xf ? ppu.fg : ppu.bg; - Uint8 *sprite = &m[(m[ptr + 4] << 8) + m[ptr + 5]]; - putsprite(&ppu, layer, x, y, sprite, b1 & 0xf); + Uint16 x = mempeek16(u, ptr + 8); + Uint16 y = mempeek16(u, ptr + 10); + Uint8 *addr = &u->ram.dat[mempeek16(u, ptr + 12)]; + Uint8 *layer = (b1 >> 4 & 0xf) % 2 ? ppu.fg : ppu.bg; + if((b1 >> 4 & 0xf) / 2) + putsprite(&ppu, layer, x, y, addr, b1 & 0xf); + else + putpixel(&ppu, layer, x, y, b1 & 0xf); reqdraw = 1; } return b1; @@ -398,7 +384,7 @@ main(int argc, char **argv) devsystem = portuxn(&u, 0x00, "system", system_poke); portuxn(&u, 0x01, "console", console_poke); devscreen = portuxn(&u, 0x02, "screen", screen_poke); - portuxn(&u, 0x03, "sprite", sprite_poke); + portuxn(&u, 0x03, "---", ppnil); devctrl = portuxn(&u, 0x04, "controller", ppnil); devkey = portuxn(&u, 0x05, "key", ppnil); devmouse = portuxn(&u, 0x06, "mouse", ppnil); diff --git a/src/uxn.h b/src/uxn.h index 81ccd8d..118e9b0 100644 --- a/src/uxn.h +++ b/src/uxn.h @@ -46,5 +46,7 @@ int loaduxn(Uxn *c, char *filepath); int bootuxn(Uxn *c); int inituxn(Uxn *u, Uint16 vec); int evaluxn(Uxn *u, Uint16 vec); -Device *portuxn(Uxn *u, Uint8 id, char *name, Uint8 (*pofn)(Uxn *, Uint16, Uint8, Uint8)); -void mempoke16(Uxn *u, Uint16 a, Uint16 b); \ No newline at end of file +void mempoke16(Uxn *u, Uint16 a, Uint16 b); +Uint16 mempeek16(Uxn *u, Uint16 a); + +Device *portuxn(Uxn *u, Uint8 id, char *name, Uint8 (*pofn)(Uxn *, Uint16, Uint8, Uint8)); \ No newline at end of file