/******************************************* Restart emulation when loading a new game ********************************************/ void reloadrom(void) { /* Cartridge "Hot Swap" support (make sure system has already been inited once and use cartridges) */ if ((config.hot_swap == 3) && ((system_hw != SYSTEM_MCD) || scd.cartridge.boot)) { /* Only initialize cartridge hardware */ if ((system_hw & SYSTEM_PBC) == SYSTEM_MD) { /* 16-bit cartridge */ md_cart_init(); md_cart_reset(1); } else { /* 8-bit cartridge */ sms_cart_init(); sms_cart_reset(); } } /* Disc Swap support (automatically enabled if CD tray is open) */ else if ((system_hw != SYSTEM_MCD) || (cdd.status != CD_OPEN)) { /* Initialize audio emulation */ interlaced = 0; audio_init(SAMPLERATE_48KHZ, get_framerate()); /* Switch virtual system on */ system_init(); system_reset(); /* Allow hot swap */ config.hot_swap |= 2; } /* Auto-Load Backup RAM */ slot_autoload(0,config.s_device); /* Auto-Load State */ slot_autoload(config.s_default,config.s_device); /* Load Cheat file */ CheatLoad(); }
void gen_reset(int hard_reset) { /* System Reset */ if (hard_reset) { /* clear RAM */ memset (work_ram, 0x00, sizeof (work_ram)); memset (zram, 0x00, sizeof (zram)); } else { /* reset YM2612 (on hard reset, this is done by sound_reset) */ fm_reset(0); } /* 68k & Z80 could restart anywhere in VDP frame (Bonkers, Eternal Champions, X-Men 2) */ mcycles_68k = mcycles_z80 = (uint32)((MCYCLES_PER_LINE * lines_per_frame) * ((double)rand() / (double)RAND_MAX)); //mcycles_68k = mcycles_z80 = 0; if (system_hw == SYSTEM_PBC) { /* reset MS cartridge hardware */ sms_cart_reset(); /* Z80 is running */ zstate = 1; /* 68k is halted */ m68k_pulse_halt(); } else { /* reset MD cartridge hardware */ md_cart_reset(hard_reset); /* Z80 bus is released & Z80 is reseted */ m68k_memory_map[0xa0].read8 = m68k_read_bus_8; m68k_memory_map[0xa0].read16 = m68k_read_bus_16; m68k_memory_map[0xa0].write8 = m68k_unused_8_w; m68k_memory_map[0xa0].write16 = m68k_unused_16_w; zstate = 0; /* assume default bank is $000000-$007FFF */ zbank = 0; /* TMSS & OS ROM support */ if (config.tmss & 1) { /* clear TMSS register */ memset(tmss, 0x00, sizeof(tmss)); /* VDP access is locked by default */ int i; for (i=0xc0; i<0xe0; i+=8) { m68k_memory_map[i].read8 = m68k_lockup_r_8; m68k_memory_map[i].read16 = m68k_lockup_r_16; m68k_memory_map[i].write8 = m68k_lockup_w_8; m68k_memory_map[i].write16 = m68k_lockup_w_16; zbank_memory_map[i].read = zbank_lockup_r; zbank_memory_map[i].write = zbank_lockup_w; } /* OS ROM is mapped at $000000-$0007FF */ if (config.tmss & 2) { m68k_memory_map[0].base = bios_rom; } } /* reset 68k */ m68k_pulse_reset(); } /* reset Z80 */ z80_reset(); }
int Application::loadROM(const char* filename) { LOGD("NDK:LoadingRom: %s", filename); if (_romLoaded) { // TODO: close genesis // save sram saveSRam(_sramDir); _romLoaded = false; } /* load ROM file */ if (!load_rom((char*)filename)) { LOGD("Error loading rom!"); return NATIVE_ERROR; } // store current rom strcpy(_currentRom, filename); // controllers options config.gun_cursor[0] = 1; config.gun_cursor[1] = 1; config.invert_mouse = 0; config.s_device = 0; LOGD("GenesisPlus Hardware: %d", system_hw); if (system_hw == SYSTEM_MEGADRIVE || system_hw == SYSTEM_GENESIS) { Input.setButtonVisibility(BUTTON_INDEX_C, true); Input.setButtonVisibility(BUTTON_INDEX_X, true); Input.setButtonVisibility(BUTTON_INDEX_Y, true); Input.setButtonVisibility(BUTTON_INDEX_Z, true); input.system[0] = SYSTEM_MD_GAMEPAD; input.system[1] = SYSTEM_MD_GAMEPAD; config.input[0].padtype = DEVICE_PAD6B; } else if (system_hw == SYSTEM_PBC) { Input.setButtonVisibility(BUTTON_INDEX_C, false); Input.setButtonVisibility(BUTTON_INDEX_X, false); Input.setButtonVisibility(BUTTON_INDEX_Y, false); Input.setButtonVisibility(BUTTON_INDEX_Z, false); input.system[0] = SYSTEM_MS_GAMEPAD; input.system[1] = SYSTEM_MS_GAMEPAD; config.input[0].padtype = DEVICE_PAD2B; } input_init(); // hot-swap previous & current cartridge bool hotswap = config.hot_swap && cart.romsize; //cart.romsize = size; if(hotswap) { if (system_hw == SYSTEM_PBC) { sms_cart_init(); sms_cart_reset(); } else { md_cart_init(); md_cart_reset(1); } } else { // initialize audio emulation audio_init(_sampleRate, vdp_pal ? 50.0 : 60.0); // system power ON system_init(); system_reset(); } // sram loadSRam(_currentRom); // mark video updated bitmap.viewport.changed |= 1; /* load Cheats */ //CheatLoad(); _ssize = 0; _romLoaded = true; return NATIVE_OK; }