summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--blastem.c6
-rw-r--r--blastem.h1
-rw-r--r--menu.c5
-rw-r--r--menu.s6837
4 files changed, 45 insertions, 4 deletions
diff --git a/blastem.c b/blastem.c
index 76ddd16..f04f953 100644
--- a/blastem.c
+++ b/blastem.c
@@ -1178,6 +1178,9 @@ int main(int argc, char ** argv)
start_genesis(genesis, menu ? NULL : statefile, menu == debug_target ? debuggerfun : NULL);
for(;;)
{
+ if (genesis->should_exit) {
+ break;
+ }
if (menu && menu_context->next_rom) {
if (game_context) {
if (game_context->save_type != SAVE_NONE) {
@@ -1230,8 +1233,7 @@ int main(int argc, char ** argv)
genesis->m68k->options->address_log = address_log;
map_all_bindings(genesis->ports);
start_genesis(genesis, statefile, menu == debug_target ? debuggerfun : NULL);
- }
- else if (menu && game_context) {
+ } else if (menu && game_context) {
genesis->arena = set_current_arena(game_context->arena);
genesis = game_context;
cart = genesis->cart;
diff --git a/blastem.h b/blastem.h
index c5150a4..a828180 100644
--- a/blastem.h
+++ b/blastem.h
@@ -43,6 +43,7 @@ typedef struct {
uint8_t save_type;
io_port ports[3];
uint8_t bus_busy;
+ uint8_t should_exit;
eeprom_state eeprom;
} genesis_context;
diff --git a/menu.c b/menu.c
index 0399bd9..c656dca 100644
--- a/menu.c
+++ b/menu.c
@@ -190,6 +190,11 @@ void * menu_write_w(uint32_t address, void * context, uint16_t value)
gen->next_rom = alloc_concat_m(3, pieces);
m68k->should_return = 1;
break;
+ case 3: {
+ m68k->should_return = 1;
+ gen->should_exit = 1;
+ break;
+ }
}
default:
fprintf(stderr, "WARNING: write to undefined menu port %X\n", address);
diff --git a/menu.s68 b/menu.s68
index 6085455..b1c7f42 100644
--- a/menu.s68
+++ b/menu.s68
@@ -348,7 +348,9 @@ select_entry:
;regular file
lea menu_port+8, a3
move.l a2, (a3)
- rts
+
+ addq #6, a7
+ bra show_pause_menu
.select_menu_button:
movea.l menu_functions.w, a2
move.l (0, a2, d0.w), a2
@@ -781,6 +783,17 @@ show_main_menu:
bsr draw_menu
bra gamepad_setup
+show_pause_menu:
+ bsr clear_screen
+ ;init vertical scroll RAM
+ vdpaccess $0, VDP_VSRAM_WRITE
+ move.w #-4, (a0)
+ move.w #0, (a0)
+ moveq #8, d6
+ move.l #pause_menu_func, menu_functions.w
+ lea pause_menu(pc), a5
+ bsr draw_menu
+ bra gamepad_setup
menu_start:
;init vertical scroll RAM
@@ -913,9 +926,21 @@ show_about:
bra .wait
exit:
- ;TODO: implement me
+ move.w #1, menu_port+12
bra exit
+resume:
+ ;TODO: Implement me
+ bra resume
+
+save_state:
+ ;TODO: Implement me
+ bra save_state
+
+load_state:
+ ;TODO: Implement me
+ bra save_state
+
about_text:
dc.b "BlastEm v0.4.0", 0
dc.b "Copyright 2011-2016 Michael Pavone", 0
@@ -1071,5 +1096,13 @@ pause_menu:
dc.b "Load State", 0
dc.b "Exit", 0
dc.b 0
+
+ align 1
+pause_menu_func
+ dc.l resume
+ dc.l menu_start
+ dc.l save_state
+ dc.l load_state
+ dc.l exit
rom_end: