/** * Take into account the Falcon Bus Control register $ff8007.b $FFFF8007 Falcon Bus Control BIT 6 : F30 Start (0=Cold, 1=Warm) BIT 5 : STe Bus Emulation (0=on) BIT 3 : Blitter Flag (0=on, 1=off) BIT 2 : Blitter (0=8mhz, 1=16mhz) BIT 0 : 68030 (0=8mhz, 1=16mhz) */ static void IoMemTabFalcon_BusCtrl_WriteByte(void) { Uint8 busCtrl = IoMem_ReadByte(0xff8007); /* Set Falcon bus or STE compatible bus emulation */ if ((busCtrl & 0x20) == 0) IoMem_Init_FalconInSTeBuscompatibilityMode(0); else IoMem_Init_FalconInSTeBuscompatibilityMode(1); /* 68030 Frequency changed ? */ /* We change freq only in 68030 mode for a normal Falcon, */ /* not if CPU is 68040 or 68060 is used */ if ( ConfigureParams.System.nCpuLevel == 3 ) { if ((busCtrl & 0x1) == 1) { /* 16 Mhz bus for 68030 */ nCpuFreqShift = 1; ConfigureParams.System.nCpuFreq = 16; } else { /* 8 Mhz bus for 68030 */ nCpuFreqShift = 0; ConfigureParams.System.nCpuFreq = 8; } } Statusbar_UpdateInfo(); /* Update clock speed in the status bar */ }
/** * Restore 'snapshot' of memory/chips/emulation variables */ void MemorySnapShot_Restore(const char *pszFileName, bool bConfirm) { /* Set to 'restore' */ if (MemorySnapShot_OpenFile(pszFileName, false)) { Configuration_MemorySnapShot_Capture(false); /* Reset emulator to get things running */ IoMem_UnInit(); IoMem_Init(); Reset_Cold(); /* Capture each files details */ // STMemory_MemorySnapShot_Capture(false); CycInt_MemorySnapShot_Capture(false); Cycles_MemorySnapShot_Capture(false); M68000_MemorySnapShot_Capture(false); Video_MemorySnapShot_Capture(false); DebugUI_MemorySnapShot_Capture(pszFileName, false); // IoMem_MemorySnapShot_Capture(false); /* And close */ MemorySnapShot_CloseFile(); /* changes may affect also info shown in statusbar */ Statusbar_UpdateInfo(); } /* Did error? */ if (bCaptureError) Log_AlertDlg(LOG_ERROR, "Unable to restore memory state from file."); else if (bConfirm) Log_AlertDlg(LOG_INFO, "Memory state file restored."); }
/** * Toggle joystick cursor emulation between port 0, port 1 and being off * from them. When it's turned off from them, the port's previous state * is restored */ void Joy_ToggleCursorEmulation(void) { static JOYSTICKMODE saved[2] = { JOYSTICK_DISABLED, JOYSTICK_DISABLED }; JOYSTICKMODE state; int i, port = 2; for (i = 0; i < 2; i++) { state = ConfigureParams.Joysticks.Joy[i].nJoystickMode; if (state == JOYSTICK_KEYBOARD) { port = i; } else { saved[i] = state; } } switch (port) { case 0: /* (only) in port 0, disable cursor emu */ ConfigureParams.Joysticks.Joy[0].nJoystickMode = saved[0]; break; case 1: /* (at least) in port 1, switch cursor emu to port 0 */ ConfigureParams.Joysticks.Joy[1].nJoystickMode = saved[1]; ConfigureParams.Joysticks.Joy[0].nJoystickMode = JOYSTICK_KEYBOARD; break; default: /* neither in port 0 or 1, enable cursor emu to port 1 */ ConfigureParams.Joysticks.Joy[1].nJoystickMode = JOYSTICK_KEYBOARD; } Statusbar_UpdateInfo(); }
/** * Set TOS etc information and initial help message */ static void Main_StatusbarSetup(void) { const char *name = NULL; SDL_Keycode key; key = ConfigureParams.Shortcut.withoutModifier[SHORTCUT_OPTIONS]; if (!key) key = ConfigureParams.Shortcut.withModifier[SHORTCUT_OPTIONS]; if (key) name = SDL_GetKeyName(key); if (name) { char message[24], *keyname; #ifdef _MUDFLAP __mf_register(name, 32, __MF_TYPE_GUESS, "SDL keyname"); #endif keyname = Str_ToUpper(strdup(name)); snprintf(message, sizeof(message), "Press %s for Options", keyname); free(keyname); Statusbar_AddMessage(message, 6000); } /* update information loaded by Main_Init() */ Statusbar_UpdateInfo(); }
/** * Switch between joystick types in given joyport */ bool Joy_SwitchMode(int port) { int mode; if (port < 0 || port >= JOYSTICK_COUNT) { return false; } mode = (ConfigureParams.Joysticks.Joy[port].nJoystickMode + 1) % JOYSTICK_MODES; ConfigureParams.Joysticks.Joy[port].nJoystickMode = mode; Statusbar_UpdateInfo(); return true; }
/** * Copy details back to configuration and perform reset. */ bool Change_CopyChangedParamsToConfiguration(CNF_PARAMS *current, CNF_PARAMS *changed, bool bForceReset) { bool NeedReset; bool bReInitSCSIEmu = false; bool bReInitEnetEmu = false; bool bReInitSoundEmu = false; bool bReInitIoMem = false; bool bScreenModeChange = false; int i; Dprintf("Changes for:\n"); /* Do we need to warn user that changes will only take effect after reset? */ if (bForceReset) NeedReset = bForceReset; else NeedReset = Change_DoNeedReset(current, changed); /* Do we need to change SCSI disks? */ for (i = 0; i < ESP_MAX_DEVS; i++) { if (!NeedReset && (current->SCSI.target[i].bDiskInserted != changed->SCSI.target[i].bDiskInserted || current->SCSI.target[i].bWriteProtected != changed->SCSI.target[i].bWriteProtected || strcmp(current->SCSI.target[i].szImageName, changed->SCSI.target[i].szImageName))) { bReInitSCSIEmu = true; break; } } /* Note: MO and floppy disk insert/eject called from GUI */ /* Do we need to change Ethernet connection? */ if (!NeedReset && current->Ethernet.bEthernetConnected != changed->Ethernet.bEthernetConnected) { bReInitEnetEmu = true; } /* Do we need to change Sound configuration? */ if (!NeedReset && (current->Sound.bEnableSound != changed->Sound.bEnableSound || current->Sound.bEnableMicrophone != changed->Sound.bEnableMicrophone)) { bReInitSoundEmu = true; } /* Copy details to configuration, * so it can be saved out or set on reset */ if (changed != &ConfigureParams) { ConfigureParams = *changed; } /* Copy details to global, if we reset copy them all */ Configuration_Apply(NeedReset); /* Check if all necessary files exist */ Dialog_CheckFiles(); if (bQuitProgram) { SDL_Quit(); exit(-2); } /* Re-init IO memory map? */ if (bReInitIoMem) { Dprintf("- IO mem<\n"); IoMem_Init(); } /* Re-init SCSI disks? */ if (bReInitSCSIEmu) { Dprintf("- SCSI disks<\n"); SCSI_Reset(); } /* Re-init Ethernet? */ if (bReInitEnetEmu) { Dprintf("- Ethernet<\n"); Ethernet_Reset(false); } /* Re-init Sound? */ if (bReInitSoundEmu) { Dprintf("- Sound<\n"); Sound_Reset(); } /* Force things associated with screen change */ if (bScreenModeChange) { Dprintf("- screenmode<\n"); Screen_ModeChanged(); } /* Do we need to perform reset? */ if (NeedReset) { const char *err_msg; Dprintf("- reset\n"); err_msg=Reset_Cold(); // if (err_msg!=NULL) { // DlgAlert_Notice(err_msg); // return false; // } } /* Go into/return from full screen if flagged */ if (!bInFullScreen && ConfigureParams.Screen.bFullScreen) Screen_EnterFullScreen(); else if (bInFullScreen && !ConfigureParams.Screen.bFullScreen) Screen_ReturnFromFullScreen(); /* update statusbar info (CPU, MHz, mem etc) */ Statusbar_UpdateInfo(); Dprintf("done.\n"); return true; }