imolagp: Use two-dimensional output finder (nw)

This commit is contained in:
AJR 2018-04-04 13:40:37 -04:00
parent 43d77dae62
commit ada3d35a54
2 changed files with 48 additions and 38 deletions

View File

@ -98,13 +98,15 @@ public:
m_maincpu(*this, "maincpu"),
m_slavecpu(*this, "slave"),
m_steer_pot_timer(*this, "pot"),
m_steer_inp(*this, "STEER")
m_steer_inp(*this, "STEER"),
m_digits(*this, "digit%u%u", 0U, 0U)
{ }
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_slavecpu;
required_device<timer_device> m_steer_pot_timer;
required_ioport m_steer_inp;
output_finder<5, 6> m_digits;
uint8_t m_videoram[2][0x4000]; // 2 layers of 16KB
uint8_t m_comms_latch[2];
@ -124,7 +126,7 @@ public:
DECLARE_WRITE8_MEMBER(vreg_control_w);
DECLARE_WRITE8_MEMBER(vreg_data_w);
DECLARE_CUSTOM_INPUT_MEMBER(imolagp_steerlatch_r);
INTERRUPT_GEN_MEMBER(slave_vblank_irq);
DECLARE_WRITE_LINE_MEMBER(vblank_irq);
TIMER_DEVICE_CALLBACK_MEMBER(imolagp_pot_callback);
virtual void machine_start() override;
@ -228,10 +230,14 @@ TIMER_DEVICE_CALLBACK_MEMBER(imolagp_state::imolagp_pot_callback)
m_steer_pot_timer->adjust(attotime::from_msec(20));
}
INTERRUPT_GEN_MEMBER(imolagp_state::slave_vblank_irq)
WRITE_LINE_MEMBER(imolagp_state::vblank_irq)
{
m_scroll = m_vreg[0xe]; // latch scroll
device.execute().set_input_line(0, HOLD_LINE);
if (state)
{
m_scroll = m_vreg[0xe]; // latch scroll
m_maincpu->set_input_line(0, HOLD_LINE);
m_slavecpu->set_input_line(0, HOLD_LINE);
}
}
@ -270,7 +276,10 @@ WRITE8_MEMBER(imolagp_state::imola_led_board_w)
static const uint8_t ls48_map[16] =
{ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x67,0x58,0x4c,0x62,0x69,0x78,0x00 };
output().set_digit_value(offset, ls48_map[data & 0x0f]);
int i = offset >> 3;
int j = offset & 7;
if (i < 5 && j < 6)
m_digits[i][j] = ls48_map[data & 0x0f];
/*
score: 0, 1, 2, 3
time: 4, 5
@ -478,6 +487,8 @@ INPUT_PORTS_END
void imolagp_state::machine_start()
{
m_digits.resolve();
save_item(NAME(m_vcontrol));
save_item(NAME(m_vreg));
save_item(NAME(m_scroll));
@ -500,13 +511,11 @@ MACHINE_CONFIG_START(imolagp_state::imolagp)
MCFG_CPU_ADD("maincpu", Z80, 3000000) // ? (assume slower than slave)
MCFG_CPU_PROGRAM_MAP(imolagp_master_map)
MCFG_CPU_IO_MAP(imolagp_master_io)
MCFG_CPU_VBLANK_INT_DRIVER("screen", imolagp_state, irq0_line_hold)
MCFG_TIMER_DRIVER_ADD("pot", imolagp_state, imolagp_pot_callback) // maincpu nmi
MCFG_CPU_ADD("slave", Z80, 4000000) // ?
MCFG_CPU_PROGRAM_MAP(imolagp_slave_map)
MCFG_CPU_IO_MAP(imolagp_slave_io)
MCFG_CPU_VBLANK_INT_DRIVER("screen", imolagp_state, slave_vblank_irq)
MCFG_QUANTUM_PERFECT_CPU("maincpu")
@ -526,6 +535,7 @@ MACHINE_CONFIG_START(imolagp_state::imolagp)
MCFG_SCREEN_UPDATE_DRIVER(imolagp_state, screen_update_imolagp)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_SCANLINE)
MCFG_SCREEN_PALETTE("palette")
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(imolagp_state, vblank_irq))
MCFG_PALETTE_ADD("palette", 0x20)
MCFG_PALETTE_INIT_OWNER(imolagp_state, imolagp)

View File

@ -286,16 +286,16 @@
<bounds x="22" y="-115" width="69" height="27" />
</bezel>
<bezel name="digit0" element="digit">
<bezel name="digit00" element="digit">
<bounds x="26.5" y="-113" width="15" height="23" />
</bezel>
<bezel name="digit1" element="digit">
<bezel name="digit01" element="digit">
<bounds x="41.5" y="-113" width="15" height="23" />
</bezel>
<bezel name="digit2" element="digit">
<bezel name="digit02" element="digit">
<bounds x="56.5" y="-113" width="15" height="23" />
</bezel>
<bezel name="digit3" element="digit">
<bezel name="digit03" element="digit">
<bounds x="71.5" y="-113" width="15" height="23" />
</bezel>
@ -322,17 +322,17 @@
<bounds x="38" y="-55" width="53" height="39" />
</bezel>
<bezel name="digit10" element="digit">
<bezel name="digit12" element="digit">
<bounds x="42" y="-53" width="10" height="15" />
</bezel>
<bezel name="digit11" element="digit">
<bezel name="digit13" element="digit">
<bounds x="52" y="-53" width="10" height="15" />
</bezel>
<bezel name="digit12" element="digit">
<bezel name="digit14" element="digit">
<bounds x="42" y="-33" width="10" height="15" />
</bezel>
<bezel name="digit13" element="digit">
<bezel name="digit15" element="digit">
<bounds x="52" y="-33" width="10" height="15" />
</bezel>
@ -365,10 +365,10 @@
<bounds x="129" y="-60" width="42" height="15" />
</bezel>
<bezel name="digit4" element="digit">
<bezel name="digit04" element="digit">
<bounds x="135" y="-41" width="15" height="23" />
</bezel>
<bezel name="digit5" element="digit">
<bezel name="digit05" element="digit">
<bounds x="150" y="-41" width="15" height="23" />
</bezel>
@ -388,16 +388,16 @@
<bezel element="text_st">
<bounds x="222.5" y="-114" width="10" height="10" />
</bezel>
<bezel name="digit32" element="digit">
<bezel name="digit40" element="digit">
<bounds x="234" y="-113" width="10" height="15" />
</bezel>
<bezel name="digit33" element="digit">
<bezel name="digit41" element="digit">
<bounds x="244" y="-113" width="10" height="15" />
</bezel>
<bezel name="digit34" element="digit">
<bezel name="digit42" element="digit">
<bounds x="254" y="-113" width="10" height="15" />
</bezel>
<bezel name="digit35" element="digit">
<bezel name="digit43" element="digit">
<bounds x="264" y="-113" width="10" height="15" />
</bezel>
@ -407,16 +407,16 @@
<bezel element="text_nd">
<bounds x="222.5" y="-94" width="10" height="10" />
</bezel>
<bezel name="digit36" element="digit">
<bezel name="digit44" element="digit">
<bounds x="234" y="-93" width="10" height="15" />
</bezel>
<bezel name="digit37" element="digit">
<bezel name="digit45" element="digit">
<bounds x="244" y="-93" width="10" height="15" />
</bezel>
<bezel name="digit24" element="digit">
<bezel name="digit30" element="digit">
<bounds x="254" y="-93" width="10" height="15" />
</bezel>
<bezel name="digit25" element="digit">
<bezel name="digit31" element="digit">
<bounds x="264" y="-93" width="10" height="15" />
</bezel>
@ -426,16 +426,16 @@
<bezel element="text_rd">
<bounds x="222.5" y="-74" width="10" height="10" />
</bezel>
<bezel name="digit26" element="digit">
<bezel name="digit32" element="digit">
<bounds x="234" y="-73" width="10" height="15" />
</bezel>
<bezel name="digit27" element="digit">
<bezel name="digit33" element="digit">
<bounds x="244" y="-73" width="10" height="15" />
</bezel>
<bezel name="digit28" element="digit">
<bezel name="digit34" element="digit">
<bounds x="254" y="-73" width="10" height="15" />
</bezel>
<bezel name="digit29" element="digit">
<bezel name="digit35" element="digit">
<bounds x="264" y="-73" width="10" height="15" />
</bezel>
@ -445,16 +445,16 @@
<bezel element="text_th">
<bounds x="222.5" y="-54" width="10" height="10" />
</bezel>
<bezel name="digit16" element="digit">
<bezel name="digit20" element="digit">
<bounds x="234" y="-53" width="10" height="15" />
</bezel>
<bezel name="digit17" element="digit">
<bezel name="digit21" element="digit">
<bounds x="244" y="-53" width="10" height="15" />
</bezel>
<bezel name="digit18" element="digit">
<bezel name="digit22" element="digit">
<bounds x="254" y="-53" width="10" height="15" />
</bezel>
<bezel name="digit19" element="digit">
<bezel name="digit23" element="digit">
<bounds x="264" y="-53" width="10" height="15" />
</bezel>
@ -464,16 +464,16 @@
<bezel element="text_th">
<bounds x="222.5" y="-34" width="10" height="10" />
</bezel>
<bezel name="digit20" element="digit">
<bezel name="digit24" element="digit">
<bounds x="234" y="-33" width="10" height="15" />
</bezel>
<bezel name="digit21" element="digit">
<bezel name="digit25" element="digit">
<bounds x="244" y="-33" width="10" height="15" />
</bezel>
<bezel name="digit8" element="digit">
<bezel name="digit10" element="digit">
<bounds x="254" y="-33" width="10" height="15" />
</bezel>
<bezel name="digit9" element="digit">
<bezel name="digit11" element="digit">
<bounds x="264" y="-33" width="10" height="15" />
</bezel>