diff --git a/src/mame/drivers/ddragon.cpp b/src/mame/drivers/ddragon.cpp index 56f0d015119..f3d2b1ab606 100644 --- a/src/mame/drivers/ddragon.cpp +++ b/src/mame/drivers/ddragon.cpp @@ -132,7 +132,8 @@ TIMER_DEVICE_CALLBACK_MEMBER(ddragon_state::ddragon_scanline) MACHINE_START_MEMBER(ddragon_state,ddragon) { /* configure banks */ - membank("bank1")->configure_entries(0, 8, memregion("maincpu")->base() + 0x10000, 0x4000); + if (m_mainbank) + m_mainbank->configure_entries(0, 8, memregion("maincpu")->base() + 0x10000, 0x4000); /* register for save states */ save_item(NAME(m_scrollx_hi)); @@ -152,7 +153,7 @@ MACHINE_RESET_MEMBER(ddragon_state,ddragon) m_ddragon_sub_port = 0; m_adpcm_pos[0] = m_adpcm_pos[1] = 0; m_adpcm_end[0] = m_adpcm_end[1] = 0; - m_adpcm_idle[0] = m_adpcm_idle[1] = 1; + m_adpcm_idle[0] = m_adpcm_idle[1] = true; m_adpcm_data[0] = m_adpcm_data[1] = -1; } @@ -181,7 +182,7 @@ WRITE8_MEMBER(ddragon_state::ddragon_bankswitch_w) m_subcpu->set_input_line(INPUT_LINE_RESET, data & 0x08 ? CLEAR_LINE : ASSERT_LINE); m_subcpu->set_input_line(INPUT_LINE_HALT, data & 0x10 ? ASSERT_LINE : CLEAR_LINE); - membank("bank1")->set_entry((data & 0xe0) >> 5); + m_mainbank->set_entry((data & 0xe0) >> 5); } @@ -193,7 +194,7 @@ WRITE8_MEMBER(toffy_state::toffy_bankswitch_w) // flip_screen_set(machine(), ~data & 0x04); /* I don't know ... */ - membank("bank1")->set_entry((data & 0x20) >> 5); + m_mainbank->set_entry((data & 0x20) >> 5); } @@ -248,14 +249,7 @@ WRITE8_MEMBER(darktowr_state::darktowr_bankswitch_w) m_subcpu->set_input_line(INPUT_LINE_RESET, data & 0x08 ? CLEAR_LINE : ASSERT_LINE); m_subcpu->set_input_line(INPUT_LINE_HALT, data & 0x10 ? ASSERT_LINE : CLEAR_LINE); - int oldbank = membank("bank1")->entry(); - int newbank = (data & 0xe0) >> 5; - - membank("bank1")->set_entry(newbank); - if (newbank == 4 && oldbank != 4) - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x4000, 0x7fff, read8_delegate(FUNC(darktowr_state::darktowr_mcu_bank_r),this), write8_delegate(FUNC(darktowr_state::darktowr_mcu_bank_w),this)); - else if (newbank != 4 && oldbank == 4) - m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x4000, 0x7fff, "bank1"); + m_darktowr_bank->set_bank((data & 0xe0) >> 5); } @@ -319,12 +313,6 @@ WRITE8_MEMBER(ddragon_state::ddragon2_sub_irq_w) } -WRITE_LINE_MEMBER(ddragon_state::irq_handler) -{ - m_soundcpu->set_input_line(m_ym_irq, state ? ASSERT_LINE : CLEAR_LINE); -} - - WRITE8_MEMBER(ddragon_state::ddragonba_port_w) { if ((data & 0x8) == 0) @@ -420,65 +408,62 @@ WRITE8_MEMBER(ddragon_state::ddragon_comram_w) WRITE8_MEMBER(ddragon_state::dd_adpcm_w) { int chip = offset & 1; - msm5205_device *adpcm = chip ? m_adpcm2 : m_adpcm1; - switch (offset / 2) + switch (offset >> 1) { case 3: - m_adpcm_idle[chip] = 1; - adpcm->reset_w(1); + m_adpcm_idle[chip] = true; + m_adpcm[chip]->reset_w(1); break; case 2: - m_adpcm_pos[chip] = (data & 0x7f) * 0x200; + m_adpcm_pos[chip] = (data & 0x7f) << 9; break; case 1: - m_adpcm_end[chip] = (data & 0x7f) * 0x200; + m_adpcm_end[chip] = (data & 0x7f) << 9; break; case 0: - m_adpcm_idle[chip] = 0; - adpcm->reset_w(0); + m_adpcm_idle[chip] = false; + m_adpcm[chip]->reset_w(0); break; } } -void ddragon_state::dd_adpcm_int( msm5205_device *device, int chip ) +void ddragon_state::dd_adpcm_int( int chip ) { - if (m_adpcm_pos[chip] >= m_adpcm_end[chip] || m_adpcm_pos[chip] >= 0x10000) + if (m_adpcm_pos[chip] >= m_adpcm_end[chip] || m_adpcm_pos[chip] >= m_adpcm_rom[chip].length()) { - m_adpcm_idle[chip] = 1; - device->reset_w(1); + m_adpcm_idle[chip] = true; + m_adpcm[chip]->reset_w(1); } else if (m_adpcm_data[chip] != -1) { - device->write_data(m_adpcm_data[chip] & 0x0f); + m_adpcm[chip]->write_data(m_adpcm_data[chip] & 0x0f); m_adpcm_data[chip] = -1; } else { - uint8_t *ROM = memregion("adpcm")->base() + 0x10000 * chip; - - m_adpcm_data[chip] = ROM[m_adpcm_pos[chip]++]; - device->write_data(m_adpcm_data[chip] >> 4); + m_adpcm_data[chip] = m_adpcm_rom[chip][m_adpcm_pos[chip]++]; + m_adpcm[chip]->write_data(m_adpcm_data[chip] >> 4); } } WRITE_LINE_MEMBER(ddragon_state::dd_adpcm_int_1) { - dd_adpcm_int(m_adpcm1, 0); + dd_adpcm_int(0); } WRITE_LINE_MEMBER(ddragon_state::dd_adpcm_int_2) { - dd_adpcm_int(m_adpcm2, 1); + dd_adpcm_int(1); } READ8_MEMBER(ddragon_state::dd_adpcm_status_r) { - return m_adpcm_idle[0] + (m_adpcm_idle[1] << 1); + return (m_adpcm_idle[0] ? 1 : 0) | (m_adpcm_idle[1] ? 2 : 0); } @@ -489,7 +474,7 @@ READ8_MEMBER(ddragon_state::dd_adpcm_status_r) * *************************************/ -void ddragon_state::ddragon_map(address_map &map) +void ddragon_state::ddragon_base_map(address_map &map) { map(0x0000, 0x0fff).ram().share("rambase"); map(0x1000, 0x11ff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette"); @@ -503,14 +488,39 @@ void ddragon_state::ddragon_map(address_map &map) map(0x3802, 0x3802).portr("EXTRA"); map(0x3803, 0x3803).portr("DSW0"); map(0x3804, 0x3804).portr("DSW1"); - map(0x3808, 0x3808).w(FUNC(ddragon_state::ddragon_bankswitch_w)); map(0x3809, 0x3809).writeonly().share("scrollx_lo"); map(0x380a, 0x380a).writeonly().share("scrolly_lo"); map(0x380b, 0x380f).rw(FUNC(ddragon_state::ddragon_interrupt_r), FUNC(ddragon_state::ddragon_interrupt_w)); - map(0x4000, 0x7fff).bankr("bank1"); map(0x8000, 0xffff).rom(); } +void ddragon_state::ddragon_map(address_map &map) +{ + ddragon_base_map(map); + map(0x3808, 0x3808).w(FUNC(ddragon_state::ddragon_bankswitch_w)); + map(0x4000, 0x7fff).bankr("mainbank"); +} + +void toffy_state::toffy_map(address_map &map) +{ + ddragon_base_map(map); + map(0x3808, 0x3808).w(FUNC(toffy_state::toffy_bankswitch_w)); + map(0x4000, 0x7fff).bankr("mainbank"); +} + +void darktowr_state::darktowr_map(address_map &map) +{ + ddragon_base_map(map); + map(0x3808, 0x3808).w(FUNC(darktowr_state::darktowr_bankswitch_w)); + map(0x4000, 0x7fff).m(m_darktowr_bank, FUNC(address_map_bank_device::amap8)); +} + +void darktowr_state::darktowr_banked_map(address_map &map) +{ + map(0x00000, 0x0ffff).rom().region("maincpu", 0x10000); + map(0x10000, 0x13fff).rw(FUNC(darktowr_state::darktowr_mcu_bank_r), FUNC(darktowr_state::darktowr_mcu_bank_w)); + map(0x14000, 0x1ffff).rom().region("maincpu", 0x24000); // TODO : ROM? empty at most of darktowr_state games +} void ddragon_state::dd2_map(address_map &map) { @@ -530,12 +540,11 @@ void ddragon_state::dd2_map(address_map &map) map(0x380b, 0x380f).rw(FUNC(ddragon_state::ddragon_interrupt_r), FUNC(ddragon_state::ddragon_interrupt_w)); map(0x3c00, 0x3dff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette"); map(0x3e00, 0x3fff).ram().w(m_palette, FUNC(palette_device::write8_ext)).share("palette_ext"); - map(0x4000, 0x7fff).bankr("bank1"); + map(0x4000, 0x7fff).bankr("mainbank"); map(0x8000, 0xffff).rom(); } - /************************************* * * Sub CPU memory maps @@ -550,7 +559,6 @@ void ddragon_state::sub_map(address_map &map) map(0xc000, 0xffff).rom(); } - void ddragon_state::ddragonba_sub_map(address_map &map) { map(0x0000, 0x0fff).ram(); @@ -558,7 +566,6 @@ void ddragon_state::ddragonba_sub_map(address_map &map) map(0xc000, 0xffff).rom(); } - void ddragon_state::dd2_sub_map(address_map &map) { map(0x0000, 0xbfff).rom(); @@ -567,14 +574,12 @@ void ddragon_state::dd2_sub_map(address_map &map) map(0xe000, 0xe000).w(FUNC(ddragon_state::ddragon2_sub_irq_w)); } - void ddragon_state::ddragonba_sub_portmap(address_map &map) { map(0x0000, 0x01ff).w(FUNC(ddragon_state::ddragonba_port_w)); } - /************************************* * * Sound CPU memory maps @@ -591,7 +596,6 @@ void ddragon_state::sound_map(address_map &map) map(0x8000, 0xffff).rom(); } - void ddragon_state::dd2_sound_map(address_map &map) { map(0x0000, 0x7fff).rom(); @@ -602,7 +606,6 @@ void ddragon_state::dd2_sound_map(address_map &map) } - /************************************* * * Input ports @@ -912,9 +915,9 @@ static const gfx_layout char_layout = 8,8, RGN_FRAC(1,1), 4, - { 0, 2, 4, 6 }, + { STEP4(0,2) }, { 1, 0, 8*8+1, 8*8+0, 16*8+1, 16*8+0, 24*8+1, 24*8+0 }, - { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, + { STEP8(0,8) }, 32*8 }; @@ -926,8 +929,7 @@ static const gfx_layout tile_layout = { RGN_FRAC(1,2)+0, RGN_FRAC(1,2)+4, 0, 4 }, { 3, 2, 1, 0, 16*8+3, 16*8+2, 16*8+1, 16*8+0, 32*8+3, 32*8+2, 32*8+1, 32*8+0, 48*8+3, 48*8+2, 48*8+1, 48*8+0 }, - { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, - 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 }, + { STEP16(0,8) }, 64*8 }; @@ -981,7 +983,7 @@ MACHINE_CONFIG_START(ddragon_state::ddragon) MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("soundcpu", M6809_IRQ_LINE)) MCFG_DEVICE_ADD("fmsnd", YM2151, SOUND_CLOCK) - MCFG_YM2151_IRQ_HANDLER(WRITELINE(*this, ddragon_state, irq_handler)) + MCFG_YM2151_IRQ_HANDLER(INPUTLINE("soundcpu", M6809_FIRQ_LINE)) MCFG_SOUND_ROUTE(0, "mono", 0.60) MCFG_SOUND_ROUTE(1, "mono", 0.60) @@ -1053,7 +1055,7 @@ MACHINE_CONFIG_START(ddragon_state::ddragon6809) MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("soundcpu", M6809_IRQ_LINE)) MCFG_DEVICE_ADD("fmsnd", YM2151, SOUND_CLOCK) - MCFG_YM2151_IRQ_HANDLER(WRITELINE(*this, ddragon_state,irq_handler)) + MCFG_YM2151_IRQ_HANDLER(INPUTLINE("soundcpu", M6809_FIRQ_LINE)) MCFG_SOUND_ROUTE(0, "mono", 0.60) MCFG_SOUND_ROUTE(1, "mono", 0.60) @@ -1106,7 +1108,7 @@ MACHINE_CONFIG_START(ddragon_state::ddragon2) MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("soundcpu", INPUT_LINE_NMI)) MCFG_DEVICE_ADD("fmsnd", YM2151, SOUND_CLOCK) - MCFG_YM2151_IRQ_HANDLER(WRITELINE(*this, ddragon_state,irq_handler)) + MCFG_YM2151_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.60) MCFG_SOUND_ROUTE(1, "mono", 0.60) @@ -1119,9 +1121,19 @@ MACHINE_CONFIG_START(darktowr_state::darktowr) ddragon(config); /* basic machine hardware */ + MCFG_DEVICE_MODIFY("maincpu") + MCFG_DEVICE_PROGRAM_MAP(darktowr_map) + MCFG_DEVICE_ADD("mcu", M68705P3, XTAL(4'000'000)) MCFG_M68705_PORTA_W_CB(WRITE8(*this, darktowr_state, mcu_port_a_w)) + MCFG_DEVICE_ADD("darktowr_bank", ADDRESS_MAP_BANK, 0) + MCFG_DEVICE_PROGRAM_MAP(darktowr_banked_map) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8) + MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(17) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x4000) + /* video hardware */ MACHINE_CONFIG_END @@ -1130,6 +1142,9 @@ MACHINE_CONFIG_START(toffy_state::toffy) ddragon(config); /* basic machine hardware */ + MCFG_DEVICE_MODIFY("maincpu") + MCFG_DEVICE_PROGRAM_MAP(toffy_map) + MCFG_DEVICE_REMOVE("sub") /* sound hardware */ @@ -1177,9 +1192,11 @@ ROM_START( ddragon ) ROM_LOAD( "21j-i", 0x20000, 0x10000, CRC(5effb0a0) SHA1(1f21acb15dad824e831ed9a42b3fde096bb31141) ) ROM_LOAD( "21j-j", 0x30000, 0x10000, CRC(5fb42e7c) SHA1(7953316712c56c6f8ca6bba127319e24b618b646) ) - ROM_REGION( 0x20000, "adpcm", 0 ) /* adpcm samples */ + ROM_REGION( 0x10000, "adpcm1", 0 ) /* adpcm samples */ ROM_LOAD( "21j-6", 0x00000, 0x10000, CRC(34755de3) SHA1(57c06d6ce9497901072fa50a92b6ed0d2d4d6528) ) - ROM_LOAD( "21j-7", 0x10000, 0x10000, CRC(904de6f8) SHA1(3623e5ea05fd7c455992b7ed87e605b87c3850aa) ) + + ROM_REGION( 0x10000, "adpcm2", 0 ) /* adpcm samples */ + ROM_LOAD( "21j-7", 0x00000, 0x10000, CRC(904de6f8) SHA1(3623e5ea05fd7c455992b7ed87e605b87c3850aa) ) ROM_REGION( 0x0300, "proms", 0 ) ROM_LOAD( "21j-k-0", 0x0000, 0x0100, CRC(fdb130a9) SHA1(4c4f214229b9fab2b5d69c745ec5428787b89e1f) ) /* unknown */ @@ -1218,9 +1235,11 @@ ROM_START( ddragonw ) ROM_LOAD( "21j-i", 0x20000, 0x10000, CRC(5effb0a0) SHA1(1f21acb15dad824e831ed9a42b3fde096bb31141) ) ROM_LOAD( "21j-j", 0x30000, 0x10000, CRC(5fb42e7c) SHA1(7953316712c56c6f8ca6bba127319e24b618b646) ) - ROM_REGION( 0x20000, "adpcm", 0 ) /* adpcm samples */ + ROM_REGION( 0x10000, "adpcm1", 0 ) /* adpcm samples */ ROM_LOAD( "21j-6", 0x00000, 0x10000, CRC(34755de3) SHA1(57c06d6ce9497901072fa50a92b6ed0d2d4d6528) ) - ROM_LOAD( "21j-7", 0x10000, 0x10000, CRC(904de6f8) SHA1(3623e5ea05fd7c455992b7ed87e605b87c3850aa) ) + + ROM_REGION( 0x10000, "adpcm2", 0 ) /* adpcm samples */ + ROM_LOAD( "21j-7", 0x00000, 0x10000, CRC(904de6f8) SHA1(3623e5ea05fd7c455992b7ed87e605b87c3850aa) ) ROM_REGION( 0x0300, "proms", 0 ) ROM_LOAD( "21j-k-0.101", 0x0000, 0x0100, CRC(fdb130a9) SHA1(4c4f214229b9fab2b5d69c745ec5428787b89e1f) ) /* layer priorities */ @@ -1259,9 +1278,11 @@ ROM_START( ddragonw1 ) ROM_LOAD( "21j-i", 0x20000, 0x10000, CRC(5effb0a0) SHA1(1f21acb15dad824e831ed9a42b3fde096bb31141) ) ROM_LOAD( "21j-j", 0x30000, 0x10000, CRC(5fb42e7c) SHA1(7953316712c56c6f8ca6bba127319e24b618b646) ) - ROM_REGION( 0x20000, "adpcm", 0 ) /* adpcm samples */ + ROM_REGION( 0x10000, "adpcm1", 0 ) /* adpcm samples */ ROM_LOAD( "21j-6", 0x00000, 0x10000, CRC(34755de3) SHA1(57c06d6ce9497901072fa50a92b6ed0d2d4d6528) ) - ROM_LOAD( "21j-7", 0x10000, 0x10000, CRC(904de6f8) SHA1(3623e5ea05fd7c455992b7ed87e605b87c3850aa) ) + + ROM_REGION( 0x10000, "adpcm2", 0 ) /* adpcm samples */ + ROM_LOAD( "21j-7", 0x00000, 0x10000, CRC(904de6f8) SHA1(3623e5ea05fd7c455992b7ed87e605b87c3850aa) ) ROM_REGION( 0x0300, "proms", 0 ) ROM_LOAD( "21j-k-0.101", 0x0000, 0x0100, CRC(fdb130a9) SHA1(4c4f214229b9fab2b5d69c745ec5428787b89e1f) ) /* layer priorities */ @@ -1300,9 +1321,11 @@ ROM_START( ddragonu ) ROM_LOAD( "21j-i", 0x20000, 0x10000, CRC(5effb0a0) SHA1(1f21acb15dad824e831ed9a42b3fde096bb31141) ) ROM_LOAD( "21j-j", 0x30000, 0x10000, CRC(5fb42e7c) SHA1(7953316712c56c6f8ca6bba127319e24b618b646) ) - ROM_REGION( 0x20000, "adpcm", 0 ) /* adpcm samples */ + ROM_REGION( 0x10000, "adpcm1", 0 ) /* adpcm samples */ ROM_LOAD( "21j-6", 0x00000, 0x10000, CRC(34755de3) SHA1(57c06d6ce9497901072fa50a92b6ed0d2d4d6528) ) - ROM_LOAD( "21j-7", 0x10000, 0x10000, CRC(904de6f8) SHA1(3623e5ea05fd7c455992b7ed87e605b87c3850aa) ) + + ROM_REGION( 0x10000, "adpcm2", 0 ) /* adpcm samples */ + ROM_LOAD( "21j-7", 0x00000, 0x10000, CRC(904de6f8) SHA1(3623e5ea05fd7c455992b7ed87e605b87c3850aa) ) ROM_REGION( 0x0300, "proms", 0 ) ROM_LOAD( "21j-k-0.101", 0x0000, 0x0100, CRC(fdb130a9) SHA1(4c4f214229b9fab2b5d69c745ec5428787b89e1f) ) /* layer priorities */ @@ -1341,9 +1364,11 @@ ROM_START( ddragonua ) ROM_LOAD( "21j-i", 0x20000, 0x10000, CRC(5effb0a0) SHA1(1f21acb15dad824e831ed9a42b3fde096bb31141) ) ROM_LOAD( "21j-j", 0x30000, 0x10000, CRC(5fb42e7c) SHA1(7953316712c56c6f8ca6bba127319e24b618b646) ) - ROM_REGION( 0x20000, "adpcm", 0 ) /* adpcm samples */ + ROM_REGION( 0x10000, "adpcm1", 0 ) /* adpcm samples */ ROM_LOAD( "21j-6", 0x00000, 0x10000, CRC(34755de3) SHA1(57c06d6ce9497901072fa50a92b6ed0d2d4d6528) ) - ROM_LOAD( "21j-7", 0x10000, 0x10000, CRC(904de6f8) SHA1(3623e5ea05fd7c455992b7ed87e605b87c3850aa) ) + + ROM_REGION( 0x10000, "adpcm2", 0 ) /* adpcm samples */ + ROM_LOAD( "21j-7", 0x00000, 0x10000, CRC(904de6f8) SHA1(3623e5ea05fd7c455992b7ed87e605b87c3850aa) ) ROM_REGION( 0x0300, "proms", 0 ) ROM_LOAD( "21j-k-0.101", 0x0000, 0x0100, CRC(fdb130a9) SHA1(4c4f214229b9fab2b5d69c745ec5428787b89e1f) ) /* layer priorities */ @@ -1383,9 +1408,11 @@ ROM_START( ddragonub ) ROM_LOAD( "21j-i", 0x20000, 0x10000, CRC(5effb0a0) SHA1(1f21acb15dad824e831ed9a42b3fde096bb31141) ) ROM_LOAD( "21j-j", 0x30000, 0x10000, CRC(5fb42e7c) SHA1(7953316712c56c6f8ca6bba127319e24b618b646) ) - ROM_REGION( 0x20000, "adpcm", 0 ) /* adpcm samples */ + ROM_REGION( 0x10000, "adpcm1", 0 ) /* adpcm samples */ ROM_LOAD( "21j-6", 0x00000, 0x10000, CRC(34755de3) SHA1(57c06d6ce9497901072fa50a92b6ed0d2d4d6528) ) - ROM_LOAD( "21j-7", 0x10000, 0x10000, CRC(904de6f8) SHA1(3623e5ea05fd7c455992b7ed87e605b87c3850aa) ) + + ROM_REGION( 0x10000, "adpcm2", 0 ) /* adpcm samples */ + ROM_LOAD( "21j-7", 0x00000, 0x10000, CRC(904de6f8) SHA1(3623e5ea05fd7c455992b7ed87e605b87c3850aa) ) ROM_REGION( 0x0300, "proms", 0 ) ROM_LOAD( "21j-k-0.101", 0x0000, 0x0100, CRC(fdb130a9) SHA1(4c4f214229b9fab2b5d69c745ec5428787b89e1f) ) /* layer priorities */ @@ -1425,9 +1452,11 @@ ROM_START( ddragonb ) /* Same program roms as the World set */ ROM_LOAD( "21j-i", 0x20000, 0x10000, CRC(5effb0a0) SHA1(1f21acb15dad824e831ed9a42b3fde096bb31141) ) ROM_LOAD( "21j-j", 0x30000, 0x10000, CRC(5fb42e7c) SHA1(7953316712c56c6f8ca6bba127319e24b618b646) ) - ROM_REGION( 0x20000, "adpcm", 0 ) /* adpcm samples */ + ROM_REGION( 0x10000, "adpcm1", 0 ) /* adpcm samples */ ROM_LOAD( "21j-6", 0x00000, 0x10000, CRC(34755de3) SHA1(57c06d6ce9497901072fa50a92b6ed0d2d4d6528) ) - ROM_LOAD( "21j-7", 0x10000, 0x10000, CRC(904de6f8) SHA1(3623e5ea05fd7c455992b7ed87e605b87c3850aa) ) + + ROM_REGION( 0x10000, "adpcm2", 0 ) /* adpcm samples */ + ROM_LOAD( "21j-7", 0x00000, 0x10000, CRC(904de6f8) SHA1(3623e5ea05fd7c455992b7ed87e605b87c3850aa) ) ROM_REGION( 0x0300, "proms", 0 ) ROM_LOAD( "21j-k-0.101", 0x0000, 0x0100, CRC(fdb130a9) SHA1(4c4f214229b9fab2b5d69c745ec5428787b89e1f) ) /* layer priorities */ @@ -1466,9 +1495,11 @@ ROM_START( ddragonba ) ROM_LOAD( "21j-i", 0x20000, 0x10000, CRC(5effb0a0) SHA1(1f21acb15dad824e831ed9a42b3fde096bb31141) ) ROM_LOAD( "21j-j", 0x30000, 0x10000, CRC(5fb42e7c) SHA1(7953316712c56c6f8ca6bba127319e24b618b646) ) - ROM_REGION( 0x20000, "adpcm", 0 ) /* adpcm samples */ + ROM_REGION( 0x10000, "adpcm1", 0 ) /* adpcm samples */ ROM_LOAD( "8.bin", 0x00000, 0x10000, CRC(34755de3) SHA1(57c06d6ce9497901072fa50a92b6ed0d2d4d6528) ) - ROM_LOAD( "7.bin", 0x10000, 0x10000, CRC(f9311f72) SHA1(aa554ef020e04dc896e5495bcddc64e489d0ffff) ) + + ROM_REGION( 0x10000, "adpcm2", 0 ) /* adpcm samples */ + ROM_LOAD( "7.bin", 0x00000, 0x10000, CRC(f9311f72) SHA1(aa554ef020e04dc896e5495bcddc64e489d0ffff) ) ROM_REGION( 0x0300, "proms", 0 ) ROM_LOAD( "21j-k-0.101", 0x0000, 0x0100, CRC(fdb130a9) SHA1(4c4f214229b9fab2b5d69c745ec5428787b89e1f) ) /* layer priorities */ @@ -1507,9 +1538,11 @@ ROM_START( ddragonb2 ) ROM_LOAD( "19.bin", 0x20000, 0x10000, CRC(22d65df2) SHA1(2f286a24ea7af438b39126a4ed0c515745981416) ) ROM_LOAD( "20.bin", 0x30000, 0x10000, CRC(5fb42e7c) SHA1(7953316712c56c6f8ca6bba127319e24b618b646) ) - ROM_REGION( 0x20000, "adpcm", 0 ) /* adpcm samples */ + ROM_REGION( 0x10000, "adpcm1", 0 ) /* adpcm samples */ ROM_LOAD( "b2_1.bin", 0x00000, 0x10000, CRC(34755de3) SHA1(57c06d6ce9497901072fa50a92b6ed0d2d4d6528) ) - ROM_LOAD( "2.bin", 0x10000, 0x10000, CRC(904de6f8) SHA1(3623e5ea05fd7c455992b7ed87e605b87c3850aa) ) + + ROM_REGION( 0x10000, "adpcm2", 0 ) /* adpcm samples */ + ROM_LOAD( "2.bin", 0x00000, 0x10000, CRC(904de6f8) SHA1(3623e5ea05fd7c455992b7ed87e605b87c3850aa) ) ROM_REGION( 0x0300, "proms", 0 ) ROM_LOAD( "21j-k-0.101", 0x0000, 0x0100, CRC(fdb130a9) SHA1(4c4f214229b9fab2b5d69c745ec5428787b89e1f) ) /* layer priorities */ @@ -1566,9 +1599,11 @@ ROM_START( ddragon6809 ) ROM_LOAD( "6809_11.bin", 0x20000, 0x10000, CRC(4171b70d) SHA1(dc300c9bca6481417e97ad03c973e47389f261c1) ) ROM_LOAD( "6809_12.bin", 0x30000, 0x10000, CRC(5f6a6d6f) SHA1(7d546a226cda81c28e7ccfb4c5daebc65072198d) ) - ROM_REGION( 0x20000, "adpcm", 0 ) /* adpcm samples */ + ROM_REGION( 0x10000, "adpcm1", 0 ) /* adpcm samples */ ROM_LOAD( "6809_14.bin", 0x00000, 0x08000, CRC(678f8657) SHA1(2652fdc6719d2c889ca87802f6e2cefae59fc2eb) ) - ROM_LOAD( "6809_15.bin", 0x10000, 0x08000, CRC(10f21dea) SHA1(739cf649f91490384297a81a2cc9855acb58a1c0) ) + + ROM_REGION( 0x10000, "adpcm2", 0 ) /* adpcm samples */ + ROM_LOAD( "6809_15.bin", 0x00000, 0x08000, CRC(10f21dea) SHA1(739cf649f91490384297a81a2cc9855acb58a1c0) ) ROM_END /* @@ -1637,9 +1672,11 @@ ROM_START( ddragon6809a ) ROM_LOAD( "11.2b", 0x20000, 0x10000, CRC(4171b70d) SHA1(dc300c9bca6481417e97ad03c973e47389f261c1) ) ROM_LOAD( "12.2a", 0x30000, 0x10000, CRC(5f6a6d6f) SHA1(7d546a226cda81c28e7ccfb4c5daebc65072198d) ) - ROM_REGION( 0x20000, "adpcm", 0 ) /* adpcm samples (yes these really are smaller than the original game..) */ + ROM_REGION( 0x10000, "adpcm1", 0 ) /* adpcm samples (yes these really are smaller than the original game..) */ ROM_LOAD( "14.7q", 0x00000, 0x08000, CRC(678f8657) SHA1(2652fdc6719d2c889ca87802f6e2cefae59fc2eb) ) - ROM_LOAD( "15.7o", 0x10000, 0x08000, CRC(10f21dea) SHA1(739cf649f91490384297a81a2cc9855acb58a1c0) ) + + ROM_REGION( 0x10000, "adpcm2", 0 ) /* adpcm samples */ + ROM_LOAD( "15.7o", 0x00000, 0x08000, CRC(10f21dea) SHA1(739cf649f91490384297a81a2cc9855acb58a1c0) ) ROM_REGION( 0x20000, "user1", 0 ) /* PROMs */ ROM_LOAD( "27s21.5o", 0x00000, 0x100, CRC(673f68c3) SHA1(9381453e8f868d80b6069264509a339e20e2b6b1) ) @@ -1844,9 +1881,11 @@ ROM_START( tstrike ) ROM_LOAD( "tstrike.109", 0x20000, 0x10000, CRC(8c2cd0bb) SHA1(364a708484c7750f38162d463104216bbd555b86) ) ROM_LOAD( "21j-j", 0x30000, 0x10000, CRC(5fb42e7c) SHA1(7953316712c56c6f8ca6bba127319e24b618b646) ) /* from ddragon (108) */ - ROM_REGION( 0x20000, "adpcm", 0 ) /* adpcm samples */ + ROM_REGION( 0x10000, "adpcm1", 0 ) /* adpcm samples */ ROM_LOAD( "tstrike.94", 0x00000, 0x10000, CRC(8a2c09fc) SHA1(f59a43c3fa814b169a51744f9604d36ae63c190f) ) /* first+second half identical */ - ROM_LOAD( "tstrike.95", 0x10000, 0x08000, CRC(1812eecb) SHA1(9b7d526f30a86682cdf088600b25ea5a56b112ef) ) + + ROM_REGION( 0x10000, "adpcm2", 0 ) /* adpcm samples */ + ROM_LOAD( "tstrike.95", 0x00000, 0x08000, CRC(1812eecb) SHA1(9b7d526f30a86682cdf088600b25ea5a56b112ef) ) ROM_REGION( 0x0300, "proms", 0 ) ROM_LOAD( "21j-k-0.101", 0x0000, 0x0100, CRC(fdb130a9) SHA1(4c4f214229b9fab2b5d69c745ec5428787b89e1f) ) /* layer priorities */ @@ -1888,9 +1927,11 @@ ROM_START( tstrikea ) ROM_LOAD( "tstrike.109", 0x20000, 0x10000, CRC(8c2cd0bb) SHA1(364a708484c7750f38162d463104216bbd555b86) ) ROM_LOAD( "21j-j", 0x30000, 0x10000, CRC(5fb42e7c) SHA1(7953316712c56c6f8ca6bba127319e24b618b646) ) /* from ddragon (108) */ - ROM_REGION( 0x20000, "adpcm", 0 ) /* adpcm samples */ + ROM_REGION( 0x10000, "adpcm1", 0 ) /* adpcm samples */ ROM_LOAD( "tstrike.94", 0x00000, 0x10000, CRC(8a2c09fc) SHA1(f59a43c3fa814b169a51744f9604d36ae63c190f) ) /* first+second half identical */ - ROM_LOAD( "tstrike.95", 0x10000, 0x08000, CRC(1812eecb) SHA1(9b7d526f30a86682cdf088600b25ea5a56b112ef) ) + + ROM_REGION( 0x10000, "adpcm2", 0 ) /* adpcm samples */ + ROM_LOAD( "tstrike.95", 0x00000, 0x08000, CRC(1812eecb) SHA1(9b7d526f30a86682cdf088600b25ea5a56b112ef) ) ROM_REGION( 0x0300, "proms", 0 ) ROM_LOAD( "21j-k-0.101", 0x0000, 0x0100, CRC(fdb130a9) SHA1(4c4f214229b9fab2b5d69c745ec5428787b89e1f) ) /* layer priorities */ @@ -1924,9 +1965,11 @@ ROM_START( ddungeon ) ROM_LOAD( "dd78.78", 0x00000, 0x08000, CRC(3deacae9) SHA1(6663f054ed3eed50c5cacfa5d22d465dfb179964) ) ROM_LOAD( "dd109.109", 0x10000, 0x08000, CRC(5a2f31eb) SHA1(1b85533443e148adb2a9c2c09c43cbf2c35c86bc) ) - ROM_REGION( 0x20000, "adpcm", 0 ) /* adpcm samples */ + ROM_REGION( 0x10000, "adpcm1", 0 ) /* adpcm samples */ ROM_LOAD( "21j-6", 0x00000, 0x10000, CRC(34755de3) SHA1(57c06d6ce9497901072fa50a92b6ed0d2d4d6528) ) /* at IC95 */ - ROM_LOAD( "21j-7", 0x10000, 0x10000, CRC(904de6f8) SHA1(3623e5ea05fd7c455992b7ed87e605b87c3850aa) ) /* at IC94 */ + + ROM_REGION( 0x10000, "adpcm2", 0 ) /* adpcm samples */ + ROM_LOAD( "21j-7", 0x00000, 0x10000, CRC(904de6f8) SHA1(3623e5ea05fd7c455992b7ed87e605b87c3850aa) ) /* at IC94 */ ROM_REGION( 0x0300, "proms", 0 ) ROM_LOAD( "21j-k-0.101", 0x0000, 0x0100, CRC(fdb130a9) SHA1(4c4f214229b9fab2b5d69c745ec5428787b89e1f) ) /* layer priorities */ @@ -1963,9 +2006,11 @@ ROM_START( ddungeone ) ROM_LOAD( "dd78.78", 0x00000, 0x08000, CRC(3deacae9) SHA1(6663f054ed3eed50c5cacfa5d22d465dfb179964) ) /* 6B on this board */ ROM_LOAD( "dd109.109", 0x10000, 0x08000, CRC(5a2f31eb) SHA1(1b85533443e148adb2a9c2c09c43cbf2c35c86bc) ) /* 7C on this board */ - ROM_REGION( 0x20000, "adpcm", 0 ) /* adpcm samples */ + ROM_REGION( 0x10000, "adpcm1", 0 ) /* adpcm samples */ ROM_LOAD( "21j-6", 0x00000, 0x10000, CRC(34755de3) SHA1(57c06d6ce9497901072fa50a92b6ed0d2d4d6528) ) - ROM_LOAD( "21j-7", 0x10000, 0x10000, CRC(904de6f8) SHA1(3623e5ea05fd7c455992b7ed87e605b87c3850aa) ) + + ROM_REGION( 0x10000, "adpcm2", 0 ) /* adpcm samples */ + ROM_LOAD( "21j-7", 0x00000, 0x10000, CRC(904de6f8) SHA1(3623e5ea05fd7c455992b7ed87e605b87c3850aa) ) ROM_REGION( 0x0300, "proms", 0 ) ROM_LOAD( "21j-k-0.101", 0x0000, 0x0100, CRC(fdb130a9) SHA1(4c4f214229b9fab2b5d69c745ec5428787b89e1f) ) /* layer priorities */ @@ -2008,9 +2053,11 @@ ROM_START( darktowr ) ROM_LOAD( "dt.109", 0x20000, 0x10000, CRC(15bdcb62) SHA1(75382a3805dc333b196e119d28b5c3f320bd9f2a) ) ROM_LOAD( "21j-j", 0x30000, 0x10000, CRC(5fb42e7c) SHA1(7953316712c56c6f8ca6bba127319e24b618b646) ) /* from ddragon */ - ROM_REGION( 0x20000, "adpcm", 0 ) /* adpcm samples */ + ROM_REGION( 0x10000, "adpcm1", 0 ) /* adpcm samples */ ROM_LOAD( "21j-6", 0x00000, 0x10000, CRC(34755de3) SHA1(57c06d6ce9497901072fa50a92b6ed0d2d4d6528) ) /* from ddragon */ - ROM_LOAD( "21j-7", 0x10000, 0x10000, CRC(904de6f8) SHA1(3623e5ea05fd7c455992b7ed87e605b87c3850aa) ) /* from ddragon */ + + ROM_REGION( 0x10000, "adpcm2", 0 ) /* adpcm samples */ + ROM_LOAD( "21j-7", 0x00000, 0x10000, CRC(904de6f8) SHA1(3623e5ea05fd7c455992b7ed87e605b87c3850aa) ) /* from ddragon */ ROM_REGION( 0x0300, "proms", 0 ) ROM_LOAD( "21j-k-0.101", 0x0000, 0x0100, CRC(fdb130a9) SHA1(4c4f214229b9fab2b5d69c745ec5428787b89e1f) ) /* layer priorities */ @@ -2090,7 +2137,6 @@ ROM_END void ddragon_state::init_ddragon() { m_sprite_irq = INPUT_LINE_NMI; - m_ym_irq = M6809_FIRQ_LINE; m_technos_video_hw = 0; } @@ -2098,7 +2144,6 @@ void ddragon_state::init_ddragon() void ddragon_state::init_ddragon2() { m_sprite_irq = INPUT_LINE_NMI; - m_ym_irq = 0; m_technos_video_hw = 2; } @@ -2108,18 +2153,14 @@ void darktowr_state::init_darktowr() save_item(NAME(m_mcu_port_a_out)); m_sprite_irq = INPUT_LINE_NMI; - m_ym_irq = M6809_FIRQ_LINE; m_technos_video_hw = 0; - m_maincpu->space(AS_PROGRAM).install_write_handler(0x3808, 0x3808, write8_delegate(FUNC(darktowr_state::darktowr_bankswitch_w), this)); m_mcu_port_a_out = 0xff; } void toffy_state::init_toffy() { - m_ym_irq = M6809_FIRQ_LINE; m_technos_video_hw = 0; - m_maincpu->space(AS_PROGRAM).install_write_handler(0x3808, 0x3808, write8_delegate(FUNC(toffy_state::toffy_bankswitch_w), this)); /* the program rom has a simple bitswap encryption */ uint8_t *rom = memregion("maincpu")->base(); @@ -2168,7 +2209,6 @@ void ddragon_state::init_ddragon6809() } m_sprite_irq = INPUT_LINE_NMI; - m_ym_irq = M6809_FIRQ_LINE; m_technos_video_hw = 0; } diff --git a/src/mame/includes/ddragon.h b/src/mame/includes/ddragon.h index 36003266b43..974fedefe15 100644 --- a/src/mame/includes/ddragon.h +++ b/src/mame/includes/ddragon.h @@ -7,6 +7,7 @@ *************************************************************************/ #include "cpu/m6805/m68705.h" +#include "machine/bankdev.h" #include "machine/gen_latch.h" #include "machine/timer.h" #include "sound/msm5205.h" @@ -29,12 +30,13 @@ public: , m_maincpu(*this, "maincpu") , m_soundcpu(*this, "soundcpu") , m_subcpu(*this, "sub") - , m_adpcm1(*this, "adpcm1") - , m_adpcm2(*this, "adpcm2") + , m_adpcm(*this, "adpcm%u", 1U) , m_gfxdecode(*this, "gfxdecode") , m_screen(*this, "screen") , m_palette(*this, "palette") , m_soundlatch(*this, "soundlatch") + , m_mainbank(*this, "mainbank") + , m_adpcm_rom(*this, "adpcm%u", 1U) { } @@ -50,18 +52,17 @@ public: /* video-related */ tilemap_t *m_fg_tilemap; tilemap_t *m_bg_tilemap; - uint8_t m_technos_video_hw; - uint8_t m_scrollx_hi; - uint8_t m_scrolly_hi; + uint8_t m_technos_video_hw; + uint8_t m_scrollx_hi; + uint8_t m_scrolly_hi; /* misc */ - uint8_t m_ddragon_sub_port; - uint8_t m_sprite_irq; - uint8_t m_ym_irq; - uint8_t m_adpcm_sound_irq; - uint32_t m_adpcm_pos[2]; - uint32_t m_adpcm_end[2]; - uint8_t m_adpcm_idle[2]; + uint8_t m_ddragon_sub_port; + uint8_t m_sprite_irq; + uint8_t m_adpcm_sound_irq; + uint32_t m_adpcm_pos[2]; + uint32_t m_adpcm_end[2]; + bool m_adpcm_idle[2]; int m_adpcm_data[2]; /* for Sai Yu Gou Ma Roku */ @@ -79,17 +80,18 @@ public: required_device m_maincpu; required_device m_soundcpu; optional_device m_subcpu; - optional_device m_adpcm1; - optional_device m_adpcm2; + optional_device_array m_adpcm; required_device m_gfxdecode; required_device m_screen; required_device m_palette; required_device m_soundlatch; + optional_memory_bank m_mainbank; + optional_region_ptr_array m_adpcm_rom; int scanline_to_vcount(int scanline); void ddragon_interrupt_ack(address_space &space, offs_t offset, uint8_t data); - void dd_adpcm_int(msm5205_device *device, int chip); + void dd_adpcm_int(int chip); /* video/ddragon.c */ TILEMAP_MAPPER_MEMBER(background_scan); @@ -105,7 +107,6 @@ public: TIMER_DEVICE_CALLBACK_MEMBER(ddragon_scanline); - DECLARE_WRITE_LINE_MEMBER(irq_handler); DECLARE_WRITE8_MEMBER(ddragon_bgvideoram_w); DECLARE_WRITE8_MEMBER(ddragon_fgvideoram_w); DECLARE_CUSTOM_INPUT_MEMBER(subcpu_bus_free); @@ -136,6 +137,7 @@ public: void dd2_sound_map(address_map &map); void dd2_sub_map(address_map &map); void ddragon_map(address_map &map); + void ddragon_base_map(address_map &map); void ddragonba_sub_map(address_map &map); void ddragonba_sub_portmap(address_map &map); void sound_map(address_map &map); @@ -149,6 +151,7 @@ public: darktowr_state(const machine_config &mconfig, device_type type, const char *tag) : ddragon_state(mconfig, type, tag) , m_mcu(*this, "mcu") + , m_darktowr_bank(*this, "darktowr_bank") , m_mcu_port_a_out(0xff) { } @@ -161,10 +164,13 @@ public: void init_darktowr(); void darktowr(machine_config &config); + void darktowr_map(address_map &map); + void darktowr_banked_map(address_map &map); protected: required_device m_mcu; + optional_device m_darktowr_bank; - uint8_t m_mcu_port_a_out;; + uint8_t m_mcu_port_a_out; }; @@ -180,4 +186,5 @@ public: void init_toffy(); void toffy(machine_config &config); + void toffy_map(address_map &map); }; diff --git a/src/mame/video/ddragon.cpp b/src/mame/video/ddragon.cpp index 6c4f33f454b..b79ab7f911b 100644 --- a/src/mame/video/ddragon.cpp +++ b/src/mame/video/ddragon.cpp @@ -55,32 +55,35 @@ Sprite layout. TILEMAP_MAPPER_MEMBER(ddragon_state::background_scan) { /* logical (col,row) -> memory offset */ - return (col & 0x0f) + ((row & 0x0f) << 4) + ((col & 0x10) << 4) + ((row & 0x10) << 5); + return (col & 0x0f) | ((row & 0x0f) << 4) | ((col & 0x10) << 4) | ((row & 0x10) << 5); } TILE_GET_INFO_MEMBER(ddragon_state::get_bg_tile_info) { - uint8_t attr = m_bgvideoram[2 * tile_index]; + tile_index <<= 1; + uint8_t attr = m_bgvideoram[tile_index]; SET_TILE_INFO_MEMBER(2, - m_bgvideoram[2 * tile_index+1] + ((attr & 0x07) << 8), + m_bgvideoram[tile_index | 1] | ((attr & 0x07) << 8), (attr >> 3) & 0x07, TILE_FLIPYX((attr & 0xc0) >> 6)); } TILE_GET_INFO_MEMBER(ddragon_state::get_fg_tile_info) { - uint8_t attr = m_fgvideoram[2 * tile_index]; + tile_index <<= 1; + uint8_t attr = m_fgvideoram[tile_index]; SET_TILE_INFO_MEMBER(0, - m_fgvideoram[2 * tile_index + 1] + ((attr & 0x07) << 8), + m_fgvideoram[tile_index | 1] | ((attr & 0x07) << 8), attr >> 5, 0); } TILE_GET_INFO_MEMBER(ddragon_state::get_fg_16color_tile_info) { - uint8_t attr = m_fgvideoram[2 * tile_index]; + tile_index <<= 1; + uint8_t attr = m_fgvideoram[tile_index]; SET_TILE_INFO_MEMBER(0, - m_fgvideoram[2 * tile_index+1] + ((attr & 0x0f) << 8), + m_fgvideoram[tile_index | 1] | ((attr & 0x0f) << 8), attr >> 4, 0); } @@ -114,13 +117,13 @@ VIDEO_START_MEMBER(ddragon_state,ddragon) WRITE8_MEMBER(ddragon_state::ddragon_bgvideoram_w) { m_bgvideoram[offset] = data; - m_bg_tilemap->mark_tile_dirty(offset / 2); + m_bg_tilemap->mark_tile_dirty(offset >> 1); } WRITE8_MEMBER(ddragon_state::ddragon_fgvideoram_w) { m_fgvideoram[offset] = data; - m_fg_tilemap->mark_tile_dirty(offset / 2); + m_fg_tilemap->mark_tile_dirty(offset >> 1); } @@ -145,8 +148,8 @@ void ddragon_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect) int attr = src[i + 1]; if (attr & 0x80) /* visible */ { - int sx = 240 - src[i + 4] + ((attr & 2) << 7); - int sy = 232 - src[i + 0] + ((attr & 1) << 8); + int sx = 240 - (src[i + 4] | ((attr & 2) << 7)); + int sy = 232 - (src[i + 0] | ((attr & 1) << 8)); int size = (attr & 0x30) >> 4; int flipx = attr & 8; int flipy = attr & 4; @@ -158,7 +161,7 @@ void ddragon_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect) if (m_technos_video_hw == 2) /* Double Dragon 2 */ { color = src[i + 2] >> 5; - which = src[i + 3] + ((src[i + 2] & 0x1f) << 8); + which = src[i + 3] | ((src[i + 2] & 0x1f) << 8); } else { @@ -168,7 +171,7 @@ void ddragon_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect) if ((sy < -7) && (sy > -16)) sy += 256; /* fix sprite clip */ } color = src[i + 2] >> 4; - which = src[i + 3] + ((src[i + 2] & 0x0f) << 8); + which = src[i + 3] | ((src[i + 2] & 0x0f) << 8); } if (flip_screen())