diff --git a/src/mame/drivers/segas16b.cpp b/src/mame/drivers/segas16b.cpp index 65f285a8ee2..cac9f523378 100644 --- a/src/mame/drivers/segas16b.cpp +++ b/src/mame/drivers/segas16b.cpp @@ -1343,14 +1343,20 @@ void segas16b_state::device_timer(emu_timer &timer, device_timer_id id, int para // from Altered Beast //------------------------------------------------- -void segas16b_state::altbeast_common_i8751_sim(offs_t soundoffs, offs_t inputoffs) +void segas16b_state::altbeast_common_i8751_sim(offs_t soundoffs, offs_t inputoffs, int alt_bank) { // signal a VBLANK to the main CPU m_maincpu->set_input_line(4, HOLD_LINE); // set tile banks address_space &space = m_maincpu->space(AS_PROGRAM); - rom_5704_bank_w(space, 1, m_workram[0x3094/2] & 0x00ff, 0x00ff); + int bank = m_workram[0x3094 / 2] & 0x00ff; + // alt_bank is used for the alt rom loading (where there are space between the ROMs) + // alternatively the rom loading could be changed, but the loading is correct for the non-mcu .b14/.a14 type + // board so presumably our MCU simulation should act accordingly. + if (alt_bank) bank = (bank & 0x1) | ((bank & 0xfe) << 1); + + rom_5704_bank_w(space, 1, bank, 0x00ff); // process any new sound data uint16_t temp = m_workram[soundoffs]; @@ -1366,17 +1372,17 @@ void segas16b_state::altbeast_common_i8751_sim(offs_t soundoffs, offs_t inputoff void segas16b_state::altbeasj_i8751_sim() { - altbeast_common_i8751_sim(0x30d4/2, 0x30d0/2); + altbeast_common_i8751_sim(0x30d4/2, 0x30d0/2, 1); } void segas16b_state::altbeas5_i8751_sim() { - altbeast_common_i8751_sim(0x3098/2, 0x3096/2); + altbeast_common_i8751_sim(0x3098/2, 0x3096/2, 1); } void segas16b_state::altbeast_i8751_sim() { - altbeast_common_i8751_sim(0x30c4/2, 0x30c2/2); + altbeast_common_i8751_sim(0x30c4/2, 0x30c2/2, 0); } diff --git a/src/mame/includes/segas16b.h b/src/mame/includes/segas16b.h index bdc6521c56f..b47037f99fb 100644 --- a/src/mame/includes/segas16b.h +++ b/src/mame/includes/segas16b.h @@ -168,7 +168,7 @@ protected: void init_generic(segas16b_rom_board rom_board); // i8751 simulations - void altbeast_common_i8751_sim(offs_t soundoffs, offs_t inputoffs); + void altbeast_common_i8751_sim(offs_t soundoffs, offs_t inputoffs, int alt_bank); void altbeasj_i8751_sim(); void altbeas5_i8751_sim(); void altbeast_i8751_sim();