| ... | ... |
@@ -1,10 +1,15 @@ |
| 1 | 1 |
( Dev/Mouse ) |
| 2 | 2 |
|
| 3 | 3 |
%RTN { JMP2r }
|
| 4 |
+%8+ { #0008 ADD2 }
|
|
| 4 | 5 |
%++ { #0001 ADD2 }
|
| 5 | 6 |
%-- { #0001 SUB2 }
|
| 6 | 7 |
|
| 8 |
+;touch1 { xc 2 yc 2 r 2 }
|
|
| 9 |
+;touch2 { xc 2 yc 2 r 2 }
|
|
| 10 |
+ |
|
| 7 | 11 |
;color { byte 1 }
|
| 12 |
+;addr { short 2 }
|
|
| 8 | 13 |
;pointer { x 2 y 2 }
|
| 9 | 14 |
;circle { xc 2 yc 2 x 2 y 2 r 2 d 2 }
|
| 10 | 15 |
|
| ... | ... |
@@ -23,9 +28,18 @@ |
| 23 | 28 |
BRK |
| 24 | 29 |
|
| 25 | 30 |
@on-screen |
| 26 |
- |
|
| 27 |
- ( clear ) ~circle.xc ~circle.yc ~circle.r #00 ,draw-circle JSR2 |
|
| 28 |
- ( draw ) ~circle.xc ~circle.yc ~circle.r #0001 ADD2 #03 ,draw-circle JSR2 |
|
| 31 |
+ |
|
| 32 |
+ ( clear ) ~touch1.xc ~touch1.yc ~touch1.r #00 ,draw-circle JSR2 |
|
| 33 |
+ ( clear ) ~touch2.xc ~touch2.yc ~touch2.r #00 ,draw-circle JSR2 |
|
| 34 |
+ |
|
| 35 |
+ ~touch1.r ++ =touch1.r |
|
| 36 |
+ ~touch2.r ++ =touch2.r |
|
| 37 |
+ |
|
| 38 |
+ ( draw ) ~touch1.xc ~touch1.yc ~touch1.r #03 ,draw-circle JSR2 |
|
| 39 |
+ ( draw ) ~touch2.xc ~touch2.yc ~touch2.r #02 ,draw-circle JSR2 |
|
| 40 |
+ |
|
| 41 |
+ ~touch1.xc ~touch1.yc #23 ,touch1.r #0001 ADD2 ,draw-byte JSR2 |
|
| 42 |
+ ~touch2.xc ~touch2.yc #28 ,touch2.r #0001 ADD2 ,draw-byte JSR2 |
|
| 29 | 43 |
|
| 30 | 44 |
BRK |
| 31 | 45 |
|
| ... | ... |
@@ -33,14 +47,16 @@ BRK |
| 33 | 47 |
|
| 34 | 48 |
,draw-cursor JSR2 |
| 35 | 49 |
|
| 36 |
- ( clear ) ~circle.xc ~circle.yc ~circle.r #00 ,draw-circle JSR2 |
|
| 37 |
- |
|
| 38 |
- ~Mouse.state #00 EQU ^$no-touch JNZ |
|
| 39 |
- ~Mouse.x DUP2 =circle.xc |
|
| 40 |
- ~Mouse.y DUP2 =circle.yc |
|
| 41 |
- #0000 =circle.r |
|
| 50 |
+ ~Mouse.state #01 NEQ ,$no-touch1 JNZ2 |
|
| 51 |
+ ( clear ) ~touch1.xc ~touch1.yc ~touch1.r #00 ,draw-circle JSR2 |
|
| 52 |
+ ( update ) ~Mouse.x =touch1.xc ~Mouse.y =touch1.yc #0000 =touch1.r |
|
| 42 | 53 |
( release ) #00 =Mouse.state |
| 43 |
- $no-touch |
|
| 54 |
+ $no-touch1 |
|
| 55 |
+ ~Mouse.state #10 NEQ ,$no-touch2 JNZ2 |
|
| 56 |
+ ( clear ) ~touch2.xc ~touch2.yc ~touch2.r #00 ,draw-circle JSR2 |
|
| 57 |
+ ( update ) ~Mouse.x =touch2.xc ~Mouse.y =touch2.yc #0000 =touch2.r |
|
| 58 |
+ ( release ) #00 =Mouse.state |
|
| 59 |
+ $no-touch2 |
|
| 44 | 60 |
|
| 45 | 61 |
BRK |
| 46 | 62 |
|
| ... | ... |
@@ -93,5 +109,30 @@ RTN |
| 93 | 109 |
|
| 94 | 110 |
RTN |
| 95 | 111 |
|
| 112 |
+@draw-byte ( x y color addr -- ) |
|
| 113 |
+ |
|
| 114 |
+ =addr STH |
|
| 115 |
+ =Screen.y |
|
| 116 |
+ =Screen.x |
|
| 117 |
+ ,font_hex #00 ~addr PEK2 #04 SFT #0008 MUL2 ADD2 =Screen.addr |
|
| 118 |
+ STHr DUP STH =Screen.color |
|
| 119 |
+ ,font_hex #00 ~addr PEK2 #0f AND #0008 MUL2 ADD2 =Screen.addr |
|
| 120 |
+ ~Screen.x 8+ =Screen.x |
|
| 121 |
+ STHr =Screen.color |
|
| 122 |
+ |
|
| 123 |
+RTN |
|
| 124 |
+ |
|
| 96 | 125 |
@clear_icn [ 0000 0000 0000 0000 ] |
| 97 |
-@cursor_icn [ 80c0 e0f0 f8e0 1000 ] |
|
| 98 | 126 |
\ No newline at end of file |
| 127 |
+@cursor_icn [ 80c0 e0f0 f8e0 1000 ] |
|
| 128 |
+ |
|
| 129 |
+@font_hex |
|
| 130 |
+[ |
|
| 131 |
+ 003c 464a 5262 3c00 0018 0808 0808 1c00 |
|
| 132 |
+ 003c 4202 3c40 7e00 003c 421c 0242 3c00 |
|
| 133 |
+ 000c 1424 447e 0400 007e 407c 0242 3c00 |
|
| 134 |
+ 003c 407c 4242 3c00 007e 0204 0810 1000 |
|
| 135 |
+ 003c 423c 4242 3c00 003c 4242 3e02 3c00 |
|
| 136 |
+ 003c 4242 7e42 4200 007c 427c 4242 7c00 |
|
| 137 |
+ 003c 4240 4042 3c00 007c 4242 4242 7c00 |
|
| 138 |
+ 007e 4078 4040 7e00 007e 4078 4040 4000 |
|
| 139 |
+] |
|
| 99 | 140 |
\ No newline at end of file |
| ... | ... |
@@ -128,23 +128,25 @@ void |
| 128 | 128 |
domouse(Uxn *u, SDL_Event *event) |
| 129 | 129 |
{
|
| 130 | 130 |
Uint8 flag = 0x00; |
| 131 |
- Uint16 addr = devmouse->addr + 2; |
|
| 132 | 131 |
Uint16 x = clamp(event->motion.x / zoom - ppu.pad, 0, ppu.hor * 8 - 1); |
| 133 | 132 |
Uint16 y = clamp(event->motion.y / zoom - ppu.pad, 0, ppu.ver * 8 - 1); |
| 134 |
- mempoke16(u, addr + 0, x); |
|
| 135 |
- mempoke16(u, addr + 2, y); |
|
| 136 |
- u->ram.dat[addr + 5] = 0x00; |
|
| 137 |
- flag = event->button.button == SDL_BUTTON_LEFT ? 0x01 : 0x10; |
|
| 133 |
+ mempoke16(u, devmouse->addr + 2, x); |
|
| 134 |
+ mempoke16(u, devmouse->addr + 4, y); |
|
| 135 |
+ u->ram.dat[devmouse->addr + 7] = 0x00; |
|
| 136 |
+ switch(event->button.button) {
|
|
| 137 |
+ case SDL_BUTTON_LEFT: flag = 0x01; break; |
|
| 138 |
+ case SDL_BUTTON_RIGHT: flag = 0x10; break; |
|
| 139 |
+ } |
|
| 138 | 140 |
switch(event->type) {
|
| 139 | 141 |
case SDL_MOUSEBUTTONDOWN: |
| 140 |
- u->ram.dat[addr + 4] |= flag; |
|
| 141 |
- if(flag == 0x10 && (u->ram.dat[addr + 4] & 0x01)) |
|
| 142 |
- u->ram.dat[addr + 5] = 0x01; |
|
| 143 |
- if(flag == 0x01 && (u->ram.dat[addr + 4] & 0x10)) |
|
| 144 |
- u->ram.dat[addr + 5] = 0x10; |
|
| 142 |
+ u->ram.dat[devmouse->addr + 6] |= flag; |
|
| 143 |
+ if(flag == 0x10 && (u->ram.dat[devmouse->addr + 6] & 0x01)) |
|
| 144 |
+ u->ram.dat[devmouse->addr + 7] = 0x01; |
|
| 145 |
+ if(flag == 0x01 && (u->ram.dat[devmouse->addr + 6] & 0x10)) |
|
| 146 |
+ u->ram.dat[devmouse->addr + 7] = 0x10; |
|
| 145 | 147 |
break; |
| 146 | 148 |
case SDL_MOUSEBUTTONUP: |
| 147 |
- u->ram.dat[addr + 4] &= (~flag); |
|
| 149 |
+ u->ram.dat[devmouse->addr + 6] &= (~flag); |
|
| 148 | 150 |
break; |
| 149 | 151 |
} |
| 150 | 152 |
} |