diff --git a/build.sh b/build.sh index 6b9323c..d9ef61d 100755 --- a/build.sh +++ b/build.sh @@ -28,7 +28,7 @@ else fi echo "Assembling.." -./bin/assembler projects/examples/dev.controller.usm bin/boot.rom +./bin/assembler projects/examples/dev.keys.usm bin/boot.rom echo "Running.." if [ "${2}" = '--cli' ]; diff --git a/projects/examples/dev.audio.usm b/projects/examples/dev.audio.usm index 809dbc2..cc8fd94 100644 --- a/projects/examples/dev.audio.usm +++ b/projects/examples/dev.audio.usm @@ -82,10 +82,6 @@ BRK BRK -@ERROR - -BRK - @touch-trk ( -- ) ,clear-notes JSR2 diff --git a/projects/examples/dev.console.usm b/projects/examples/dev.console.usm index 5de2927..b3bfc94 100644 --- a/projects/examples/dev.console.usm +++ b/projects/examples/dev.console.usm @@ -30,6 +30,3 @@ RTN @text1 [ Welcome 20 to 20 UxnVM 0a00 ] @text2 [ Hello 20 World 0a00 ] - -@FRAME BRK -@ERROR BRK \ No newline at end of file diff --git a/projects/examples/dev.controller.usm b/projects/examples/dev.controller.usm index b5d08a2..d0a34fd 100644 --- a/projects/examples/dev.controller.usm +++ b/projects/examples/dev.controller.usm @@ -13,9 +13,9 @@ |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 { p1 1 } -|0150 ;Keys { key 1 } +|0130 ;Sprite { vector 2 pad 6 x 2 y 2 addr 2 color 1 } +|0140 ;Controller { vector 2 p1 1 } +|0150 ;Keys { vector 2 key 1 } |0160 ;Mouse { x 2 y 2 state 1 chord 1 change 1 } |0170 ;File { pad 8 name 2 length 2 load 2 save 2 } |0180 ;Audio { ch1adsr 2 ch2adsr 2 ch3adsr 2 ch4adsr 2 ch1vol 1 ch1pitch 1 ch2vol 1 ch2pitch 1 ch3vol 1 ch3pitch 1 ch4vol 1 ch4pitch 1 } @@ -34,13 +34,7 @@ BRK -@FRAME - - ~Controller.p1 ,on-ctrl-arrows JNZ2 - -BRK - -@on-ctrl-arrows +@FRAME #0a =slime ,default_icn =Sprite.addr @@ -81,5 +75,3 @@ BRK @left_icn [ 3c7e ef1f 1fef 7e3c ] @right_icn [ 3c7e f7f8 f8f7 7e3c ] @slime_icn [ 0000 183c 3c18 0000 ] - -@ERROR BRK diff --git a/projects/examples/dev.keys.usm b/projects/examples/dev.keys.usm index d86c7d8..290904b 100644 --- a/projects/examples/dev.keys.usm +++ b/projects/examples/dev.keys.usm @@ -1,56 +1,60 @@ ( Dev/Keys ) +%RTN { JMP2r } %8+ { #0008 ADD2 } %8* { #0030 SFT2 } %MOD2 { #03 AND } -;cursor { x 2 y 2 blink 1 } +;cursor { x 2 y 2 } -|0100 ;Console { pad 8 char 1 byte 1 short 2 } -|0110 ;Screen { width 2 height 2 pad 4 y 2 x 2 color 1 } -|0120 ;Sprite { pad 8 x 2 y 2 addr 2 color 1 } -|0130 ;Controller { buttons 1 } -|0140 ;Keys { key 1 } -|01F0 ;System { pad 8 r 2 g 2 b 2 } -|0200 ^RESET JMP -|0204 ,ERROR JMP2 -|0208 ,FRAME JMP2 +|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 } +|0140 ;Controller { vector 2 button 1 } +|0150 ;Keys { vector 2 key 1 } -@RESET +( program ) - ( theme ) #127f =System.r #34e7 =System.g #56c4 =System.b +|0200 @RESET + + ( theme ) #0f73 =System.r #0fe3 =System.g #0fc3 =System.b + ( vectors ) ,KEY =Keys.vector + ( vectors ) ,BUTTON =Controller.vector + ,draw-cursor JSR2 BRK -@FRAME - - ( theme ) #0daf =System.r #02ff =System.g #035f =System.b +@KEY - ( update cursor ) - #02 =Sprite.color - ,cursor_icn =Sprite.addr - ~cursor.blink MOD2 #00 EQU =cursor.blink + ,font #00 ~Keys.key 8* ADD2 =Sprite.addr + ( draw ) #01 =Sprite.color + ~Sprite.x 8+ =Sprite.x + ( release ) #00 =Keys.key + ,draw-cursor JSR2 - ~Keys #00 EQU ^$end JNZ +BRK +@BUTTON + ( enter key ) - ~Keys #0d NEQ ^$no-return JNZ + ~Controller.button #08 NEQ ^$no-return JNZ + #00 =Sprite.color #0000 =Sprite.x ( incr ) ~Sprite.y 8+ =Sprite.y - ( release ) #00 =Keys - BRK + ( release ) #00 =Controller.button + ,draw-cursor JSR2 $no-return - ,font #00 ~Keys 8* ADD2 =Sprite.addr - ( draw ) #01 =Sprite.color - ( incr ) ~Sprite.x 8+ =Sprite.x - ( release ) #00 =Keys - - $end - BRK +@draw-cursor + + ,cursor_icn =Sprite.addr #02 =Sprite.color + +RTN + @cursor_icn [ ffff ffff ffff ffff ] @font ( spectrum-zx font ) @@ -89,6 +93,4 @@ BRK 0008 0808 0808 0800 0030 1008 0810 3000 0000 0032 4c00 0000 3c42 99a1 a199 423c ] -@ERROR BRK - ;text { body 2 } diff --git a/projects/examples/dev.mouse.usm b/projects/examples/dev.mouse.usm index 335cf39..90ce813 100644 --- a/projects/examples/dev.mouse.usm +++ b/projects/examples/dev.mouse.usm @@ -16,13 +16,13 @@ |0150 ;Mouse { x 2 y 2 state 1 chord 1 } |0170 ;Audio { ch1adsr 2 ch2adsr 2 ch3adsr 2 ch4adsr 2 ch1vol 1 ch1pitch 1 ch2vol 1 ch2pitch 1 ch3vol 1 ch3pitch 1 ch4vol 1 ch4pitch 1 } |01F0 ;System { pad 8 r 2 g 2 b 2 } -|0200 ^RESET JMP -|0204 ,ERROR JMP2 -|0208 ,FRAME JMP2 -@RESET +( program ) + +|0200 @RESET ( theme ) #03fd =System.r #0ef3 =System.g #0bf2 =System.b + ( vectors ) ,FRAME =Screen.vector #004f =Audio.ch1adsr #33 =Audio.ch1vol diff --git a/projects/examples/dev.screen.usm b/projects/examples/dev.screen.usm index 574163b..2208fd6 100644 --- a/projects/examples/dev.screen.usm +++ b/projects/examples/dev.screen.usm @@ -26,13 +26,13 @@ |0120 ;Sprite { pad 8 x 2 y 2 addr 2 color 1 } |0150 ;Mouse { x 2 y 2 state 1 chord 1 } |01F0 ;System { pad 8 r 2 g 2 b 2 } -|0200 ^RESET JMP -|0204 ,ERROR JMP2 -|0208 ,FRAME JMP2 -@RESET +( program ) + +|0200 @RESET ( theme ) #127f =System.r #34e7 =System.g #56c4 =System.b + ( vectors ) ,FRAME =Screen.vector #00a0 =window.w #0050 =window.h diff --git a/projects/examples/dev.time.usm b/projects/examples/dev.time.usm index 8809b13..3fcfe9d 100644 --- a/projects/examples/dev.time.usm +++ b/projects/examples/dev.time.usm @@ -21,17 +21,12 @@ |0190 ;Time { year 2 month 1 day 1 hour 1 minute 1 second 1 dow 1 doy 2 isdst 1 get 1 } |01F0 ;System { pad 8 r 2 g 2 b 2 } -( vectors ) - -|0200 ^RESET JMP -|0204 ,ERROR JMP2 -|0208 ,FRAME JMP2 - ( program ) -@RESET +|0200 @RESET ( theme ) #0ff8 =System.r #0f08 =System.g #0f08 =System.b + ( vectors ) ,FRAME =Screen.vector #1000 =Audio.ch1adsr #66 =Audio.ch1vol diff --git a/projects/examples/gui.hover.usm b/projects/examples/gui.hover.usm index b26eaaa..fb05fa2 100644 --- a/projects/examples/gui.hover.usm +++ b/projects/examples/gui.hover.usm @@ -14,13 +14,13 @@ |0120 ;Sprite { pad 8 x 2 y 2 addr 2 color 1 } |0150 ;Mouse { x 2 y 2 state 1 chord 1 } |01F0 ;System { pad 8 r 2 g 2 b 2 } -|0200 ^RESET JMP -|0204 ,ERROR JMP2 -|0208 ,FRAME JMP2 -@RESET +( program ) + +|0200 @RESET ( theme ) #0f0f =System.r #0fff =System.g #0ff0 =System.b + ( vectors ) ,FRAME =Screen.vector #0020 #0030 #0060 #0060 =r1.y2 =r1.x2 =r1.y1 =r1.x1 #0058 #0050 #0090 #0080 =r2.y2 =r2.x2 =r2.y1 =r2.x1 diff --git a/projects/examples/gui.label.usm b/projects/examples/gui.label.usm index 2b78f77..5b14a9b 100644 --- a/projects/examples/gui.label.usm +++ b/projects/examples/gui.label.usm @@ -10,13 +10,13 @@ |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 ;System { pad 8 r 2 g 2 b 2 } -|0200 ^RESET JMP -|0204 ,ERROR JMP2 -|0208 ,FRAME JMP2 -@RESET +( program ) + +|0200 @RESET ( theme ) #0f0f =System.r #0fff =System.g #0ff0 =System.b + ( vectors ) ,FRAME =Screen.vector ( find screen center ) ~Screen.width #0002 DIV2 =center.x diff --git a/projects/examples/gui.picture.usm b/projects/examples/gui.picture.usm index d483b6d..95f28de 100644 --- a/projects/examples/gui.picture.usm +++ b/projects/examples/gui.picture.usm @@ -6,13 +6,13 @@ |0120 ;Sprite { pad 8 x 2 y 2 addr 2 color 1 } |01F0 ;System { pad 8 r 2 g 2 b 2 } -|0200 ^RESET JMP -|0204 ,ERROR JMP2 -|0208 ,FRAME JMP2 -@RESET +( program ) + +|0200 @RESET ( theme ) #0ffc =System.r #0f0b =System.g #0f03 =System.b + ( vectors ) ,FRAME =Screen.vector #0000 #0000 #0100 #0100 #01 ,pict_large ,draw-picture JSR2 #0098 #0060 #0080 #0080 #01 ,pict_medium ,draw-picture JSR2 diff --git a/projects/examples/gui.shapes.usm b/projects/examples/gui.shapes.usm index 817c6be..a4ac1c9 100644 --- a/projects/examples/gui.shapes.usm +++ b/projects/examples/gui.shapes.usm @@ -16,11 +16,10 @@ |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 ;System { pad 8 r 2 g 2 b 2 } -|0200 ^RESET JMP -|0204 ,ERROR JMP2 -|0208 ,FRAME JMP2 -@RESET +( program ) + +|0200 @RESET ( theme ) #13fd =System.r #1ef3 =System.g #1bf2 =System.b @@ -160,6 +159,3 @@ RTN 8f83 8383 8383 83ff fff7 fdff c0e2 f1ff 7fef bfff 07af 5fff ffff ffff ffff ffff ] - -@FRAME BRK -@ERROR BRK diff --git a/src/emulator.c b/src/emulator.c index dd34cec..eccfb83 100644 --- a/src/emulator.c +++ b/src/emulator.c @@ -351,7 +351,7 @@ void domouse(Uxn *u, SDL_Event *event) { Uint8 flag = 0x00; - Uint16 addr = devmouse->addr; + Uint16 addr = devmouse->addr + 2; Uint16 x = clamp(event->motion.x / ZOOM - PAD * 8, 0, HOR * 8 - 1); Uint16 y = clamp(event->motion.y / ZOOM - PAD * 8, 0, VER * 8 - 1); u->ram.dat[addr + 0] = (x >> 8) & 0xff; @@ -381,7 +381,7 @@ void dotext(Uxn *u, SDL_Event *event) { int i; - Uint16 addr = devkey->addr; + Uint16 addr = devkey->addr + 2; if(SDL_GetModState() & KMOD_LCTRL || SDL_GetModState() & KMOD_RCTRL) return; for(i = 0; i < SDL_TEXTINPUTEVENT_TEXT_SIZE; ++i) { @@ -396,7 +396,7 @@ void doctrl(Uxn *u, SDL_Event *event, int z) { Uint8 flag = 0x00; - Uint16 addr = devctrl->addr; + Uint16 addr = devctrl->addr + 2; if(z && event->key.keysym.sym == SDLK_h) { if(SDL_GetModState() & KMOD_LCTRL) toggledebug(u); @@ -408,11 +408,11 @@ doctrl(Uxn *u, SDL_Event *event, int z) case SDLK_LALT: flag = 0x02; break; case SDLK_BACKSPACE: flag = 0x04; - if(z) u->ram.dat[devkey->addr] = 0x08; + if(z) u->ram.dat[devkey->addr + 2] = 0x08; break; case SDLK_RETURN: flag = 0x08; - if(z) u->ram.dat[devkey->addr] = 0x0d; + if(z) u->ram.dat[devkey->addr + 2] = 0x0d; break; case SDLK_UP: flag = 0x10; break; case SDLK_DOWN: flag = 0x20; break; @@ -592,10 +592,22 @@ start(Uxn *u) case SDL_QUIT: quit(); break; case SDL_MOUSEBUTTONUP: case SDL_MOUSEBUTTONDOWN: - case SDL_MOUSEMOTION: domouse(u, &event); break; - case SDL_TEXTINPUT: dotext(u, &event); break; - case SDL_KEYDOWN: doctrl(u, &event, 1); break; - case SDL_KEYUP: doctrl(u, &event, 0); break; + case SDL_MOUSEMOTION: + domouse(u, &event); + evaluxn(u, devmouse->vector); + break; + case SDL_TEXTINPUT: + dotext(u, &event); + evaluxn(u, devkey->vector); + break; + case SDL_KEYDOWN: + doctrl(u, &event, 1); + evaluxn(u, devctrl->vector); + break; + case SDL_KEYUP: + doctrl(u, &event, 0); + evaluxn(u, devctrl->vector); + break; case SDL_WINDOWEVENT: if(event.window.event == SDL_WINDOWEVENT_EXPOSED) redraw(pixels, u);