bool vic10_expansion_slot_device::call_load() { if (m_card) { size_t size; if (software_entry() == nullptr) { size = length(); if (!core_stricmp(filetype(), "80")) { fread(m_card->m_lorom, 0x2000); if (size == 0x4000) { fread(m_card->m_uprom, 0x2000); } } else if (!core_stricmp(filetype(), "e0")) { fread(m_card->m_uprom, size); } else if (!core_stricmp(filetype(), "crt")) { size_t roml_size = 0; size_t romh_size = 0; int exrom = 1; int game = 1; if (cbm_crt_read_header(m_file, &roml_size, &romh_size, &exrom, &game)) { UINT8 *roml = nullptr; UINT8 *romh = nullptr; m_card->m_lorom.allocate(roml_size); m_card->m_uprom.allocate(romh_size); if (roml_size) roml = m_card->m_lorom; if (romh_size) romh = m_card->m_lorom; cbm_crt_read_data(m_file, roml, romh); } } } else { load_software_region("lorom", m_card->m_lorom); load_software_region("exram", m_card->m_exram); load_software_region("uprom", m_card->m_uprom); } } return IMAGE_INIT_PASS; }
bool plus4_expansion_slot_device::call_load() { if (m_card) { if (software_entry() == NULL) { // TODO } else { load_software_region("c1l", m_card->m_c1l); load_software_region("c1h", m_card->m_c1h); load_software_region("c2l", m_card->m_c2l); load_software_region("c2h", m_card->m_c2h); } } return IMAGE_INIT_PASS; }
bool vic20_expansion_slot_device::call_load() { if (m_card) { if (software_entry() == NULL) { if (!core_stricmp(filetype(), "20")) fread(m_card->m_blk1, 0x2000); else if (!core_stricmp(filetype(), "40")) fread(m_card->m_blk2, 0x2000); else if (!core_stricmp(filetype(), "60")) fread(m_card->m_blk3, 0x2000); else if (!core_stricmp(filetype(), "70")) fread(m_card->m_blk3, 0x2000, 0x1000); else if (!core_stricmp(filetype(), "a0")) fread(m_card->m_blk5, 0x2000); else if (!core_stricmp(filetype(), "b0")) fread(m_card->m_blk5, 0x2000, 0x1000); else if (!core_stricmp(filetype(), "crt")) { // read the header UINT8 header[2]; fread(&header, 2); UINT16 address = (header[1] << 8) | header[0]; switch (address) { case 0x2000: fread(m_card->m_blk1, 0x2000); break; case 0x4000: fread(m_card->m_blk2, 0x2000); break; case 0x6000: fread(m_card->m_blk3, 0x2000); break; case 0x7000: fread(m_card->m_blk3, 0x2000, 0x1000); break; case 0xa000: fread(m_card->m_blk5, 0x2000); break; case 0xb000: fread(m_card->m_blk5, 0x2000, 0x1000); break; default: return IMAGE_INIT_FAIL; } } } else { load_software_region("blk1", m_card->m_blk1); load_software_region("blk2", m_card->m_blk2); load_software_region("blk3", m_card->m_blk3); load_software_region("blk5", m_card->m_blk5); } } return IMAGE_INIT_PASS; }
image_init_result vic20_expansion_slot_device::call_load() { if (m_card) { if (software_entry() == nullptr) { if (is_filetype("20")) fread(m_card->m_blk1, 0x2000); else if (is_filetype("40")) fread(m_card->m_blk2, 0x2000); else if (is_filetype("60")) fread(m_card->m_blk3, 0x2000); else if (is_filetype("70")) fread(m_card->m_blk3, 0x2000, 0x1000); else if (is_filetype("a0")) fread(m_card->m_blk5, 0x2000); else if (is_filetype("b0")) fread(m_card->m_blk5, 0x2000, 0x1000); else if (is_filetype("crt")) { // read the header uint8_t header[2]; fread(&header, 2); uint16_t address = (header[1] << 8) | header[0]; switch (address) { case 0x2000: fread(m_card->m_blk1, 0x2000); break; case 0x4000: fread(m_card->m_blk2, 0x2000); break; case 0x6000: fread(m_card->m_blk3, 0x2000); break; case 0x7000: fread(m_card->m_blk3, 0x2000, 0x1000); break; case 0xa000: fread(m_card->m_blk5, 0x2000); break; case 0xb000: fread(m_card->m_blk5, 0x2000, 0x1000); break; default: return image_init_result::FAIL; } } } else { load_software_region("blk1", m_card->m_blk1); load_software_region("blk2", m_card->m_blk2); load_software_region("blk3", m_card->m_blk3); load_software_region("blk5", m_card->m_blk5); } } return image_init_result::PASS; }
bool cbm2_expansion_slot_device::call_load() { size_t size = 0; if (m_card) { if (software_entry() == NULL) { size = length(); if (!core_stricmp(filetype(), "20")) { m_card->m_bank1.allocate(size); fread(m_card->m_bank1, size); } else if (!core_stricmp(filetype(), "40")) { m_card->m_bank2.allocate(size); fread(m_card->m_bank2, size); } else if (!core_stricmp(filetype(), "60")) { m_card->m_bank3.allocate(size); fread(m_card->m_bank3, size); } } else { load_software_region("bank1", m_card->m_bank1); load_software_region("bank2", m_card->m_bank2); load_software_region("bank3", m_card->m_bank3); } } return IMAGE_INIT_PASS; }
image_init_result cbm2_expansion_slot_device::call_load() { size_t size; if (m_card) { if (software_entry() == nullptr) { size = length(); if (is_filetype("20")) { m_card->m_bank1.allocate(size); fread(m_card->m_bank1, size); } else if (is_filetype("40")) { m_card->m_bank2.allocate(size); fread(m_card->m_bank2, size); } else if (is_filetype("60")) { m_card->m_bank3.allocate(size); fread(m_card->m_bank3, size); } } else { load_software_region("bank1", m_card->m_bank1); load_software_region("bank2", m_card->m_bank2); load_software_region("bank3", m_card->m_bank3); } } return image_init_result::PASS; }
bool ql_rom_cartridge_slot_t::call_load() { if (m_card) { size_t size = 0; if (software_entry() == NULL) { size = length(); m_card->m_rom.allocate(size); fread(m_card->m_rom, size); } else { load_software_region("rom", m_card->m_rom); } } return IMAGE_INIT_PASS; }
bool c64_expansion_slot_device::call_load() { if (m_card) { size_t size = 0; if (software_entry() == NULL) { size = length(); if (!mame_stricmp(filetype(), "80")) { fread(m_card->m_roml, size); m_card->m_exrom = (0); if (size == 0x4000) { m_card->m_game = 0; } } else if (!mame_stricmp(filetype(), "a0")) { fread(m_card->m_romh, 0x2000); m_card->m_exrom = 0; m_card->m_game = 0; } else if (!mame_stricmp(filetype(), "e0")) { fread(m_card->m_romh, 0x2000); m_card->m_game = 0; } else if (!mame_stricmp(filetype(), "crt")) { size_t roml_size = 0; size_t romh_size = 0; int exrom = 1; int game = 1; if (cbm_crt_read_header(m_file, &roml_size, &romh_size, &exrom, &game)) { UINT8 *roml = NULL; UINT8 *romh = NULL; m_card->m_roml.allocate(roml_size); m_card->m_romh.allocate(romh_size); if (roml_size) roml = m_card->m_roml; if (romh_size) romh = m_card->m_roml; cbm_crt_read_data(m_file, roml, romh); } m_card->m_exrom = exrom; m_card->m_game = game; } } else { size = get_software_region_length("uprom"); if (size) { // Ultimax (VIC-10) cartridge load_software_region("lorom", m_card->m_roml); load_software_region("uprom", m_card->m_romh); m_card->m_exrom = 1; m_card->m_game = 0; } else { // Commodore 64/128 cartridge load_software_region("roml", m_card->m_roml); load_software_region("romh", m_card->m_romh); load_software_region("nvram", m_card->m_nvram); if (get_feature("exrom") != NULL) m_card->m_exrom = atol(get_feature("exrom")); if (get_feature("game") != NULL) m_card->m_game = atol(get_feature("game")); } } } return IMAGE_INIT_PASS; }
image_init_result c64_expansion_slot_device::call_load() { if (m_card) { size_t size; if (software_entry() == nullptr) { size = length(); if (is_filetype("80")) { fread(m_card->m_roml, size); m_card->m_exrom = (0); if (size == 0x4000) { m_card->m_game = 0; } } else if (is_filetype("a0")) { fread(m_card->m_romh, 0x2000); m_card->m_exrom = 0; m_card->m_game = 0; } else if (is_filetype("e0")) { fread(m_card->m_romh, 0x2000); m_card->m_game = 0; } else if (is_filetype("crt")) { size_t roml_size = 0; size_t romh_size = 0; int exrom = 1; int game = 1; if (cbm_crt_read_header(*m_file, &roml_size, &romh_size, &exrom, &game)) { uint8_t *roml = nullptr; uint8_t *romh = nullptr; m_card->m_roml.allocate(roml_size); m_card->m_romh.allocate(romh_size); if (roml_size) roml = m_card->m_roml; if (romh_size) romh = m_card->m_roml; cbm_crt_read_data(*m_file, roml, romh); } m_card->m_exrom = exrom; m_card->m_game = game; } } else { size = get_software_region_length("uprom"); if (size) { // Ultimax (VIC-10) cartridge load_software_region("lorom", m_card->m_roml); load_software_region("uprom", m_card->m_romh); m_card->m_exrom = 1; m_card->m_game = 0; } else { // Commodore 64/128 cartridge load_software_region("roml", m_card->m_roml); load_software_region("romh", m_card->m_romh); load_software_region("nvram", m_card->m_nvram); if (get_feature("exrom") != nullptr) m_card->m_exrom = atol(get_feature("exrom")); if (get_feature("game") != nullptr) m_card->m_game = atol(get_feature("game")); } } } return image_init_result::PASS; }