Combined all system reboots

This commit is contained in:
neauoire 2023-08-15 19:19:06 -07:00
parent bd8b2026b8
commit b737dfca85
4 changed files with 27 additions and 38 deletions

View File

@ -28,5 +28,6 @@ void screen_resize(Uint16 width, Uint16 height);
void screen_change(Uint16 x1, Uint16 y1, Uint16 x2, Uint16 y2); void screen_change(Uint16 x1, Uint16 y1, Uint16 x2, Uint16 y2);
void screen_redraw(void); void screen_redraw(void);
void screen_debugger(Uxn *u); void screen_debugger(Uxn *u);
Uint8 screen_dei(Uxn *u, Uint8 addr); Uint8 screen_dei(Uxn *u, Uint8 addr);
void screen_deo(Uint8 *ram, Uint8 *d, Uint8 port); void screen_deo(Uint8 *ram, Uint8 *d, Uint8 port);

View File

@ -96,11 +96,27 @@ system_version(char *name, char *date)
return 0; 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 int
system_init(Uxn *u, Uint8 *ram, char *rom) system_init(Uxn *u, Uint8 *ram, char *rom)
{ {
u->ram = ram; u->ram = ram;
if(!system_load(u, rom)) if(!system_load(u, rom))
if(!system_load(u, "boot.rom"))
return system_error("Init", "Failed to load rom."); return system_error("Init", "Failed to load rom.");
boot_rom = rom; boot_rom = rom;
return 1; return 1;

View File

@ -18,9 +18,11 @@ WITH REGARD TO THIS SOFTWARE.
extern char *boot_rom; extern char *boot_rom;
void system_connect(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(char *emulator, char *date); int system_version(char *emulator, char *date);
int system_load(Uxn *u, char *filename); int system_load(Uxn *u, char *filename);
void system_inspect(Uxn *u);
int system_error(char *msg, const char *err); int system_error(char *msg, const char *err);
int system_init(Uxn *u, Uint8 *ram, char *rom); int system_init(Uxn *u, Uint8 *ram, char *rom);
void system_deo(Uxn *u, Uint8 *d, Uint8 port); void system_deo(Uxn *u, Uint8 *d, Uint8 port);

View File

@ -255,43 +255,14 @@ emu_init(void)
return 1; 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 static void
emu_restart(Uxn *u) emu_restart(Uxn *u, char *rom, int soft)
{ {
screen_resize(WIDTH, HEIGHT); 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.bg, 0, 0, uxn_screen.width, uxn_screen.height, 0);
screen_fill(uxn_screen.fg, 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)) system_reboot(u, rom, soft);
return system_error("Boot", "Failed to load rom."); SDL_SetWindowTitle(emu_window, boot_rom);
if(!uxn_eval(u, PAGE_PROGRAM))
return system_error("Boot", "Failed to eval rom.");
return 1;
} }
static void static void
@ -384,8 +355,7 @@ handle_events(Uxn *u)
else if(event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_EXPOSED) else if(event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_EXPOSED)
emu_redraw(u); emu_redraw(u);
else if(event.type == SDL_DROPFILE) { else if(event.type == SDL_DROPFILE) {
screen_resize(WIDTH, HEIGHT); emu_restart(u, event.drop.file, 0);
emu_start(u, event.drop.file);
SDL_free(event.drop.file); SDL_free(event.drop.file);
} }
/* Audio */ /* Audio */
@ -416,9 +386,9 @@ handle_events(Uxn *u)
else if(event.key.keysym.sym == SDLK_F3) else if(event.key.keysym.sym == SDLK_F3)
capture_screen(); capture_screen();
else if(event.key.keysym.sym == SDLK_F4) 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) else if(event.key.keysym.sym == SDLK_F5)
emu_restart_soft(u); emu_restart(u, boot_rom, 1);
ksym = event.key.keysym.sym; ksym = event.key.keysym.sym;
if(SDL_PeepEvents(&event, 1, SDL_PEEKEVENT, SDL_KEYUP, SDL_KEYUP) == 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; return 1;