... | ... |
@@ -88,7 +88,6 @@ uxnemu orca.rom | shim |
88 | 88 |
|
89 | 89 |
## GUI Emulator Options |
90 | 90 |
|
91 |
-- `-1x` Force small scale |
|
92 | 91 |
- `-2x` Force medium scale |
93 | 92 |
- `-3x` Force large scale |
94 | 93 |
|
... | ... |
@@ -97,7 +96,8 @@ uxnemu orca.rom | shim |
97 | 96 |
- `F1` toggle zoom |
98 | 97 |
- `F2` toggle debug |
99 | 98 |
- `F3` capture screen |
100 |
-- `F4` load launcher.rom |
|
99 |
+- `F4` reboot |
|
100 |
+- `F5` soft reboot |
|
101 | 101 |
|
102 | 102 |
### GUI Buttons |
103 | 103 |
|
... | ... |
@@ -38,7 +38,7 @@ screen_change(Uint16 x1, Uint16 y1, Uint16 x2, Uint16 y2) |
38 | 38 |
if(y2 > uxn_screen.y2) uxn_screen.y2 = y2; |
39 | 39 |
} |
40 | 40 |
|
41 |
-static void |
|
41 |
+void |
|
42 | 42 |
screen_fill(Uint8 *layer, int x1, int y1, int x2, int y2, int color) |
43 | 43 |
{ |
44 | 44 |
int x, y, width = uxn_screen.width, height = uxn_screen.height; |
... | ... |
@@ -22,6 +22,7 @@ typedef struct UxnScreen { |
22 | 22 |
extern UxnScreen uxn_screen; |
23 | 23 |
extern int emu_resize(int width, int height); |
24 | 24 |
|
25 |
+void screen_fill(Uint8 *layer, int x1, int y1, int x2, int y2, int color); |
|
25 | 26 |
void screen_palette(Uint8 *addr); |
26 | 27 |
void screen_resize(Uint16 width, Uint16 height); |
27 | 28 |
void screen_change(Uint16 x1, Uint16 y1, Uint16 x2, Uint16 y2); |
... | ... |
@@ -279,6 +279,21 @@ emu_restart(Uxn *u) |
279 | 279 |
emu_start(u, rom_path, 0); |
280 | 280 |
} |
281 | 281 |
|
282 |
+static int |
|
283 |
+emu_restart_soft(Uxn *u) |
|
284 |
+{ |
|
285 |
+ int i; |
|
286 |
+ for(i = 0x100; i < 0x10000; i++) |
|
287 |
+ u->ram[i] = 0; |
|
288 |
+ screen_fill(uxn_screen.bg, 0, 0, uxn_screen.width, uxn_screen.height, 0); |
|
289 |
+ screen_fill(uxn_screen.fg, 0, 0, uxn_screen.width, uxn_screen.height, 0); |
|
290 |
+ if(!system_load(u, rom_path)) |
|
291 |
+ return system_error("Boot", "Failed to load rom."); |
|
292 |
+ if(!uxn_eval(u, PAGE_PROGRAM)) |
|
293 |
+ return system_error("Boot", "Failed to eval rom."); |
|
294 |
+ return 1; |
|
295 |
+} |
|
296 |
+ |
|
282 | 297 |
static void |
283 | 298 |
capture_screen(void) |
284 | 299 |
{ |
... | ... |
@@ -402,6 +417,8 @@ handle_events(Uxn *u) |
402 | 417 |
capture_screen(); |
403 | 418 |
else if(event.key.keysym.sym == SDLK_F4) |
404 | 419 |
emu_restart(u); |
420 |
+ else if(event.key.keysym.sym == SDLK_F5) |
|
421 |
+ emu_restart_soft(u); |
|
405 | 422 |
ksym = event.key.keysym.sym; |
406 | 423 |
if(SDL_PeepEvents(&event, 1, SDL_PEEKEVENT, SDL_KEYUP, SDL_KEYUP) == 1 && ksym == event.key.keysym.sym) |
407 | 424 |
return 1; |