uxn

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

commit b737dfca85029b618d7d30a1d0266531c9bff53f
parent bd8b2026b819626fe054f917ffef14c54daa0c82
Author: neauoire <aliceffekt@gmail.com>
Date:   Tue, 15 Aug 2023 19:19:06 -0700

Combined all system reboots

Diffstat:
Msrc/devices/screen.h | 1+
Msrc/devices/system.c | 18+++++++++++++++++-
Msrc/devices/system.h | 4+++-
Msrc/uxnemu.c | 42++++++------------------------------------
4 files changed, 27 insertions(+), 38 deletions(-)

diff --git a/src/devices/screen.h b/src/devices/screen.h @@ -28,5 +28,6 @@ void screen_resize(Uint16 width, Uint16 height); void screen_change(Uint16 x1, Uint16 y1, Uint16 x2, Uint16 y2); void screen_redraw(void); void screen_debugger(Uxn *u); + Uint8 screen_dei(Uxn *u, Uint8 addr); void screen_deo(Uint8 *ram, Uint8 *d, Uint8 port); diff --git a/src/devices/system.c b/src/devices/system.c @@ -96,12 +96,28 @@ system_version(char *name, char *date) return 0; } +void +system_reboot(Uxn *u, char *rom, int soft) +{ + int i; + for(i = 0x100 * soft; i < 0x10000; i++) + u->ram[i] = 0; + for(i = 0x0; i < 0x100; i++) + u->dev[i] = 0; + u->wst.ptr = 0; + u->rst.ptr = 0; + if(system_load(u, boot_rom)) + if(uxn_eval(u, PAGE_PROGRAM)) + boot_rom = rom; +} + int system_init(Uxn *u, Uint8 *ram, char *rom) { u->ram = ram; if(!system_load(u, rom)) - return system_error("Init", "Failed to load rom."); + if(!system_load(u, "boot.rom")) + return system_error("Init", "Failed to load rom."); boot_rom = rom; return 1; } diff --git a/src/devices/system.h b/src/devices/system.h @@ -18,9 +18,11 @@ WITH REGARD TO THIS SOFTWARE. extern char *boot_rom; 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(char *emulator, char *date); int system_load(Uxn *u, char *filename); -void system_inspect(Uxn *u); int system_error(char *msg, const char *err); int system_init(Uxn *u, Uint8 *ram, char *rom); + void system_deo(Uxn *u, Uint8 *d, Uint8 port); diff --git a/src/uxnemu.c b/src/uxnemu.c @@ -255,43 +255,14 @@ emu_init(void) return 1; } -static int -emu_start(Uxn *u, char *rom) -{ - exec_deadline = SDL_GetPerformanceCounter() + deadline_interval; - screen_resize(WIDTH, HEIGHT); - if(!uxn_eval(u, PAGE_PROGRAM)) - return system_error("Boot", "Failed to eval rom."); - SDL_SetWindowTitle(emu_window, rom); - return 1; -} - static void -emu_restart(Uxn *u) +emu_restart(Uxn *u, char *rom, int soft) { screen_resize(WIDTH, HEIGHT); - SDL_SetWindowTitle(emu_window, boot_rom); - if(!emu_start(u, "launcher.rom")) - emu_start(u, boot_rom); -} - -static int -emu_restart_soft(Uxn *u) -{ - int i; - for(i = 0x100; i < 0x10000; i++) - u->ram[i] = 0; - for(i = 0x0; i < 0x100; i++) - u->dev[i] = 0; - u->wst.ptr = 0; - u->rst.ptr = 0; screen_fill(uxn_screen.bg, 0, 0, uxn_screen.width, uxn_screen.height, 0); screen_fill(uxn_screen.fg, 0, 0, uxn_screen.width, uxn_screen.height, 0); - if(!system_load(u, boot_rom)) - return system_error("Boot", "Failed to load rom."); - if(!uxn_eval(u, PAGE_PROGRAM)) - return system_error("Boot", "Failed to eval rom."); - return 1; + system_reboot(u, rom, soft); + SDL_SetWindowTitle(emu_window, boot_rom); } static void @@ -384,8 +355,7 @@ handle_events(Uxn *u) else if(event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_EXPOSED) emu_redraw(u); else if(event.type == SDL_DROPFILE) { - screen_resize(WIDTH, HEIGHT); - emu_start(u, event.drop.file); + emu_restart(u, event.drop.file, 0); SDL_free(event.drop.file); } /* Audio */ @@ -416,9 +386,9 @@ handle_events(Uxn *u) else if(event.key.keysym.sym == SDLK_F3) capture_screen(); else if(event.key.keysym.sym == SDLK_F4) - emu_restart(u); + emu_restart(u, boot_rom, 0); else if(event.key.keysym.sym == SDLK_F5) - emu_restart_soft(u); + emu_restart(u, boot_rom, 1); ksym = event.key.keysym.sym; if(SDL_PeepEvents(&event, 1, SDL_PEEKEVENT, SDL_KEYUP, SDL_KEYUP) == 1 && ksym == event.key.keysym.sym) return 1;