taito_l: split giant state class up into family tree, reduce tagmap lookups

This commit is contained in:
Vas Crabb 2017-01-13 00:35:25 +11:00
parent 936498261b
commit d3b9d5482f
5 changed files with 502 additions and 336 deletions

View File

@ -69,8 +69,6 @@ puzznici note
namespace { namespace {
char const *const bankname[] = { "bank2", "bank3", "bank4", "bank5" };
struct struct
{ {
void (taitol_state::*notifier)(int); void (taitol_state::*notifier)(int);
@ -118,23 +116,9 @@ void taitol_state::state_register()
save_item(NAME(m_irq_enable)); save_item(NAME(m_irq_enable));
save_item(NAME(m_cur_rambank)); save_item(NAME(m_cur_rambank));
save_item(NAME(m_cur_rombank)); save_item(NAME(m_cur_rombank));
save_item(NAME(m_cur_rombank2));
save_item(NAME(m_adpcm_pos));
save_item(NAME(m_adpcm_data));
save_item(NAME(m_trackx));
save_item(NAME(m_tracky));
save_item(NAME(m_mux_ctrl));
save_item(NAME(m_extport));
save_item(NAME(m_last_irq_level)); save_item(NAME(m_last_irq_level));
save_item(NAME(m_high)); save_item(NAME(m_high));
save_item(NAME(m_high2));
save_item(NAME(m_mcu_pos));
save_item(NAME(m_mcu_reply_len));
save_item(NAME(m_last_data_adr));
save_item(NAME(m_last_data));
save_item(NAME(m_cur_bank));
save_item(NAME(m_bankc)); save_item(NAME(m_bankc));
save_item(NAME(m_horshoes_gfxbank)); save_item(NAME(m_horshoes_gfxbank));
@ -142,6 +126,56 @@ void taitol_state::state_register()
save_item(NAME(m_flipscreen)); save_item(NAME(m_flipscreen));
} }
void taitol_2cpu_state::state_register()
{
taitol_state::state_register();
save_item(NAME(m_mux_ctrl));
}
void taitol_3cpu_state::state_register()
{
taitol_2cpu_state::state_register();
save_item(NAME(m_cur_rombank2));
save_item(NAME(m_high2));
save_item(NAME(m_cur_audio_bnk));
}
void champwr_state::state_register()
{
taitol_3cpu_state::state_register();
save_item(NAME(m_adpcm_pos));
save_item(NAME(m_adpcm_data));
}
void taitol_1cpu_state::state_register()
{
taitol_state::state_register();
save_item(NAME(m_extport));
}
void puzznic_state::state_register()
{
taitol_1cpu_state::state_register();
save_item(NAME(m_mcu_pos));
save_item(NAME(m_mcu_reply_len));
save_item(NAME(m_last_data_adr));
save_item(NAME(m_last_data));
}
void horshoes_state::state_register()
{
taitol_1cpu_state::state_register();
save_item(NAME(m_trackx));
save_item(NAME(m_tracky));
}
MACHINE_START_MEMBER(taitol_state, taito_l) MACHINE_START_MEMBER(taitol_state, taito_l)
{ {
save_item(NAME(m_rambanks)); save_item(NAME(m_rambanks));
@ -163,28 +197,16 @@ void taitol_state::taito_machine_reset()
m_cur_rambank[i] = 0x80; m_cur_rambank[i] = 0x80;
m_current_notifier[i] = &taitol_state::palette_notifier; m_current_notifier[i] = &taitol_state::palette_notifier;
m_current_base[i] = m_palette_ram; m_current_base[i] = m_palette_ram;
membank(bankname[i])->set_base(m_current_base[i]); m_ram_bnks[i]->set_base(m_current_base[i]);
} }
m_cur_rombank = m_cur_rombank2 = 0; m_cur_rombank = 0;
membank("bank1")->set_base(memregion("maincpu")->base()); m_main_bnk->set_base(&m_main_prg[0]);
m_gfxdecode->gfx(2)->set_source(m_rambanks); m_gfxdecode->gfx(2)->set_source(m_rambanks);
m_adpcm_pos = 0;
m_adpcm_data = -1;
m_trackx = m_tracky = 0;
m_mux_ctrl = 0;
m_extport = 0;
m_last_irq_level = 0; m_last_irq_level = 0;
m_high = 0; m_high = 0;
m_high2 = 0;
m_mcu_reply = puzznic_mcu_reply;
m_mcu_pos = m_mcu_reply_len = 0;
m_last_data_adr = m_last_data = 0;
m_cur_bank = 1;
/* video related */ /* video related */
m_bankc[0] = m_bankc[1] = m_bankc[2] = m_bankc[3] = 0; m_bankc[0] = m_bankc[1] = m_bankc[2] = m_bankc[3] = 0;
@ -193,54 +215,60 @@ void taitol_state::taito_machine_reset()
m_flipscreen = 0; m_flipscreen = 0;
} }
void taitol_2cpu_state::taito_machine_reset()
MACHINE_RESET_MEMBER(taitol_state,fhawk)
{ {
taito_machine_reset(); taitol_state::taito_machine_reset();
m_porte0_tag = nullptr;
m_porte1_tag = nullptr; m_mux_ctrl = 0;
m_portf0_tag = nullptr;
m_portf1_tag = nullptr;
} }
MACHINE_RESET_MEMBER(taitol_state,raimais) void taitol_3cpu_state::taito_machine_reset()
{ {
taito_machine_reset(); taitol_2cpu_state::taito_machine_reset();
m_porte0_tag = nullptr;
m_porte1_tag = nullptr; m_cur_rombank2 = 0;
m_portf0_tag = nullptr; m_high2 = 0;
m_portf1_tag = nullptr; m_cur_audio_bnk = 1;
} }
MACHINE_RESET_MEMBER(taitol_state,champwr) void champwr_state::taito_machine_reset()
{ {
taito_machine_reset(); taitol_3cpu_state::taito_machine_reset();
m_porte0_tag = nullptr;
m_porte1_tag = nullptr; m_adpcm_pos = 0;
m_portf0_tag = nullptr; m_adpcm_data = -1;
m_portf1_tag = nullptr; }
void taitol_1cpu_state::taito_machine_reset()
{
taitol_state::taito_machine_reset();
m_extport = 0;
}
void puzznic_state::taito_machine_reset()
{
taitol_1cpu_state::taito_machine_reset();
m_mcu_reply = puzznic_mcu_reply;
m_mcu_pos = m_mcu_reply_len = 0;
m_last_data_adr = m_last_data = 0;
}
void horshoes_state::taito_machine_reset()
{
taitol_1cpu_state::taito_machine_reset();
m_trackx = m_tracky = 0;
} }
MACHINE_RESET_MEMBER(taitol_state,kurikint) MACHINE_RESET_MEMBER(taitol_state, taito_l)
{ {
taito_machine_reset(); taito_machine_reset();
m_porte0_tag = nullptr;
m_porte1_tag = nullptr;
m_portf0_tag = nullptr;
m_portf1_tag = nullptr;
} }
MACHINE_RESET_MEMBER(taitol_state,evilston) MACHINE_RESET_MEMBER(taitol_1cpu_state, puzznic)
{
taito_machine_reset();
m_porte0_tag = nullptr;
m_porte1_tag = nullptr;
m_portf0_tag = nullptr;
m_portf1_tag = nullptr;
}
MACHINE_RESET_MEMBER(taitol_state,puzznic)
{ {
taito_machine_reset(); taito_machine_reset();
m_porte0_tag = "DSWA"; m_porte0_tag = "DSWA";
@ -249,7 +277,7 @@ MACHINE_RESET_MEMBER(taitol_state,puzznic)
m_portf1_tag = "IN1"; m_portf1_tag = "IN1";
} }
MACHINE_RESET_MEMBER(taitol_state,plotting) MACHINE_RESET_MEMBER(taitol_1cpu_state, plotting)
{ {
taito_machine_reset(); taito_machine_reset();
m_porte0_tag = "DSWA"; m_porte0_tag = "DSWA";
@ -258,7 +286,7 @@ MACHINE_RESET_MEMBER(taitol_state,plotting)
m_portf1_tag = "IN1"; m_portf1_tag = "IN1";
} }
MACHINE_RESET_MEMBER(taitol_state,palamed) MACHINE_RESET_MEMBER(taitol_1cpu_state, palamed)
{ {
taito_machine_reset(); taito_machine_reset();
m_porte0_tag = "DSWA"; m_porte0_tag = "DSWA";
@ -267,7 +295,7 @@ MACHINE_RESET_MEMBER(taitol_state,palamed)
m_portf1_tag = nullptr; m_portf1_tag = nullptr;
} }
MACHINE_RESET_MEMBER(taitol_state,cachat) MACHINE_RESET_MEMBER(taitol_1cpu_state, cachat)
{ {
taito_machine_reset(); taito_machine_reset();
m_porte0_tag = "DSWA"; m_porte0_tag = "DSWA";
@ -276,7 +304,7 @@ MACHINE_RESET_MEMBER(taitol_state,cachat)
m_portf1_tag = nullptr; m_portf1_tag = nullptr;
} }
MACHINE_RESET_MEMBER(taitol_state,horshoes) MACHINE_RESET_MEMBER(horshoes_state, horshoes)
{ {
taito_machine_reset(); taito_machine_reset();
m_porte0_tag = "DSWA"; m_porte0_tag = "DSWA";
@ -296,7 +324,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(taitol_state::vbl_interrupt)
int scanline = param; int scanline = param;
/* kludge to make plgirls boot */ /* kludge to make plgirls boot */
if (m_maincpu->state_int(Z80_IM) != 2) if (m_main_cpu->state_int(Z80_IM) != 2)
return; return;
// What is really generating interrupts 0 and 1 is still to be found // What is really generating interrupts 0 and 1 is still to be found
@ -304,17 +332,17 @@ TIMER_DEVICE_CALLBACK_MEMBER(taitol_state::vbl_interrupt)
if (scanline == 120 && (m_irq_enable & 1)) if (scanline == 120 && (m_irq_enable & 1))
{ {
m_last_irq_level = 0; m_last_irq_level = 0;
m_maincpu->set_input_line(0, HOLD_LINE); m_main_cpu->set_input_line(0, HOLD_LINE);
} }
else if (scanline == 0 && (m_irq_enable & 2)) else if (scanline == 0 && (m_irq_enable & 2))
{ {
m_last_irq_level = 1; m_last_irq_level = 1;
m_maincpu->set_input_line(0, HOLD_LINE); m_main_cpu->set_input_line(0, HOLD_LINE);
} }
else if (scanline == 240 && (m_irq_enable & 4)) else if (scanline == 240 && (m_irq_enable & 4))
{ {
m_last_irq_level = 2; m_last_irq_level = 2;
m_maincpu->set_input_line(0, HOLD_LINE); m_main_cpu->set_input_line(0, HOLD_LINE);
} }
} }
@ -336,7 +364,7 @@ WRITE8_MEMBER(taitol_state::irq_enable_w)
// fix Plotting test mode // fix Plotting test mode
if ((m_irq_enable & (1 << m_last_irq_level)) == 0) if ((m_irq_enable & (1 << m_last_irq_level)) == 0)
m_maincpu->set_input_line(0, CLEAR_LINE); m_main_cpu->set_input_line(0, CLEAR_LINE);
} }
READ8_MEMBER(taitol_state::irq_enable_r) READ8_MEMBER(taitol_state::irq_enable_r)
@ -357,11 +385,11 @@ WRITE8_MEMBER(taitol_state::rombankswitch_w)
//logerror("robs %d, %02x (%04x)\n", offset, data, space.device().safe_pc()); //logerror("robs %d, %02x (%04x)\n", offset, data, space.device().safe_pc());
m_cur_rombank = data; m_cur_rombank = data;
membank("bank1")->set_base(memregion("maincpu")->base() + 0x2000 * m_cur_rombank); m_main_bnk->set_base(&m_main_prg[0x2000 * m_cur_rombank]);
} }
} }
WRITE8_MEMBER(taitol_state::rombank2switch_w) WRITE8_MEMBER(taitol_3cpu_state::rombank2switch_w)
{ {
data &= 0xf; data &= 0xf;
@ -376,7 +404,7 @@ WRITE8_MEMBER(taitol_state::rombank2switch_w)
//logerror("robs2 %02x (%04x)\n", data, space.device().safe_pc()); //logerror("robs2 %02x (%04x)\n", data, space.device().safe_pc());
m_cur_rombank2 = data; m_cur_rombank2 = data;
membank("bank6")->set_base(memregion("slave")->base() + 0x4000 * m_cur_rombank2); m_slave_bnk->set_base(&m_slave_prg[0x4000 * m_cur_rombank2]);
} }
} }
@ -385,7 +413,7 @@ READ8_MEMBER(taitol_state::rombankswitch_r)
return m_cur_rombank; return m_cur_rombank;
} }
READ8_MEMBER(taitol_state::rombank2switch_r) READ8_MEMBER(taitol_3cpu_state::rombank2switch_r)
{ {
return m_cur_rombank2; return m_cur_rombank2;
} }
@ -395,7 +423,7 @@ WRITE8_MEMBER(taitol_state::rambankswitch_w)
if (m_cur_rambank[offset] != data) if (m_cur_rambank[offset] != data)
{ {
m_cur_rambank[offset] = data; m_cur_rambank[offset] = data;
//logerror("rabs %d, %02x (%04x)\n", offset, data, space.device().safe_pc()); //logerror("rabs %d, %02x (%04x)\n", offset, data, space.device().safe_pc());
if (data >= 0x14 && data <= 0x1f) if (data >= 0x14 && data <= 0x1f)
{ {
data -= 0x14; data -= 0x14;
@ -413,7 +441,7 @@ WRITE8_MEMBER(taitol_state::rambankswitch_w)
m_current_notifier[offset] = nullptr; m_current_notifier[offset] = nullptr;
m_current_base[offset] = m_empty_ram; m_current_base[offset] = m_empty_ram;
} }
membank(bankname[offset])->set_base(m_current_base[offset]); m_ram_bnks[offset]->set_base(m_current_base[offset]);
} }
} }
@ -452,7 +480,7 @@ WRITE8_MEMBER(taitol_state::bank3_w)
bank_w(space, offset, data, 3); bank_w(space, offset, data, 3);
} }
WRITE8_MEMBER(taitol_state::control2_w) WRITE8_MEMBER(taitol_2cpu_state::control2_w)
{ {
machine().bookkeeping().coin_lockout_w(0, ~data & 0x01); machine().bookkeeping().coin_lockout_w(0, ~data & 0x01);
machine().bookkeeping().coin_lockout_w(1, ~data & 0x02); machine().bookkeeping().coin_lockout_w(1, ~data & 0x02);
@ -460,24 +488,23 @@ WRITE8_MEMBER(taitol_state::control2_w)
machine().bookkeeping().coin_counter_w(1, data & 0x08); machine().bookkeeping().coin_counter_w(1, data & 0x08);
} }
READ8_MEMBER(taitol_state::portA_r) READ8_MEMBER(taitol_1cpu_state::portA_r)
{ {
return ioport((m_extport == 0) ? m_porte0_tag : m_porte1_tag)->read(); return ioport((m_extport == 0) ? m_porte0_tag : m_porte1_tag)->read();
} }
READ8_MEMBER(taitol_state::portB_r) READ8_MEMBER(taitol_1cpu_state::portB_r)
{ {
return ioport((m_extport == 0) ? m_portf0_tag : m_portf1_tag)->read(); return ioport((m_extport == 0) ? m_portf0_tag : m_portf1_tag)->read();
} }
READ8_MEMBER(taitol_state::extport_select_and_ym2203_r) READ8_MEMBER(taitol_1cpu_state::extport_select_and_ym2203_r)
{ {
ym2203_device *ym2203 = machine().device<ym2203_device>("ymsnd");
m_extport = (offset >> 1) & 1; m_extport = (offset >> 1) & 1;
return ym2203->read(space, offset & 1); return m_ymsnd->read(space, offset & 1);
} }
WRITE8_MEMBER(taitol_state::mcu_data_w) WRITE8_MEMBER(puzznic_state::mcu_data_w)
{ {
m_last_data = data; m_last_data = data;
m_last_data_adr = space.device().safe_pc(); m_last_data_adr = space.device().safe_pc();
@ -496,7 +523,7 @@ WRITE8_MEMBER(taitol_state::mcu_control_w)
// logerror("mcu control %02x (%04x)\n", data, space.device().safe_pc()); // logerror("mcu control %02x (%04x)\n", data, space.device().safe_pc());
} }
READ8_MEMBER(taitol_state::mcu_data_r) READ8_MEMBER(puzznic_state::mcu_data_r)
{ {
// logerror("mcu read (%04x) [%02x, %04x]\n", space.device().safe_pc(), last_data, last_data_adr); // logerror("mcu read (%04x) [%02x, %04x]\n", space.device().safe_pc(), last_data, last_data_adr);
if (m_mcu_pos == m_mcu_reply_len) if (m_mcu_pos == m_mcu_reply_len)
@ -518,27 +545,27 @@ WRITE8_MEMBER(taitol_state::sound_w)
} }
#endif #endif
READ8_MEMBER(taitol_state::mux_r) READ8_MEMBER(taitol_2cpu_state::mux_r)
{ {
switch (m_mux_ctrl) switch (m_mux_ctrl)
{ {
case 0: case 0:
return ioport("DSWA")->read(); return m_dswa->read();
case 1: case 1:
return ioport("DSWB")->read(); return m_dswb->read();
case 2: case 2:
return ioport("IN0")->read(); return m_in0->read();
case 3: case 3:
return ioport("IN1")->read(); return m_in1->read();
case 7: case 7:
return ioport("IN2")->read(); return m_in2->read();
default: default:
logerror("Mux read from unknown port %d (%04x)\n", m_mux_ctrl, space.device().safe_pc()); logerror("Mux read from unknown port %d (%04x)\n", m_mux_ctrl, space.device().safe_pc());
return 0xff; return 0xff;
} }
} }
WRITE8_MEMBER(taitol_state::mux_w) WRITE8_MEMBER(taitol_2cpu_state::mux_w)
{ {
switch (m_mux_ctrl) switch (m_mux_ctrl)
{ {
@ -550,13 +577,13 @@ WRITE8_MEMBER(taitol_state::mux_w)
} }
} }
WRITE8_MEMBER(taitol_state::mux_ctrl_w) WRITE8_MEMBER(taitol_2cpu_state::mux_ctrl_w)
{ {
m_mux_ctrl = data; m_mux_ctrl = data;
} }
WRITE_LINE_MEMBER(taitol_state::champwr_msm5205_vck) WRITE_LINE_MEMBER(champwr_state::msm5205_vck)
{ {
if (m_adpcm_data != -1) if (m_adpcm_data != -1)
{ {
@ -565,70 +592,70 @@ WRITE_LINE_MEMBER(taitol_state::champwr_msm5205_vck)
} }
else else
{ {
m_adpcm_data = memregion("adpcm")->base()[m_adpcm_pos]; m_adpcm_data = m_adpcm_rgn[m_adpcm_pos];
m_adpcm_pos = (m_adpcm_pos + 1) & 0x1ffff; m_adpcm_pos = (m_adpcm_pos + 1) & 0x1ffff;
m_msm->data_w(m_adpcm_data >> 4); m_msm->data_w(m_adpcm_data >> 4);
} }
} }
WRITE8_MEMBER(taitol_state::champwr_msm5205_lo_w) WRITE8_MEMBER(champwr_state::msm5205_lo_w)
{ {
m_adpcm_pos = (m_adpcm_pos & 0xff00ff) | (data << 8); m_adpcm_pos = (m_adpcm_pos & 0xff00ff) | (data << 8);
} }
WRITE8_MEMBER(taitol_state::champwr_msm5205_hi_w) WRITE8_MEMBER(champwr_state::msm5205_hi_w)
{ {
m_adpcm_pos = ((m_adpcm_pos & 0x00ffff) | (data << 16)) & 0x1ffff; m_adpcm_pos = ((m_adpcm_pos & 0x00ffff) | (data << 16)) & 0x1ffff;
} }
WRITE8_MEMBER(taitol_state::champwr_msm5205_start_w) WRITE8_MEMBER(champwr_state::msm5205_start_w)
{ {
m_msm->reset_w(0); m_msm->reset_w(0);
} }
WRITE8_MEMBER(taitol_state::champwr_msm5205_stop_w) WRITE8_MEMBER(champwr_state::msm5205_stop_w)
{ {
m_msm->reset_w(1); m_msm->reset_w(1);
m_adpcm_pos &= 0x1ff00; m_adpcm_pos &= 0x1ff00;
} }
WRITE8_MEMBER(taitol_state::champwr_msm5205_volume_w) WRITE8_MEMBER(champwr_state::msm5205_volume_w)
{ {
m_msm->set_output_gain(0, data / 255.0); m_msm->set_output_gain(0, data / 255.0);
} }
READ8_MEMBER(taitol_state::horshoes_tracky_reset_r) READ8_MEMBER(horshoes_state::tracky_reset_r)
{ {
/* reset the trackball counter */ /* reset the trackball counter */
m_tracky = ioport("AN0")->read(); m_tracky = m_analog0->read();
return 0; return 0;
} }
READ8_MEMBER(taitol_state::horshoes_trackx_reset_r) READ8_MEMBER(horshoes_state::trackx_reset_r)
{ {
/* reset the trackball counter */ /* reset the trackball counter */
m_trackx = ioport("AN1")->read(); m_trackx = m_analog1->read();
return 0; return 0;
} }
READ8_MEMBER(taitol_state::horshoes_tracky_lo_r) READ8_MEMBER(horshoes_state::tracky_lo_r)
{ {
return (ioport("AN0")->read() - m_tracky) & 0xff; return (m_analog0->read() - m_tracky) & 0xff;
} }
READ8_MEMBER(taitol_state::horshoes_tracky_hi_r) READ8_MEMBER(horshoes_state::tracky_hi_r)
{ {
return (ioport("AN0")->read() - m_tracky) >> 8; return (m_analog0->read() - m_tracky) >> 8;
} }
READ8_MEMBER(taitol_state::horshoes_trackx_lo_r) READ8_MEMBER(horshoes_state::trackx_lo_r)
{ {
return (ioport("AN1")->read() - m_trackx) & 0xff; return (m_analog1->read() - m_trackx) & 0xff;
} }
READ8_MEMBER(taitol_state::horshoes_trackx_hi_r) READ8_MEMBER(horshoes_state::trackx_hi_r)
{ {
return (ioport("AN1")->read() - m_trackx) >> 8; return (m_analog1->read() - m_trackx) >> 8;
} }
@ -652,13 +679,13 @@ READ8_MEMBER(taitol_state::horshoes_trackx_hi_r)
static ADDRESS_MAP_START( fhawk_map, AS_PROGRAM, 8, taitol_state ) static ADDRESS_MAP_START( fhawk_map, AS_PROGRAM, 8, taitol_3cpu_state )
COMMON_BANKS_MAP COMMON_BANKS_MAP
AM_RANGE(0x8000, 0x9fff) AM_RAM AM_SHARE("share1") AM_RANGE(0x8000, 0x9fff) AM_RAM AM_SHARE("share1")
AM_RANGE(0xa000, 0xbfff) AM_RAM AM_RANGE(0xa000, 0xbfff) AM_RAM
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( fhawk_2_map, AS_PROGRAM, 8, taitol_state ) static ADDRESS_MAP_START( fhawk_2_map, AS_PROGRAM, 8, taitol_3cpu_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank6") AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank6")
AM_RANGE(0xc000, 0xc000) AM_WRITE(rombank2switch_w) AM_RANGE(0xc000, 0xc000) AM_WRITE(rombank2switch_w)
@ -674,7 +701,7 @@ static ADDRESS_MAP_START( fhawk_2_map, AS_PROGRAM, 8, taitol_state )
AM_RANGE(0xe000, 0xffff) AM_RAM AM_SHARE("share1") AM_RANGE(0xe000, 0xffff) AM_RAM AM_SHARE("share1")
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( fhawk_3_map, AS_PROGRAM, 8, taitol_state ) static ADDRESS_MAP_START( fhawk_3_map, AS_PROGRAM, 8, taitol_3cpu_state )
AM_RANGE(0x0000, 0x3fff) AM_ROM AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank7") AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank7")
AM_RANGE(0x8000, 0x9fff) AM_RAM AM_RANGE(0x8000, 0x9fff) AM_RAM
@ -684,7 +711,7 @@ static ADDRESS_MAP_START( fhawk_3_map, AS_PROGRAM, 8, taitol_state )
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( raimais_map, AS_PROGRAM, 8, taitol_state ) static ADDRESS_MAP_START( raimais_map, AS_PROGRAM, 8, taitol_3cpu_state )
COMMON_BANKS_MAP COMMON_BANKS_MAP
AM_RANGE(0x8000, 0x87ff) AM_RAM AM_SHARE("share1") AM_RANGE(0x8000, 0x87ff) AM_RAM AM_SHARE("share1")
AM_RANGE(0x8800, 0x8800) AM_READWRITE(mux_r, mux_w) AM_RANGE(0x8800, 0x8800) AM_READWRITE(mux_r, mux_w)
@ -694,22 +721,19 @@ static ADDRESS_MAP_START( raimais_map, AS_PROGRAM, 8, taitol_state )
AM_RANGE(0xa000, 0xbfff) AM_RAM AM_RANGE(0xa000, 0xbfff) AM_RAM
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( raimais_2_map, AS_PROGRAM, 8, taitol_state ) static ADDRESS_MAP_START( raimais_2_map, AS_PROGRAM, 8, taitol_3cpu_state )
AM_RANGE(0x0000, 0xbfff) AM_ROM AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0xc000, 0xdfff) AM_RAM AM_RANGE(0xc000, 0xdfff) AM_RAM
AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_SHARE("share1") AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_SHARE("share1")
ADDRESS_MAP_END ADDRESS_MAP_END
WRITE8_MEMBER(taitol_state::sound_bankswitch_w) WRITE8_MEMBER(taitol_2cpu_state::sound_bankswitch_w)
{ {
u8 *RAM = memregion("audiocpu")->base(); m_audio_bnk->set_base(&m_audio_prg[(data & 0x03) * 0x4000]);
int banknum = data & 0x03;
membank ("bank7")->set_base (&RAM [(banknum * 0x4000)]);
} }
static ADDRESS_MAP_START( raimais_3_map, AS_PROGRAM, 8, taitol_state ) static ADDRESS_MAP_START( raimais_3_map, AS_PROGRAM, 8, taitol_3cpu_state )
AM_RANGE(0x0000, 0x3fff) AM_ROM AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank7") AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank7")
AM_RANGE(0xc000, 0xdfff) AM_RAM AM_RANGE(0xc000, 0xdfff) AM_RAM
@ -724,13 +748,13 @@ static ADDRESS_MAP_START( raimais_3_map, AS_PROGRAM, 8, taitol_state )
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( champwr_map, AS_PROGRAM, 8, taitol_state ) static ADDRESS_MAP_START( champwr_map, AS_PROGRAM, 8, champwr_state )
COMMON_BANKS_MAP COMMON_BANKS_MAP
AM_RANGE(0x8000, 0x9fff) AM_RAM AM_RANGE(0x8000, 0x9fff) AM_RAM
AM_RANGE(0xa000, 0xbfff) AM_RAM AM_SHARE("share1") AM_RANGE(0xa000, 0xbfff) AM_RAM AM_SHARE("share1")
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( champwr_2_map, AS_PROGRAM, 8, taitol_state ) static ADDRESS_MAP_START( champwr_2_map, AS_PROGRAM, 8, champwr_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank6") AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank6")
AM_RANGE(0xc000, 0xdfff) AM_RAM AM_SHARE("share1") AM_RANGE(0xc000, 0xdfff) AM_RAM AM_SHARE("share1")
@ -746,22 +770,22 @@ static ADDRESS_MAP_START( champwr_2_map, AS_PROGRAM, 8, taitol_state )
AM_RANGE(0xf000, 0xf000) AM_READWRITE(rombank2switch_r, rombank2switch_w) AM_RANGE(0xf000, 0xf000) AM_READWRITE(rombank2switch_r, rombank2switch_w)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( champwr_3_map, AS_PROGRAM, 8, taitol_state ) static ADDRESS_MAP_START( champwr_3_map, AS_PROGRAM, 8, champwr_state )
AM_RANGE(0x0000, 0x3fff) AM_ROM AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank7") AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank7")
AM_RANGE(0x8000, 0x8fff) AM_RAM AM_RANGE(0x8000, 0x8fff) AM_RAM
AM_RANGE(0x9000, 0x9001) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write) AM_RANGE(0x9000, 0x9001) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write)
AM_RANGE(0xa000, 0xa000) AM_READNOP AM_DEVWRITE("tc0140syt", tc0140syt_device, slave_port_w) AM_RANGE(0xa000, 0xa000) AM_READNOP AM_DEVWRITE("tc0140syt", tc0140syt_device, slave_port_w)
AM_RANGE(0xa001, 0xa001) AM_DEVREADWRITE("tc0140syt", tc0140syt_device, slave_comm_r, slave_comm_w) AM_RANGE(0xa001, 0xa001) AM_DEVREADWRITE("tc0140syt", tc0140syt_device, slave_comm_r, slave_comm_w)
AM_RANGE(0xb000, 0xb000) AM_WRITE(champwr_msm5205_hi_w) AM_RANGE(0xb000, 0xb000) AM_WRITE(msm5205_hi_w)
AM_RANGE(0xc000, 0xc000) AM_WRITE(champwr_msm5205_lo_w) AM_RANGE(0xc000, 0xc000) AM_WRITE(msm5205_lo_w)
AM_RANGE(0xd000, 0xd000) AM_WRITE(champwr_msm5205_start_w) AM_RANGE(0xd000, 0xd000) AM_WRITE(msm5205_start_w)
AM_RANGE(0xe000, 0xe000) AM_WRITE(champwr_msm5205_stop_w) AM_RANGE(0xe000, 0xe000) AM_WRITE(msm5205_stop_w)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( kurikint_map, AS_PROGRAM, 8, taitol_state ) static ADDRESS_MAP_START( kurikint_map, AS_PROGRAM, 8, taitol_2cpu_state )
COMMON_BANKS_MAP COMMON_BANKS_MAP
AM_RANGE(0x8000, 0x9fff) AM_RAM AM_RANGE(0x8000, 0x9fff) AM_RAM
AM_RANGE(0xa000, 0xa7ff) AM_RAM AM_SHARE("share1") AM_RANGE(0xa000, 0xa7ff) AM_RAM AM_SHARE("share1")
@ -769,7 +793,7 @@ static ADDRESS_MAP_START( kurikint_map, AS_PROGRAM, 8, taitol_state )
AM_RANGE(0xa801, 0xa801) AM_WRITE(mux_ctrl_w) AM_READNOP // Watchdog or interrupt ack (value ignored) AM_RANGE(0xa801, 0xa801) AM_WRITE(mux_ctrl_w) AM_READNOP // Watchdog or interrupt ack (value ignored)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( kurikint_2_map, AS_PROGRAM, 8, taitol_state ) static ADDRESS_MAP_START( kurikint_2_map, AS_PROGRAM, 8, taitol_2cpu_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0xc000, 0xdfff) AM_RAM AM_RANGE(0xc000, 0xdfff) AM_RAM
AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_SHARE("share1") AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_SHARE("share1")
@ -786,7 +810,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( puzznic_map, AS_PROGRAM, 8, taitol_state ) static ADDRESS_MAP_START( puzznic_map, AS_PROGRAM, 8, puzznic_state )
COMMON_BANKS_MAP COMMON_BANKS_MAP
COMMON_SINGLE_MAP COMMON_SINGLE_MAP
AM_RANGE(0xa800, 0xa800) AM_READNOP // Watchdog AM_RANGE(0xa800, 0xa800) AM_READNOP // Watchdog
@ -797,7 +821,7 @@ static ADDRESS_MAP_START( puzznic_map, AS_PROGRAM, 8, taitol_state )
ADDRESS_MAP_END ADDRESS_MAP_END
/* bootleg, doesn't have the MCU */ /* bootleg, doesn't have the MCU */
static ADDRESS_MAP_START( puzznici_map, AS_PROGRAM, 8, taitol_state ) static ADDRESS_MAP_START( puzznici_map, AS_PROGRAM, 8, taitol_1cpu_state )
COMMON_BANKS_MAP COMMON_BANKS_MAP
COMMON_SINGLE_MAP COMMON_SINGLE_MAP
AM_RANGE(0xa800, 0xa800) AM_READNOP // Watchdog AM_RANGE(0xa800, 0xa800) AM_READNOP // Watchdog
@ -809,7 +833,7 @@ static ADDRESS_MAP_START( puzznici_map, AS_PROGRAM, 8, taitol_state )
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( plotting_map, AS_PROGRAM, 8, taitol_state ) static ADDRESS_MAP_START( plotting_map, AS_PROGRAM, 8, taitol_1cpu_state )
COMMON_BANKS_MAP COMMON_BANKS_MAP
COMMON_SINGLE_MAP COMMON_SINGLE_MAP
AM_RANGE(0xa800, 0xa800) AM_WRITENOP // Watchdog or interrupt ack AM_RANGE(0xa800, 0xa800) AM_WRITENOP // Watchdog or interrupt ack
@ -817,7 +841,7 @@ static ADDRESS_MAP_START( plotting_map, AS_PROGRAM, 8, taitol_state )
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( palamed_map, AS_PROGRAM, 8, taitol_state ) static ADDRESS_MAP_START( palamed_map, AS_PROGRAM, 8, taitol_1cpu_state )
COMMON_BANKS_MAP COMMON_BANKS_MAP
COMMON_SINGLE_MAP COMMON_SINGLE_MAP
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN0") AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN0")
@ -829,7 +853,7 @@ static ADDRESS_MAP_START( palamed_map, AS_PROGRAM, 8, taitol_state )
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( cachat_map, AS_PROGRAM, 8, taitol_state ) static ADDRESS_MAP_START( cachat_map, AS_PROGRAM, 8, taitol_1cpu_state )
COMMON_BANKS_MAP COMMON_BANKS_MAP
COMMON_SINGLE_MAP COMMON_SINGLE_MAP
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN0") AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN0")
@ -842,21 +866,21 @@ static ADDRESS_MAP_START( cachat_map, AS_PROGRAM, 8, taitol_state )
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( horshoes_map, AS_PROGRAM, 8, taitol_state ) static ADDRESS_MAP_START( horshoes_map, AS_PROGRAM, 8, horshoes_state )
COMMON_BANKS_MAP COMMON_BANKS_MAP
COMMON_SINGLE_MAP COMMON_SINGLE_MAP
AM_RANGE(0xa800, 0xa800) AM_READ(horshoes_tracky_lo_r) AM_RANGE(0xa800, 0xa800) AM_READ(tracky_lo_r)
AM_RANGE(0xa802, 0xa802) AM_READ(horshoes_tracky_reset_r) AM_RANGE(0xa802, 0xa802) AM_READ(tracky_reset_r)
AM_RANGE(0xa803, 0xa803) AM_READ(horshoes_trackx_reset_r) AM_RANGE(0xa803, 0xa803) AM_READ(trackx_reset_r)
AM_RANGE(0xa804, 0xa804) AM_READ(horshoes_tracky_hi_r) AM_RANGE(0xa804, 0xa804) AM_READ(tracky_hi_r)
AM_RANGE(0xa808, 0xa808) AM_READ(horshoes_trackx_lo_r) AM_RANGE(0xa808, 0xa808) AM_READ(trackx_lo_r)
AM_RANGE(0xa80c, 0xa80c) AM_READ(horshoes_trackx_hi_r) AM_RANGE(0xa80c, 0xa80c) AM_READ(trackx_hi_r)
AM_RANGE(0xb801, 0xb801) AM_READNOP // Watchdog or interrupt ack AM_RANGE(0xb801, 0xb801) AM_READNOP // Watchdog or interrupt ack
AM_RANGE(0xb802, 0xb802) AM_WRITE(horshoes_bankg_w) AM_RANGE(0xb802, 0xb802) AM_WRITE(bankg_w)
AM_RANGE(0xbc00, 0xbc00) AM_WRITENOP AM_RANGE(0xbc00, 0xbc00) AM_WRITENOP
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( evilston_map, AS_PROGRAM, 8, taitol_state ) static ADDRESS_MAP_START( evilston_map, AS_PROGRAM, 8, taitol_2cpu_state )
COMMON_BANKS_MAP COMMON_BANKS_MAP
AM_RANGE(0x8000, 0x9fff) AM_RAM AM_RANGE(0x8000, 0x9fff) AM_RAM
AM_RANGE(0xa000, 0xa7ff) AM_RAM AM_SHARE("share1") AM_RANGE(0xa000, 0xa7ff) AM_RAM AM_SHARE("share1")
@ -868,7 +892,7 @@ static ADDRESS_MAP_START( evilston_map, AS_PROGRAM, 8, taitol_state )
AM_RANGE(0xa807, 0xa807) AM_READ_PORT("IN2") AM_RANGE(0xa807, 0xa807) AM_READ_PORT("IN2")
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( evilston_2_map, AS_PROGRAM, 8, taitol_state ) static ADDRESS_MAP_START( evilston_2_map, AS_PROGRAM, 8, taitol_2cpu_state )
AM_RANGE(0x0000, 0xbfff) AM_ROM AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0xc000, 0xdfff) AM_RAM AM_RANGE(0xc000, 0xdfff) AM_RAM
AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_SHARE("share1") AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_SHARE("share1")
@ -951,7 +975,6 @@ static INPUT_PORTS_START( raimais )
PORT_START("IN0") PORT_START("IN0")
TAITO_JOY_UDLR_2_BUTTONS( 1 ) TAITO_JOY_UDLR_2_BUTTONS( 1 )
PORT_START("IN1") PORT_START("IN1")
TAITO_JOY_UDLR_2_BUTTONS( 2 ) TAITO_JOY_UDLR_2_BUTTONS( 2 )
@ -1711,27 +1734,26 @@ static GFXDECODE_START( taito_l )
GFXDECODE_END GFXDECODE_END
WRITE8_MEMBER(taitol_state::portA_w) WRITE8_MEMBER(taitol_3cpu_state::portA_w)
{ {
if (m_cur_bank != (data & 0x03)) if (m_cur_audio_bnk != (data & 0x03))
{ {
int bankaddress; int bankaddress;
u8 *RAM = memregion("audiocpu")->base();
m_cur_bank = data & 0x03; m_cur_audio_bnk = data & 0x03;
bankaddress = m_cur_bank * 0x4000; bankaddress = m_cur_audio_bnk * 0x4000;
membank("bank7")->set_base(&RAM[bankaddress]); m_audio_bnk->set_base(&m_audio_prg[bankaddress]);
//logerror ("YM2203 bank change val=%02x pc=%04x\n", m_cur_bank, space.device().safe_pc() ); //logerror ("YM2203 bank change val=%02x pc=%04x\n", m_cur_audio_bnk, space.device().safe_pc() );
} }
} }
static MACHINE_CONFIG_START( fhawk, taitol_state ) static MACHINE_CONFIG_START( fhawk, taitol_3cpu_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_13_33056MHz/2) /* verified freq on pin122 of TC0090LVC cpu */ MCFG_CPU_ADD("maincpu", Z80, XTAL_13_33056MHz/2) /* verified freq on pin122 of TC0090LVC cpu */
MCFG_CPU_PROGRAM_MAP(fhawk_map) MCFG_CPU_PROGRAM_MAP(fhawk_map)
MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(taitol_state,irq_callback) MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(taitol_state, irq_callback)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", taitol_state, vbl_interrupt, "screen", 0, 1) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", taitol_state, vbl_interrupt, "screen", 0, 1)
@ -1744,8 +1766,8 @@ static MACHINE_CONFIG_START( fhawk, taitol_state )
MCFG_QUANTUM_PERFECT_CPU("maincpu") MCFG_QUANTUM_PERFECT_CPU("maincpu")
MCFG_MACHINE_START_OVERRIDE(taitol_state,taito_l) MCFG_MACHINE_START_OVERRIDE(taitol_state, taito_l)
MCFG_MACHINE_RESET_OVERRIDE(taitol_state,fhawk) MCFG_MACHINE_RESET_OVERRIDE(taitol_state, taito_l)
/* video hardware */ /* video hardware */
MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_ADD("screen", RASTER)
@ -1760,14 +1782,14 @@ static MACHINE_CONFIG_START( fhawk, taitol_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", taito_l) MCFG_GFXDECODE_ADD("gfxdecode", "palette", taito_l)
MCFG_PALETTE_ADD("palette", 256) MCFG_PALETTE_ADD("palette", 256)
MCFG_VIDEO_START_OVERRIDE(taitol_state,taitol) MCFG_VIDEO_START_OVERRIDE(taitol_state, taito_l)
/* sound hardware */ /* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ymsnd", YM2203, XTAL_12MHz/4) /* verified on pcb */ MCFG_SOUND_ADD("ymsnd", YM2203, XTAL_12MHz/4) /* verified on pcb */
MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(taitol_state, portA_w)) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(taitol_3cpu_state, portA_w))
MCFG_SOUND_ROUTE(0, "mono", 0.20) MCFG_SOUND_ROUTE(0, "mono", 0.20)
MCFG_SOUND_ROUTE(1, "mono", 0.20) MCFG_SOUND_ROUTE(1, "mono", 0.20)
MCFG_SOUND_ROUTE(2, "mono", 0.20) MCFG_SOUND_ROUTE(2, "mono", 0.20)
@ -1779,7 +1801,7 @@ static MACHINE_CONFIG_START( fhawk, taitol_state )
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( champwr, fhawk ) static MACHINE_CONFIG_DERIVED_CLASS( champwr, fhawk, champwr_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_MODIFY("maincpu") MCFG_CPU_MODIFY("maincpu")
@ -1791,16 +1813,14 @@ static MACHINE_CONFIG_DERIVED( champwr, fhawk )
MCFG_CPU_MODIFY("slave") MCFG_CPU_MODIFY("slave")
MCFG_CPU_PROGRAM_MAP(champwr_2_map) MCFG_CPU_PROGRAM_MAP(champwr_2_map)
MCFG_MACHINE_RESET_OVERRIDE(taitol_state,champwr)
/* sound hardware */ /* sound hardware */
MCFG_SOUND_MODIFY("ymsnd") MCFG_SOUND_MODIFY("ymsnd")
MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(taitol_state, portA_w)) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(taitol_3cpu_state, portA_w))
MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(taitol_state, champwr_msm5205_volume_w)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(champwr_state, msm5205_volume_w))
MCFG_SOUND_ADD("msm", MSM5205, XTAL_384kHz) MCFG_SOUND_ADD("msm", MSM5205, XTAL_384kHz)
MCFG_MSM5205_VCLK_CB(WRITELINE(taitol_state, champwr_msm5205_vck)) /* VCK function */ MCFG_MSM5205_VCLK_CB(WRITELINE(champwr_state, msm5205_vck)) /* VCK function */
MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_S48_4B) /* 8 kHz */ MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_S48_4B) /* 8 kHz */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -1819,8 +1839,6 @@ static MACHINE_CONFIG_DERIVED( raimais, fhawk )
MCFG_CPU_MODIFY("slave") MCFG_CPU_MODIFY("slave")
MCFG_CPU_PROGRAM_MAP(raimais_2_map) MCFG_CPU_PROGRAM_MAP(raimais_2_map)
MCFG_MACHINE_RESET_OVERRIDE(taitol_state,raimais)
/* sound hardware */ /* sound hardware */
MCFG_SOUND_REPLACE("ymsnd", YM2610, XTAL_8MHz) /* verified on pcb (8Mhz OSC is also for the 2nd z80) */ MCFG_SOUND_REPLACE("ymsnd", YM2610, XTAL_8MHz) /* verified on pcb (8Mhz OSC is also for the 2nd z80) */
MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
@ -1830,12 +1848,12 @@ static MACHINE_CONFIG_DERIVED( raimais, fhawk )
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_START( kurikint, taitol_state ) static MACHINE_CONFIG_START( kurikint, taitol_2cpu_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_13_33056MHz/2) /* verified freq on pin122 of TC0090LVC cpu */ MCFG_CPU_ADD("maincpu", Z80, XTAL_13_33056MHz/2) /* verified freq on pin122 of TC0090LVC cpu */
MCFG_CPU_PROGRAM_MAP(kurikint_map) MCFG_CPU_PROGRAM_MAP(kurikint_map)
MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(taitol_state,irq_callback) MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(taitol_state, irq_callback)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", taitol_state, vbl_interrupt, "screen", 0, 1) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", taitol_state, vbl_interrupt, "screen", 0, 1)
@ -1845,8 +1863,8 @@ static MACHINE_CONFIG_START( kurikint, taitol_state )
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) MCFG_QUANTUM_TIME(attotime::from_hz(6000))
MCFG_MACHINE_START_OVERRIDE(taitol_state,taito_l) MCFG_MACHINE_START_OVERRIDE(taitol_state, taito_l)
MCFG_MACHINE_RESET_OVERRIDE(taitol_state,kurikint) MCFG_MACHINE_RESET_OVERRIDE(taitol_state, taito_l)
/* video hardware */ /* video hardware */
MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_ADD("screen", RASTER)
@ -1861,7 +1879,7 @@ static MACHINE_CONFIG_START( kurikint, taitol_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", taito_l) MCFG_GFXDECODE_ADD("gfxdecode", "palette", taito_l)
MCFG_PALETTE_ADD("palette", 256) MCFG_PALETTE_ADD("palette", 256)
MCFG_VIDEO_START_OVERRIDE(taitol_state,taitol) MCFG_VIDEO_START_OVERRIDE(taitol_state, taito_l)
/* sound hardware */ /* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
@ -1874,19 +1892,16 @@ static MACHINE_CONFIG_START( kurikint, taitol_state )
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_START( plotting, taitol_1cpu_state )
static MACHINE_CONFIG_START( plotting, taitol_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_13_33056MHz/2) /* verified freq on pin122 of TC0090LVC cpu */ MCFG_CPU_ADD("maincpu", Z80, XTAL_13_33056MHz/2) /* verified freq on pin122 of TC0090LVC cpu */
MCFG_CPU_PROGRAM_MAP(plotting_map) MCFG_CPU_PROGRAM_MAP(plotting_map)
MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(taitol_state,irq_callback) MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(taitol_state, irq_callback)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", taitol_state, vbl_interrupt, "screen", 0, 1) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", taitol_state, vbl_interrupt, "screen", 0, 1)
MCFG_MACHINE_START_OVERRIDE(taitol_state,taito_l) MCFG_MACHINE_START_OVERRIDE(taitol_state, taito_l)
MCFG_MACHINE_RESET_OVERRIDE(taitol_state,plotting) MCFG_MACHINE_RESET_OVERRIDE(taitol_1cpu_state, plotting)
/* video hardware */ /* video hardware */
MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_ADD("screen", RASTER)
@ -1901,14 +1916,14 @@ static MACHINE_CONFIG_START( plotting, taitol_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", taito_l) MCFG_GFXDECODE_ADD("gfxdecode", "palette", taito_l)
MCFG_PALETTE_ADD("palette", 256) MCFG_PALETTE_ADD("palette", 256)
MCFG_VIDEO_START_OVERRIDE(taitol_state,taitol) MCFG_VIDEO_START_OVERRIDE(taitol_state, taito_l)
/* sound hardware */ /* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ymsnd", YM2203, XTAL_13_33056MHz/4) /* verified on pcb */ MCFG_SOUND_ADD("ymsnd", YM2203, XTAL_13_33056MHz/4) /* verified on pcb */
MCFG_AY8910_PORT_A_READ_CB(READ8(taitol_state, portA_r)) MCFG_AY8910_PORT_A_READ_CB(READ8(taitol_1cpu_state, portA_r))
MCFG_AY8910_PORT_B_READ_CB(READ8(taitol_state, portB_r)) MCFG_AY8910_PORT_B_READ_CB(READ8(taitol_1cpu_state, portB_r))
MCFG_SOUND_ROUTE(0, "mono", 0.20) MCFG_SOUND_ROUTE(0, "mono", 0.20)
MCFG_SOUND_ROUTE(1, "mono", 0.20) MCFG_SOUND_ROUTE(1, "mono", 0.20)
MCFG_SOUND_ROUTE(2, "mono", 0.20) MCFG_SOUND_ROUTE(2, "mono", 0.20)
@ -1916,13 +1931,13 @@ static MACHINE_CONFIG_START( plotting, taitol_state )
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( puzznic, plotting ) static MACHINE_CONFIG_DERIVED_CLASS( puzznic, plotting, puzznic_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_MODIFY("maincpu") MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(puzznic_map) MCFG_CPU_PROGRAM_MAP(puzznic_map)
MCFG_MACHINE_RESET_OVERRIDE(taitol_state,puzznic) MCFG_MACHINE_RESET_OVERRIDE(taitol_1cpu_state, puzznic)
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( puzznici, plotting ) static MACHINE_CONFIG_DERIVED( puzznici, plotting )
@ -1931,17 +1946,17 @@ static MACHINE_CONFIG_DERIVED( puzznici, plotting )
MCFG_CPU_MODIFY("maincpu") MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(puzznici_map) MCFG_CPU_PROGRAM_MAP(puzznici_map)
MCFG_MACHINE_RESET_OVERRIDE(taitol_state,puzznic) MCFG_MACHINE_RESET_OVERRIDE(taitol_1cpu_state, puzznic)
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( horshoes, plotting ) static MACHINE_CONFIG_DERIVED_CLASS( horshoes, plotting, horshoes_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_MODIFY("maincpu") MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(horshoes_map) MCFG_CPU_PROGRAM_MAP(horshoes_map)
MCFG_MACHINE_RESET_OVERRIDE(taitol_state,horshoes) MCFG_MACHINE_RESET_OVERRIDE(horshoes_state, horshoes)
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -1951,7 +1966,7 @@ static MACHINE_CONFIG_DERIVED( palamed, plotting )
MCFG_CPU_MODIFY("maincpu") MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(palamed_map) MCFG_CPU_PROGRAM_MAP(palamed_map)
MCFG_MACHINE_RESET_OVERRIDE(taitol_state,palamed) MCFG_MACHINE_RESET_OVERRIDE(taitol_1cpu_state, palamed)
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -1961,15 +1976,15 @@ static MACHINE_CONFIG_DERIVED( cachat, plotting )
MCFG_CPU_MODIFY("maincpu") MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(cachat_map) MCFG_CPU_PROGRAM_MAP(cachat_map)
MCFG_MACHINE_RESET_OVERRIDE(taitol_state,cachat) MCFG_MACHINE_RESET_OVERRIDE(taitol_1cpu_state, cachat)
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_START( evilston, taitol_state ) static MACHINE_CONFIG_START( evilston, taitol_2cpu_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_13_33056MHz/2) /* not verified */ MCFG_CPU_ADD("maincpu", Z80, XTAL_13_33056MHz/2) /* not verified */
MCFG_CPU_PROGRAM_MAP(evilston_map) MCFG_CPU_PROGRAM_MAP(evilston_map)
MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(taitol_state,irq_callback) MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(taitol_state, irq_callback)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", taitol_state, vbl_interrupt, "screen", 0, 1) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", taitol_state, vbl_interrupt, "screen", 0, 1)
MCFG_CPU_ADD("audiocpu", Z80, XTAL_12MHz/3) /* not verified */ MCFG_CPU_ADD("audiocpu", Z80, XTAL_12MHz/3) /* not verified */
@ -1979,8 +1994,8 @@ static MACHINE_CONFIG_START( evilston, taitol_state )
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) MCFG_QUANTUM_TIME(attotime::from_hz(6000))
MCFG_MACHINE_START_OVERRIDE(taitol_state,taito_l) MCFG_MACHINE_START_OVERRIDE(taitol_state, taito_l)
MCFG_MACHINE_RESET_OVERRIDE(taitol_state,evilston) MCFG_MACHINE_RESET_OVERRIDE(taitol_state, taito_l)
/* video hardware */ /* video hardware */
MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_ADD("screen", RASTER)
@ -1995,7 +2010,7 @@ static MACHINE_CONFIG_START( evilston, taitol_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", taito_l) MCFG_GFXDECODE_ADD("gfxdecode", "palette", taito_l)
MCFG_PALETTE_ADD("palette", 256) MCFG_PALETTE_ADD("palette", 256)
MCFG_VIDEO_START_OVERRIDE(taitol_state,taitol) MCFG_VIDEO_START_OVERRIDE(taitol_state, taito_l)
/* sound hardware */ /* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
@ -2560,22 +2575,21 @@ ROM_END
// bits 7..0 => bits 0..7 // bits 7..0 => bits 0..7
DRIVER_INIT_MEMBER(taitol_state,plottinga) DRIVER_INIT_MEMBER(taitol_1cpu_state, plottinga)
{ {
u8 tab[256]; u8 tab[256];
u8 *p; u8 *p;
int i;
for (i = 0; i < 256; i++) for (int i = 0; i < 256; i++)
{ {
int j, v = 0; int v = 0;
for (j = 0; j < 8; j++) for (int j = 0; j < 8; j++)
if (i & (1 << j)) if (i & (1 << j))
v |= 1 << (7 - j); v |= 1 << (7 - j);
tab[i] = v; tab[i] = v;
} }
p = memregion("maincpu")->base(); p = memregion("maincpu")->base();
for (i = 0; i < 0x10000; i++) for (int i = 0; i < 0x10000; i++)
{ {
*p = tab[*p]; *p = tab[*p];
p++; p++;
@ -2600,7 +2614,7 @@ GAME( 1988, kurikintj, kurikint, kurikint, kurikintj, driver_device, 0,
GAME( 1988, kurikinta, kurikint, kurikint, kurikinta, driver_device, 0, ROT0, "Taito Corporation Japan", "Kuri Kinton (World, prototype?)", 0 ) GAME( 1988, kurikinta, kurikint, kurikint, kurikinta, driver_device, 0, ROT0, "Taito Corporation Japan", "Kuri Kinton (World, prototype?)", 0 )
GAME( 1989, plotting, 0, plotting, plotting, driver_device, 0, ROT0, "Taito Corporation Japan", "Plotting (World set 1)", 0 ) GAME( 1989, plotting, 0, plotting, plotting, driver_device, 0, ROT0, "Taito Corporation Japan", "Plotting (World set 1)", 0 )
GAME( 1989, plottinga, plotting, plotting, plotting, taitol_state, plottinga, ROT0, "Taito Corporation Japan", "Plotting (World set 2, protected)", 0 ) GAME( 1989, plottinga, plotting, plotting, plotting, taitol_1cpu_state, plottinga, ROT0, "Taito Corporation Japan", "Plotting (World set 2, protected)", 0 )
GAME( 1989, plottingb, plotting, plotting, plotting, driver_device, 0, ROT0, "Taito Corporation Japan", "Plotting (World set 3, earliest version)", 0 ) GAME( 1989, plottingb, plotting, plotting, plotting, driver_device, 0, ROT0, "Taito Corporation Japan", "Plotting (World set 3, earliest version)", 0 )
GAME( 1989, plottingu, plotting, plotting, plottingu, driver_device, 0, ROT0, "Taito America Corporation", "Plotting (US)", 0 ) GAME( 1989, plottingu, plotting, plotting, plottingu, driver_device, 0, ROT0, "Taito America Corporation", "Plotting (US)", 0 )
GAME( 1989, flipull, plotting, plotting, plotting, driver_device, 0, ROT0, "Taito Corporation", "Flipull (Japan)", 0 ) GAME( 1989, flipull, plotting, plotting, plotting, driver_device, 0, ROT0, "Taito Corporation", "Flipull (Japan)", 0 )

View File

@ -8,12 +8,13 @@ class taitol_state : public driver_device
{ {
public: public:
taitol_state(const machine_config &mconfig, device_type type, const char *tag) taitol_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag), : driver_device(mconfig, type, tag)
m_maincpu(*this, "maincpu"), , m_main_cpu(*this, "maincpu")
m_audiocpu(*this, "audiocpu"), , m_main_prg(*this, "maincpu")
m_msm(*this, "msm"), , m_main_bnk(*this, "bank1")
m_gfxdecode(*this, "gfxdecode"), , m_ram_bnks(*this, "bank%u", 2)
m_palette(*this, "palette") , m_gfxdecode(*this, "gfxdecode")
, m_palette(*this, "palette")
{ {
} }
@ -37,38 +38,11 @@ public:
u8 *m_current_base[4]; u8 *m_current_base[4];
int m_cur_rombank; int m_cur_rombank;
int m_cur_rombank2;
int m_cur_rambank[4]; int m_cur_rambank[4];
int m_irq_adr_table[3]; int m_irq_adr_table[3];
int m_irq_enable; int m_irq_enable;
int m_adpcm_pos;
int m_adpcm_data;
int m_trackx;
int m_tracky;
int m_mux_ctrl;
int m_extport;
int m_last_irq_level; int m_last_irq_level;
int m_high; int m_high;
int m_high2;
int m_last_data_adr;
int m_last_data;
int m_cur_bank;
const u8 *m_mcu_reply;
int m_mcu_pos;
int m_mcu_reply_len;
const char *m_porte0_tag;
const char *m_porte1_tag;
const char *m_portf0_tag;
const char *m_portf1_tag;
/* devices */
required_device<cpu_device> m_maincpu;
optional_device<cpu_device> m_audiocpu;
optional_device<msm5205_device> m_msm;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
/* memory buffers */ /* memory buffers */
u8 m_rambanks[0x1000 * 12]; u8 m_rambanks[0x1000 * 12];
@ -79,60 +53,25 @@ public:
DECLARE_WRITE8_MEMBER(irq_enable_w); DECLARE_WRITE8_MEMBER(irq_enable_w);
DECLARE_READ8_MEMBER(irq_enable_r); DECLARE_READ8_MEMBER(irq_enable_r);
DECLARE_WRITE8_MEMBER(rombankswitch_w); DECLARE_WRITE8_MEMBER(rombankswitch_w);
DECLARE_WRITE8_MEMBER(rombank2switch_w);
DECLARE_READ8_MEMBER(rombankswitch_r); DECLARE_READ8_MEMBER(rombankswitch_r);
DECLARE_READ8_MEMBER(rombank2switch_r);
DECLARE_WRITE8_MEMBER(rambankswitch_w); DECLARE_WRITE8_MEMBER(rambankswitch_w);
DECLARE_READ8_MEMBER(rambankswitch_r); DECLARE_READ8_MEMBER(rambankswitch_r);
DECLARE_WRITE8_MEMBER(bank0_w); DECLARE_WRITE8_MEMBER(bank0_w);
DECLARE_WRITE8_MEMBER(bank1_w); DECLARE_WRITE8_MEMBER(bank1_w);
DECLARE_WRITE8_MEMBER(bank2_w); DECLARE_WRITE8_MEMBER(bank2_w);
DECLARE_WRITE8_MEMBER(bank3_w); DECLARE_WRITE8_MEMBER(bank3_w);
DECLARE_WRITE8_MEMBER(control2_w);
DECLARE_WRITE8_MEMBER(mcu_data_w);
DECLARE_WRITE8_MEMBER(mcu_control_w); DECLARE_WRITE8_MEMBER(mcu_control_w);
DECLARE_READ8_MEMBER(mcu_data_r);
DECLARE_READ8_MEMBER(mcu_control_r); DECLARE_READ8_MEMBER(mcu_control_r);
DECLARE_READ8_MEMBER(mux_r);
DECLARE_WRITE8_MEMBER(mux_w);
DECLARE_WRITE8_MEMBER(mux_ctrl_w);
DECLARE_WRITE8_MEMBER(champwr_msm5205_lo_w);
DECLARE_WRITE8_MEMBER(champwr_msm5205_hi_w);
DECLARE_READ8_MEMBER(horshoes_tracky_reset_r);
DECLARE_READ8_MEMBER(horshoes_trackx_reset_r);
DECLARE_READ8_MEMBER(horshoes_tracky_lo_r);
DECLARE_READ8_MEMBER(horshoes_tracky_hi_r);
DECLARE_READ8_MEMBER(horshoes_trackx_lo_r);
DECLARE_READ8_MEMBER(horshoes_trackx_hi_r);
DECLARE_WRITE8_MEMBER(sound_bankswitch_w);
DECLARE_WRITE8_MEMBER(horshoes_bankg_w);
DECLARE_WRITE8_MEMBER(taitol_bankc_w); DECLARE_WRITE8_MEMBER(taitol_bankc_w);
DECLARE_READ8_MEMBER(taitol_bankc_r); DECLARE_READ8_MEMBER(taitol_bankc_r);
DECLARE_WRITE8_MEMBER(taitol_control_w); DECLARE_WRITE8_MEMBER(taitol_control_w);
DECLARE_READ8_MEMBER(taitol_control_r); DECLARE_READ8_MEMBER(taitol_control_r);
DECLARE_READ8_MEMBER(portA_r);
DECLARE_READ8_MEMBER(portB_r);
DECLARE_READ8_MEMBER(extport_select_and_ym2203_r);
DECLARE_WRITE8_MEMBER(champwr_msm5205_start_w);
DECLARE_WRITE8_MEMBER(champwr_msm5205_stop_w);
DECLARE_WRITE8_MEMBER(champwr_msm5205_volume_w);
DECLARE_WRITE8_MEMBER(portA_w);
DECLARE_DRIVER_INIT(plottinga);
TILE_GET_INFO_MEMBER(get_bg18_tile_info); TILE_GET_INFO_MEMBER(get_bg18_tile_info);
TILE_GET_INFO_MEMBER(get_bg19_tile_info); TILE_GET_INFO_MEMBER(get_bg19_tile_info);
TILE_GET_INFO_MEMBER(get_ch1a_tile_info); TILE_GET_INFO_MEMBER(get_ch1a_tile_info);
DECLARE_MACHINE_START(taito_l); DECLARE_MACHINE_START(taito_l);
DECLARE_MACHINE_RESET(fhawk); DECLARE_VIDEO_START(taito_l);
DECLARE_VIDEO_START(taitol); DECLARE_MACHINE_RESET(taito_l);
DECLARE_MACHINE_RESET(kurikint);
DECLARE_MACHINE_RESET(plotting);
DECLARE_MACHINE_RESET(evilston);
DECLARE_MACHINE_RESET(champwr);
DECLARE_MACHINE_RESET(raimais);
DECLARE_MACHINE_RESET(puzznic);
DECLARE_MACHINE_RESET(horshoes);
DECLARE_MACHINE_RESET(palamed);
DECLARE_MACHINE_RESET(cachat);
u32 screen_update_taitol(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); u32 screen_update_taitol(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void screen_eof_taitol(screen_device &screen, bool state); void screen_eof_taitol(screen_device &screen, bool state);
TIMER_DEVICE_CALLBACK_MEMBER(vbl_interrupt); TIMER_DEVICE_CALLBACK_MEMBER(vbl_interrupt);
@ -149,10 +88,223 @@ public:
void taitol_bg19_m(int offset); void taitol_bg19_m(int offset);
void taitol_char1a_m(int offset); void taitol_char1a_m(int offset);
void taitol_obj1b_m(int offset); void taitol_obj1b_m(int offset);
void draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void palette_notifier(int addr); void palette_notifier(int addr);
void state_register();
void taito_machine_reset();
void bank_w(address_space &space, offs_t offset, u8 data, int banknum); void bank_w(address_space &space, offs_t offset, u8 data, int banknum);
DECLARE_WRITE_LINE_MEMBER(champwr_msm5205_vck);
protected:
virtual void state_register();
virtual void taito_machine_reset();
required_device<cpu_device> m_main_cpu;
required_region_ptr<u8> m_main_prg;
required_memory_bank m_main_bnk;
required_memory_bank_array<4> m_ram_bnks;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
};
class taitol_2cpu_state : public taitol_state
{
public:
taitol_2cpu_state(const machine_config &mconfig, device_type type, const char *tag)
: taitol_state(mconfig, type, tag)
, m_audio_cpu(*this, "audiocpu")
, m_audio_prg(*this, "audiocpu")
, m_audio_bnk(*this, "bank7")
, m_dswa(*this, "DSWA")
, m_dswb(*this, "DSWB")
, m_in0(*this, "IN0")
, m_in1(*this, "IN1")
, m_in2(*this, "IN2")
, m_mux_ctrl(0)
{
}
DECLARE_WRITE8_MEMBER(control2_w);
DECLARE_WRITE8_MEMBER(sound_bankswitch_w);
DECLARE_READ8_MEMBER(mux_r);
DECLARE_WRITE8_MEMBER(mux_w);
DECLARE_WRITE8_MEMBER(mux_ctrl_w);
protected:
virtual void state_register() override;
virtual void taito_machine_reset() override;
required_device<cpu_device> m_audio_cpu;
required_region_ptr<u8> m_audio_prg;
required_memory_bank m_audio_bnk;
required_ioport m_dswa;
required_ioport m_dswb;
required_ioport m_in0;
required_ioport m_in1;
required_ioport m_in2;
u8 m_mux_ctrl;
};
class taitol_3cpu_state : public taitol_2cpu_state
{
public:
taitol_3cpu_state(const machine_config &mconfig, device_type type, const char *tag)
: taitol_2cpu_state(mconfig, type, tag)
, m_slave_prg(*this, "slave")
, m_slave_bnk(*this, "bank6")
, m_cur_rombank2(0)
, m_high2(0)
, m_cur_audio_bnk(0)
{
}
DECLARE_WRITE8_MEMBER(rombank2switch_w);
DECLARE_READ8_MEMBER(rombank2switch_r);
DECLARE_WRITE8_MEMBER(portA_w);
protected:
virtual void state_register() override;
virtual void taito_machine_reset() override;
required_region_ptr<u8> m_slave_prg;
required_memory_bank m_slave_bnk;
u8 m_cur_rombank2;
u8 m_high2;
u8 m_cur_audio_bnk;
};
class champwr_state : public taitol_3cpu_state
{
public:
champwr_state(const machine_config &mconfig, device_type type, const char *tag)
: taitol_3cpu_state(mconfig, type, tag)
, m_msm(*this, "msm")
, m_adpcm_rgn(*this, "adpcm")
, m_adpcm_pos(0)
, m_adpcm_data(-1)
{
}
DECLARE_WRITE_LINE_MEMBER(msm5205_vck);
DECLARE_WRITE8_MEMBER(msm5205_lo_w);
DECLARE_WRITE8_MEMBER(msm5205_hi_w);
DECLARE_WRITE8_MEMBER(msm5205_start_w);
DECLARE_WRITE8_MEMBER(msm5205_stop_w);
DECLARE_WRITE8_MEMBER(msm5205_volume_w);
protected:
virtual void state_register() override;
virtual void taito_machine_reset() override;
required_device<msm5205_device> m_msm;
required_region_ptr<u8> m_adpcm_rgn;
int m_adpcm_pos;
int m_adpcm_data;
};
class taitol_1cpu_state : public taitol_state
{
public:
taitol_1cpu_state(const machine_config &mconfig, device_type type, const char *tag)
: taitol_state(mconfig, type, tag)
, m_ymsnd(*this, "ymsnd")
, m_porte0_tag(nullptr)
, m_porte1_tag(nullptr)
, m_portf0_tag(nullptr)
, m_portf1_tag(nullptr)
, m_extport(0)
{
}
DECLARE_READ8_MEMBER(portA_r);
DECLARE_READ8_MEMBER(portB_r);
DECLARE_READ8_MEMBER(extport_select_and_ym2203_r);
DECLARE_DRIVER_INIT(plottinga);
DECLARE_MACHINE_RESET(plotting);
DECLARE_MACHINE_RESET(puzznic);
DECLARE_MACHINE_RESET(palamed);
DECLARE_MACHINE_RESET(cachat);
protected:
virtual void state_register() override;
virtual void taito_machine_reset() override;
required_device<ym2203_device> m_ymsnd;
char const *m_porte0_tag;
char const *m_porte1_tag;
char const *m_portf0_tag;
char const *m_portf1_tag;
int m_extport;
};
class puzznic_state : public taitol_1cpu_state
{
public:
puzznic_state(const machine_config &mconfig, device_type type, const char *tag)
: taitol_1cpu_state(mconfig, type, tag)
, m_mcu_reply(nullptr)
, m_mcu_pos(0)
, m_mcu_reply_len(0)
, m_last_data_adr(0)
, m_last_data(0)
{
}
DECLARE_READ8_MEMBER(mcu_data_r);
DECLARE_WRITE8_MEMBER(mcu_data_w);
protected:
virtual void state_register() override;
virtual void taito_machine_reset() override;
u8 const * m_mcu_reply;
int m_mcu_pos;
int m_mcu_reply_len;
int m_last_data_adr;
int m_last_data;
};
class horshoes_state : public taitol_1cpu_state
{
public:
horshoes_state(const machine_config &mconfig, device_type type, const char *tag)
: taitol_1cpu_state(mconfig, type, tag)
, m_analog0(*this, "AN0")
, m_analog1(*this, "AN1")
, m_trackx(0)
, m_tracky(0)
{
}
DECLARE_READ8_MEMBER(tracky_reset_r);
DECLARE_READ8_MEMBER(trackx_reset_r);
DECLARE_READ8_MEMBER(tracky_lo_r);
DECLARE_READ8_MEMBER(tracky_hi_r);
DECLARE_READ8_MEMBER(trackx_lo_r);
DECLARE_READ8_MEMBER(trackx_hi_r);
DECLARE_WRITE8_MEMBER(bankg_w);
DECLARE_MACHINE_RESET(horshoes);
protected:
virtual void state_register() override;
virtual void taito_machine_reset() override;
required_ioport m_analog0;
required_ioport m_analog1;
int m_trackx;
int m_tracky;
}; };

View File

@ -56,7 +56,7 @@ TILE_GET_INFO_MEMBER(taitol_state::get_ch1a_tile_info)
***************************************************************************/ ***************************************************************************/
VIDEO_START_MEMBER(taitol_state,taitol) VIDEO_START_MEMBER(taitol_state, taito_l)
{ {
int i; int i;
@ -83,7 +83,7 @@ VIDEO_START_MEMBER(taitol_state,taitol)
***************************************************************************/ ***************************************************************************/
WRITE8_MEMBER(taitol_state::horshoes_bankg_w) WRITE8_MEMBER(horshoes_state::bankg_w)
{ {
if (m_horshoes_gfxbank != data) if (m_horshoes_gfxbank != data)
{ {