void msx_cart_halnote::map_bank(int bank) { if (bank < 2) { return; } // Special banks if (bank == 6 || bank == 7) { m_bank_base[bank] = get_rom_base() + 0x80000 + (m_selected_bank[bank] * 0x800); return; } m_bank_base[bank] = get_rom_base() + ((m_selected_bank[bank] * 0x2000) & 0xFFFFF); if (bank == 2) { if (m_selected_bank[bank] & 0x80) { m_bank_base[0] = get_sram_base(); m_bank_base[1] = get_sram_base() + 0x2000; } else { m_bank_base[0] = nullptr; m_bank_base[1] = nullptr; } } }
void msx_cart_gamemaster2::restore_banks() { m_bank_base[0] = get_rom_base(); m_bank_base[2] = get_rom_base(); setup_bank(0); setup_bank(1); setup_bank(2); }
void msx_cart_rtype::restore_banks() { m_bank_base[0] = get_rom_base() + 15 * 0x4000; if (m_selected_bank & 0x10) { m_selected_bank &= 0x17; } m_bank_base[1] = get_rom_base() + m_selected_bank * 0x4000; }
void msx_cart_konami_device::write_cart(offs_t offset, uint8_t data) { switch (offset & 0xe000) { case 0x4000: m_selected_bank[0] = data; m_bank_base[0] = get_rom_base() + ( m_selected_bank[0] & m_bank_mask ) * 0x2000; m_bank_base[2] = get_rom_base() + ( m_selected_bank[0] & m_bank_mask ) * 0x2000; break; case 0x6000: m_selected_bank[1] = data; m_bank_base[1] = get_rom_base() + ( m_selected_bank[1] & m_bank_mask ) * 0x2000; m_bank_base[3] = get_rom_base() + ( m_selected_bank[1] & m_bank_mask ) * 0x2000; break; case 0x8000: m_selected_bank[2] = data; m_bank_base[4] = get_rom_base() + ( m_selected_bank[2] & m_bank_mask ) * 0x2000; m_bank_base[6] = get_rom_base() + ( m_selected_bank[2] & m_bank_mask ) * 0x2000; break; case 0xa000: m_selected_bank[3] = data; m_bank_base[5] = get_rom_base() + ( m_selected_bank[3] & m_bank_mask ) * 0x2000; m_bank_base[7] = get_rom_base() + ( m_selected_bank[3] & m_bank_mask ) * 0x2000; break; } }
void msx_cart_korean_90in1::restore_banks() { UINT8 *base = get_rom_base(); switch (m_selected_bank & 0xc0) { case 0x80: base += (m_selected_bank & 0x3e & m_bank_mask) * 0x4000; m_bank_base[0] = base; m_bank_base[1] = base + 0x2000; m_bank_base[2] = base + 0x4000; m_bank_base[3] = base + 0x6000; break; case 0xc0: base += (m_selected_bank & m_bank_mask) * 0x4000; m_bank_base[0] = base; m_bank_base[1] = base + 0x2000; m_bank_base[2] = base + 0x2000; m_bank_base[3] = base; break; default: base += (m_selected_bank & m_bank_mask) * 0x4000; m_bank_base[0] = base; m_bank_base[1] = base + 0x2000; m_bank_base[2] = base; m_bank_base[3] = base + 0x2000; break; } }
void msx_cart_ascii8::restore_banks() { for (int i = 0; i < 4; i++) { m_bank_base[i] = get_rom_base() + (m_selected_bank[i] & m_bank_mask ) * 0x2000; } }
uint8_t msx_cart_arc_device::read_cart(offs_t offset) { if (offset >= 0x4000 && offset < 0xc000) { return get_rom_base()[offset - 0x4000]; } return 0xff; }
void msx_cart_fs_sr022::initialize_cartridge() { if (get_rom_size() != 0x40000) { fatalerror("fs_sr022: Invalid ROM size\n"); } m_bunsetsu_rom = get_rom_base() + 0x20000; }
void msx_cart_konami::restore_banks() { m_bank_base[0] = get_rom_base() + ( m_selected_bank[0] & m_bank_mask ) * 0x2000; m_bank_base[1] = get_rom_base() + ( m_selected_bank[1] & m_bank_mask ) * 0x2000; m_bank_base[2] = get_rom_base() + ( m_selected_bank[0] & m_bank_mask ) * 0x2000; m_bank_base[3] = get_rom_base() + ( m_selected_bank[1] & m_bank_mask ) * 0x2000; m_bank_base[4] = get_rom_base() + ( m_selected_bank[2] & m_bank_mask ) * 0x2000; m_bank_base[5] = get_rom_base() + ( m_selected_bank[3] & m_bank_mask ) * 0x2000; m_bank_base[6] = get_rom_base() + ( m_selected_bank[2] & m_bank_mask ) * 0x2000; m_bank_base[7] = get_rom_base() + ( m_selected_bank[3] & m_bank_mask ) * 0x2000; }
void msx_cart_majutsushi::restore_banks() { m_bank_base[0] = get_rom_base() + ( m_selected_bank[0] & 0x0f ) * 0x2000; m_bank_base[1] = get_rom_base() + ( m_selected_bank[1] & 0x0f ) * 0x2000; m_bank_base[2] = get_rom_base() + ( m_selected_bank[0] & 0x0f ) * 0x2000; m_bank_base[3] = get_rom_base() + ( m_selected_bank[1] & 0x0f ) * 0x2000; m_bank_base[4] = get_rom_base() + ( m_selected_bank[2] & 0x0f ) * 0x2000; m_bank_base[5] = get_rom_base() + ( m_selected_bank[3] & 0x0f ) * 0x2000; m_bank_base[6] = get_rom_base() + ( m_selected_bank[2] & 0x0f ) * 0x2000; m_bank_base[7] = get_rom_base() + ( m_selected_bank[3] & 0x0f ) * 0x2000; }
uint8_t msx_cart_dooly_device::read_cart(offs_t offset) { if (offset >= 0x4000 && offset < 0xc000) { uint8_t data = get_rom_base()[offset - 0x4000]; switch (m_prot) { case 0x04: data = bitswap<8>(data, 7, 6, 5, 4, 3, 1, 0, 2); break; } return data; } return 0xff; }
void msx_cart_ascii8_sram::setup_bank(UINT8 bank) { if (m_selected_bank[bank] & ~(m_sram_select_mask | m_bank_mask)) { // Nothing is mapped m_bank_base[bank] = NULL; } else if (m_selected_bank[bank] & m_sram_select_mask) { // SRAM is selected m_bank_base[bank] = get_sram_base(); } else { m_bank_base[bank] = get_rom_base() + (m_selected_bank[bank] & m_bank_mask ) * 0x2000; } }
image_init_result generic_slot_device::call_load() { if (m_cart) { if (!m_device_image_load.isnull()) return m_device_image_load(*this); else { uint32_t len = common_get_size("rom"); rom_alloc(len, m_width, m_endianness); common_load_rom(get_rom_base(), len, "rom"); return image_init_result::PASS; } } return image_init_result::PASS; }
bool generic_slot_device::call_load() { if (m_cart) { if (!m_device_image_load.isnull()) return m_device_image_load(*this); else { UINT32 len = common_get_size("rom"); rom_alloc(len, m_width, m_endianness); common_load_rom(get_rom_base(), len, "rom"); return IMAGE_INIT_PASS; } } return IMAGE_INIT_PASS; }
void msx_cart_gamemaster2::setup_bank(uint8_t bank) { switch (bank) { case 0: if (m_selected_bank[0] & 0x10) { m_bank_base[1] = get_sram_base() + ((m_selected_bank[0] & 0x20) ? 0x1000 : 0); m_bank_base[3] = get_sram_base() + ((m_selected_bank[0] & 0x20) ? 0x1000 : 0); } else { m_bank_base[1] = get_rom_base() + ( m_selected_bank[0] & 0x0f ) * 0x2000; m_bank_base[3] = get_rom_base() + ( m_selected_bank[0] & 0x0f ) * 0x2000; } break; case 1: if (m_selected_bank[1] & 0x10) { m_bank_base[4] = get_sram_base() + ((m_selected_bank[1] & 0x20) ? 0x1000 : 0); m_bank_base[6] = get_sram_base() + ((m_selected_bank[1] & 0x20) ? 0x1000 : 0); } else { m_bank_base[4] = get_rom_base() + ( m_selected_bank[1] & 0x0f ) * 0x2000; m_bank_base[6] = get_rom_base() + ( m_selected_bank[1] & 0x0f ) * 0x2000; } break; case 2: if (m_selected_bank[2] & 0x10) { m_bank_base[5] = get_sram_base() + ((m_selected_bank[2] & 0x20) ? 0x1000 : 0); m_bank_base[7] = get_sram_base() + ((m_selected_bank[2] & 0x20) ? 0x1000 : 0); } else { m_bank_base[5] = get_rom_base() + ( m_selected_bank[2] & 0x0f ) * 0x2000; m_bank_base[7] = get_rom_base() + ( m_selected_bank[2] & 0x0f ) * 0x2000; } break; } }
void msx_cart_fmpac::restore_banks() { m_bank_base = get_rom_base() + ( m_selected_bank & 0x03 ) * 0x4000; }
void msx_cart_hfox::restore_banks() { m_bank_base[0] = get_rom_base() + ((m_selected_bank[0] & 0x01) * 0x8000); m_bank_base[1] = get_rom_base() + ((m_selected_bank[1] & 0x01) * 0x8000) + 0x4000; }
void msx_cart_korean_80in1::setup_bank(UINT8 bank) { m_bank_base[bank] = get_rom_base() + ( m_selected_bank[bank] & m_bank_mask ) * 0x2000; }
void msx_cart_nomapper::initialize_cartridge() { UINT32 size = get_rom_size(); UINT8 *rom = get_rom_base(); // determine start address // default to $4000 m_start_address = 0x4000; switch (size) { /* 8KB/16KB */ case 0x2000: case 0x4000: { UINT16 start = rom[3] << 8 | rom[2]; // start address of $0000: call address in the $4000 region: $4000, else $8000 if (start == 0) { if ((rom[5] & 0xc0) == 0x40) m_start_address = 0x4000; else m_start_address = 0x8000; } // start address in the $8000 region: $8000, else default else if ((start & 0xc000) == 0x8000) m_start_address = 0x8000; break; } /* 32KB */ case 0x8000: // take default, check when no "AB" at $0000, but "AB" at $4000 if (rom[0] != 'A' && rom[1] != 'B' && rom[0x4000] == 'A' && rom[0x4001] == 'B') { UINT16 start = rom[0x4003] << 8 | rom[0x4002]; // start address of $0000 and call address in the $4000 region, or start address outside the $8000 region: $0000, else default if ((start == 0 && (rom[0x4005] & 0xc0) == 0x40) || start < 0x8000 || start >= 0xc000) m_start_address = 0; } break; /* 48KB */ case 0xc000: // "AB" at $0000, but no "AB" at $4000, not "AB": $0000 if (rom[0] == 'A' && rom[1] == 'B' && rom[0x4000] != 'A' && rom[0x4001] != 'B') m_start_address = 0x4000; else m_start_address = 0; break; /* 64KB */ default: m_start_address = 0; break; } m_end_address = MIN(m_start_address + size, 0x10000); }
void msx_cart_crossblaim_device::restore_banks() { m_bank_base[1] = get_rom_base(); setup_bank(); }
void msx_cart_crossblaim_device::setup_bank() { m_bank_base[0] = ( m_selected_bank & 2 ) ? nullptr : get_rom_base() + ( m_selected_bank & 0x03 ) * 0x4000; m_bank_base[2] = get_rom_base() + ( m_selected_bank & 0x03 ) * 0x4000; m_bank_base[3] = ( m_selected_bank & 2 ) ? nullptr : get_rom_base() + ( m_selected_bank & 0x03 ) * 0x4000; }
void msx_cart_crossblaim::setup_bank() { m_bank_base[0] = ( m_selected_bank & 2 ) ? NULL : get_rom_base() + ( m_selected_bank & 0x03 ) * 0x4000; m_bank_base[2] = get_rom_base() + ( m_selected_bank & 0x03 ) * 0x4000; m_bank_base[3] = ( m_selected_bank & 2 ) ? NULL : get_rom_base() + ( m_selected_bank & 0x03 ) * 0x4000; }
void msx_cart_konami_scc_device::write_cart(offs_t offset, uint8_t data) { switch (offset & 0xf800) { case 0x5000: m_selected_bank[0] = data; m_bank_base[2] = get_rom_base() + ( m_selected_bank[0] & m_bank_mask ) * 0x2000; m_bank_base[6] = get_rom_base() + ( m_selected_bank[0] & m_bank_mask ) * 0x2000; break; case 0x7000: m_selected_bank[1] = data; m_bank_base[3] = get_rom_base() + ( m_selected_bank[1] & m_bank_mask ) * 0x2000; m_bank_base[7] = get_rom_base() + ( m_selected_bank[1] & m_bank_mask ) * 0x2000; break; case 0x9000: m_selected_bank[2] = data; m_scc_active = ( ( data & 0x3f ) == 0x3f ); m_bank_base[0] = get_rom_base() + ( m_selected_bank[2] & m_bank_mask ) * 0x2000; m_bank_base[4] = get_rom_base() + ( m_selected_bank[2] & m_bank_mask ) * 0x2000; break; case 0x9800: if ( m_scc_active ) { offset &= 0xff; if (offset < 0x80) { m_k051649->k051649_waveform_w(offset, data); } else if (offset < 0xa0) { offset &= 0x0f; if (offset < 0x0a) { m_k051649->k051649_frequency_w(offset, data); } else if (offset < 0x0f) { m_k051649->k051649_volume_w(offset - 0xa, data); } else { m_k051649->k051649_keyonoff_w(data); } } else if (offset >= 0xe0) { m_k051649->k051649_test_w(data); } } break; case 0xb000: m_selected_bank[3] = data; m_bank_base[1] = get_rom_base() + ( m_selected_bank[3] & m_bank_mask ) * 0x2000; m_bank_base[5] = get_rom_base() + ( m_selected_bank[3] & m_bank_mask ) * 0x2000; break; } }
void msx_cart_superloderunner::restore_banks() { m_bank_base = get_rom_base() + (m_selected_bank & 0x0f) * 0x4000; }