MCPcopy Create free account
hub / github.com/AppleWin/AppleWin / LoadSnapshot

Method LoadSnapshot

source/Harddisk.cpp:1419–1481  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1417}
1418
1419bool HarddiskInterfaceCard::LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT version)
1420{
1421 if (version < 1 || version > kUNIT_VERSION)
1422 ThrowErrorInvalidVersion(version);
1423
1424 if (version <= 2 && (regs.pc >> 8) == (0xC0|m_slot))
1425 throw std::runtime_error("HDC card: 6502 is running old HDD firmware");
1426
1427 m_unitNum = yamlLoadHelper.LoadUint(SS_YAML_KEY_CURRENT_UNIT);
1428 if (version < 5)
1429 {
1430 m_isFirmwareV1or2 = true;
1431 FixupUnitNum();
1432 }
1433
1434 m_command = yamlLoadHelper.LoadUint(SS_YAML_KEY_COMMAND);
1435
1436 if (version >= 3)
1437 m_notBusyCycle = yamlLoadHelper.LoadUint64(SS_YAML_KEY_NOT_BUSY_CYCLE);
1438
1439 m_saveStateFirmwareV1 = m_saveStateFirmwareV2 = false;
1440 if (version < 4)
1441 m_saveStateFirmwareV1 = true;
1442 else if (version == 4)
1443 m_saveStateFirmwareV2 = true;
1444
1445 if (version >= 5)
1446 {
1447 m_statusCode = yamlLoadHelper.LoadUint(SS_YAML_KEY_SP_STATUS_CODE);
1448 m_fifoIdx = yamlLoadHelper.LoadUint(SS_YAML_KEY_FIFO_INDEX);
1449
1450 //
1451
1452 if (!yamlLoadHelper.GetSubMap(SS_YAML_KEY_FIRMWARE))
1453 throw std::runtime_error(std::string("HDC") + ": Missing: " + SS_YAML_KEY_FIRMWARE);
1454 yamlLoadHelper.LoadMemory(m_saveStateFirmware, APPLE_SLOT_SIZE);
1455 yamlLoadHelper.PopMap();
1456 m_saveStateFirmwareValid = true;
1457
1458 // NB. A command line option can be used to ignore the HDC's firmware:
1459 // . Used by AppleWin-Test (regression suite) so that an older save-state file can be used to test newer HDC firmware (eg. GH#1207).
1460 if (Snapshot_GetIgnoreHdcFirmware())
1461 m_saveStateFirmwareValid = false;
1462 }
1463
1464 // Unplug all HDDs first in case eg. HDD-2 is to be plugged in as HDD-1
1465 for (UINT i = HARDDISK_1; i < NUM_HARDDISKS; i++)
1466 {
1467 Unplug(i);
1468 m_hardDiskDrive[i].clear();
1469 }
1470
1471 bool userSelectedImageFolder = false;
1472 for (UINT i = HARDDISK_1; i < NUM_HARDDISKS; i++)
1473 userSelectedImageFolder |= LoadSnapshotHDDUnit(yamlLoadHelper, i, version);
1474
1475 if (!userSelectedImageFolder)
1476 RegSaveString(REG_PREFS, REGVALUE_PREF_HDV_START_DIR, 1, Snapshot_GetPath());

Callers

nothing calls this directly

Calls 9

RegSaveStringFunction · 0.85
LoadUintMethod · 0.80
LoadUint64Method · 0.80
LoadMemoryMethod · 0.80
PopMapMethod · 0.80
FrameRefreshStatusMethod · 0.80
GetSubMapMethod · 0.45
clearMethod · 0.45

Tested by

no test coverage detected