mirror of
https://github.com/TomHarte/CLK.git
synced 2024-09-08 03:54:27 +00:00
Adds RAM deserialisation.
This commit is contained in:
parent
e6252fe0ed
commit
cc41ccc5f1
@ -25,7 +25,7 @@ std::vector<uint8_t> read_memory(Storage::FileHolder &file, size_t size, bool is
|
|||||||
std::vector<uint8_t> result(size);
|
std::vector<uint8_t> result(size);
|
||||||
size_t cursor = 0;
|
size_t cursor = 0;
|
||||||
|
|
||||||
uint8_t incoming[2] = { file.get8(), file.get8()};
|
uint8_t incoming[2] = { file.get8(), file.get8() };
|
||||||
while(true) {
|
while(true) {
|
||||||
if(incoming[0] == 0xed && incoming[1] == 0xed) {
|
if(incoming[0] == 0xed && incoming[1] == 0xed) {
|
||||||
const uint8_t count = file.get8();
|
const uint8_t count = file.get8();
|
||||||
@ -166,15 +166,31 @@ std::unique_ptr<Analyser::Static::Target> Z80::load(const std::string &file_name
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Grab RAM.
|
// Grab RAM.
|
||||||
state->ram.resize(128 * 1024);
|
switch(result->model) {
|
||||||
|
case Target::Model::SixteenK: state->ram.resize(16 * 1024); break;
|
||||||
|
case Target::Model::FortyEightK: state->ram.resize(48 * 1024); break;
|
||||||
|
default: state->ram.resize(128 * 1024); break;
|
||||||
|
}
|
||||||
|
|
||||||
while(true) {
|
while(true) {
|
||||||
const uint16_t block_size = file.get16le();
|
const uint16_t block_size = file.get16le();
|
||||||
const uint8_t page = file.get8();
|
const uint8_t page = file.get8();
|
||||||
const auto location = file.tell();
|
const auto location = file.tell();
|
||||||
if(file.eof()) break;
|
if(file.eof()) break;
|
||||||
|
|
||||||
|
const auto data = read_memory(file, 16384, block_size != 0xffff);
|
||||||
|
|
||||||
|
if(result->model == Target::Model::SixteenK || result->model == Target::Model::FortyEightK) {
|
||||||
switch(page) {
|
switch(page) {
|
||||||
default: break;
|
default: break;
|
||||||
|
case 4: memcpy(&state->ram[0x4000], data.data(), 16384); break;
|
||||||
|
case 5: memcpy(&state->ram[0x8000], data.data(), 16384); break;
|
||||||
|
case 8: memcpy(&state->ram[0x0000], data.data(), 16384); break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(page >= 3 && page <= 10) {
|
||||||
|
memcpy(&state->ram[(page - 3) * 0x4000], data.data(), 16384);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
file.seek(location + block_size, SEEK_SET);
|
file.seek(location + block_size, SEEK_SET);
|
||||||
|
Loading…
Reference in New Issue
Block a user