mirror of
https://github.com/TomHarte/CLK.git
synced 2024-11-26 08:49:37 +00:00
Makes a genuine attempt at five and three decoding.
This commit is contained in:
parent
2320b5c1fe
commit
5fd2be3c8e
@ -67,7 +67,7 @@
|
|||||||
</Testables>
|
</Testables>
|
||||||
</TestAction>
|
</TestAction>
|
||||||
<LaunchAction
|
<LaunchAction
|
||||||
buildConfiguration = "Release"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
enableASanStackUseAfterReturn = "YES"
|
enableASanStackUseAfterReturn = "YES"
|
||||||
|
@ -188,7 +188,20 @@ std::map<std::size_t, Sector> Storage::Encodings::AppleGCR::sectors_from_segment
|
|||||||
sector->data.resize(sector->data.size() - 1);
|
sector->data.resize(sector->data.size() - 1);
|
||||||
|
|
||||||
if(is_five_and_three) {
|
if(is_five_and_three) {
|
||||||
// TODO
|
std::vector<uint8_t> buffer(256);
|
||||||
|
for(size_t c = 0; c < 0x33; ++c) {
|
||||||
|
const uint8_t *const base = §or->data[0x032 - c];
|
||||||
|
|
||||||
|
buffer[(c * 5) + 0] = uint8_t((base[0x000] << 3) | (base[0x100] >> 2));
|
||||||
|
buffer[(c * 5) + 1] = uint8_t((base[0x033] << 3) | (base[0x133] >> 2));
|
||||||
|
buffer[(c * 5) + 2] = uint8_t((base[0x066] << 3) | (base[0x166] >> 2));
|
||||||
|
buffer[(c * 5) + 3] = uint8_t((base[0x099] << 3) | ((base[0x100] & 2) << 1) | (base[0x133] & 2) | ((base[0x166] & 2) >> 1));
|
||||||
|
buffer[(c * 5) + 4] = uint8_t((base[0x0cc] << 3) | ((base[0x100] & 1) << 2) | ((base[0x133] & 1) << 1) | (base[0x166] & 1));
|
||||||
|
}
|
||||||
|
buffer[255] = uint8_t((sector->data[0x0ff] << 3) | (sector->data[0x199] >> 2));
|
||||||
|
|
||||||
|
sector->data = std::move(buffer);
|
||||||
|
sector->encoding = Sector::Encoding::FiveAndThree;
|
||||||
} else {
|
} else {
|
||||||
// Undo the 6 and 2 mapping.
|
// Undo the 6 and 2 mapping.
|
||||||
const uint8_t bit_reverse[] = {0, 2, 1, 3};
|
const uint8_t bit_reverse[] = {0, 2, 1, 3};
|
||||||
@ -212,9 +225,9 @@ std::map<std::size_t, Sector> Storage::Encodings::AppleGCR::sectors_from_segment
|
|||||||
// Throw away the collection of two-bit chunks from the start of the sector.
|
// Throw away the collection of two-bit chunks from the start of the sector.
|
||||||
sector->data.erase(sector->data.begin(), sector->data.end() - 256);
|
sector->data.erase(sector->data.begin(), sector->data.end() - 256);
|
||||||
|
|
||||||
// Add this sector to the map.
|
|
||||||
sector->encoding = Sector::Encoding::SixAndTwo;
|
sector->encoding = Sector::Encoding::SixAndTwo;
|
||||||
}
|
}
|
||||||
|
// Add this sector to the map.
|
||||||
result.insert(std::make_pair(sector_location, std::move(*sector)));
|
result.insert(std::make_pair(sector_location, std::move(*sector)));
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user