Browse code

The file device cannot write on the supervisor

neauoire authored on 08/01/2022 18:03:21
Showing 5 changed files
... ...
@@ -67,7 +67,7 @@ BRK
67 67
 
68 68
 @on-button ( -> )
69 69
 
70
-	.Controller/func DEI
70
+	.Controller/func DEI DUP DEBUG
71 71
 	DUP #02 ! ,&no-f2 JCN
72 72
 		;toggle-debugger JSR2
73 73
 		&no-f2
... ...
@@ -124,7 +124,8 @@ BRK
124 124
 
125 125
 @toggle-debugger ( -- )
126 126
 
127
-	( toggle debug ) #fd0e STH2k LDA #00 = STH2r STA
127
+	( toggle debug ) 
128
+	( #fd0e STH2k LDA #00 = STH2r STA )
128 129
 
129 130
 RTN
130 131
 
... ...
@@ -133,6 +134,9 @@ RTN
133 134
 	( clear devices/stacks )
134 135
 	#fd00 #0300 ;mclr JSR2
135 136
 
137
+	( load rom )
138
+
139
+
136 140
 RTN
137 141
 	&boot-path "boot.rom $1
138 142
 
... ...
@@ -149,7 +149,7 @@ file_deo(Device *d, Uint8 port)
149 149
 	case 0x5:
150 150
 		DEVPEEK16(a, 0x4);
151 151
 		DEVPEEK16(b, 0xa);
152
-		res = file_stat(&d->mem[a], b);
152
+		res = file_stat(&memory[a], b);
153 153
 		DEVPOKE16(0x2, res);
154 154
 		break;
155 155
 	case 0x6:
... ...
@@ -158,19 +158,19 @@ file_deo(Device *d, Uint8 port)
158 158
 		break;
159 159
 	case 0x9:
160 160
 		DEVPEEK16(a, 0x8);
161
-		res = file_init(&d->mem[a]);
161
+		res = file_init(&memory[a]);
162 162
 		DEVPOKE16(0x2, res);
163 163
 		break;
164 164
 	case 0xd:
165 165
 		DEVPEEK16(a, 0xc);
166 166
 		DEVPEEK16(b, 0xa);
167
-		res = file_read(&d->mem[a], b);
167
+		res = file_read(&memory[a], b);
168 168
 		DEVPOKE16(0x2, res);
169 169
 		break;
170 170
 	case 0xf:
171 171
 		DEVPEEK16(a, 0xe);
172 172
 		DEVPEEK16(b, 0xa);
173
-		res = file_write(&d->mem[a], b, d->dat[0x7]);
173
+		res = file_write(&memory[a], b, d->dat[0x7]);
174 174
 		DEVPOKE16(0x2, res);
175 175
 		break;
176 176
 	}
... ...
@@ -11,3 +11,5 @@ WITH REGARD TO THIS SOFTWARE.
11 11
 */
12 12
 
13 13
 void file_deo(Device *d, Uint8 port);
14
+
15
+extern Uint8 *memory;
14 16
\ No newline at end of file
... ...
@@ -4,6 +4,9 @@
4 4
 #include <time.h>
5 5
 
6 6
 #include "uxn.h"
7
+
8
+Uint8 *supervisor_memory, *memory;
9
+
7 10
 #include "devices/system.h"
8 11
 #include "devices/file.h"
9 12
 #include "devices/datetime.h"
... ...
@@ -110,17 +113,15 @@ load(Uxn *u, char *filepath)
110 113
 	return 1;
111 114
 }
112 115
 
113
-static Uint8 *shadow, *memory;
114
-
115 116
 int
116 117
 main(int argc, char **argv)
117 118
 {
118 119
 	Uxn u;
119 120
 	int i, loaded = 0;
120 121
 
121
-	shadow = (Uint8 *)calloc(0x10000, sizeof(Uint8));
122
+	supervisor_memory = (Uint8 *)calloc(0x10000, sizeof(Uint8));
122 123
 	memory = (Uint8 *)calloc(0x10000, sizeof(Uint8));
123
-	if(!uxn_boot(&u, memory, shadow + PAGE_DEV, (Stack *)(shadow + PAGE_WST), (Stack *)(shadow + PAGE_RST)))
124
+	if(!uxn_boot(&u, memory, supervisor_memory + PAGE_DEV, (Stack *)(supervisor_memory + PAGE_WST), (Stack *)(supervisor_memory + PAGE_RST)))
124 125
 		return error("Boot", "Failed");
125 126
 
126 127
 	/* system   */ devsystem = uxn_port(&u, 0x0, system_dei, system_deo);
... ...
@@ -1,8 +1,11 @@
1 1
 #include <stdio.h>
2 2
 #include <unistd.h>
3 3
 #include <time.h>
4
+
4 5
 #include "uxn.h"
5 6
 
7
+Uint8 *supervisor_memory, *memory;
8
+
6 9
 #pragma GCC diagnostic push
7 10
 #pragma clang diagnostic push
8 11
 #pragma GCC diagnostic ignored "-Wpedantic"
... ...
@@ -246,17 +249,15 @@ load(Uxn *u, char *rom)
246 249
 	return 1;
247 250
 }
248 251
 
249
-static Uint8 *shadow, *memory;
250
-
251 252
 static int
252 253
 start(Uxn *u, char *rom)
253 254
 {
254 255
 	memory = (Uint8 *)calloc(0x10000, sizeof(Uint8));
255
-	shadow = (Uint8 *)calloc(0x10000, sizeof(Uint8));
256
+	supervisor_memory = (Uint8 *)calloc(0x10000, sizeof(Uint8));
256 257
 
257
-	if(!uxn_boot(&supervisor, shadow, shadow + VISOR_DEV, (Stack *)(shadow + VISOR_WST), (Stack *)(shadow + VISOR_RST)))
258
+	if(!uxn_boot(&supervisor, supervisor_memory, supervisor_memory + VISOR_DEV, (Stack *)(supervisor_memory + VISOR_WST), (Stack *)(supervisor_memory + VISOR_RST)))
258 259
 		return error("Boot", "Failed to start uxn.");
259
-	if(!uxn_boot(u, memory, shadow + PAGE_DEV, (Stack *)(shadow + PAGE_WST), (Stack *)(shadow + PAGE_RST)))
260
+	if(!uxn_boot(u, memory, supervisor_memory + PAGE_DEV, (Stack *)(supervisor_memory + PAGE_WST), (Stack *)(supervisor_memory + PAGE_RST)))
260 261
 		return error("Boot", "Failed to start uxn.");
261 262
 	if(!load(&supervisor, "supervisor.rom"))
262 263
 		error("Supervisor", "No debugger found.");
... ...
@@ -458,10 +459,11 @@ run(Uxn *u)
458 459
 					controller_key(devctrl, get_key(&event));
459 460
 				else if(get_button(&event))
460 461
 					controller_down(devctrl, get_button(&event));
461
-				/* else if(get_fkey(&event))
462
-					controller_special(&supervisor.dev[0x8], get_fkey(&event)); */
463 462
 				else
464 463
 					do_shortcut(u, &event);
464
+				/* function keys are sent to supervisor */
465
+				if(get_fkey(&event))
466
+					controller_special(&supervisor.dev[0x8], get_fkey(&event));
465 467
 				ksym = event.key.keysym.sym;
466 468
 				if(SDL_PeepEvents(&event, 1, SDL_PEEKEVENT, SDL_KEYUP, SDL_KEYUP) == 1 && ksym == event.key.keysym.sym)
467 469
 					break;