mirror of
https://github.com/dingusdev/dingusppc.git
synced 2024-12-23 06:29:38 +00:00
Accept 1MB New World Boot ROMs.
This commit is contained in:
parent
9fcf5ba51a
commit
299f0d3a9f
@ -227,16 +227,18 @@ bool MemCtrlBase::add_mem_mirror(uint32_t start_addr, uint32_t dest_addr) {
|
||||
}
|
||||
|
||||
|
||||
bool MemCtrlBase::set_data(uint32_t reg_addr, const uint8_t* data, uint32_t size) {
|
||||
bool MemCtrlBase::set_data(uint32_t load_addr, const uint8_t* data, uint32_t size) {
|
||||
AddressMapEntry* ref_entry;
|
||||
uint32_t cpy_size;
|
||||
|
||||
ref_entry = find_range(reg_addr);
|
||||
ref_entry = find_range(load_addr);
|
||||
if (!ref_entry)
|
||||
return false;
|
||||
|
||||
uint32_t load_offset = load_addr - ref_entry->start;
|
||||
|
||||
cpy_size = std::min(ref_entry->end - ref_entry->start + 1, size);
|
||||
memcpy(ref_entry->mem_ptr, data, cpy_size);
|
||||
memcpy(ref_entry->mem_ptr + load_offset, data, cpy_size);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -328,7 +328,8 @@ bail_out:
|
||||
int MachineFactory::load_boot_rom(string& rom_filepath) {
|
||||
ifstream rom_file;
|
||||
size_t file_size;
|
||||
int result;
|
||||
int result = 0;
|
||||
uint32_t rom_load_addr;
|
||||
AddressMapEntry *rom_reg;
|
||||
|
||||
rom_file.open(rom_filepath, ios::in | ios::binary);
|
||||
@ -342,10 +343,16 @@ int MachineFactory::load_boot_rom(string& rom_filepath) {
|
||||
file_size = rom_file.tellg();
|
||||
rom_file.seekg(0, rom_file.beg);
|
||||
|
||||
if (file_size != 0x400000UL) {
|
||||
LOG_F(ERROR, "Unxpected ROM File size. Expected size is 4 megabytes.");
|
||||
result = -1;
|
||||
if (file_size == 0x400000UL) { // Old World ROMs
|
||||
rom_load_addr = 0xFFC00000UL;
|
||||
} else if (file_size == 0x100000UL) { // New World ROMs
|
||||
rom_load_addr = 0xFFF00000UL;
|
||||
} else {
|
||||
LOG_F(ERROR, "Unxpected ROM File size: %zu bytes.", file_size);
|
||||
result = -1;
|
||||
}
|
||||
|
||||
if (!result) {
|
||||
unsigned char* sysrom_mem = new unsigned char[file_size];
|
||||
|
||||
rom_file.seekg(0, ios::beg);
|
||||
@ -355,14 +362,13 @@ int MachineFactory::load_boot_rom(string& rom_filepath) {
|
||||
gMachineObj->get_comp_by_type(HWCompType::MEM_CTRL));
|
||||
|
||||
if ((rom_reg = mem_ctrl->find_rom_region())) {
|
||||
mem_ctrl->set_data(rom_reg->start, sysrom_mem, (uint32_t)file_size);
|
||||
mem_ctrl->set_data(rom_load_addr, sysrom_mem, (uint32_t)file_size);
|
||||
} else {
|
||||
ABORT_F("Could not locate physical ROM region!");
|
||||
LOG_F(ERROR, "Could not locate physical ROM region!");
|
||||
result = -1;
|
||||
}
|
||||
|
||||
delete[] sysrom_mem;
|
||||
|
||||
result = 0;
|
||||
}
|
||||
|
||||
rom_file.close();
|
||||
|
Loading…
Reference in New Issue
Block a user