| 2374 | } |
| 2375 | |
| 2376 | bool Disk2InterfaceCard::LoadSnapshotFloppy(YamlLoadHelper& yamlLoadHelper, UINT unit, UINT version, std::vector<BYTE>& track) |
| 2377 | { |
| 2378 | const std::string simpleFilename = yamlLoadHelper.LoadString(SS_YAML_KEY_FILENAME); |
| 2379 | const std::string absolutePath = version >= 9 ? yamlLoadHelper.LoadString(SS_YAML_KEY_ABSOLUTE_PATH) : ""; |
| 2380 | |
| 2381 | std::string filename = simpleFilename; |
| 2382 | bool bImageError = filename.empty(); |
| 2383 | |
| 2384 | if (!bImageError) |
| 2385 | { |
| 2386 | DWORD dwAttributes = GetFileAttributes(filename.c_str()); |
| 2387 | if (dwAttributes == INVALID_FILE_ATTRIBUTES && !absolutePath.empty()) |
| 2388 | { |
| 2389 | // try the absolute path if present |
| 2390 | filename = absolutePath; |
| 2391 | dwAttributes = GetFileAttributes(filename.c_str()); |
| 2392 | } |
| 2393 | |
| 2394 | if (dwAttributes == INVALID_FILE_ATTRIBUTES) |
| 2395 | { |
| 2396 | // ignore absolute name when opening the file dialog |
| 2397 | filename = simpleFilename; |
| 2398 | // Get user to browse for file |
| 2399 | UserSelectNewDiskImage(unit, filename.c_str()); |
| 2400 | |
| 2401 | dwAttributes = GetFileAttributes(filename.c_str()); |
| 2402 | } |
| 2403 | |
| 2404 | bImageError = (dwAttributes == INVALID_FILE_ATTRIBUTES); |
| 2405 | if (!bImageError) |
| 2406 | { |
| 2407 | if (InsertDisk(unit, filename, dwAttributes & FILE_ATTRIBUTE_READONLY, IMAGE_DONT_CREATE) != eIMAGE_ERROR_NONE) |
| 2408 | bImageError = true; |
| 2409 | |
| 2410 | // InsertDisk() zeros m_floppyDrive[unit], then sets up: |
| 2411 | // . m_imagename |
| 2412 | // . m_fullname |
| 2413 | // . m_bWriteProtected |
| 2414 | } |
| 2415 | } |
| 2416 | |
| 2417 | yamlLoadHelper.LoadBool(SS_YAML_KEY_WRITE_PROTECTED); // Consume |
| 2418 | m_floppyDrive[unit].m_disk.m_byte = yamlLoadHelper.LoadUint(SS_YAML_KEY_BYTE); |
| 2419 | m_floppyDrive[unit].m_disk.m_nibbles = yamlLoadHelper.LoadUint(SS_YAML_KEY_NIBBLES); |
| 2420 | m_floppyDrive[unit].m_disk.m_trackimagedata = yamlLoadHelper.LoadUint(SS_YAML_KEY_TRACK_IMAGE_DATA) ? true : false; |
| 2421 | m_floppyDrive[unit].m_disk.m_trackimagedirty = yamlLoadHelper.LoadUint(SS_YAML_KEY_TRACK_IMAGE_DIRTY) ? true : false; |
| 2422 | |
| 2423 | if (version >= 4) |
| 2424 | { |
| 2425 | m_floppyDrive[unit].m_disk.m_bitOffset = yamlLoadHelper.LoadUint(SS_YAML_KEY_BIT_OFFSET); |
| 2426 | m_floppyDrive[unit].m_disk.m_bitCount = yamlLoadHelper.LoadUint(SS_YAML_KEY_BIT_COUNT); |
| 2427 | m_floppyDrive[unit].m_disk.m_extraCycles = yamlLoadHelper.LoadDouble(SS_YAML_KEY_EXTRA_CYCLES); |
| 2428 | |
| 2429 | if (m_floppyDrive[unit].m_disk.m_bitCount && (m_floppyDrive[unit].m_disk.m_bitOffset >= m_floppyDrive[unit].m_disk.m_bitCount)) |
| 2430 | throw std::runtime_error("Disk image: bitOffset >= bitCount"); |
| 2431 | |
| 2432 | if (ImageIsWOZ(m_floppyDrive[unit].m_disk.m_imagehandle)) |
| 2433 | UpdateBitStreamOffsets(m_floppyDrive[unit].m_disk); // overwrites m_byte, inits m_bitMask |
nothing calls this directly
no test coverage detected