コード例 #1
0
void Window::vOnFileClose()
{
  if (m_eCartridge != CartridgeNone)
  {
    soundPause();
    vStopEmu();
    vSetDefaultTitle();
    vDrawDefaultScreen();
    vSaveBattery();
    vSaveCheats();
    m_stEmulator.emuCleanUp();
    m_eCartridge = CartridgeNone;
    emulating = 0;

    vUpdateGameSlots();

    for (std::list<Gtk::Widget *>::iterator it = m_listSensitiveWhenPlaying.begin();
         it != m_listSensitiveWhenPlaying.end();
         it++)
    {
      (*it)->set_sensitive(false);
    }

    m_poFilePauseItem->set_active(false);
  }
}
コード例 #2
0
void Window::vOnDirectories()
{
  DirectoriesConfigDialog oDialog(m_poDirConfig);
  oDialog.set_transient_for(*this);
  oDialog.run();

  // Needed if saves dir changed
  vUpdateGameSlots();
}
コード例 #3
0
ファイル: window.cpp プロジェクト: bsantos/visualboyadvance-m
bool Window::bLoadROM(const std::string& _rsFile)
{
    vOnFileClose();

    // clear cheat list
    cheatsDeleteAll(false);
    gbCheatRemoveAll();

    m_sRomFile = _rsFile;
    const char* csFile = _rsFile.c_str();

    IMAGE_TYPE eType = utilFindType(csFile);
    if (eType == IMAGE_UNKNOWN) {
        vPopupError(_("Unknown file type %s"), csFile);
        return false;
    }

    bool bLoaded = false;
    if (eType == IMAGE_GB) {
        bLoaded = gbLoadRom(csFile);
        if (bLoaded) {
            m_eCartridge = CartridgeGB;
            m_stEmulator = GBSystem;

            useBios = m_poCoreConfig->oGetKey<bool>("gb_use_bios_file");
            gbGetHardwareType();

            if (gbHardware & 5) {
                gbCPUInit(m_poCoreConfig->sGetKey("gb_bios_file").c_str(), useBios);
            }

            // If the bios file was rejected by gbCPUInit
            if (m_poCoreConfig->oGetKey<bool>("gb_use_bios_file") && !useBios) {
                m_poCoreConfig->vSetKey("gb_bios_file", "");
            }

            gbReset();
        }
    } else if (eType == IMAGE_GBA) {
        int iSize = CPULoadRom(csFile);
        bLoaded = (iSize > 0);
        if (bLoaded) {
            m_eCartridge = CartridgeGBA;
            m_stEmulator = GBASystem;

            vApplyPerGameConfig();

            useBios = m_poCoreConfig->oGetKey<bool>("use_bios_file");
            CPUInit(m_poCoreConfig->sGetKey("bios_file").c_str(), useBios);
            CPUReset();

            // If the bios file was rejected by CPUInit
            if (m_poCoreConfig->oGetKey<bool>("use_bios_file") && !useBios) {
                m_poCoreConfig->vSetKey("bios_file", "");
            }
        }
    }

    if (!bLoaded) {
        return false;
    }

    vLoadBattery();
    vLoadCheats();
    vUpdateScreen();

    emulating = 1;
    m_bWasEmulating = false;

    vApplyConfigSoundSampleRate();

    vUpdateGameSlots();
    vHistoryAdd(_rsFile);

    for (std::list<Gtk::Widget*>::iterator it = m_listSensitiveWhenPlaying.begin();
         it != m_listSensitiveWhenPlaying.end();
         it++) {
        (*it)->set_sensitive();
    }

    if (m_poCoreConfig->oGetKey<bool>("load_game_auto")) {
        vOnLoadGameMostRecent();
    }

    // reserve rewind space for write operation
    // this is used as work space
    // actual state blocks are reserved in bOnEmuSaveStateRewind()
    // when resulted size is known
    //
    if (m_state_count_max > 0 && m_psavestate == NULL) {
        m_psavestate = new char[SZSTATE];
    }

    vStartEmu();

    return true;
}
コード例 #4
0
void Window::vOnSaveGame(int _iSlot)
{
  int i = _iSlot - 1;
  m_stEmulator.emuWriteState(m_astGameSlot[i].m_sFile.c_str());
  vUpdateGameSlots();
}