summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/chqflag.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/chqflag.cpp')
-rw-r--r--src/mame/drivers/chqflag.cpp53
1 files changed, 21 insertions, 32 deletions
diff --git a/src/mame/drivers/chqflag.cpp b/src/mame/drivers/chqflag.cpp
index 00e59fe4604..7ffcfa9a18b 100644
--- a/src/mame/drivers/chqflag.cpp
+++ b/src/mame/drivers/chqflag.cpp
@@ -25,6 +25,7 @@
#include "cpu/z80/z80.h"
#include "cpu/m6809/konami.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/ym2151.h"
#include "speaker.h"
@@ -33,20 +34,13 @@
/* these trampolines are less confusing than nested address_map_bank_devices */
-READ8_MEMBER(chqflag_state::k051316_1_ramrom_r)
+template<int Chip>
+READ8_MEMBER(chqflag_state::k051316_ramrom_r)
{
if (m_k051316_readroms)
- return m_k051316_1->rom_r(space, offset);
+ return m_k051316[Chip]->rom_r(space, offset);
else
- return m_k051316_1->read(space, offset);
-}
-
-READ8_MEMBER(chqflag_state::k051316_2_ramrom_r)
-{
- if (m_k051316_readroms)
- return m_k051316_2->rom_r(space, offset);
- else
- return m_k051316_2->read(space, offset);
+ return m_k051316[Chip]->read(space, offset);
}
WRITE8_MEMBER(chqflag_state::chqflag_bankswitch_w)
@@ -129,12 +123,6 @@ READ8_MEMBER(chqflag_state::analog_read_r)
return 0xff;
}
-WRITE8_MEMBER(chqflag_state::chqflag_sh_irqtrigger_w)
-{
- m_soundlatch2->write(space, 0, data);
- m_audiocpu->set_input_line(0, HOLD_LINE);
-}
-
/****************************************************************************/
@@ -144,9 +132,9 @@ void chqflag_state::chqflag_map(address_map &map)
map(0x1000, 0x1fff).m(m_bank1000, FUNC(address_map_bank_device::amap8));
map(0x2000, 0x2007).rw(m_k051960, FUNC(k051960_device::k051937_r), FUNC(k051960_device::k051937_w)); /* Sprite control registers */
map(0x2400, 0x27ff).rw(m_k051960, FUNC(k051960_device::k051960_r), FUNC(k051960_device::k051960_w)); /* Sprite RAM */
- map(0x2800, 0x2fff).r(this, FUNC(chqflag_state::k051316_2_ramrom_r)).w(m_k051316_2, FUNC(k051316_device::write)); /* 051316 zoom/rotation (chip 2) */
+ map(0x2800, 0x2fff).r(this, FUNC(chqflag_state::k051316_ramrom_r<1>)).w(m_k051316[1], FUNC(k051316_device::write)); /* 051316 zoom/rotation (chip 2) */
map(0x3000, 0x3000).w("soundlatch", FUNC(generic_latch_8_device::write)); /* sound code # */
- map(0x3001, 0x3001).w(this, FUNC(chqflag_state::chqflag_sh_irqtrigger_w)); /* cause interrupt on audio CPU */
+ map(0x3001, 0x3001).w("soundlatch2", FUNC(generic_latch_8_device::write)); /* cause interrupt on audio CPU */
map(0x3002, 0x3002).w(this, FUNC(chqflag_state::chqflag_bankswitch_w)); /* bankswitch control */
map(0x3003, 0x3003).w(this, FUNC(chqflag_state::chqflag_vreg_w)); /* enable K051316 ROM reading */
map(0x3100, 0x3100).portr("DSW1"); /* DIPSW #1 */
@@ -155,8 +143,8 @@ void chqflag_state::chqflag_map(address_map &map)
map(0x3203, 0x3203).portr("DSW2"); /* DIPSW #2 */
map(0x3300, 0x3300).w("watchdog", FUNC(watchdog_timer_device::reset_w)); /* watchdog timer */
map(0x3400, 0x341f).rw("k051733", FUNC(k051733_device::read), FUNC(k051733_device::write)); /* 051733 (protection) */
- map(0x3500, 0x350f).w(m_k051316_1, FUNC(k051316_device::ctrl_w)); /* 051316 control registers (chip 1) */
- map(0x3600, 0x360f).w(m_k051316_2, FUNC(k051316_device::ctrl_w)); /* 051316 control registers (chip 2) */
+ map(0x3500, 0x350f).w(m_k051316[0], FUNC(k051316_device::ctrl_w)); /* 051316 control registers (chip 1) */
+ map(0x3600, 0x360f).w(m_k051316[1], FUNC(k051316_device::ctrl_w)); /* 051316 control registers (chip 2) */
map(0x3700, 0x3700).w(this, FUNC(chqflag_state::select_analog_ctrl_w)); /* select accelerator/wheel */
map(0x3701, 0x3701).portr("IN2"); /* Brake + Shift + ? */
map(0x3702, 0x3702).rw(this, FUNC(chqflag_state::analog_read_r), FUNC(chqflag_state::select_analog_ctrl_w)); /* accelerator/wheel */
@@ -167,7 +155,7 @@ void chqflag_state::chqflag_map(address_map &map)
void chqflag_state::bank1000_map(address_map &map)
{
map(0x0000, 0x0fff).ram();
- map(0x1000, 0x17ff).r(this, FUNC(chqflag_state::k051316_1_ramrom_r)).w(m_k051316_1, FUNC(k051316_device::write));
+ map(0x1000, 0x17ff).r(this, FUNC(chqflag_state::k051316_ramrom_r<0>)).w(m_k051316[0], FUNC(k051316_device::write));
map(0x1800, 0x1fff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette");
}
@@ -179,12 +167,12 @@ WRITE8_MEMBER(chqflag_state::k007232_bankswitch_w)
/* banks # for the 007232 (chip 1) */
bank_A = ((data >> 4) & 0x03);
bank_B = ((data >> 6) & 0x03);
- m_k007232_1->set_bank(bank_A, bank_B);
+ m_k007232[0]->set_bank(bank_A, bank_B);
/* banks # for the 007232 (chip 2) */
bank_A = ((data >> 0) & 0x03);
bank_B = ((data >> 2) & 0x03);
- m_k007232_2->set_bank(bank_A, bank_B);
+ m_k007232[1]->set_bank(bank_A, bank_B);
}
void chqflag_state::chqflag_sound_map(address_map &map)
@@ -192,13 +180,13 @@ void chqflag_state::chqflag_sound_map(address_map &map)
map(0x0000, 0x7fff).rom(); /* ROM */
map(0x8000, 0x87ff).ram(); /* RAM */
map(0x9000, 0x9000).w(this, FUNC(chqflag_state::k007232_bankswitch_w)); /* 007232 bankswitch */
- map(0xa000, 0xa00d).rw(m_k007232_1, FUNC(k007232_device::read), FUNC(k007232_device::write)); /* 007232 (chip 1) */
+ map(0xa000, 0xa00d).rw(m_k007232[0], FUNC(k007232_device::read), FUNC(k007232_device::write)); /* 007232 (chip 1) */
map(0xa01c, 0xa01c).w(this, FUNC(chqflag_state::k007232_extvolume_w)); /* extra volume, goes to the 007232 w/ A4 */
/* selecting a different latch for the external port */
- map(0xb000, 0xb00d).rw(m_k007232_2, FUNC(k007232_device::read), FUNC(k007232_device::write)); /* 007232 (chip 2) */
+ map(0xb000, 0xb00d).rw(m_k007232[1], FUNC(k007232_device::read), FUNC(k007232_device::write)); /* 007232 (chip 2) */
map(0xc000, 0xc001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)); /* YM2151 */
map(0xd000, 0xd000).r("soundlatch", FUNC(generic_latch_8_device::read));
- map(0xe000, 0xe000).r(m_soundlatch2, FUNC(generic_latch_8_device::read)); /* engine sound volume */
+ map(0xe000, 0xe000).r("soundlatch2", FUNC(generic_latch_8_device::read)); /* engine sound volume */
map(0xf000, 0xf000).nopw(); /* ??? */
}
@@ -271,20 +259,20 @@ WRITE8_MEMBER(chqflag_state::volume_callback0)
{
// volume/pan for one of the channels on this chip
// which channel and which bits are left/right is a guess
- m_k007232_1->set_volume(0, (data & 0x0f) * 0x11/2, (data >> 4) * 0x11/2);
+ m_k007232[0]->set_volume(0, (data & 0x0f) * 0x11/2, (data >> 4) * 0x11/2);
}
WRITE8_MEMBER(chqflag_state::k007232_extvolume_w)
{
// volume/pan for one of the channels on this chip
// which channel and which bits are left/right is a guess
- m_k007232_1->set_volume(1, (data & 0x0f) * 0x11/2, (data >> 4) * 0x11/2);
+ m_k007232[0]->set_volume(1, (data & 0x0f) * 0x11/2, (data >> 4) * 0x11/2);
}
WRITE8_MEMBER(chqflag_state::volume_callback1)
{
- m_k007232_2->set_volume(0, (data >> 4) * 0x11, 0);
- m_k007232_2->set_volume(1, 0, (data & 0x0f) * 0x11);
+ m_k007232[1]->set_volume(0, (data >> 4) * 0x11, 0);
+ m_k007232[1]->set_volume(1, 0, (data & 0x0f) * 0x11);
}
void chqflag_state::machine_start()
@@ -387,6 +375,7 @@ MACHINE_CONFIG_START(chqflag_state::chqflag)
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
+ MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("audiocpu", 0))
MCFG_YM2151_ADD("ymsnd", XTAL(3'579'545)) /* verified on pcb */
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_NMI))
@@ -463,6 +452,6 @@ ROM_START( chqflagj )
ROM_END
-// YEAR, NAME, PARENT, MACHINE, INPUT, STATE, INIT, MONITOR, COMPANY, FULLNAME, FLAGS, LAYOUT
+// YEAR, NAME, PARENT, MACHINE, INPUT, STATE, INIT, MONITOR, COMPANY, FULLNAME, FLAGS, LAYOUT
GAMEL( 1988, chqflag, 0, chqflag, chqflag, chqflag_state, 0, ROT90, "Konami", "Chequered Flag", MACHINE_UNEMULATED_PROTECTION | MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_chqflag )
GAMEL( 1988, chqflagj, chqflag, chqflag, chqflagj, chqflag_state, 0, ROT90, "Konami", "Chequered Flag (Japan)", MACHINE_UNEMULATED_PROTECTION | MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_chqflag )