示例#1
0
/*******************************************
  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();
}
示例#2
0
文件: genesis.c 项目: XClouded/xielei
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();
}
示例#3
0
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;
}