1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-07-09 06:29:33 +00:00

Simplified paging logic.

This commit is contained in:
Thomas Harte 2017-11-29 20:49:02 -05:00
parent 7dfbe4bb93
commit f0f149c018

View File

@ -73,25 +73,10 @@ class ConcreteMachine:
} }
void page_memory(uint8_t value) { void page_memory(uint8_t value) {
printf("Page %02x\n", value); for(size_t c = 0; c < 4; ++c) {
for(int c = 0; c < 4; ++c) { read_pointers_[c] = slot_read_pointers_[value & 3][c];
read_pointers_[c] = unpopulated_; write_pointers_[c] = slot_write_pointers_[value & 3][c];
write_pointers_[c] = scratch_; value >>= 2;
}
switch(value&3) {
case 0: read_pointers_[0] = main_.data(); break;
case 2: read_pointers_[0] = write_pointers_[0] = &ram_[0]; break;
}
switch((value >> 2)&3) {
case 0: read_pointers_[1] = basic_.data(); break;
case 2: read_pointers_[1] = write_pointers_[1] = &ram_[16384]; break;
}
switch((value >> 4)&3) {
case 2: read_pointers_[2] = write_pointers_[2] = &ram_[32768]; break;
}
switch((value >> 6)&3) {
case 2: read_pointers_[3] = write_pointers_[3] = &ram_[49152]; break;
} }
} }
@ -196,13 +181,20 @@ class ConcreteMachine:
main_.resize(16384); main_.resize(16384);
for(size_t c = 0; c < 4; ++c) { for(size_t c = 0; c < 4; ++c) {
write_pointers_[c] = &ram_[c * 16384]; for(size_t slot = 0; slot < 3; ++slot) {
read_pointers_[c] = &ram_[c * 16384]; slot_read_pointers_[slot][c] = unpopulated_;
slot_write_pointers_[slot][c] = scratch_;
}
slot_read_pointers_[3][c] =
slot_write_pointers_[3][c] = &ram_[c * 16384];
}
slot_read_pointers_[0][0] = main_.data();
slot_read_pointers_[0][1] = basic_.data();
for(size_t c = 0; c < 4; ++c) {
read_pointers_[c] = slot_read_pointers_[0][c];
write_pointers_[c] = slot_write_pointers_[0][c];
} }
read_pointers_[0] = main_.data();
write_pointers_[0] = scratch_;
read_pointers_[1] = basic_.data();
write_pointers_[1] = scratch_;
return true; return true;
} }
@ -243,6 +235,10 @@ class ConcreteMachine:
uint8_t *read_pointers_[4]; uint8_t *read_pointers_[4];
uint8_t *write_pointers_[4]; uint8_t *write_pointers_[4];
uint8_t *slot_read_pointers_[4][4];
uint8_t *slot_write_pointers_[4][4];
uint8_t ram_[65536]; uint8_t ram_[65536];
uint8_t scratch_[16384]; uint8_t scratch_[16384];
uint8_t unpopulated_[16384]; uint8_t unpopulated_[16384];