mirror of
https://github.com/AppleWin/AppleWin.git
synced 2024-12-29 08:30:04 +00:00
Save-state:
. add ConfirmReboot . Restore saved configuration . Moved some config to Joystick & SerialCard . save config
This commit is contained in:
parent
18cd2afdd0
commit
2f4ee9466f
@ -56,6 +56,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "Configuration\PropertySheet.h"
|
||||
#include "Tfe\Tfe.h"
|
||||
|
||||
static UINT16 g_AppleWinVersion[4] = {0};
|
||||
char VERSIONSTRING[16] = "xx.yy.zz.ww";
|
||||
|
||||
TCHAR *g_pAppTitle = TITLE_APPLE_2E_ENHANCED;
|
||||
@ -110,6 +111,11 @@ CSpeech g_Speech;
|
||||
|
||||
//===========================================================================
|
||||
|
||||
const UINT16* GetAppleWinVersion(void)
|
||||
{
|
||||
return &g_AppleWinVersion[0];
|
||||
}
|
||||
|
||||
bool GetLoadedSaveStateFlag(void)
|
||||
{
|
||||
return g_bLoadedSaveState;
|
||||
@ -366,7 +372,7 @@ static void LoadConfigOldJoystick(const UINT uJoyNum)
|
||||
break;
|
||||
}
|
||||
|
||||
joytype[uJoyNum] = uNewJoyType;
|
||||
JoySetJoyType(uJoyNum, uNewJoyType);
|
||||
}
|
||||
|
||||
//Reads configuration from the registry entries
|
||||
@ -407,9 +413,15 @@ void LoadConfiguration(void)
|
||||
|
||||
//
|
||||
|
||||
if (!REGLOAD(TEXT(REGVALUE_JOYSTICK0_EMU_TYPE), &joytype[JN_JOYSTICK0]))
|
||||
DWORD dwJoyType;
|
||||
if (REGLOAD(TEXT(REGVALUE_JOYSTICK0_EMU_TYPE), &dwJoyType))
|
||||
JoySetJoyType(JN_JOYSTICK0, dwJoyType);
|
||||
else
|
||||
LoadConfigOldJoystick(JN_JOYSTICK0);
|
||||
if (!REGLOAD(TEXT(REGVALUE_JOYSTICK1_EMU_TYPE), &joytype[JN_JOYSTICK1]))
|
||||
|
||||
if (REGLOAD(TEXT(REGVALUE_JOYSTICK1_EMU_TYPE), &dwJoyType))
|
||||
JoySetJoyType(JN_JOYSTICK1, dwJoyType);
|
||||
else
|
||||
LoadConfigOldJoystick(JN_JOYSTICK1);
|
||||
|
||||
REGLOAD(TEXT("Sound Emulation") ,&soundtype);
|
||||
@ -898,11 +910,11 @@ int APIENTRY WinMain(HINSTANCE passinstance, HINSTANCE, LPSTR lpCmdLine, int)
|
||||
|
||||
// Construct version string from fixed file info block
|
||||
|
||||
unsigned long major = pFixedFileInfo->dwFileVersionMS >> 16;
|
||||
unsigned long minor = pFixedFileInfo->dwFileVersionMS & 0xffff;
|
||||
unsigned long fix = pFixedFileInfo->dwFileVersionLS >> 16;
|
||||
unsigned long fix_minor = pFixedFileInfo->dwFileVersionLS & 0xffff;
|
||||
sprintf(VERSIONSTRING, "%d.%d.%d.%d", major, minor, fix, fix_minor); // potential buffer overflow
|
||||
unsigned long major = g_AppleWinVersion[0] = pFixedFileInfo->dwFileVersionMS >> 16;
|
||||
unsigned long minor = g_AppleWinVersion[1] = pFixedFileInfo->dwFileVersionMS & 0xffff;
|
||||
unsigned long fix = g_AppleWinVersion[2] = pFixedFileInfo->dwFileVersionLS >> 16;
|
||||
unsigned long fix_minor = g_AppleWinVersion[3] = pFixedFileInfo->dwFileVersionLS & 0xffff;
|
||||
sprintf(VERSIONSTRING, "%d.%d.%d.%d", major, minor, fix, fix_minor); // potential buffer overflow
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
void SetCurrentCLK6502();
|
||||
void SetCurrentImageDir(const char* pszImageDir);
|
||||
|
||||
|
||||
extern const UINT16* GetAppleWinVersion(void);
|
||||
extern char VERSIONSTRING[]; // Constructed in WinMain()
|
||||
|
||||
extern TCHAR *g_pAppTitle;
|
||||
|
@ -214,12 +214,12 @@ void CPageInput::DlgOK(HWND hWnd)
|
||||
|
||||
if (JoySetEmulationType(hWnd, m_nJoy0ChoiceTranlationTbl[uNewJoyType0], JN_JOYSTICK0, bIsSlot4Mouse))
|
||||
{
|
||||
REGSAVE(TEXT(REGVALUE_JOYSTICK0_EMU_TYPE), joytype[0]);
|
||||
REGSAVE(TEXT(REGVALUE_JOYSTICK0_EMU_TYPE), JoyGetJoyType(0));
|
||||
}
|
||||
|
||||
if (JoySetEmulationType(hWnd, m_nJoy1ChoiceTranlationTbl[uNewJoyType1], JN_JOYSTICK1, bIsSlot4Mouse))
|
||||
{
|
||||
REGSAVE(TEXT(REGVALUE_JOYSTICK1_EMU_TYPE), joytype[1]);
|
||||
REGSAVE(TEXT(REGVALUE_JOYSTICK1_EMU_TYPE), JoyGetJoyType(1));
|
||||
}
|
||||
|
||||
JoySetTrim((short)SendDlgItemMessage(hWnd, IDC_SPIN_XTRIM, UDM_GETPOS, 0, 0), true);
|
||||
@ -305,7 +305,7 @@ void CPageInput::InitJoystickChoices(HWND hWnd, int nJoyNum, int nIdcValue)
|
||||
for(UINT i=nJC_KEYBD_CURSORS; i<nJC_MAX; i++)
|
||||
{
|
||||
if( ( (i == nJC_KEYBD_CURSORS) || (i == nJC_KEYBD_NUMPAD) ) &&
|
||||
( (joytype[nOtherJoyNum] == nJC_KEYBD_CURSORS) || (joytype[nOtherJoyNum] == nJC_KEYBD_NUMPAD) )
|
||||
( (JoyGetJoyType(nOtherJoyNum) == nJC_KEYBD_CURSORS) || (JoyGetJoyType(nOtherJoyNum) == nJC_KEYBD_NUMPAD) )
|
||||
)
|
||||
{
|
||||
continue;
|
||||
@ -314,7 +314,7 @@ void CPageInput::InitJoystickChoices(HWND hWnd, int nJoyNum, int nIdcValue)
|
||||
if (i == nJC_MOUSE && bIsSlot4Mouse)
|
||||
continue;
|
||||
|
||||
if(joytype[nOtherJoyNum] != i)
|
||||
if (JoyGetJoyType(nOtherJoyNum) != i)
|
||||
{
|
||||
memcpy(pszMem, ppszJoyChoices[i], strlen(ppszJoyChoices[i])+1);
|
||||
pszMem += strlen(ppszJoyChoices[i])+1;
|
||||
@ -324,7 +324,7 @@ void CPageInput::InitJoystickChoices(HWND hWnd, int nJoyNum, int nIdcValue)
|
||||
|
||||
*pszMem = 0x00; // Doubly null terminated
|
||||
|
||||
m_PropertySheetHelper.FillComboBox(hWnd, nIdcValue, pnzJoystickChoices, joytype[nJoyNum]);
|
||||
m_PropertySheetHelper.FillComboBox(hWnd, nIdcValue, pnzJoystickChoices, JoyGetJoyType(nJoyNum));
|
||||
}
|
||||
|
||||
void CPageInput::InitSlotOptions(HWND hWnd)
|
||||
|
@ -91,7 +91,7 @@ static int joysubx[2] = {0,0};
|
||||
static int joysuby[2] = {0,0};
|
||||
|
||||
// Value persisted to Registry for REGVALUE_JOYSTICK0_EMU_TYPE
|
||||
DWORD joytype[2] = {J0C_JOYSTICK1, J1C_DISABLED}; // Emulation Type for joysticks #0 & #1
|
||||
static DWORD joytype[2] = {J0C_JOYSTICK1, J1C_DISABLED}; // Emulation Type for joysticks #0 & #1
|
||||
|
||||
static BOOL setbutton[3] = {0,0,0}; // Used when a mouse button is pressed/released
|
||||
|
||||
@ -753,6 +753,30 @@ void JoyDisableUsingMouse()
|
||||
|
||||
//===========================================================================
|
||||
|
||||
void JoySetJoyType(UINT num, DWORD type)
|
||||
{
|
||||
_ASSERT(num <= JN_JOYSTICK1);
|
||||
if (num > JN_JOYSTICK1)
|
||||
return;
|
||||
|
||||
joytype[num] = type;
|
||||
|
||||
// Refresh centre positions whenever 'joytype' changes
|
||||
JoySetTrim(JoyGetTrim(true) , true);
|
||||
JoySetTrim(JoyGetTrim(false), false);
|
||||
}
|
||||
|
||||
DWORD JoyGetJoyType(UINT num)
|
||||
{
|
||||
_ASSERT(num <= JN_JOYSTICK1);
|
||||
if (num > JN_JOYSTICK1)
|
||||
return J0C_DISABLED;
|
||||
|
||||
return joytype[num];
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
|
||||
void JoySetTrim(short nValue, bool bAxisX)
|
||||
{
|
||||
if(bAxisX)
|
||||
@ -831,12 +855,18 @@ void JoySetSnapshot_v1(const unsigned __int64 JoyCntrResetCycle)
|
||||
|
||||
//
|
||||
|
||||
void JoyGetSnapshot(unsigned __int64& rJoyCntrResetCycle)
|
||||
void JoyGetSnapshot(unsigned __int64& rJoyCntrResetCycle, short* pJoystick0Trim, short* pJoystick1Trim)
|
||||
{
|
||||
rJoyCntrResetCycle = g_nJoyCntrResetCycle;
|
||||
pJoystick0Trim[0] = JoyGetTrim(true);
|
||||
pJoystick0Trim[1] = JoyGetTrim(false);
|
||||
pJoystick1Trim[0] = 0; // TBD: not implemented yet
|
||||
pJoystick1Trim[1] = 0; // TBD: not implemented yet
|
||||
}
|
||||
|
||||
void JoySetSnapshot(const unsigned __int64 JoyCntrResetCycle)
|
||||
void JoySetSnapshot(const unsigned __int64 JoyCntrResetCycle, const short* pJoystick0Trim, const short* pJoystick1Trim)
|
||||
{
|
||||
g_nJoyCntrResetCycle = JoyCntrResetCycle;
|
||||
JoySetTrim(pJoystick0Trim[0], true);
|
||||
JoySetTrim(pJoystick0Trim[1], false);
|
||||
}
|
||||
|
@ -5,8 +5,6 @@ enum JOYNUM {JN_JOYSTICK0=0, JN_JOYSTICK1};
|
||||
enum JOY0CHOICE {J0C_DISABLED=0, J0C_JOYSTICK1, J0C_KEYBD_CURSORS, J0C_KEYBD_NUMPAD, J0C_MOUSE, J0C_MAX};
|
||||
enum JOY1CHOICE {J1C_DISABLED=0, J1C_JOYSTICK2, J1C_KEYBD_CURSORS, J1C_KEYBD_NUMPAD, J1C_MOUSE, J1C_MAX};
|
||||
|
||||
extern DWORD joytype[2];
|
||||
|
||||
enum {JOYSTICK_MODE_FLOATING=0, JOYSTICK_MODE_CENTERING}; // Joystick centering control
|
||||
|
||||
void JoyInitialize();
|
||||
@ -21,12 +19,14 @@ BOOL JoyUsingKeyboard();
|
||||
BOOL JoyUsingKeyboardCursors();
|
||||
BOOL JoyUsingKeyboardNumpad();
|
||||
void JoyDisableUsingMouse();
|
||||
void JoySetJoyType(UINT num, DWORD type);
|
||||
DWORD JoyGetJoyType(UINT num);
|
||||
void JoySetTrim(short nValue, bool bAxisX);
|
||||
short JoyGetTrim(bool bAxisX);
|
||||
void JoyportControl(const UINT uControl);
|
||||
void JoySetSnapshot_v1(const unsigned __int64 JoyCntrResetCycle);
|
||||
void JoyGetSnapshot(unsigned __int64& rJoyCntrResetCycle);
|
||||
void JoySetSnapshot(const unsigned __int64 JoyCntrResetCycle);
|
||||
void JoyGetSnapshot(unsigned __int64& rJoyCntrResetCycle, short* pJoystick0Trim, short* pJoystick1Trim);
|
||||
void JoySetSnapshot(const unsigned __int64 JoyCntrResetCycle, const short* pJoystick0Trim, const short* pJoystick1Trim);
|
||||
|
||||
BYTE __stdcall JoyReadButton(WORD pc, WORD addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft);
|
||||
BYTE __stdcall JoyReadPosition(WORD pc, WORD addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft);
|
||||
|
@ -291,7 +291,7 @@ static void LoadUnitApple2(DWORD Length, DWORD Version)
|
||||
m_ConfigNew.m_Apple2Type = g_Apple2Type;
|
||||
|
||||
CpuSetSnapshot(Apple2Unit.CPU6502);
|
||||
JoySetSnapshot(Apple2Unit.Joystick.JoyCntrResetCycle);
|
||||
JoySetSnapshot(Apple2Unit.Joystick.JoyCntrResetCycle, &Apple2Unit.Joystick.Joystick0Trim[0], &Apple2Unit.Joystick.Joystick1Trim[0]);
|
||||
KeybSetSnapshot(Apple2Unit.Keyboard.LastKey);
|
||||
SpkrSetSnapshot(Apple2Unit.Speaker.SpkrLastCycle);
|
||||
VideoSetSnapshot(Apple2Unit.Video);
|
||||
@ -428,23 +428,22 @@ static void LoadUnitCard(DWORD Length, DWORD Version)
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
static void LoadUnitConfig(DWORD Length, DWORD Version)
|
||||
{
|
||||
SS_APPLEWIN_CONFIG Cfg;
|
||||
SS_APPLEWIN_CONFIG Config;
|
||||
|
||||
if (Version != UNIT_CONFIG_VER)
|
||||
throw std::string("Config: Version mismatch");
|
||||
|
||||
if (Length != sizeof(Cfg))
|
||||
if (Length != sizeof(Config))
|
||||
throw std::string("Config: Length mismatch");
|
||||
|
||||
if (SetFilePointer(m_hFile, -(LONG)sizeof(Cfg.UnitHdr), NULL, FILE_CURRENT) == INVALID_SET_FILE_POINTER)
|
||||
if (SetFilePointer(m_hFile, -(LONG)sizeof(Config.UnitHdr), NULL, FILE_CURRENT) == INVALID_SET_FILE_POINTER)
|
||||
throw std::string("Config: file corrupt");
|
||||
|
||||
DWORD dwBytesRead;
|
||||
BOOL bRes = ReadFile( m_hFile,
|
||||
&Cfg,
|
||||
&Config,
|
||||
Length,
|
||||
&dwBytesRead,
|
||||
NULL);
|
||||
@ -452,10 +451,38 @@ static void LoadUnitConfig(DWORD Length, DWORD Version)
|
||||
if (dwBytesRead != Length)
|
||||
throw std::string("Config: file corrupt");
|
||||
|
||||
// todo:
|
||||
//m_ConfigNew.m_bEnhanceDisk;
|
||||
// Restore all config state
|
||||
|
||||
//Config.Cfg.AppleWinVersion // Nothing to do
|
||||
g_eVideoType = Config.Cfg.VideoMode;
|
||||
g_uHalfScanLines = Config.Cfg.IsHalfScanLines;
|
||||
g_bConfirmReboot = Config.Cfg.IsConfirmReboot;
|
||||
monochrome = Config.Cfg.MonochromeColor;
|
||||
SetViewportScale(Config.Cfg.WindowScale);
|
||||
|
||||
g_dwSpeed = Config.Cfg.CpuSpeed;
|
||||
SetCurrentCLK6502();
|
||||
|
||||
JoySetJoyType(JN_JOYSTICK0, Config.Cfg.JoystickType[0]);
|
||||
JoySetJoyType(JN_JOYSTICK1, Config.Cfg.JoystickType[1]);
|
||||
sg_PropertySheet.SetJoystickCursorControl(Config.Cfg.IsAllowCursorsToBeRead);
|
||||
sg_PropertySheet.SetAutofire(Config.Cfg.IsAutofire);
|
||||
sg_PropertySheet.SetJoystickCenteringControl(Config.Cfg.IsKeyboardAutocentering);
|
||||
//Config.Cfg.IsSwapButton0and1; // TBD: not implemented yet
|
||||
sg_PropertySheet.SetScrollLockToggle(Config.Cfg.IsScrollLockToggle);
|
||||
sg_PropertySheet.SetMouseShowCrosshair(Config.Cfg.IsMouseShowCrosshair);
|
||||
sg_PropertySheet.SetMouseRestrictToWindow(Config.Cfg.IsMouseRestrictToWindow);
|
||||
|
||||
soundtype = Config.Cfg.SoundType;
|
||||
SpkrSetVolume(Config.Cfg.SpeakerVolume, sg_PropertySheet.GetVolumeMax());
|
||||
MB_SetVolume(Config.Cfg.MockingboardVolume, sg_PropertySheet.GetVolumeMax());
|
||||
|
||||
enhancedisk = Config.Cfg.IsEnhancedDiskSpeed;
|
||||
g_bSaveStateOnExit = Config.Cfg.IsSaveStateOnExit ? true : false;
|
||||
|
||||
g_bPrinterAppend = Config.Cfg.IsAppendToFile ? true : false;
|
||||
sg_PropertySheet.SetTheFreezesF8Rom(Config.Cfg.IsUsingFreezesF8Rom);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void Snapshot_LoadState_v2(DWORD dwVersion)
|
||||
{
|
||||
@ -467,6 +494,7 @@ static void Snapshot_LoadState_v2(DWORD dwVersion)
|
||||
CConfigNeedingRestart ConfigOld;
|
||||
ConfigOld.m_Slot[1] = CT_GenericPrinter; // fixme
|
||||
ConfigOld.m_Slot[2] = CT_SSC; // fixme
|
||||
//ConfigOld.m_Slot[3] = CT_Uthernet; // todo
|
||||
ConfigOld.m_Slot[6] = CT_Disk2; // fixme
|
||||
ConfigOld.m_Slot[7] = ConfigOld.m_bEnableHDD ? CT_GenericHDD : CT_Empty; // fixme
|
||||
//ConfigOld.m_SlotAux = ?; // fixme
|
||||
@ -515,11 +543,9 @@ static void Snapshot_LoadState_v2(DWORD dwVersion)
|
||||
case UT_Card:
|
||||
LoadUnitCard(UnitHdr.hdr.v2.Length, UnitHdr.hdr.v2.Version);
|
||||
break;
|
||||
#if 0
|
||||
case UT_Config:
|
||||
LoadUnitConfig(UnitHdr.hdr.v2.Length, UnitHdr.hdr.v2.Version);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
// Log then skip unsupported unit type
|
||||
break;
|
||||
@ -577,22 +603,84 @@ void Snapshot_LoadState()
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// todo:
|
||||
// . "Uthernet Active"
|
||||
|
||||
static void SaveUnitConfig()
|
||||
{
|
||||
SS_APPLEWIN_CONFIG Config;
|
||||
memset(&Config, 0, sizeof(Config));
|
||||
|
||||
Config.UnitHdr.hdr.v2.Length = sizeof(Config);
|
||||
Config.UnitHdr.hdr.v2.Type = UT_Config;
|
||||
Config.UnitHdr.hdr.v2.Version = UNIT_CONFIG_VER;
|
||||
|
||||
//
|
||||
|
||||
memcpy(Config.Cfg.AppleWinVersion, GetAppleWinVersion(), sizeof(Config.Cfg.AppleWinVersion));
|
||||
Config.Cfg.VideoMode = g_eVideoType;
|
||||
Config.Cfg.IsHalfScanLines = g_uHalfScanLines;
|
||||
Config.Cfg.IsConfirmReboot = g_bConfirmReboot;
|
||||
Config.Cfg.MonochromeColor = monochrome;
|
||||
Config.Cfg.WindowScale = GetViewportScale();
|
||||
Config.Cfg.CpuSpeed = g_dwSpeed;
|
||||
|
||||
Config.Cfg.JoystickType[0] = JoyGetJoyType(JN_JOYSTICK0);
|
||||
Config.Cfg.JoystickType[1] = JoyGetJoyType(JN_JOYSTICK1);
|
||||
Config.Cfg.IsAllowCursorsToBeRead = sg_PropertySheet.GetJoystickCursorControl();
|
||||
Config.Cfg.IsAutofire = (sg_PropertySheet.GetAutofire(1)<<1) | sg_PropertySheet.GetAutofire(0);
|
||||
Config.Cfg.IsKeyboardAutocentering = sg_PropertySheet.GetJoystickCenteringControl();
|
||||
Config.Cfg.IsSwapButton0and1 = 0; // TBD: not implemented yet
|
||||
Config.Cfg.IsScrollLockToggle = sg_PropertySheet.GetScrollLockToggle();
|
||||
Config.Cfg.IsMouseShowCrosshair = sg_PropertySheet.GetMouseShowCrosshair();
|
||||
Config.Cfg.IsMouseRestrictToWindow = sg_PropertySheet.GetMouseRestrictToWindow();
|
||||
|
||||
Config.Cfg.SoundType = soundtype;
|
||||
Config.Cfg.SpeakerVolume = SpkrGetVolume();
|
||||
Config.Cfg.MockingboardVolume = MB_GetVolume();
|
||||
|
||||
Config.Cfg.IsEnhancedDiskSpeed = enhancedisk;
|
||||
Config.Cfg.IsSaveStateOnExit = g_bSaveStateOnExit;
|
||||
|
||||
Config.Cfg.IsAppendToFile = g_bPrinterAppend;
|
||||
Config.Cfg.IsUsingFreezesF8Rom = sg_PropertySheet.GetTheFreezesF8Rom();
|
||||
|
||||
//
|
||||
|
||||
DWORD dwBytesWritten;
|
||||
BOOL bRes = WriteFile( m_hFile,
|
||||
&Config,
|
||||
Config.UnitHdr.hdr.v2.Length,
|
||||
&dwBytesWritten,
|
||||
NULL);
|
||||
|
||||
if(!bRes || (dwBytesWritten != Config.UnitHdr.hdr.v2.Length))
|
||||
{
|
||||
//dwError = GetLastError();
|
||||
throw std::string("Save error: Config");
|
||||
}
|
||||
}
|
||||
|
||||
// todo:
|
||||
// . Uthernet card
|
||||
|
||||
void Snapshot_SaveState()
|
||||
{
|
||||
try
|
||||
{
|
||||
m_hFile = CreateFile( g_strSaveStatePathname.c_str(),
|
||||
GENERIC_WRITE,
|
||||
0,
|
||||
NULL,
|
||||
CREATE_ALWAYS,
|
||||
FILE_ATTRIBUTE_NORMAL,
|
||||
NULL);
|
||||
GENERIC_WRITE,
|
||||
0,
|
||||
NULL,
|
||||
CREATE_ALWAYS,
|
||||
FILE_ATTRIBUTE_NORMAL,
|
||||
NULL);
|
||||
|
||||
DWORD dwError = GetLastError();
|
||||
_ASSERT((dwError == 0) || (dwError == ERROR_ALREADY_EXISTS));
|
||||
|
||||
// todo: handle ERROR_ALREADY_EXISTS - ask if user wants to replace existing file
|
||||
// - at this point any old file will have been truncated to zero
|
||||
|
||||
if(m_hFile == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
@ -621,7 +709,7 @@ void Snapshot_SaveState()
|
||||
Apple2Unit.Apple2Type = g_Apple2Type;
|
||||
|
||||
CpuGetSnapshot(Apple2Unit.CPU6502);
|
||||
JoyGetSnapshot(Apple2Unit.Joystick.JoyCntrResetCycle);
|
||||
JoyGetSnapshot(Apple2Unit.Joystick.JoyCntrResetCycle, &Apple2Unit.Joystick.Joystick0Trim[0], &Apple2Unit.Joystick.Joystick1Trim[0]);
|
||||
KeybGetSnapshot(Apple2Unit.Keyboard.LastKey);
|
||||
SpkrGetSnapshot(Apple2Unit.Speaker.SpkrLastCycle);
|
||||
VideoGetSnapshot(Apple2Unit.Video);
|
||||
@ -668,6 +756,10 @@ void Snapshot_SaveState()
|
||||
DiskGetSnapshot(m_hFile);
|
||||
|
||||
HD_GetSnapshot(m_hFile);
|
||||
|
||||
//
|
||||
|
||||
SaveUnitConfig();
|
||||
}
|
||||
catch(std::string szMessage)
|
||||
{
|
||||
|
@ -73,6 +73,7 @@ enum SS_CARDTYPE
|
||||
CT_80Col, // 80 column card (no memory)
|
||||
CT_Extended80Col, // Extended 80-col card (64K)
|
||||
CT_RamWorksIII, // RamWorksIII (up to 8MB)
|
||||
CT_Uthernet,
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -27,6 +27,8 @@ struct SS_CPU6502_v2
|
||||
struct SS_IO_Joystick_v2
|
||||
{
|
||||
unsigned __int64 JoyCntrResetCycle;
|
||||
short Joystick0Trim[2]; // [x,y]
|
||||
short Joystick1Trim[2]; // [x,y]
|
||||
};
|
||||
|
||||
struct SS_IO_Keyboard_v2
|
||||
@ -90,27 +92,31 @@ struct APPLEWIN_SNAPSHOT_v2
|
||||
|
||||
struct SS_AW_CFG
|
||||
{
|
||||
UINT32 AppleWinVersion;
|
||||
UINT16 AppleWinVersion[4]; // major,minor,fix,fix_minor
|
||||
UINT32 VideoMode;
|
||||
UINT32 IsHalfScanLines;
|
||||
UINT32 IsConfirmReboot;
|
||||
UINT32 MonochromeColor;
|
||||
float ClockFreqMHz;
|
||||
UINT32 WindowScale;
|
||||
UINT32 CpuSpeed;
|
||||
//
|
||||
UINT32 JoystickType[2];
|
||||
UINT32 JoystickTrim[2];
|
||||
UINT32 IsAllowCursorsToBeRead;
|
||||
UINT32 IsAutofire;
|
||||
UINT32 IsKeyboardAutocentering;
|
||||
UINT32 IsSwapButton0and1;
|
||||
UINT32 IsScrollLockToggle;
|
||||
UINT32 IsMouseShowCrosshair;
|
||||
UINT32 IsMouseRestrictToWindow;
|
||||
//
|
||||
UINT32 SoundType;
|
||||
UINT32 SpeakerVolume;
|
||||
UINT32 MockingboardVolume;
|
||||
//
|
||||
UINT32 IsEnhancedDiskSpeed;
|
||||
UINT32 IsSaveStateOnExit;
|
||||
//
|
||||
UINT32 IsEncodingConversionForClones;
|
||||
UINT32 IsFilterUnprintableChars;
|
||||
UINT32 IsAppendToFile;
|
||||
UINT32 TerminatePrintingAfterIdleSecs;
|
||||
UINT32 IsUsingFreezesF8Rom;
|
||||
};
|
||||
|
||||
|
@ -1340,6 +1340,8 @@ struct SSC_Unit
|
||||
bool vbRxIrqPending;
|
||||
|
||||
bool bWrittenTx;
|
||||
|
||||
char SerialPortName[8];
|
||||
};
|
||||
|
||||
struct SS_CARD_SSC
|
||||
@ -1376,6 +1378,8 @@ void CSuperSerialCard::GetSnapshot(const HANDLE hFile)
|
||||
Unit.vbRxIrqPending = m_vbRxIrqPending;
|
||||
Unit.bWrittenTx = m_bWrittenTx;
|
||||
|
||||
strncpy_s(Unit.SerialPortName, sizeof(Unit.SerialPortName), GetSerialPortName(), _TRUNCATE);
|
||||
|
||||
//
|
||||
|
||||
DWORD dwBytesWritten;
|
||||
@ -1428,4 +1432,6 @@ void CSuperSerialCard::SetSnapshot(const HANDLE hFile)
|
||||
m_vbTxIrqPending = Unit.vbTxIrqPending;
|
||||
m_vbRxIrqPending = Unit.vbRxIrqPending;
|
||||
m_bWrittenTx = Unit.bWrittenTx;
|
||||
|
||||
SetSerialPortName(Unit.SerialPortName);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user