image_init_result nascom2_state::load_cart(device_image_interface &image, generic_slot_device *slot, int slot_id) { // loading directly from file if (image.software_entry() == nullptr) { if (slot->length() > 0x1000) { image.seterror(IMAGE_ERROR_UNSPECIFIED, "Unsupported file size"); return image_init_result::FAIL; } slot->rom_alloc(slot->length(), GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE); slot->fread(slot->get_rom_base(), slot->length()); // we just assume that socket1 should be loaded to 0xc000 and socket2 to 0xd000 switch (slot_id) { case 1: m_maincpu->space(AS_PROGRAM).install_rom(0xc000, 0xc000 + slot->length() - 1, slot->get_rom_base()); break; case 2: m_maincpu->space(AS_PROGRAM).install_rom(0xd000, 0xd000 + slot->length() - 1, slot->get_rom_base()); break; } } // loading from software list. this supports multiple regions to load to else { UINT8 *region_b000 = image.get_software_region("b000"); UINT8 *region_c000 = image.get_software_region("c000"); UINT8 *region_d000 = image.get_software_region("d000"); if (region_b000 != nullptr) { UINT32 size = image.get_software_region_length("b000"); m_maincpu->space(AS_PROGRAM).install_rom(0xb000, 0xb000 + size - 1, region_b000); } if (region_c000 != nullptr) { UINT32 size = image.get_software_region_length("c000"); m_maincpu->space(AS_PROGRAM).install_rom(0xc000, 0xc000 + size - 1, region_c000); } if (region_d000 != nullptr) { UINT32 size = image.get_software_region_length("d000"); m_maincpu->space(AS_PROGRAM).install_rom(0xd000, 0xd000 + size - 1, region_d000); } } return image_init_result::PASS; }
static void plus4_software_list_cartridge_load(device_image_interface &image) { UINT8 *mem = image.device().machine().root_device().memregion("maincpu")->base(); size_t size = image.get_software_region_length("c1l"); if (size) memcpy(mem + 0x20000, image.get_software_region("c1l"), size); size = image.get_software_region_length("c1h"); if (size) memcpy(mem + 0x24000, image.get_software_region("c1h"), size); size = image.get_software_region_length("c2l"); if (size) memcpy(mem + 0x28000, image.get_software_region("c2l"), size); size = image.get_software_region_length("c2h"); if (size) memcpy(mem + 0x2c000, image.get_software_region("c2h"), size); }
static void load_standard_c64_cartridge(device_image_interface &image) { legacy_c64_state *state = image.device().machine().driver_data<legacy_c64_state>(); UINT32 size; // is there anything to load at 0x8000? size = image.get_software_region_length("roml"); if (size) { memcpy(state->m_roml, image.get_software_region("roml"), MIN(0x2000, size)); if (size == 0x4000) { // continue loading to ROMH region memcpy(state->m_romh, image.get_software_region("roml") + 0x2000, 0x2000); } } // is there anything to load at 0xa000? size = image.get_software_region_length("romh"); if (size) memcpy(state->m_romh, image.get_software_region("romh"), size); }