... | ... |
@@ -90,6 +90,8 @@ uxnemu orca.rom | shim |
90 | 90 |
|
91 | 91 |
- `-2x` Force medium scale |
92 | 92 |
- `-3x` Force large scale |
93 |
+- `-f` Force fullscreen mode |
|
94 |
+- `--` Force next argument to be read as ROM name. (This is useful if your ROM file is named `-v`, `-2x`, and so forth.) |
|
93 | 95 |
|
94 | 96 |
## GUI Emulator Controls |
95 | 97 |
|
... | ... |
@@ -98,6 +100,7 @@ uxnemu orca.rom | shim |
98 | 100 |
- `F3` capture screen |
99 | 101 |
- `F4` reboot |
100 | 102 |
- `F5` soft reboot |
103 |
+- `F11` toggle fullscreen |
|
101 | 104 |
|
102 | 105 |
### GUI Buttons |
103 | 106 |
|
... | ... |
@@ -56,6 +56,7 @@ static SDL_Thread *stdin_thread; |
56 | 56 |
/* devices */ |
57 | 57 |
|
58 | 58 |
static int window_created = 0; |
59 |
+static int fullscreen = 0; |
|
59 | 60 |
static Uint32 stdin_event, audio0_event, zoom = 1; |
60 | 61 |
static Uint64 exec_deadline, deadline_interval, ms_interval; |
61 | 62 |
|
... | ... |
@@ -187,6 +188,18 @@ set_zoom(Uint8 z, int win) |
187 | 188 |
} |
188 | 189 |
} |
189 | 190 |
|
191 |
+static void |
|
192 |
+set_fullscreen(int new_fullscreen, int win) |
|
193 |
+{ |
|
194 |
+ fullscreen = new_fullscreen; |
|
195 |
+ Uint32 flags = 0; /* windowed mode; SDL2 has no constant for this */ |
|
196 |
+ if(fullscreen) { |
|
197 |
+ flags = SDL_WINDOW_FULLSCREEN_DESKTOP; |
|
198 |
+ } |
|
199 |
+ if(win) |
|
200 |
+ SDL_SetWindowFullscreen(emu_window, flags); |
|
201 |
+} |
|
202 |
+ |
|
190 | 203 |
/* emulator primitives */ |
191 | 204 |
|
192 | 205 |
int |
... | ... |
@@ -390,6 +403,8 @@ handle_events(Uxn *u) |
390 | 403 |
emu_restart(u, boot_rom, 0); |
391 | 404 |
else if(event.key.keysym.sym == SDLK_F5) |
392 | 405 |
emu_restart(u, boot_rom, 1); |
406 |
+ else if(event.key.keysym.sym == SDLK_F11) |
|
407 |
+ set_fullscreen(!fullscreen, 1); |
|
393 | 408 |
ksym = event.key.keysym.sym; |
394 | 409 |
if(SDL_PeepEvents(&event, 1, SDL_PEEKEVENT, SDL_KEYUP, SDL_KEYUP) == 1 && ksym == event.key.keysym.sym) |
395 | 410 |
return 1; |
... | ... |
@@ -455,7 +470,10 @@ emu_run(Uxn *u, char *rom) |
455 | 470 |
Uint64 frame_interval = SDL_GetPerformanceFrequency() / 60; |
456 | 471 |
Uint8 *vector_addr = &u->dev[0x20]; |
457 | 472 |
window_created = 1; |
458 |
- emu_window = SDL_CreateWindow(rom, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, (uxn_screen.width + PAD2) * zoom, (uxn_screen.height + PAD2) * zoom, SDL_WINDOW_SHOWN | SDL_WINDOW_ALLOW_HIGHDPI); |
|
473 |
+ Uint32 window_flags = SDL_WINDOW_SHOWN | SDL_WINDOW_ALLOW_HIGHDPI; |
|
474 |
+ if (fullscreen) |
|
475 |
+ window_flags = window_flags | SDL_WINDOW_FULLSCREEN_DESKTOP; |
|
476 |
+ emu_window = SDL_CreateWindow(rom, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, (uxn_screen.width + PAD2) * zoom, (uxn_screen.height + PAD2) * zoom, window_flags); |
|
459 | 477 |
if(emu_window == NULL) |
460 | 478 |
return system_error("sdl_window", SDL_GetError()); |
461 | 479 |
emu_renderer = SDL_CreateRenderer(emu_window, -1, SDL_RENDERER_ACCELERATED); |
... | ... |
@@ -508,7 +526,7 @@ main(int argc, char **argv) |
508 | 526 |
Uxn u = {0}; |
509 | 527 |
int i = 1; |
510 | 528 |
if(i == argc) |
511 |
- return system_error("usage", "uxnemu [-v][-2x][-3x] file.rom [args...]"); |
|
529 |
+ return system_error("usage", "uxnemu [-v] | uxnemu [-f | -2x | -3x | --] file.rom [args...]"); |
|
512 | 530 |
/* Connect Varvara */ |
513 | 531 |
system_connect(0x0, SYSTEM_VERSION, SYSTEM_DEIMASK, SYSTEM_DEOMASK); |
514 | 532 |
system_connect(0x1, CONSOLE_VERSION, CONSOLE_DEIMASK, CONSOLE_DEOMASK); |
... | ... |
@@ -522,11 +540,20 @@ main(int argc, char **argv) |
522 | 540 |
system_connect(0xa, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK); |
523 | 541 |
system_connect(0xb, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK); |
524 | 542 |
system_connect(0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK); |
525 |
- /* Read flags */ |
|
526 |
- if(argv[i][0] == '-' && argv[i][1] == 'v') |
|
527 |
- return system_version("Uxnemu - Graphical Varvara Emulator", "2 Sep 2023"); |
|
528 |
- if(strcmp(argv[i], "-2x") == 0 || strcmp(argv[i], "-3x") == 0) |
|
529 |
- set_zoom(argv[i++][1] - '0', 0); |
|
543 |
+ /* Read flag. Right now, there can be only one. */ |
|
544 |
+ if(argv[i][0] == '-') { |
|
545 |
+ if(argv[i][1] == 'v') |
|
546 |
+ return system_version("Uxnemu - Graphical Varvara Emulator", "2 Sep 2023"); |
|
547 |
+ if(argv[i][1] == '-') |
|
548 |
+ i++; |
|
549 |
+ if(strcmp(argv[i], "-2x") == 0 || strcmp(argv[i], "-3x") == 0) |
|
550 |
+ set_zoom(argv[i++][1] - '0', 0); |
|
551 |
+ if(strcmp(argv[i], "-f") == 0) { |
|
552 |
+ i++; |
|
553 |
+ set_fullscreen(1, 0); |
|
554 |
+ } |
|
555 |
+ } |
|
556 |
+ /* Start system. */ |
|
530 | 557 |
if(!emu_init()) |
531 | 558 |
return system_error("Init", "Failed to initialize varvara."); |
532 | 559 |
if(!system_init(&u, (Uint8 *)calloc(0x10000 * RAM_PAGES, sizeof(Uint8)), argv[i++])) |