mirror of
https://github.com/AppleWin/AppleWin.git
synced 2025-08-12 13:25:24 +00:00
Bump version: 1.30.19
Fix for loading old save-states with HDC+HD tests
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
#define APPLEWIN_VERSION 1,30,18,0
|
||||
#define APPLEWIN_VERSION 1,30,19,0
|
||||
|
||||
#define xstr(a) str(a)
|
||||
#define str(a) #a
|
||||
|
@@ -153,7 +153,7 @@ Overview
|
||||
|
||||
|
||||
HarddiskInterfaceCard::HarddiskInterfaceCard(UINT slot) :
|
||||
Card(CT_GenericHDD, slot), m_userNumBlocks(0), m_useHdcFirmwareV1(false), m_useHdcFirmwareV2(false), m_useHdcFirmwareMode(HdcDefault)
|
||||
Card(CT_GenericHDD, slot), m_userNumBlocks(0), m_isFirmwareV1or2(false), m_useHdcFirmwareV1(false), m_useHdcFirmwareV2(false), m_useHdcFirmwareMode(HdcDefault)
|
||||
{
|
||||
if (m_slot != SLOT5 && m_slot != SLOT7) // fixme
|
||||
ThrowErrorInvalidSlot();
|
||||
@@ -180,6 +180,7 @@ HarddiskInterfaceCard::HarddiskInterfaceCard(UINT slot) :
|
||||
m_saveStateFirmwareV1 = false;
|
||||
m_saveStateFirmwareV2 = false;
|
||||
m_saveStateFirmwareValid = false;
|
||||
memset(m_saveStateFirmware, 0, sizeof(m_saveStateFirmware));
|
||||
}
|
||||
|
||||
HarddiskInterfaceCard::~HarddiskInterfaceCard(void)
|
||||
@@ -219,6 +220,8 @@ void HarddiskInterfaceCard::InitializeIO(LPBYTE pCxRomPeripheral)
|
||||
pData = GetFrame().GetResource(id, "FIRMWARE", HARDDISK_FW_SIZE);
|
||||
if (pData == NULL)
|
||||
return;
|
||||
if (id == IDR_HDDRVR_FW || id == IDR_HDDRVR_V2_FW)
|
||||
m_isFirmwareV1or2 = true;
|
||||
allowFirmwareMods = true;
|
||||
}
|
||||
else
|
||||
@@ -885,6 +888,7 @@ BYTE __stdcall HarddiskInterfaceCard::IOWrite(WORD pc, WORD addr, BYTE bWrite, B
|
||||
// b6..4 = slot#
|
||||
// b3..0 = ?
|
||||
pCard->m_unitNum = d;
|
||||
pCard->FixupUnitNum();
|
||||
break;
|
||||
case 0x4:
|
||||
pHDD->m_memblock = (pHDD->m_memblock & 0xFF00) | d;
|
||||
@@ -922,6 +926,16 @@ BYTE __stdcall HarddiskInterfaceCard::IOWrite(WORD pc, WORD addr, BYTE bWrite, B
|
||||
|
||||
//===========================================================================
|
||||
|
||||
void HarddiskInterfaceCard::FixupUnitNum(void)
|
||||
{
|
||||
if (!m_isFirmwareV1or2)
|
||||
return;
|
||||
|
||||
// Older firmwares can write unitNum with 0x00
|
||||
if ((m_unitNum >> 4) != m_slot)
|
||||
m_unitNum = (m_unitNum & 0x8F) | (m_slot << 4);
|
||||
}
|
||||
|
||||
BYTE HarddiskInterfaceCard::GetNumConnectedDevices(void)
|
||||
{
|
||||
// Scan backwards to find the index of the last attached HDD
|
||||
@@ -1284,6 +1298,12 @@ bool HarddiskInterfaceCard::LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT ve
|
||||
throw std::runtime_error("HDC card: 6502 is running old HDD firmware");
|
||||
|
||||
m_unitNum = yamlLoadHelper.LoadUint(SS_YAML_KEY_CURRENT_UNIT);
|
||||
if (version < 5)
|
||||
{
|
||||
m_isFirmwareV1or2 = true;
|
||||
FixupUnitNum();
|
||||
}
|
||||
|
||||
m_command = yamlLoadHelper.LoadUint(SS_YAML_KEY_COMMAND);
|
||||
|
||||
if (version >= 3)
|
||||
|
@@ -132,6 +132,7 @@ private:
|
||||
const std::string& DiskGetBaseName(const int iDrive);
|
||||
bool SelectImage(const int drive, LPCSTR pszFilename);
|
||||
void UpdateLightStatus(HardDiskDrive* pHDD);
|
||||
void FixupUnitNum(void);
|
||||
BYTE GetNumConnectedDevices(void);
|
||||
BYTE GetProDOSBlockDeviceUnit(void);
|
||||
HardDiskDrive* GetUnit(void);
|
||||
@@ -151,6 +152,7 @@ private:
|
||||
BYTE m_statusCode;
|
||||
UINT64 m_notBusyCycle;
|
||||
UINT m_userNumBlocks;
|
||||
bool m_isFirmwareV1or2;
|
||||
bool m_useHdcFirmwareV1;
|
||||
bool m_useHdcFirmwareV2;
|
||||
HdcMode m_useHdcFirmwareMode;
|
||||
|
Reference in New Issue
Block a user