commit c49be24

Devine Lu Linvega  ·  2026-01-07 18:47:49 +0000 UTC
parent 190e858
Distributed and formatted handlers
1 files changed,  +315, -59
+315, -59
  1@@ -25,6 +25,11 @@ cc -DNDEBUG -O2 -g0 -s src/uxn11.c -lX11 -lutil -o bin/uxn11
  2 typedef unsigned char Uint8;
  3 typedef unsigned short Uint16;
  4 
  5+typedef void (*deo_handler)(void);
  6+static deo_handler deo_handlers[256];
  7+typedef Uint8 (*dei_handler)(void);
  8+static dei_handler dei_handlers[256];
  9+
 10 static XImage *ximage;
 11 static Display *display;
 12 static Window window;
 13@@ -206,6 +211,36 @@ system_deo_expansion(void)
 14 		fprintf(stderr, "Unknown command: %s\n", &ram[exp]);
 15 }
 16 
 17+Uint8
 18+system_dei_wst(void)
 19+{
 20+	return ptr[0];
 21+}
 22+
 23+Uint8
 24+system_dei_rst(void)
 25+{
 26+	return ptr[1];
 27+}
 28+
 29+void
 30+system_deo_wst(void)
 31+{
 32+	ptr[0] = dev[4];
 33+}
 34+
 35+void
 36+system_deo_rst(void)
 37+{
 38+	ptr[0] = dev[4];
 39+}
 40+
 41+void
 42+system_deo_print(void)
 43+{
 44+	system_print("WST", 0), system_print("RST", 1);
 45+}
 46+
 47 /*
 48 @|Console ----------------------------------------------------------- */
 49 
 50@@ -401,6 +436,50 @@ console_close(void)
 51 	kill_child();
 52 }
 53 
 54+Uint8
 55+console_dei_childlive(void)
 56+{
 57+	check_child();
 58+	return dev[CMD_LIVE];
 59+}
 60+
 61+Uint8
 62+console_dei_childexit(void)
 63+{
 64+	check_child();
 65+	return dev[CMD_EXIT];
 66+}
 67+
 68+void
 69+console_deo_vector(void)
 70+{
 71+	console_vector = PEEK2(&dev[0x10]);
 72+}
 73+
 74+void
 75+console_deo_stdout(void)
 76+{
 77+	fputc(dev[0x18], stdout), fflush(stdout);
 78+}
 79+
 80+void
 81+console_deo_stderr(void)
 82+{
 83+	fputc(dev[0x19], stderr), fflush(stderr);
 84+}
 85+
 86+void
 87+console_deo_hb(void)
 88+{
 89+	fprintf(stderr, "%02x", dev[0x1a]);
 90+}
 91+
 92+void
 93+console_deo_lb(void)
 94+{
 95+	fprintf(stderr, "%02x", dev[0x1b]);
 96+}
 97+
 98 /*
 99 @|Screen ------------------------------------------------------------ */
100 
101@@ -572,6 +651,84 @@ screen_deo_pixel(void)
102 	}
103 }
104 
105+Uint8
106+screen_dei_rxhb(void)
107+{
108+	return rX >> 8;
109+}
110+
111+Uint8
112+screen_dei_rxlb(void)
113+{
114+	return rX;
115+}
116+
117+Uint8
118+screen_dei_ryhb(void)
119+{
120+	return rY >> 8;
121+}
122+
123+Uint8
124+screen_dei_rylb(void)
125+{
126+	return rY;
127+}
128+
129+Uint8
130+screen_dei_rahb(void)
131+{
132+	return rA >> 8;
133+}
134+
135+Uint8
136+screen_dei_ralb(void)
137+{
138+	return rA;
139+}
140+
141+void
142+screen_deo_vector(void)
143+{
144+	screen_vector = PEEK2(&dev[0x20]);
145+}
146+
147+void
148+screen_deo_width(void)
149+{
150+	screen_resize(PEEK2(&dev[0x22]) & 0xfff, screen_height & 0xfff);
151+}
152+
153+void
154+screen_deo_height(void)
155+{
156+	screen_resize(screen_width & 0xfff, PEEK2(&dev[0x24]) & 0xfff);
157+}
158+
159+void
160+screen_deo_auto(void)
161+{
162+	rMX = dev[0x26] & 0x1, rMY = dev[0x26] & 0x2, rMA = dev[0x26] & 0x4, rML = dev[0x26] >> 4, rDX = rMX << 3, rDY = rMY << 2;
163+}
164+
165+void
166+screen_deo_x(void)
167+{
168+	rX = (dev[0x28] << 8) | dev[0x29], rX = TWOS(rX);
169+}
170+
171+void
172+screen_deo_y(void)
173+{
174+	rY = (dev[0x2a] << 8) | dev[0x2b], rY = TWOS(rY);
175+}
176+
177+void
178+screen_deo_addr(void)
179+{
180+	rA = (dev[0x2c] << 8) | dev[0x2d];
181+}
182+
183 /* clang-format off */
184 
185 #define PUT_PIXEL(n, op) if(op | color) dst[n] = (dst[n] & layer_mask) | table[color]; 
186@@ -692,6 +849,12 @@ controller_key(Uint8 key)
187 	}
188 }
189 
190+void
191+controller_deo_vector(void)
192+{
193+	controller_vector = PEEK2(&dev[0x80]);
194+}
195+
196 /*
197 @|Mouse ------------------------------------------------------------- */
198 
199@@ -729,6 +892,12 @@ mouse_scroll(Uint16 x, Uint16 y)
200 	dev[0x9c] = 0, dev[0x9d] = 0;
201 }
202 
203+void
204+mouse_deo_vector(void)
205+{
206+	mouse_vector = PEEK2(&dev[0x90]);
207+}
208+
209 /*
210 @|File -------------------------------------------------------------- */
211 
212@@ -968,6 +1137,78 @@ file_success(unsigned int port, unsigned int value)
213 	dev[port] = value >> 8, dev[port + 1] = value;
214 }
215 
216+void
217+filea_deo_vector(void)
218+{
219+	rL1 = PEEK2(&dev[0xaa]);
220+}
221+
222+void
223+filea_deo_stat(void)
224+{
225+	file_success(0xa2, file_stat(0, PEEK2(&dev[0xa4]), rL1));
226+}
227+
228+void
229+filea_deo_delete(void)
230+{
231+	file_success(0xa2, file_delete(0));
232+}
233+
234+void
235+filea_deo_name(void)
236+{
237+	file_success(0xa2, file_init(0, PEEK2(&dev[0xa8])));
238+}
239+
240+void
241+filea_deo_read(void)
242+{
243+	file_success(0xa2, file_read(0, PEEK2(&dev[0xac]), rL1));
244+}
245+
246+void
247+filea_deo_write(void)
248+{
249+	file_success(0xa2, file_write(0, PEEK2(&dev[0xae]), rL1, dev[0xa7]));
250+}
251+
252+void
253+fileb_deo_vector(void)
254+{
255+	rL2 = PEEK2(&dev[0xba]);
256+}
257+
258+void
259+fileb_deo_stat(void)
260+{
261+	file_success(0xb2, file_stat(0, PEEK2(&dev[0xb4]), rL2));
262+}
263+
264+void
265+fileb_deo_delete(void)
266+{
267+	file_success(0xb2, file_delete(0));
268+}
269+
270+void
271+fileb_deo_name(void)
272+{
273+	file_success(0xb2, file_init(0, PEEK2(&dev[0xb8])));
274+}
275+
276+void
277+fileb_deo_read(void)
278+{
279+	file_success(0xb2, file_read(0, PEEK2(&dev[0xbc]), rL2));
280+}
281+
282+void
283+fileb_deo_write(void)
284+{
285+	file_success(0xb2, file_write(0, PEEK2(&dev[0xbe]), rL2, dev[0xb7]));
286+}
287+
288 /*
289 @|Datetime ---------------------------------------------------------- */
290 
291@@ -985,72 +1226,87 @@ datetime_update(void)
292 		datetime_t = &datetime_zt;
293 }
294 
295-/*
296-@|Core -------------------------------------------------------------- */
297+Uint8
298+datetime_dei_yhb(void)
299+{
300+	datetime_update();
301+	return (datetime_t->tm_year + 1900) >> 8;
302+}
303 
304-#define CONINBUFSIZE 256
305+Uint8
306+datetime_dei_ylb(void)
307+{
308+	datetime_update();
309+	return (datetime_t->tm_year + 1900);
310+}
311 
312-/* clang-format off */
313+Uint8
314+datetime_dei_mon(void)
315+{
316+	datetime_update();
317+	return datetime_t->tm_mon;
318+}
319 
320-typedef Uint8 (*dei_handler)(void);
321-static dei_handler dei_handlers[256];
322+Uint8
323+datetime_dei_day(void)
324+{
325+	datetime_update();
326+	return datetime_t->tm_mday;
327+}
328 
329-Uint8 system_dei_wst(void) { return ptr[0]; }
330-Uint8 system_dei_rst(void) { return ptr[1]; }
331-Uint8 console_dei_childlive(void) { check_child(); return dev[CMD_LIVE]; }
332-Uint8 console_dei_childexit(void) { check_child(); return dev[CMD_EXIT]; }
333-Uint8 screen_dei_rxhb(void) { return rX >> 8; }
334-Uint8 screen_dei_rxlb(void) { return rX; }
335-Uint8 screen_dei_ryhb(void) { return rY >> 8; }
336-Uint8 screen_dei_rylb(void) { return rY; }
337-Uint8 screen_dei_rahb(void) { return rA >> 8; }
338-Uint8 screen_dei_ralb(void) { return rA; }
339-Uint8 datetime_dei_yhb(void) { datetime_update(); return (datetime_t->tm_year + 1900) >> 8; }
340-Uint8 datetime_dei_ylb(void) { datetime_update(); return (datetime_t->tm_year + 1900); }
341-Uint8 datetime_dei_mon(void) { datetime_update(); return datetime_t->tm_mon; }
342-Uint8 datetime_dei_day(void) { datetime_update(); return datetime_t->tm_mday; }
343-Uint8 datetime_dei_hou(void) { datetime_update(); return datetime_t->tm_hour; }
344-Uint8 datetime_dei_min(void) { datetime_update(); return datetime_t->tm_min; }
345-Uint8 datetime_dei_sec(void) { datetime_update(); return datetime_t->tm_sec; }
346-Uint8 datetime_dei_wday(void) { datetime_update(); return datetime_t->tm_wday; }
347-Uint8 datetime_dei_ydayhb(void) { datetime_update(); return datetime_t->tm_yday >> 8; }
348-Uint8 datetime_dei_ydaylb(void) { datetime_update(); return datetime_t->tm_yday; }
349-Uint8 datetime_dei_dst(void) { datetime_update(); return datetime_t->tm_isdst; }
350+Uint8
351+datetime_dei_hou(void)
352+{
353+	datetime_update();
354+	return datetime_t->tm_hour;
355+}
356 
357-typedef void (*deo_handler)(void);
358-static deo_handler deo_handlers[256];
359+Uint8
360+datetime_dei_min(void)
361+{
362+	datetime_update();
363+	return datetime_t->tm_min;
364+}
365 
366-void system_deo_wst(void) { ptr[0] = dev[4]; }
367-void system_deo_rst(void) { ptr[0] = dev[4]; }
368-void system_deo_print(void) { system_print("WST", 0), system_print("RST", 1); }
369-void console_deo_vector(void) { console_vector = PEEK2(&dev[0x10]); }
370-void console_deo_stdout(void) { fputc(dev[0x18], stdout), fflush(stdout); }
371-void console_deo_stderr(void) { fputc(dev[0x19], stderr), fflush(stderr); }
372-void console_deo_hb(void) { fprintf(stderr, "%02x", dev[0x1a]); }
373-void console_deo_lb(void) { fprintf(stderr, "%02x", dev[0x1b]); }
374-void screen_deo_vector(void) { screen_vector = PEEK2(&dev[0x20]); }
375-void screen_deo_width(void) { screen_resize(PEEK2(&dev[0x22]) & 0xfff, screen_height & 0xfff); }
376-void screen_deo_height(void) { screen_resize(screen_width & 0xfff, PEEK2(&dev[0x24]) & 0xfff); }
377-void screen_deo_auto(void) { rMX = dev[0x26] & 0x1, rMY = dev[0x26] & 0x2, rMA = dev[0x26] & 0x4, rML = dev[0x26] >> 4, rDX = rMX << 3, rDY = rMY << 2; }
378-void screen_deo_x(void) { rX = (dev[0x28] << 8) | dev[0x29], rX = TWOS(rX); }
379-void screen_deo_y(void) { rY = (dev[0x2a] << 8) | dev[0x2b], rY = TWOS(rY); }
380-void screen_deo_addr(void) { rA = (dev[0x2c] << 8) | dev[0x2d]; }
381-void controller_deo_vector(void) { controller_vector = PEEK2(&dev[0x80]); }
382-void mouse_deo_vector(void) { mouse_vector = PEEK2(&dev[0x90]); }
383-void filea_deo_vector(void) { rL1 = PEEK2(&dev[0xaa]); }
384-void filea_deo_stat(void) { file_success(0xa2, file_stat(0, PEEK2(&dev[0xa4]), rL1)); }
385-void filea_deo_delete(void) { file_success(0xa2, file_delete(0)); }
386-void filea_deo_name(void) { file_success(0xa2, file_init(0, PEEK2(&dev[0xa8]))); }
387-void filea_deo_read(void) { file_success(0xa2, file_read(0, PEEK2(&dev[0xac]), rL1)); }
388-void filea_deo_write(void) { file_success(0xa2, file_write(0, PEEK2(&dev[0xae]), rL1, dev[0xa7])); }
389-void fileb_deo_vector(void) { rL2 = PEEK2(&dev[0xba]); }
390-void fileb_deo_stat(void) { file_success(0xb2, file_stat(0, PEEK2(&dev[0xb4]), rL2)); }
391-void fileb_deo_delete(void) { file_success(0xb2, file_delete(0)); }
392-void fileb_deo_name(void) { file_success(0xb2, file_init(0, PEEK2(&dev[0xb8]))); }
393-void fileb_deo_read(void) { file_success(0xb2, file_read(0, PEEK2(&dev[0xbc]), rL2)); }
394-void fileb_deo_write(void) { file_success(0xb2, file_write(0, PEEK2(&dev[0xbe]), rL2, dev[0xb7])); }
395+Uint8
396+datetime_dei_sec(void)
397+{
398+	datetime_update();
399+	return datetime_t->tm_sec;
400+}
401 
402-/* clang-format on */
403+Uint8
404+datetime_dei_wday(void)
405+{
406+	datetime_update();
407+	return datetime_t->tm_wday;
408+}
409+
410+Uint8
411+datetime_dei_ydayhb(void)
412+{
413+	datetime_update();
414+	return datetime_t->tm_yday >> 8;
415+}
416+
417+Uint8
418+datetime_dei_ydaylb(void)
419+{
420+	datetime_update();
421+	return datetime_t->tm_yday;
422+}
423+
424+Uint8
425+datetime_dei_dst(void)
426+{
427+	datetime_update();
428+	return datetime_t->tm_isdst;
429+}
430+
431+/*
432+@|Core -------------------------------------------------------------- */
433+
434+#define CONINBUFSIZE 256
435 
436 void
437 emu_connect(void)