| 1417 | } |
| 1418 | |
| 1419 | bool 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()); |
nothing calls this directly
no test coverage detected