commit c9ad8e9
neauoire
·
2022-04-05 19:08:49 +0000 UTC
parent 62a35a9
Ported uxncli to latest device I/O
5 files changed,
+42,
-55
M
build.sh
+4,
-2
1@@ -4,6 +4,7 @@ if [ "${1}" = '--format' ];
2 then
3 echo "Formatting.."
4 clang-format -i src/uxn11.c
5+ clang-format -i src/uxncli.c
6 clang-format -i src/devices/*
7 fi
8
9@@ -17,11 +18,12 @@ if [ "${1}" = '--install' ];
10 then
11 echo "Installing.."
12 gcc src/uxn.c src/devices/system.c src/devices/screen.c src/devices/controller.c src/devices/mouse.c src/devices/file.c src/devices/datetime.c src/uxn11.c -D_POSIX_C_SOURCE=199309L -DNDEBUG -Os -g0 -s -o bin/uxn11 -lX11
13- # gcc src/uxn.c src/devices/system.c src/devices/file.c src/devices/datetime.c src/uxncli.c -D_POSIX_C_SOURCE=199309L -DNDEBUG -Os -g0 -s -o bin/uxncli
14+ gcc src/uxn.c src/devices/system.c src/devices/file.c src/devices/datetime.c src/uxncli.c -D_POSIX_C_SOURCE=199309L -DNDEBUG -Os -g0 -s -o bin/uxncli
15 cp bin/uxn11 ~/bin
16+ cp bin/uxncli ~/bin
17 else
18 gcc -std=c89 -D_POSIX_C_SOURCE=199309L -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werror=implicit-int -Werror=incompatible-pointer-types -Werror=int-conversion -Wvla -g -Og -fsanitize=address -fsanitize=undefined src/uxn.c src/devices/system.c src/devices/screen.c src/devices/controller.c src/devices/mouse.c src/devices/file.c src/devices/datetime.c src/uxn11.c -o bin/uxn11 -lX11
19- # gcc -std=c89 -D_POSIX_C_SOURCE=199309L -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werror=implicit-int -Werror=incompatible-pointer-types -Werror=int-conversion -Wvla -g -Og -fsanitize=address -fsanitize=undefined src/uxn.c src/devices/system.c src/devices/file.c src/devices/datetime.c src/uxncli.c -o bin/uxncli
20+ gcc -std=c89 -D_POSIX_C_SOURCE=199309L -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werror=implicit-int -Werror=incompatible-pointer-types -Werror=int-conversion -Wvla -g -Og -fsanitize=address -fsanitize=undefined src/uxn.c src/devices/system.c src/devices/file.c src/devices/datetime.c src/uxncli.c -o bin/uxncli
21 fi
22
23 echo "Done."
+0,
-1
1@@ -58,6 +58,5 @@ system_deo(Uxn *u, Uint8 *d, Uint8 port)
2 case 0x2: u->wst = (Stack *)(u->ram + (d[port] ? (d[port] * 0x100) : 0x10000)); break;
3 case 0x3: u->rst = (Stack *)(u->ram + (d[port] ? (d[port] * 0x100) : 0x10100)); break;
4 case 0xe: system_inspect(u); break;
5- default: system_deo_special(d, port);
6 }
7 }
+0,
-1
1@@ -11,4 +11,3 @@ WITH REGARD TO THIS SOFTWARE.
2
3 void system_inspect(Uxn *u);
4 void system_deo(Uxn *u, Uint8 *d, Uint8 port);
5-void system_deo_special(Uint8 *d, Uint8 port);
+10,
-13
1@@ -30,13 +30,6 @@ error(char *msg, const char *err)
2 return 0;
3 }
4
5-void
6-system_deo_special(Uint8 *d, Uint8 port)
7-{
8- if(port > 0x7 && port < 0xe)
9- screen_palette(&uxn_screen, &d[0x8]);
10-}
11-
12 static int
13 console_input(Uxn *u, char c)
14 {
15@@ -61,10 +54,10 @@ uxn11_dei(struct Uxn *u, Uint8 addr)
16 {
17 Uint8 p = addr & 0x0f, d = addr & 0xf0;
18 switch(d) {
19- case 0x20: return screen_dei(&u->dev[d], p); break;
20- case 0xa0: return file_dei(0, &u->dev[d], p); break;
21- case 0xb0: return file_dei(1, &u->dev[d], p); break;
22- case 0xc0: return datetime_dei(&u->dev[d], p); break;
23+ case 0x20: return screen_dei(&u->dev[d], p);
24+ case 0xa0: return file_dei(0, &u->dev[d], p);
25+ case 0xb0: return file_dei(1, &u->dev[d], p);
26+ case 0xc0: return datetime_dei(&u->dev[d], p);
27 }
28 return u->dev[addr];
29 }
30@@ -75,7 +68,11 @@ uxn11_deo(Uxn *u, Uint8 addr, Uint8 v)
31 Uint8 p = addr & 0x0f, d = addr & 0xf0;
32 u->dev[addr] = v;
33 switch(d) {
34- case 0x00: system_deo(u, &u->dev[d], p); break;
35+ case 0x00:
36+ system_deo(u, &u->dev[d], p);
37+ if(p > 0x7 && p < 0xe)
38+ screen_palette(&uxn_screen, &u->dev[0x8]);
39+ break;
40 case 0x10: console_deo(&u->dev[d], p); break;
41 case 0x20: screen_deo(u->ram, &u->dev[d], p); break;
42 case 0xa0: file_deo(0, u->ram, &u->dev[d], p); break;
43@@ -171,7 +168,7 @@ start(Uxn *u, char *rom)
44 return error("Boot", "Failed");
45 if(!load_rom(u, rom))
46 return error("Load", "Failed");
47- fprintf(stderr, "Loaded %s\n", rom);
48+ fprintf(stderr, ">> Loaded %s\n", rom);
49 u->dei = uxn11_dei;
50 u->deo = uxn11_deo;
51 screen_resize(&uxn_screen, WIDTH, HEIGHT);
+28,
-38
1@@ -24,50 +24,54 @@ error(char *msg, const char *err)
2 return 0;
3 }
4
5-void
6-system_deo_special(Uint8 *d, Uint8 port)
7+static int
8+console_input(Uxn *u, char c)
9 {
10- (void)d;
11- (void)port;
12+ Uint8 *d = &u->dev[0x10];
13+ d[0x02] = c;
14+ return uxn_eval(u, GETVEC(d));
15 }
16
17 static void
18-console_deo(Device *d, Uint8 port)
19+console_deo(Uint8 *d, Uint8 port)
20 {
21 FILE *fd = port == 0x8 ? stdout : port == 0x9 ? stderr
22 : 0;
23 if(fd) {
24- fputc(d->dat[port], fd);
25+ fputc(d[port], fd);
26 fflush(fd);
27 }
28 }
29
30 static Uint8
31-nil_dei(Device *d, Uint8 port)
32+uxn11_dei(struct Uxn *u, Uint8 addr)
33 {
34- return d->dat[port];
35+ Uint8 p = addr & 0x0f, d = addr & 0xf0;
36+ switch(d) {
37+ case 0xa0: return file_dei(0, &u->dev[d], p);
38+ case 0xb0: return file_dei(1, &u->dev[d], p);
39+ case 0xc0: return datetime_dei(&u->dev[d], p);
40+ }
41+ return u->dev[addr];
42 }
43
44 static void
45-nil_deo(Device *d, Uint8 port)
46+uxn11_deo(Uxn *u, Uint8 addr, Uint8 v)
47 {
48- (void)d;
49- (void)port;
50-}
51-
52-static int
53-console_input(Uxn *u, char c)
54-{
55- Device *d = &u->dev[1];
56- d->dat[0x2] = c;
57- return uxn_eval(u, GETVECTOR(d));
58+ Uint8 p = addr & 0x0f, d = addr & 0xf0;
59+ u->dev[addr] = v;
60+ switch(d) {
61+ case 0x00: system_deo(u, &u->dev[d], p); break;
62+ case 0x10: console_deo(&u->dev[d], p); break;
63+ case 0xa0: file_deo(0, u->ram, &u->dev[d], p); break;
64+ case 0xb0: file_deo(1, u->ram, &u->dev[d], p); break;
65+ }
66 }
67
68 static void
69 run(Uxn *u)
70 {
71- Device *d = &u->dev[0];
72- while(!d->dat[0xf]) {
73+ while(!u->dev[0x0f]) {
74 int c = fgetc(stdin);
75 if(c != EOF)
76 console_input(u, (Uint8)c);
77@@ -85,22 +89,8 @@ start(Uxn *u)
78 {
79 if(!uxn_boot(u, (Uint8 *)calloc(0x10200, sizeof(Uint8))))
80 return error("Boot", "Failed");
81- /* system */ uxn_port(u, 0x0, nil_dei, system_deo);
82- /* console */ uxn_port(u, 0x1, nil_dei, console_deo);
83- /* empty */ uxn_port(u, 0x2, nil_dei, nil_deo);
84- /* empty */ uxn_port(u, 0x3, nil_dei, nil_deo);
85- /* empty */ uxn_port(u, 0x4, nil_dei, nil_deo);
86- /* empty */ uxn_port(u, 0x5, nil_dei, nil_deo);
87- /* empty */ uxn_port(u, 0x6, nil_dei, nil_deo);
88- /* empty */ uxn_port(u, 0x7, nil_dei, nil_deo);
89- /* empty */ uxn_port(u, 0x8, nil_dei, nil_deo);
90- /* empty */ uxn_port(u, 0x9, nil_dei, nil_deo);
91- /* file0 */ uxn_port(u, 0xa, file_dei, file_deo);
92- /* file1 */ uxn_port(u, 0xb, file_dei, file_deo);
93- /* datetime */ uxn_port(u, 0xc, datetime_dei, nil_deo);
94- /* empty */ uxn_port(u, 0xd, nil_dei, nil_deo);
95- /* empty */ uxn_port(u, 0xe, nil_dei, nil_deo);
96- /* empty */ uxn_port(u, 0xf, nil_dei, nil_deo);
97+ u->dei = uxn11_dei;
98+ u->deo = uxn11_deo;
99 return 1;
100 }
101
102@@ -115,7 +105,7 @@ main(int argc, char **argv)
103 return error("Start", "Failed");
104 if(!load_rom(&u, argv[1]))
105 return error("Load", "Failed");
106- fprintf(stderr, "Loaded %s\n", argv[1]);
107+ fprintf(stderr, ">> Loaded %s\n", argv[1]);
108 if(!uxn_eval(&u, PAGE_PROGRAM))
109 return error("Init", "Failed");
110 for(i = 2; i < argc; i++) {