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
+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++) {