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)