uxn

Varvara Ordinator, written in ANSI C(SDL2)
git clone https://git.eamoncaddigan.net/uxn.git
Log | Files | Refs | README | LICENSE

commit efc80de3148054636324a11ec9bb1e5d38cb2267
parent 97bcf2108b1d87ad80f4344bfc1aca447abe8108
Author: Devine Lu Linvega <aliceffekt@gmail.com>
Date:   Fri, 27 Jun 2025 08:23:36 -0700

Reverted changes until I find what breaks left in them

Diffstat:
Msrc/devices/file.c | 5+++--
Msrc/devices/system.c | 41++++++++++++++---------------------------
Msrc/uxn.h | 1-
Msrc/uxnemu.c | 2+-
4 files changed, 18 insertions(+), 31 deletions(-)

diff --git a/src/devices/file.c b/src/devices/file.c @@ -140,19 +140,20 @@ retry_realpath(const char *file_name) return NULL; } if(notdriveroot(file_name)) { + /* TODO: use a macro instead of '/' for absolute path first character so that other systems can work */ /* if a relative path, prepend cwd */ getcwd(p, sizeof(p)); if(strlen(p) + strlen(DIR_SEP_STR) + fnlen >= PATH_MAX) { errno = ENAMETOOLONG; return NULL; } - strcat(p, DIR_SEP_STR); + strcat(p, DIR_SEP_STR); /* TODO: use a macro instead of '/' for the path delimiter */ } strcat(p, file_name); while((r = realpath(p, NULL)) == NULL) { if(errno != ENOENT) return NULL; - x = strrchr(p, DIR_SEP_CHAR); + x = strrchr(p, DIR_SEP_CHAR); /* TODO: path delimiter macro */ if(x) *x = '\0'; else diff --git a/src/devices/system.c b/src/devices/system.c @@ -14,8 +14,6 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE. */ -#define PAGE_INDEX(bank, addr) ((bank) * PAGE_SIZE + ((addr) & PAGE_MASK)) - char *boot_path; static void @@ -86,37 +84,26 @@ system_deo(Uint8 port) { switch(port) { case 0x3: { + Uint16 value; Uint16 addr = PEEK2(uxn.dev + 2); Uint8 *aptr = uxn.ram + addr; Uint16 length = PEEK2(aptr + 1); if(uxn.ram[addr] == 0x0) { - unsigned int src_bank = PEEK2(aptr + 3); - unsigned int src_addr = PEEK2(aptr + 5); - Uint16 value = uxn.ram[addr + 7]; - if(src_bank < RAM_PAGES) { - unsigned int a = src_addr; - unsigned int b = a + length; - for(; a < b; uxn.ram[PAGE_INDEX(src_bank, a++)] = value); - } + unsigned int a = PEEK2(aptr + 3) * PAGE_SIZE + PEEK2(aptr + 5); + unsigned int b = a + length; + value = uxn.ram[addr + 7]; + for(; a < b; uxn.ram[a++] = value); } else if(uxn.ram[addr] == 0x1) { - unsigned int src_bank = PEEK2(aptr + 3); - unsigned int src_addr = PEEK2(aptr + 5); - unsigned int dst_bank = PEEK2(aptr + 7); - unsigned int dst_addr = PEEK2(aptr + 9); - if(src_bank < RAM_PAGES && dst_bank < RAM_PAGES) { - unsigned int src_last = src_addr + length; - for(; src_addr < src_last; uxn.ram[PAGE_INDEX(dst_bank, dst_addr++)] = uxn.ram[PAGE_INDEX(src_bank, src_addr++)]); - } + unsigned int a = PEEK2(aptr + 3) * PAGE_SIZE + PEEK2(aptr + 5); + unsigned int b = a + length; + unsigned int c = PEEK2(aptr + 7) * PAGE_SIZE + PEEK2(aptr + 9); + for(; a < b; uxn.ram[c++] = uxn.ram[a++]); } else if(uxn.ram[addr] == 0x2) { - unsigned int src_bank = PEEK2(aptr + 3); - unsigned int src_addr = PEEK2(aptr + 5); - unsigned int dst_bank = PEEK2(aptr + 7); - unsigned int dst_addr = PEEK2(aptr + 9); - if(src_bank < RAM_PAGES && dst_bank < RAM_PAGES) { - unsigned int src_last = src_addr + length; - unsigned int dst_last = dst_addr + length; - for(; src_last > src_addr; uxn.ram[PAGE_INDEX(dst_bank, --dst_last)] = uxn.ram[PAGE_INDEX(src_bank, --src_last)]); - } + unsigned int a = PEEK2(aptr + 3) * PAGE_SIZE + PEEK2(aptr + 5); + unsigned int b = a + length; + unsigned int c = PEEK2(aptr + 7) * PAGE_SIZE + PEEK2(aptr + 9); + unsigned int d = c + length; + for(; b >= a; uxn.ram[--d] = uxn.ram[--b]); } else fprintf(stderr, "Unknown Expansion Command 0x%02x\n", uxn.ram[addr]); break; diff --git a/src/uxn.h b/src/uxn.h @@ -19,7 +19,6 @@ WITH REGARD TO THIS SOFTWARE. #define STEP_MAX 0x80000000 #define PAGE_PROGRAM 0x0100 #define PAGE_SIZE 0x10000 -#define PAGE_MASK 0xffff typedef unsigned char Uint8; typedef signed char Sint8; diff --git a/src/uxnemu.c b/src/uxnemu.c @@ -469,7 +469,7 @@ main(int argc, char **argv) /* flags */ if(argc > 1 && argv[i][0] == '-') { if(!strcmp(argv[i], "-v")) - return system_error("Uxn(gui) - Varvara Emulator", "4 Apr 2025."); + return system_error("Uxn(gui) - Varvara Emulator", "27 Jun 2025."); else if(!strcmp(argv[i], "-2x")) set_zoom(2, 0); else if(!strcmp(argv[i], "-3x"))