annotate menu.c @ 1483:001120e91fed nuklear_ui

Skip loading menu ROM if Nuklear UI is enabled. Allow disabling Nuklear UI in favor of old menu ROM both at compile time and in config. Fall back to ROM UI if GL is unavailable
author Michael Pavone <pavone@retrodev.com>
date Sat, 25 Nov 2017 20:43:20 -0800
parents 77a401044935
children d82af64c94d2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
866
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1 #include <stdint.h>
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
2 #include <stdlib.h>
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
3 #include <string.h>
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
4 #include <stdio.h>
934
05b0a0d4fa40 Add strerror output to menu dir open failure message
Michael Pavone <pavone@retrodev.com>
parents: 933
diff changeset
5 #include <errno.h>
1103
22e87b739ad6 WIP split of ROM loading/argument parsing from Genesis emulation code. Compiles and doesn't crash, but nothing works. Still a few too many globals as well.
Michael Pavone <pavone@retrodev.com>
parents: 1059
diff changeset
6 #include "genesis.h"
866
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
7 #include "menu.h"
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
8 #include "backend.h"
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
9 #include "util.h"
961
750995b587a0 Save State menu option is now fully functional. Load state sort of works, but is mostly broken.
Michael Pavone <pavone@retrodev.com>
parents: 958
diff changeset
10 #include "gst.h"
1473
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents: 1438
diff changeset
11 #include "paths.h"
1478
da1dce39e846 Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
12 #include "saves.h"
866
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
13
1423
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
14 static menu_context *get_menu(genesis_context *gen)
866
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
15 {
1423
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
16 menu_context *menu = gen->extra;
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
17 if (!menu) {
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
18 gen->extra = menu = calloc(1, sizeof(menu_context));
1473
152a60c6787e Moved initial path logic out of menu so it can be shared with new UI
Michael Pavone <pavone@retrodev.com>
parents: 1438
diff changeset
19 get_initial_browse_path(&menu->curpath);
1423
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
20 }
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
21 return menu;
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
22 }
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
23
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
24 uint16_t menu_read_w(uint32_t address, void * vcontext)
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
25 {
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
26 if ((address >> 1) == 14) {
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
27 m68k_context *context = vcontext;
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
28 menu_context *menu = get_menu(context->system);
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
29 uint16_t value = menu->external_game_load;
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
30 if (value) {
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
31 printf("Read: %X\n", value);
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
32 }
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
33 menu->external_game_load = 0;
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
34 return value;
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
35 } else {
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
36 //This should return the status of the last request with 0
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
37 //meaning either the request is complete or no request is pending
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
38 //in the current implementation, the operations happen instantly
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
39 //in emulated time so we can always return 0
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
40 return 0;
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
41 }
866
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
42 }
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
43
868
1bab7e01ae98 Allow directory navigation in menu. Sort directory entries
Michael Pavone <pavone@retrodev.com>
parents: 866
diff changeset
44 int menu_dir_sort(const void *a, const void *b)
1bab7e01ae98 Allow directory navigation in menu. Sort directory entries
Michael Pavone <pavone@retrodev.com>
parents: 866
diff changeset
45 {
1bab7e01ae98 Allow directory navigation in menu. Sort directory entries
Michael Pavone <pavone@retrodev.com>
parents: 866
diff changeset
46 const dir_entry *da, *db;
1bab7e01ae98 Allow directory navigation in menu. Sort directory entries
Michael Pavone <pavone@retrodev.com>
parents: 866
diff changeset
47 da = a;
1bab7e01ae98 Allow directory navigation in menu. Sort directory entries
Michael Pavone <pavone@retrodev.com>
parents: 866
diff changeset
48 db = b;
1bab7e01ae98 Allow directory navigation in menu. Sort directory entries
Michael Pavone <pavone@retrodev.com>
parents: 866
diff changeset
49 if (da->is_dir != db->is_dir) {
1bab7e01ae98 Allow directory navigation in menu. Sort directory entries
Michael Pavone <pavone@retrodev.com>
parents: 866
diff changeset
50 return db->is_dir - da->is_dir;
1bab7e01ae98 Allow directory navigation in menu. Sort directory entries
Michael Pavone <pavone@retrodev.com>
parents: 866
diff changeset
51 }
1bab7e01ae98 Allow directory navigation in menu. Sort directory entries
Michael Pavone <pavone@retrodev.com>
parents: 866
diff changeset
52 return strcasecmp(((dir_entry *)a)->name, ((dir_entry *)b)->name);
1bab7e01ae98 Allow directory navigation in menu. Sort directory entries
Michael Pavone <pavone@retrodev.com>
parents: 866
diff changeset
53 }
1bab7e01ae98 Allow directory navigation in menu. Sort directory entries
Michael Pavone <pavone@retrodev.com>
parents: 866
diff changeset
54
873
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
55 void copy_string_from_guest(m68k_context *m68k, uint32_t guest_addr, char *buf, size_t maxchars)
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
56 {
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
57 char *cur;
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
58 char *src = NULL;
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
59 for (cur = buf; cur < buf+maxchars; cur+=2, guest_addr+=2, src+=2)
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
60 {
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
61 if (!src || !(guest_addr & 0xFFFF)) {
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
62 //we may have walked off the end of a memory block, get a fresh native pointer
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
63 src = get_native_pointer(guest_addr, (void **)m68k->mem_pointers, &m68k->options->gen);
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
64 if (!src) {
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
65 break;
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
66 }
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
67 }
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
68 *cur = src[1];
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
69 cur[1] = *src;
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
70 if (!*src || !src[1]) {
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
71 break;
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
72 }
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
73 }
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
74 //make sure we terminate the string even if we did not hit a null terminator in the source
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
75 buf[maxchars-1] = 0;
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
76 }
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
77
957
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
78 void copy_to_guest(m68k_context *m68k, uint32_t guest_addr, char *src, size_t tocopy)
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
79 {
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
80 char *dst = NULL;
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
81 for (char *cur = src; cur < src+tocopy; cur+=2, guest_addr+=2, dst+=2)
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
82 {
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
83 if (!dst || !(guest_addr & 0xFFFF)) {
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
84 //we may have walked off the end of a memory block, get a fresh native pointer
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
85 dst = get_native_pointer(guest_addr, (void **)m68k->mem_pointers, &m68k->options->gen);
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
86 if (!dst) {
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
87 break;
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
88 }
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
89 }
958
83532f944e3b Get slot list displaying in "Save State" and "Load State" menu items
Michael Pavone <pavone@retrodev.com>
parents: 957
diff changeset
90 dst[1] = *cur;
83532f944e3b Get slot list displaying in "Save State" and "Load State" menu items
Michael Pavone <pavone@retrodev.com>
parents: 957
diff changeset
91 *dst = cur[1];
957
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
92 }
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
93 }
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
94
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
95 #define SAVE_INFO_BUFFER_SIZE (11*40)
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
96
1059
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
97 uint32_t copy_dir_entry_to_guest(uint32_t dst, m68k_context *m68k, char *name, uint8_t is_dir)
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
98 {
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
99 uint8_t *dest = get_native_pointer(dst, (void **)m68k->mem_pointers, &m68k->options->gen);
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
100 if (!dest) {
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
101 return 0;
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
102 }
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
103 *(dest++) = is_dir;
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
104 *(dest++) = 1;
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
105 dst += 2;
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
106 uint8_t term = 0;
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
107 for (char *cpos = name; *cpos; cpos++)
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
108 {
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
109 dest[1] = *cpos;
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
110 dest[0] = cpos[1];
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
111 if (cpos[1]) {
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
112 cpos++;
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
113 } else {
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
114 term = 1;
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
115 }
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
116 dst += 2;
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
117 if (!(dst & 0xFFFF)) {
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
118 //we may have walked off the end of a memory block, get a fresh native pointer
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
119 dest = get_native_pointer(dst, (void **)m68k->mem_pointers, &m68k->options->gen);
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
120 if (!dest) {
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
121 break;
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
122 }
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
123 } else {
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
124 dest += 2;
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
125 }
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
126 }
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
127 if (!term) {
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
128 *(dest++) = 0;
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
129 *dest = 0;
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
130 dst += 2;
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
131 }
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
132 return dst;
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
133 }
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
134
866
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
135 void * menu_write_w(uint32_t address, void * context, uint16_t value)
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
136 {
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
137 m68k_context *m68k = context;
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
138 genesis_context *gen = m68k->system;
1423
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
139 menu_context *menu = get_menu(gen);
866
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
140 if (menu->state) {
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
141 uint32_t dst = menu->latch << 16 | value;
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
142 switch (address >> 2)
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
143 {
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
144 case 0: {
1059
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
145 #ifdef _WIN32
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
146 //handle virtual "drives" directory
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
147 if (menu->curpath[0] == PATH_SEP[0]) {
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
148 char drivestrings[4096];
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
149 if (sizeof(drivestrings) >= GetLogicalDriveStrings(sizeof(drivestrings), drivestrings)) {
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
150 for (char *cur = drivestrings; *cur; cur += strlen(cur) + 1)
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
151 {
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
152 dst = copy_dir_entry_to_guest(dst, m68k, cur, 1);
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
153 }
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
154 }
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
155 //terminate list
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
156 uint8_t *dest = get_native_pointer(dst, (void **)m68k->mem_pointers, &m68k->options->gen);
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
157 if (dest) {
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
158 *dest = dest[1] = 0;
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
159 }
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
160 break;
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
161 }
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
162 #endif
866
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
163 size_t num_entries;
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
164 dir_entry *entries = get_dir_list(menu->curpath, &num_entries);
868
1bab7e01ae98 Allow directory navigation in menu. Sort directory entries
Michael Pavone <pavone@retrodev.com>
parents: 866
diff changeset
165 if (entries) {
1bab7e01ae98 Allow directory navigation in menu. Sort directory entries
Michael Pavone <pavone@retrodev.com>
parents: 866
diff changeset
166 qsort(entries, num_entries, sizeof(dir_entry), menu_dir_sort);
933
f7da9b4df0e7 Log errors opening directories in the menu code
Michael Pavone <pavone@retrodev.com>
parents: 884
diff changeset
167 } else {
934
05b0a0d4fa40 Add strerror output to menu dir open failure message
Michael Pavone <pavone@retrodev.com>
parents: 933
diff changeset
168 warning("Failed to open directory %s: %s\n", menu->curpath, strerror(errno));
1034
2c8d76280e43 Slightly better handling of directory read errors
Michael Pavone <pavone@retrodev.com>
parents: 1024
diff changeset
169 entries = malloc(sizeof(dir_entry));
2c8d76280e43 Slightly better handling of directory read errors
Michael Pavone <pavone@retrodev.com>
parents: 1024
diff changeset
170 entries->name = strdup("..");
2c8d76280e43 Slightly better handling of directory read errors
Michael Pavone <pavone@retrodev.com>
parents: 1024
diff changeset
171 entries->is_dir = 1;
2c8d76280e43 Slightly better handling of directory read errors
Michael Pavone <pavone@retrodev.com>
parents: 1024
diff changeset
172 num_entries = 1;
868
1bab7e01ae98 Allow directory navigation in menu. Sort directory entries
Michael Pavone <pavone@retrodev.com>
parents: 866
diff changeset
173 }
1059
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
174 #ifdef _WIN32
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
175 if (menu->curpath[1] == ':' && !menu->curpath[2]) {
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
176 //Add fake .. entry to allow navigation to virtual "drives" directory
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
177 dst = copy_dir_entry_to_guest(dst, m68k, "..", 1);
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
178 }
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
179 #endif
1418
62ec8be376be Add smd extension to default extension filter. Make file extension check case insensitive
Michael Pavone <pavone@retrodev.com>
parents: 1417
diff changeset
180 char *ext_filter = strdup(tern_find_path_default(config, "ui\0extensions\0", (tern_val){.ptrval = "bin gen md smd sms gg"}, TVAL_PTR).ptrval);
1417
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
181 uint32_t num_exts = 0, ext_storage = 5;
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
182 char **ext_list = malloc(sizeof(char *) * ext_storage);
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
183 char *cur_filter = ext_filter;
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
184 while (*cur_filter)
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
185 {
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
186 if (num_exts == ext_storage) {
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
187 ext_storage *= 2;
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
188 ext_list = realloc(ext_list, sizeof(char *) * ext_storage);
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
189 }
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
190 ext_list[num_exts++] = cur_filter;
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
191 cur_filter = split_keyval(cur_filter);
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
192 }
1059
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
193 for (size_t i = 0; dst && i < num_entries; i++)
866
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
194 {
1417
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
195 if (num_exts && !entries[i].is_dir) {
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
196 char *ext = path_extension(entries[i].name);
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
197 if (!ext) {
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
198 continue;
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
199 }
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
200 uint32_t extidx;
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
201 for (extidx = 0; extidx < num_exts; extidx++)
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
202 {
1418
62ec8be376be Add smd extension to default extension filter. Make file extension check case insensitive
Michael Pavone <pavone@retrodev.com>
parents: 1417
diff changeset
203 if (!strcasecmp(ext, ext_list[extidx])) {
1417
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
204 break;
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
205 }
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
206 }
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
207 if (extidx == num_exts) {
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
208 continue;
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
209 }
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
210 }
1059
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
211 dst = copy_dir_entry_to_guest(dst, m68k, entries[i].name, entries[i].is_dir);
866
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
212 }
1417
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
213 free(ext_filter);
e6efe6b2aee9 Add a file extension filter to the menu
Michael Pavone <pavone@retrodev.com>
parents: 1326
diff changeset
214 free(ext_list);
868
1bab7e01ae98 Allow directory navigation in menu. Sort directory entries
Michael Pavone <pavone@retrodev.com>
parents: 866
diff changeset
215 //terminate list
1059
8da967779710 Added some hacky code to support a virtual root directory for selecting drives on Windows
Michael Pavone <pavone@retrodev.com>
parents: 1034
diff changeset
216 uint8_t *dest = get_native_pointer(dst, (void **)m68k->mem_pointers, &m68k->options->gen);
868
1bab7e01ae98 Allow directory navigation in menu. Sort directory entries
Michael Pavone <pavone@retrodev.com>
parents: 866
diff changeset
217 if (dest) {
1bab7e01ae98 Allow directory navigation in menu. Sort directory entries
Michael Pavone <pavone@retrodev.com>
parents: 866
diff changeset
218 *dest = dest[1] = 0;
1bab7e01ae98 Allow directory navigation in menu. Sort directory entries
Michael Pavone <pavone@retrodev.com>
parents: 866
diff changeset
219 }
1034
2c8d76280e43 Slightly better handling of directory read errors
Michael Pavone <pavone@retrodev.com>
parents: 1024
diff changeset
220 free_dir_list(entries, num_entries);
868
1bab7e01ae98 Allow directory navigation in menu. Sort directory entries
Michael Pavone <pavone@retrodev.com>
parents: 866
diff changeset
221 break;
1bab7e01ae98 Allow directory navigation in menu. Sort directory entries
Michael Pavone <pavone@retrodev.com>
parents: 866
diff changeset
222 }
1bab7e01ae98 Allow directory navigation in menu. Sort directory entries
Michael Pavone <pavone@retrodev.com>
parents: 866
diff changeset
223 case 1: {
1bab7e01ae98 Allow directory navigation in menu. Sort directory entries
Michael Pavone <pavone@retrodev.com>
parents: 866
diff changeset
224 char buf[4096];
873
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
225 copy_string_from_guest(m68k, dst, buf, sizeof(buf));
1481
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1478
diff changeset
226 buf[sizeof(buf)-1] = 0;
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1478
diff changeset
227 char *tmp = menu->curpath;
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1478
diff changeset
228 menu->curpath = path_append(tmp, buf);
77a401044935 Fix directory navigation in ROM file chooser in Nuklear UI
Michael Pavone <pavone@retrodev.com>
parents: 1478
diff changeset
229 free(tmp);
866
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
230 break;
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
231 }
1438
e2bd03ed3190 Allow reloading current ROM with a hotkey (default F5) and allow locking on a cartridge via menu
Michael Pavone <pavone@retrodev.com>
parents: 1434
diff changeset
232 case 2:
e2bd03ed3190 Allow reloading current ROM with a hotkey (default F5) and allow locking on a cartridge via menu
Michael Pavone <pavone@retrodev.com>
parents: 1434
diff changeset
233 case 8: {
873
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
234 char buf[4096];
91bf4d905eba Retrieve ROM filename from menu port write
Michael Pavone <pavone@retrodev.com>
parents: 872
diff changeset
235 copy_string_from_guest(m68k, dst, buf, sizeof(buf));
1008
51885857c019 Removed assumptions that path separators are Unix style outside of Unix-only verions of functions
Michael Pavone <pavone@retrodev.com>
parents: 972
diff changeset
236 char const *pieces[] = {menu->curpath, PATH_SEP, buf};
1438
e2bd03ed3190 Allow reloading current ROM with a hotkey (default F5) and allow locking on a cartridge via menu
Michael Pavone <pavone@retrodev.com>
parents: 1434
diff changeset
237 char *selected = alloc_concat_m(3, pieces);
e2bd03ed3190 Allow reloading current ROM with a hotkey (default F5) and allow locking on a cartridge via menu
Michael Pavone <pavone@retrodev.com>
parents: 1434
diff changeset
238 if ((address >> 2) == 2) {
e2bd03ed3190 Allow reloading current ROM with a hotkey (default F5) and allow locking on a cartridge via menu
Michael Pavone <pavone@retrodev.com>
parents: 1434
diff changeset
239 gen->header.next_rom = selected;
e2bd03ed3190 Allow reloading current ROM with a hotkey (default F5) and allow locking on a cartridge via menu
Michael Pavone <pavone@retrodev.com>
parents: 1434
diff changeset
240 m68k->should_return = 1;
e2bd03ed3190 Allow reloading current ROM with a hotkey (default F5) and allow locking on a cartridge via menu
Michael Pavone <pavone@retrodev.com>
parents: 1434
diff changeset
241 } else {
e2bd03ed3190 Allow reloading current ROM with a hotkey (default F5) and allow locking on a cartridge via menu
Michael Pavone <pavone@retrodev.com>
parents: 1434
diff changeset
242 lockon_media(selected);
e2bd03ed3190 Allow reloading current ROM with a hotkey (default F5) and allow locking on a cartridge via menu
Michael Pavone <pavone@retrodev.com>
parents: 1434
diff changeset
243 free(selected);
e2bd03ed3190 Allow reloading current ROM with a hotkey (default F5) and allow locking on a cartridge via menu
Michael Pavone <pavone@retrodev.com>
parents: 1434
diff changeset
244 }
872
7022ba865cfd Initial work for allowing loading a ROM from menu
Michael Pavone <pavone@retrodev.com>
parents: 870
diff changeset
245 break;
957
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
246 }
949
5e4fb650de58 Make Exit option in menu work
Michael Pavone <pavone@retrodev.com>
parents: 934
diff changeset
247 case 3: {
954
cbc5b39e5518 Implement "Resume" button in pause menu
Michael Pavone <pavone@retrodev.com>
parents: 949
diff changeset
248 switch (dst)
cbc5b39e5518 Implement "Resume" button in pause menu
Michael Pavone <pavone@retrodev.com>
parents: 949
diff changeset
249 {
cbc5b39e5518 Implement "Resume" button in pause menu
Michael Pavone <pavone@retrodev.com>
parents: 949
diff changeset
250 case 1:
cbc5b39e5518 Implement "Resume" button in pause menu
Michael Pavone <pavone@retrodev.com>
parents: 949
diff changeset
251 m68k->should_return = 1;
1111
2eb54e24914e Mostly working changes to allow support for multiple emulated system types in main blastem program
Michael Pavone <pavone@retrodev.com>
parents: 1103
diff changeset
252 gen->header.should_exit = 1;
954
cbc5b39e5518 Implement "Resume" button in pause menu
Michael Pavone <pavone@retrodev.com>
parents: 949
diff changeset
253 break;
cbc5b39e5518 Implement "Resume" button in pause menu
Michael Pavone <pavone@retrodev.com>
parents: 949
diff changeset
254 case 2:
cbc5b39e5518 Implement "Resume" button in pause menu
Michael Pavone <pavone@retrodev.com>
parents: 949
diff changeset
255 m68k->should_return = 1;
cbc5b39e5518 Implement "Resume" button in pause menu
Michael Pavone <pavone@retrodev.com>
parents: 949
diff changeset
256 break;
cbc5b39e5518 Implement "Resume" button in pause menu
Michael Pavone <pavone@retrodev.com>
parents: 949
diff changeset
257 }
cbc5b39e5518 Implement "Resume" button in pause menu
Michael Pavone <pavone@retrodev.com>
parents: 949
diff changeset
258
949
5e4fb650de58 Make Exit option in menu work
Michael Pavone <pavone@retrodev.com>
parents: 934
diff changeset
259 break;
5e4fb650de58 Make Exit option in menu work
Michael Pavone <pavone@retrodev.com>
parents: 934
diff changeset
260 }
957
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
261 case 4: {
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
262 char *buffer = malloc(SAVE_INFO_BUFFER_SIZE);
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
263 char *cur = buffer;
1111
2eb54e24914e Mostly working changes to allow support for multiple emulated system types in main blastem program
Michael Pavone <pavone@retrodev.com>
parents: 1103
diff changeset
264 if (gen->header.next_context && gen->header.next_context->save_dir) {
957
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
265 char *end = buffer + SAVE_INFO_BUFFER_SIZE;
1478
da1dce39e846 Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
266 uint32_t num_slots;
da1dce39e846 Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
267 save_slot_info *slots = get_slot_info(gen->header.next_context, &num_slots);
da1dce39e846 Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
268 for (uint32_t i = 0; i < num_slots; i++)
957
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
269 {
1478
da1dce39e846 Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
270 size_t desc_len = strlen(slots[i].desc) + 1;//+1 for string terminator
da1dce39e846 Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
271 char *after = cur + desc_len + 1;//+1 for list terminator
da1dce39e846 Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
272 if (after > cur) {
da1dce39e846 Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
273 desc_len -= after - cur;
957
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
274 }
1478
da1dce39e846 Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
275 memcpy(cur, slots[i].desc, desc_len);
da1dce39e846 Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
276 cur = after;
957
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
277 }
1478
da1dce39e846 Refactored save slot related logic to reduce duplication and allow reuse in new UI. Get state loading/saving mostly working in new UI
Michael Pavone <pavone@retrodev.com>
parents: 1473
diff changeset
278 *cur = 0;//terminate list
957
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
279 } else {
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
280 *(cur++) = 0;
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
281 *(cur++) = 0;
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
282 }
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
283 copy_to_guest(m68k, dst, buffer, cur-buffer);
1618d3676a35 Save state menu WIP
Michael Pavone <pavone@retrodev.com>
parents: 954
diff changeset
284 break;
1423
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
285 }
961
750995b587a0 Save State menu option is now fully functional. Load state sort of works, but is mostly broken.
Michael Pavone <pavone@retrodev.com>
parents: 958
diff changeset
286 case 5:
750995b587a0 Save State menu option is now fully functional. Load state sort of works, but is mostly broken.
Michael Pavone <pavone@retrodev.com>
parents: 958
diff changeset
287 //save state
1111
2eb54e24914e Mostly working changes to allow support for multiple emulated system types in main blastem program
Michael Pavone <pavone@retrodev.com>
parents: 1103
diff changeset
288 if (gen->header.next_context) {
2eb54e24914e Mostly working changes to allow support for multiple emulated system types in main blastem program
Michael Pavone <pavone@retrodev.com>
parents: 1103
diff changeset
289 gen->header.next_context->save_state = dst + 1;
961
750995b587a0 Save State menu option is now fully functional. Load state sort of works, but is mostly broken.
Michael Pavone <pavone@retrodev.com>
parents: 958
diff changeset
290 }
750995b587a0 Save State menu option is now fully functional. Load state sort of works, but is mostly broken.
Michael Pavone <pavone@retrodev.com>
parents: 958
diff changeset
291 m68k->should_return = 1;
750995b587a0 Save State menu option is now fully functional. Load state sort of works, but is mostly broken.
Michael Pavone <pavone@retrodev.com>
parents: 958
diff changeset
292 break;
750995b587a0 Save State menu option is now fully functional. Load state sort of works, but is mostly broken.
Michael Pavone <pavone@retrodev.com>
parents: 958
diff changeset
293 case 6:
750995b587a0 Save State menu option is now fully functional. Load state sort of works, but is mostly broken.
Michael Pavone <pavone@retrodev.com>
parents: 958
diff changeset
294 //load state
1111
2eb54e24914e Mostly working changes to allow support for multiple emulated system types in main blastem program
Michael Pavone <pavone@retrodev.com>
parents: 1103
diff changeset
295 if (gen->header.next_context && gen->header.next_context->save_dir) {
1433
c886c54d8cf1 Added save states to SMS emulation
Michael Pavone <pavone@retrodev.com>
parents: 1428
diff changeset
296 if (!gen->header.next_context->load_state(gen->header.next_context, dst)) {
c886c54d8cf1 Added save states to SMS emulation
Michael Pavone <pavone@retrodev.com>
parents: 1428
diff changeset
297 break;
961
750995b587a0 Save State menu option is now fully functional. Load state sort of works, but is mostly broken.
Michael Pavone <pavone@retrodev.com>
parents: 958
diff changeset
298 }
750995b587a0 Save State menu option is now fully functional. Load state sort of works, but is mostly broken.
Michael Pavone <pavone@retrodev.com>
parents: 958
diff changeset
299 }
750995b587a0 Save State menu option is now fully functional. Load state sort of works, but is mostly broken.
Michael Pavone <pavone@retrodev.com>
parents: 958
diff changeset
300 m68k->should_return = 1;
750995b587a0 Save State menu option is now fully functional. Load state sort of works, but is mostly broken.
Michael Pavone <pavone@retrodev.com>
parents: 958
diff changeset
301 break;
1423
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
302 case 7:
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
303 //read only port
9a3e003bdcb3 Make drag and drop play nice with the menu
Michael Pavone <pavone@retrodev.com>
parents: 1418
diff changeset
304 break;
866
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
305 default:
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
306 fprintf(stderr, "WARNING: write to undefined menu port %X\n", address);
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
307 }
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
308 menu->state = 0;
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
309 } else {
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
310 menu->latch = value;
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
311 menu->state = 1;
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
312 }
954
cbc5b39e5518 Implement "Resume" button in pause menu
Michael Pavone <pavone@retrodev.com>
parents: 949
diff changeset
313 if (m68k->should_return) {
cbc5b39e5518 Implement "Resume" button in pause menu
Michael Pavone <pavone@retrodev.com>
parents: 949
diff changeset
314 m68k->target_cycle = m68k->current_cycle;
cbc5b39e5518 Implement "Resume" button in pause menu
Michael Pavone <pavone@retrodev.com>
parents: 949
diff changeset
315 }
866
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
316
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
317 return context;
69a6ec208111 Menu ROM now pulls real file names from the OS rather than using a fake list
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
318 }