From 39faf4c2b7cb6991275d7a7d09d913de438dfd29 Mon Sep 17 00:00:00 2001 From: neauoire Date: Mon, 1 Mar 2021 20:57:08 -0800 Subject: [PATCH] Added key example --- examples/dev.key.usm | 135 +++++++++++++++++++++++++++++++++---------- 1 file changed, 104 insertions(+), 31 deletions(-) diff --git a/examples/dev.key.usm b/examples/dev.key.usm index 5758b35..3c4a820 100644 --- a/examples/dev.key.usm +++ b/examples/dev.key.usm @@ -3,62 +3,76 @@ &Screen { width 2 height 2 pad 4 x 2 y 2 color 1 } &Sprite { pad 8 x 2 y 2 addr 2 color 1 } &Keyboard { key 1 } +&Mouse { x 2 y 2 state 1 chord 1 } &Textarea2d { x1 2 y1 2 x2 2 y2 2 color 1 addr 2 cursor 1 } - -&Point2d { x 2 y 2 } &Rect2d { x1 2 y1 2 x2 2 y2 2 } +&Point2d { x 2 y 2 } +;mouse Point2d ;textarea Textarea2d ;rect Rect2d ;color 1 +;blink 1 +;timer 1 |0100 @RESET - #0010 =textarea.x1 #0040 =textarea.y1 #00c0 =textarea.x2 #0090 =textarea.y2 ,body =textarea.addr + #0080 =textarea.x1 #0060 =textarea.y1 #00c0 =textarea.x2 #0090 =textarea.y2 ,body =textarea.addr ,redraw JSR + ,redraw-window JSR BRK |0200 @FRAME - ~dev/key #00 EQU BRK? ( skip on no-key ) - - ( backspace ) - ,on-erase ~dev/key #08 EQU JMP? POP2 - - ( otherwise ) - - ~dev/key ~textarea.addr #00 ~textarea.cursor ADD2 STR - - ( incr ) ~textarea.cursor #01 ADD =textarea.cursor - - @input-end - - #00 =dev/key ( release key ) - - ,redraw JSR + ,do-cursor JSR + ,do-textarea JSR BRK -@redraw +@redraw-window - ~textarea.x1 ~textarea.y1 ~textarea.x2 ~textarea.y2 #01 ,fill-rect JSR - ~textarea.x1 ~textarea.y1 #0f ~textarea.addr ,draw-textarea JSR + #0000 #0000 ~dev/screen.width ~dev/screen.height #01 ,pattern ,tile-rect JSR + ( dropshadow ) + ~textarea.x2 #0001 ADD2 ~textarea.y1 ~textarea.x2 #0004 ADD2 ~textarea.y2 #0004 ADD2 #01 ,fill-rect JSR + ~textarea.x1 ~textarea.y2 #0001 ADD2 ~textarea.x2 #0001 ADD2 ~textarea.y2 #0004 ADD2 #01 ,fill-rect JSR + ~textarea.x1 #0001 SUB2 ~textarea.y1 #0001 SUB2 ~textarea.x2 ~textarea.y2 #00 ,line-rect JSR ~textarea.x1 #0002 SUB2 ~textarea.y1 #0002 SUB2 ~textarea.x2 #0001 ADD2 ~textarea.y2 #0001 ADD2 #01 ,line-rect JSR RTS -@on-erase +@redraw + + ~textarea.x1 ~textarea.y1 ~textarea.x2 ~textarea.y2 #01 ,fill-rect JSR + ~textarea.x1 ~textarea.y1 #04 ~textarea.addr ,draw-textarea JSR - ( skip if cursor is at 0 ) - ,input-end ~textarea.cursor #01 LTH JMP? POP2 +RTS - #00 ~dev/key ~textarea.addr #00 ~textarea.cursor ADD2 STR +@blink-cursor + + ,skip ~timer #10 LTH JMP? POP2 + #00 =timer + ~blink #00 EQU =blink + ,cursor =dev/sprite.addr + #05 ~blink ADD =dev/sprite.color + @skip + ~timer #01 ADD =timer - ( decr ) ~textarea.cursor #01 SUB =textarea.cursor +RTS - BRK +@tile-rect ( x1 y1 x2 y2 color addr ) + + =dev/sprite.addr =color =rect.y2 =rect.x2 DUP2 =dev/sprite.y =rect.y1 DUP2 =dev/sprite.x =rect.x1 + + @tile-rect-ver + ~rect.x1 =dev/sprite.x + @tile-rect-hor + ( draw ) ~color =dev/sprite.color + ( incr ) ~dev/sprite.x #0008 ADD2 =dev/sprite.x + ,tile-rect-hor ~dev/sprite.x ~rect.x2 LTH2 JMP? POP2 + ( incr ) ~dev/sprite.y #0008 ADD2 =dev/sprite.y + ,tile-rect-ver ~dev/sprite.y ~rect.y2 LTH2 JMP? POP2 RTS @@ -115,12 +129,66 @@ RTS RTS +@do-textarea + + ( ,blink-cursor JSR ) + ,do-textarea-end ~dev/key #00 EQU JMP? POP2 ( skip on no key ) + ( backspace ) + ,any-key ~dev/key #08 NEQ JMP? POP2 + ,input-end ~textarea.cursor #00 EQU JMP? POP2 + ( decr ) ~textarea.cursor #01 SUB =textarea.cursor + #00 ~textarea.addr #00 ~textarea.cursor ADD2 STR + ,input-end JMP + @any-key + ~dev/key ~textarea.addr #00 ~textarea.cursor ADD2 STR + ( incr ) ~textarea.cursor #01 ADD =textarea.cursor + @input-end + #00 =dev/key ( release key ) + ,redraw JSR + ( add cursor ) + ,cursor =dev/sprite.addr + #06 =dev/sprite.color + @do-textarea-end + +RTS + +@do-cursor + + ,skip-drag ~dev/mouse.state #01 NEQ JMP? POP2 + ~mouse.x =textarea.x1 ~mouse.y =textarea.y1 + ,redraw-window JSR + ,redraw JSR + @skip-drag + + ~mouse.x ~dev/mouse.x NEQU2 + ~mouse.y ~dev/mouse.y NEQU2 + + #0000 EQU2 RTS? ( Return if unchanged ) + + ( clear last cursor ) + #10 ,clear_icn ~mouse.x ~mouse.y ,draw-sprite JSR + ( record mouse positions ) + ~dev/mouse.x =mouse.x ~dev/mouse.y =mouse.y + #12 ,cursor_icn ~mouse.x ~mouse.y ,draw-sprite JSR + + +RTS + +@draw-sprite + + =dev/sprite.y + =dev/sprite.x + =dev/sprite.addr + =dev/sprite.color + +RTS + @font ( spectrum-zx font ) [ 0000 0000 0000 0000 0000 2400 7e3c 0000 0000 2400 3c42 0000 0000 6c7c 7c38 1000 0010 387c 7c38 1000 0038 387c 6c10 3800 0010 387c 7c10 3800 0000 0018 1800 0000 007e 4242 4242 7e00 0000 1824 2418 0000 0018 2442 4224 1800 001e 063a 4a48 3000 - 0038 446c 107c 1000 000c 0808 0838 3800 003e 2222 2266 6600 0000 0822 0022 0800 + 0038 446c 107c 1000 0000 0000 0000 0000 003e 2222 2266 6600 0000 0822 0022 0800 0000 1018 1c18 1000 0000 0818 3818 0800 0008 1c00 001c 0800 0028 2828 2800 2800 003e 4a4a 3a0a 0a00 000c 3046 620c 3000 0000 0000 0000 ffff 0010 3800 3810 0038 0008 1c2a 0808 0800 0008 0808 2a1c 0800 0000 0804 7e04 0800 0000 1020 7e20 1000 @@ -151,13 +219,18 @@ RTS 0008 0808 0808 0800 0030 1008 0810 3000 0000 0032 4c00 0000 3c42 99a1 a199 423c ] -@body [ ] +@clear_icn [ 0000 0000 0000 0000 ] +@cursor_icn [ 80c0 e0f0 f8e0 1000 ] +@pattern [ aa55 aa55 aa55 aa55 ] +@cursor [ 7e7e 7e7e 7e7e 7e7e ] +@body [ ] |d000 @ERROR BRK |FF10 ;dev/screen Screen |FF20 ;dev/sprite Sprite |FF40 ;dev/key Keyboard +|FF50 ;dev/mouse Mouse |FFF0 .RESET .FRAME .ERROR ( vectors ) -|FFF8 [ f0ff f00f f00f ] ( palette ) +|FFF8 [ f0ff f000 f00f ] ( palette )