mirror of
https://github.com/TomHarte/CLK.git
synced 2025-01-27 22:30:49 +00:00
Ensured ROMs survive in the new memory model.
This commit is contained in:
parent
38aec44d85
commit
ca2dc6b6c4
@ -63,7 +63,7 @@ void Machine::set_memory_size(MemorySize size)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// install the ROMs and VIC-visible memory
|
// install the system ROMs and VIC-visible memory
|
||||||
write_to_map(_processorReadMemoryMap, _userBASICMemory, 0x0000, sizeof(_userBASICMemory));
|
write_to_map(_processorReadMemoryMap, _userBASICMemory, 0x0000, sizeof(_userBASICMemory));
|
||||||
write_to_map(_processorReadMemoryMap, _screenMemory, 0x1000, sizeof(_screenMemory));
|
write_to_map(_processorReadMemoryMap, _screenMemory, 0x1000, sizeof(_screenMemory));
|
||||||
write_to_map(_processorReadMemoryMap, _colorMemory, 0x9400, sizeof(_colorMemory));
|
write_to_map(_processorReadMemoryMap, _colorMemory, 0x9400, sizeof(_colorMemory));
|
||||||
@ -74,6 +74,12 @@ void Machine::set_memory_size(MemorySize size)
|
|||||||
write_to_map(_processorWriteMemoryMap, _userBASICMemory, 0x0000, sizeof(_userBASICMemory));
|
write_to_map(_processorWriteMemoryMap, _userBASICMemory, 0x0000, sizeof(_userBASICMemory));
|
||||||
write_to_map(_processorWriteMemoryMap, _screenMemory, 0x1000, sizeof(_screenMemory));
|
write_to_map(_processorWriteMemoryMap, _screenMemory, 0x1000, sizeof(_screenMemory));
|
||||||
write_to_map(_processorWriteMemoryMap, _colorMemory, 0x9400, sizeof(_colorMemory));
|
write_to_map(_processorWriteMemoryMap, _colorMemory, 0x9400, sizeof(_colorMemory));
|
||||||
|
|
||||||
|
// install the inserted ROM if there is one
|
||||||
|
if(_rom)
|
||||||
|
{
|
||||||
|
write_to_map(_processorReadMemoryMap, _rom, _rom_address, _rom_length);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Machine::write_to_map(uint8_t **map, uint8_t *area, uint16_t address, uint16_t length)
|
void Machine::write_to_map(uint8_t **map, uint8_t *area, uint16_t address, uint16_t length)
|
||||||
@ -225,12 +231,9 @@ void Machine::set_prg(const char *file_name, size_t length, const uint8_t *data)
|
|||||||
{
|
{
|
||||||
_rom_address = (uint16_t)(data[0] | (data[1] << 8));
|
_rom_address = (uint16_t)(data[0] | (data[1] << 8));
|
||||||
_rom_length = (uint16_t)(length - 2);
|
_rom_length = (uint16_t)(length - 2);
|
||||||
if(_rom_address >= 0x1000 && _rom_address+_rom_length < 0x2000 && _should_automatically_load_media)
|
|
||||||
{
|
|
||||||
set_typer_for_string("RUN\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(_rom_address == 0xa000)
|
// install in the ROM area if this looks like a ROM; otherwise put on tape and throw into that mechanism
|
||||||
|
if(_rom_address == 0xa000 && _rom_length == 0x1000)
|
||||||
{
|
{
|
||||||
_rom = new uint8_t[length - 2];
|
_rom = new uint8_t[length - 2];
|
||||||
memcpy(_rom, &data[2], length - 2);
|
memcpy(_rom, &data[2], length - 2);
|
||||||
@ -238,7 +241,6 @@ void Machine::set_prg(const char *file_name, size_t length, const uint8_t *data)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// if it's not a ROM then insert it as a tape
|
|
||||||
set_tape(std::shared_ptr<Storage::Tape>(new Storage::TapePRG(file_name)));
|
set_tape(std::shared_ptr<Storage::Tape>(new Storage::TapePRG(file_name)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user