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 	}