| ... | ... |
@@ -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++])) |