commit 160ba61
Devine Lu Linvega
·
2025-01-21 23:51:52 +0000 UTC
parent 296fa5c
Cache mouse and controller vectors
5 files changed,
+32,
-7
+13,
-3
1@@ -12,12 +12,14 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
2 WITH REGARD TO THIS SOFTWARE.
3 */
4
5+static int controller_vector;
6+
7 void
8 controller_down(Uint8 mask)
9 {
10 if(mask) {
11 uxn.dev[0x82] |= mask;
12- uxn_eval(PEEK2(&uxn.dev[0x80]));
13+ uxn_eval(controller_vector);
14 }
15 }
16
17@@ -26,7 +28,7 @@ controller_up(Uint8 mask)
18 {
19 if(mask) {
20 uxn.dev[0x82] &= (~mask);
21- uxn_eval(PEEK2(&uxn.dev[0x80]));
22+ uxn_eval(controller_vector);
23 }
24 }
25
26@@ -35,7 +37,15 @@ controller_key(Uint8 key)
27 {
28 if(key) {
29 uxn.dev[0x83] = key;
30- uxn_eval(PEEK2(&uxn.dev[0x80]));
31+ uxn_eval(controller_vector);
32 uxn.dev[0x83] = 0;
33 }
34 }
35+
36+void
37+controller_deo(Uint8 addr)
38+{
39+ switch(addr) {
40+ case 0x81: controller_vector = PEEK2(&uxn.dev[0x80]); break;
41+ }
42+}
+1,
-0
1@@ -12,3 +12,4 @@ WITH REGARD TO THIS SOFTWARE.
2 void controller_down(Uint8 mask);
3 void controller_up(Uint8 mask);
4 void controller_key(Uint8 key);
5+void controller_deo(Uint8 addr);
+15,
-4
1@@ -1,5 +1,6 @@
2 #include "../uxn.h"
3 #include "mouse.h"
4+#include <stdio.h>
5
6 /*
7 Copyright (c) 2021-2023 Devine Lu Linvega, Andrew Alderwick
8@@ -12,18 +13,20 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 WITH REGARD TO THIS SOFTWARE.
10 */
11
12+static int mouse_vector;
13+
14 void
15 mouse_down(Uint8 mask)
16 {
17 uxn.dev[0x96] |= mask;
18- uxn_eval(PEEK2(&uxn.dev[0x90]));
19+ uxn_eval(mouse_vector);
20 }
21
22 void
23 mouse_up(Uint8 mask)
24 {
25 uxn.dev[0x96] &= (~mask);
26- uxn_eval(PEEK2(&uxn.dev[0x90]));
27+ uxn_eval(mouse_vector);
28 }
29
30 void
31@@ -31,7 +34,7 @@ mouse_pos(Uint16 x, Uint16 y)
32 {
33 uxn.dev[0x92] = x >> 8, uxn.dev[0x93] = x;
34 uxn.dev[0x94] = y >> 8, uxn.dev[0x95] = y;
35- uxn_eval(PEEK2(&uxn.dev[0x90]));
36+ uxn_eval(mouse_vector);
37 }
38
39 void
40@@ -39,7 +42,15 @@ mouse_scroll(Uint16 x, Uint16 y)
41 {
42 uxn.dev[0x9a] = x >> 8, uxn.dev[0x9b] = x;
43 uxn.dev[0x9c] = -y >> 8, uxn.dev[0x9d] = -y;
44- uxn_eval(PEEK2(&uxn.dev[0x90]));
45+ uxn_eval(mouse_vector);
46 uxn.dev[0x9a] = 0, uxn.dev[0x9b] = 0;
47 uxn.dev[0x9c] = 0, uxn.dev[0x9d] = 0;
48 }
49+
50+void
51+mouse_deo(Uint8 addr)
52+{
53+ switch(addr) {
54+ case 0x91: mouse_vector = PEEK2(&uxn.dev[0x90]); break;
55+ }
56+}
+1,
-0
1@@ -13,3 +13,4 @@ void mouse_down(Uint8 mask);
2 void mouse_up(Uint8 mask);
3 void mouse_pos(Uint16 x, Uint16 y);
4 void mouse_scroll(Uint16 x, Uint16 y);
5+void mouse_deo(Uint8 addr);
+2,
-0
1@@ -62,6 +62,8 @@ emu_deo(Uint8 addr, Uint8 value)
2 break;
3 case 0x10: console_deo(addr); break;
4 case 0x20: screen_deo(addr); break;
5+ case 0x80: controller_deo(addr); break;
6+ case 0x90: mouse_deo(addr); break;
7 case 0xa0: file_deo(addr); break;
8 case 0xb0: file_deo(addr); break;
9 }