From 2c560686d8b95176a6197a7fd1dfa8979a78ecdd Mon Sep 17 00:00:00 2001 From: neauoire Date: Fri, 25 Aug 2023 09:40:25 -0700 Subject: [PATCH] Moved masks to system --- src/devices/system.c | 10 ++++++---- src/devices/system.h | 4 ++-- src/uxn.h | 9 +++++---- src/uxn11.c | 20 +++++++++----------- src/uxncli.c | 16 ++++++---------- 5 files changed, 28 insertions(+), 31 deletions(-) diff --git a/src/devices/system.c b/src/devices/system.c index 9cb66fb..a899d16 100644 --- a/src/devices/system.c +++ b/src/devices/system.c @@ -16,6 +16,8 @@ WITH REGARD TO THIS SOFTWARE. */ char *boot_rom; +Uint8 dei_masks[0x100], deo_masks[0x100]; +Uint16 dev_vers[0x10], dei_mask[0x10], deo_mask[0x10]; static const char *errors[] = { "underflow", @@ -64,12 +66,12 @@ system_inspect(Uxn *u) } void -system_connect(Uxn *u, Uint8 device, Uint8 ver, Uint16 dei, Uint16 deo) +system_connect(Uint8 device, Uint8 ver, Uint16 dei, Uint16 deo) { int i, d = (device << 0x4); for(i = 0; i < 0x10; i++) { - u->dei_masks[d + i] = (dei >> i) & 0x1; - u->deo_masks[d + i] = (deo >> i) & 0x1; + dei_masks[d + i] = (dei >> i) & 0x1; + deo_masks[d + i] = (deo >> i) & 0x1; } dev_vers[device] = ver; dei_mask[device] = dei; @@ -77,7 +79,7 @@ system_connect(Uxn *u, Uint8 device, Uint8 ver, Uint16 dei, Uint16 deo) } int -system_version(Uxn *u, char *name, char *date) +system_version(char *name, char *date) { int i; printf("%s, %s.\n", name, date); diff --git a/src/devices/system.h b/src/devices/system.h index 316dfc1..7c79516 100644 --- a/src/devices/system.h +++ b/src/devices/system.h @@ -17,10 +17,10 @@ WITH REGARD TO THIS SOFTWARE. extern char *boot_rom; -void system_connect(Uxn *u, Uint8 device, Uint8 ver, Uint16 dei, Uint16 deo); +void system_connect(Uint8 device, Uint8 ver, Uint16 dei, Uint16 deo); void system_reboot(Uxn *u, char *rom, int soft); void system_inspect(Uxn *u); -int system_version(Uxn *u, char *emulator, char *date); +int system_version(char *emulator, char *date); int system_error(char *msg, const char *err); int system_init(Uxn *u, Uint8 *ram, char *rom); diff --git a/src/uxn.h b/src/uxn.h index c20adb9..4415950 100644 --- a/src/uxn.h +++ b/src/uxn.h @@ -11,10 +11,10 @@ WITH REGARD TO THIS SOFTWARE. /* clang-format off */ -#define POKE2(d, v) { *(d) = (v) >> 8; (d)[1] = (v); } #define PEEK2(d) (*(d) << 8 | (d)[1]) -#define DEI(p) (u->dei_masks[p] ? emu_dei(u, (p)) : u->dev[(p)]) -#define DEO(p, v) { u->dev[p] = v; if(u->deo_masks[p]) emu_deo(u, p); } +#define POKE2(d, v) { *(d) = (v) >> 8; (d)[1] = (v); } +#define DEI(p) (dei_masks[p] ? emu_dei(u, (p)) : u->dev[(p)]) +#define DEO(p, v) { u->dev[p] = v; if(deo_masks[p]) emu_deo(u, p); } /* clang-format on */ @@ -31,7 +31,7 @@ typedef struct { } Stack; typedef struct Uxn { - Uint8 *ram, dev[0x100], dei_masks[0x100], deo_masks[0x100]; + Uint8 *ram, dev[0x100]; Stack wst, rst; } Uxn; @@ -40,6 +40,7 @@ typedef struct Uxn { extern Uint8 emu_dei(Uxn *u, Uint8 addr); extern void emu_deo(Uxn *u, Uint8 addr); extern int emu_halt(Uxn *u, Uint8 instr, Uint8 err, Uint16 addr); +extern Uint8 dei_masks[0x100], deo_masks[0x100]; extern Uint16 dev_vers[0x10], dei_mask[0x10], deo_mask[0x10]; /* built-ins */ diff --git a/src/uxn11.c b/src/uxn11.c index 81a5c7e..aff7644 100644 --- a/src/uxn11.c +++ b/src/uxn11.c @@ -38,8 +38,6 @@ static Window window; #define SCALE 1 #define CONINBUFSIZE 256 -Uint16 dev_vers[0x10], dei_mask[0x10], deo_mask[0x10]; - static int clamp(int val, int min, int max) { @@ -261,17 +259,17 @@ main(int argc, char **argv) if(i == argc) return system_error("usage", "uxn11 [-v] file.rom [args...]"); /* Connect Varvara */ - system_connect(&u, 0x0, SYSTEM_VERSION, SYSTEM_DEIMASK, SYSTEM_DEOMASK); - system_connect(&u, 0x1, CONSOLE_VERSION, CONSOLE_DEIMASK, CONSOLE_DEOMASK); - system_connect(&u, 0x2, SCREEN_VERSION, SCREEN_DEIMASK, SCREEN_DEOMASK); - system_connect(&u, 0x8, CONTROL_VERSION, CONTROL_DEIMASK, CONTROL_DEOMASK); - system_connect(&u, 0x9, MOUSE_VERSION, MOUSE_DEIMASK, MOUSE_DEOMASK); - system_connect(&u, 0xa, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK); - system_connect(&u, 0xb, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK); - system_connect(&u, 0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK); + system_connect(0x0, SYSTEM_VERSION, SYSTEM_DEIMASK, SYSTEM_DEOMASK); + system_connect(0x1, CONSOLE_VERSION, CONSOLE_DEIMASK, CONSOLE_DEOMASK); + system_connect(0x2, SCREEN_VERSION, SCREEN_DEIMASK, SCREEN_DEOMASK); + system_connect(0x8, CONTROL_VERSION, CONTROL_DEIMASK, CONTROL_DEOMASK); + system_connect(0x9, MOUSE_VERSION, MOUSE_DEIMASK, MOUSE_DEOMASK); + system_connect(0xa, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK); + system_connect(0xb, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK); + system_connect(0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK); /* Read flags */ if(argv[i][0] == '-' && argv[i][1] == 'v') - return system_version(&u, "Uxn11 - Graphical Varvara Emulator", "17 Aug 2023"); + return system_version("Uxn11 - Graphical Varvara Emulator", "17 Aug 2023"); if(!emu_init()) return system_error("Init", "Failed to initialize varvara."); if(!system_init(&u, (Uint8 *)calloc(0x10000 * RAM_PAGES, sizeof(Uint8)), argv[i++])) diff --git a/src/uxncli.c b/src/uxncli.c index 0596e03..0bd4877 100644 --- a/src/uxncli.c +++ b/src/uxncli.c @@ -6,7 +6,6 @@ #include "devices/console.h" #include "devices/file.h" #include "devices/datetime.h" -#include "devices/link.h" /* Copyright (c) 2021-2023 Devine Lu Linvega, Andrew Alderwick @@ -19,8 +18,6 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE. */ -Uint16 dev_vers[0x10], dei_mask[0x10], deo_mask[0x10]; - Uint8 emu_dei(Uxn *u, Uint8 addr) { @@ -40,7 +37,6 @@ emu_deo(Uxn *u, Uint8 addr) case 0x10: console_deo(&u->dev[d], p); break; case 0xa0: file_deo(0, u->ram, &u->dev[d], p); break; case 0xb0: file_deo(1, u->ram, &u->dev[d], p); break; - case 0xf0: link_deo(u, &u->dev[d], p); break; } } @@ -69,14 +65,14 @@ main(int argc, char **argv) if(i == argc) return system_error("usage", "uxncli [-v] file.rom [args..]"); /* Connect Varvara */ - system_connect(&u, 0x0, SYSTEM_VERSION, SYSTEM_DEIMASK, SYSTEM_DEOMASK); - system_connect(&u, 0x1, CONSOLE_VERSION, CONSOLE_DEIMASK, CONSOLE_DEOMASK); - system_connect(&u, 0xa, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK); - system_connect(&u, 0xb, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK); - system_connect(&u, 0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK); + system_connect(0x0, SYSTEM_VERSION, SYSTEM_DEIMASK, SYSTEM_DEOMASK); + system_connect(0x1, CONSOLE_VERSION, CONSOLE_DEIMASK, CONSOLE_DEOMASK); + system_connect(0xa, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK); + system_connect(0xb, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK); + system_connect(0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK); /* Read flags */ if(argv[i][0] == '-' && argv[i][1] == 'v') - return system_version(&u, "Uxncli - Console Varvara Emulator", "19 Aug 2023"); + return system_version("Uxncli - Console Varvara Emulator", "19 Aug 2023"); if(!system_init(&u, (Uint8 *)calloc(0x10000 * RAM_PAGES, sizeof(Uint8)), argv[i++])) return system_error("Init", "Failed to initialize uxn."); /* Game Loop */