mirror of
https://github.com/holub/mame
synced 2025-07-01 00:09:18 +03:00
gts3.c : Display works, attract mode works.
This commit is contained in:
parent
846d034c3a
commit
b90b483737
@ -3,6 +3,10 @@
|
||||
PINBALL
|
||||
Gottlieb System 3
|
||||
|
||||
Status:
|
||||
- Display works
|
||||
- Attract mode works
|
||||
|
||||
*****************************************************************************************************/
|
||||
|
||||
#include "machine/genpin.h"
|
||||
@ -21,7 +25,13 @@ public:
|
||||
{ }
|
||||
|
||||
DECLARE_DRIVER_INIT(gts3);
|
||||
DECLARE_WRITE8_MEMBER(segbank_w);
|
||||
DECLARE_WRITE8_MEMBER(u4b_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(nmi_w);
|
||||
private:
|
||||
bool m_dispclk;
|
||||
UINT32 m_digit;
|
||||
UINT8 m_segment[4];
|
||||
virtual void machine_reset();
|
||||
required_device<m65c02_device> m_maincpu;
|
||||
required_device<via6522_device> m_u4;
|
||||
@ -33,14 +43,53 @@ static ADDRESS_MAP_START( gts3_map, AS_PROGRAM, 8, gts3_state )
|
||||
AM_RANGE(0x0000, 0x1fff) AM_RAM AM_SHARE("nvram")
|
||||
AM_RANGE(0x2000, 0x200f) AM_DEVREADWRITE("u4", via6522_device, read, write)
|
||||
AM_RANGE(0x2010, 0x201f) AM_DEVREADWRITE("u5", via6522_device, read, write)
|
||||
AM_RANGE(0x2020, 0x2023) AM_MIRROR(0x0c) AM_WRITE(segbank_w)
|
||||
AM_RANGE(0x4000, 0xffff) AM_ROM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static INPUT_PORTS_START( gts3 )
|
||||
INPUT_PORTS_END
|
||||
|
||||
// This trampoline needed - DEVWRITELINE("maincpu", m65c02_device, nmi_line) does not work
|
||||
WRITE_LINE_MEMBER( gts3_state::nmi_w )
|
||||
{
|
||||
m_maincpu->set_input_line(INPUT_LINE_NMI, (state) ? CLEAR_LINE : HOLD_LINE);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( gts3_state::segbank_w )
|
||||
{
|
||||
m_segment[offset] = data;
|
||||
UINT8 i;
|
||||
UINT32 seg1,seg2;
|
||||
offset &= 2;
|
||||
for (i = 0;i < 20; i++)
|
||||
{
|
||||
if BIT(m_digit, i)
|
||||
{
|
||||
seg1 = m_segment[offset] | (m_segment[offset+1] << 8);
|
||||
seg2 = BITSWAP32(seg1, 16,16,16,16,16,16,16,16,16,16,16,16,16,16,15,14,9,7,13,11,10,6,8,12,5,4,3,3,2,1,0,0);
|
||||
output_set_digit_value(i+(offset ? 0 : 20), seg2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( gts3_state::u4b_w )
|
||||
{
|
||||
bool dispclk = BIT(data, 6);
|
||||
if ((!m_dispclk) && dispclk) // 0->1 is valid
|
||||
{
|
||||
m_digit = (m_digit << 1) | BIT(data, 5);
|
||||
}
|
||||
m_dispclk = dispclk;
|
||||
|
||||
|
||||
// printf("B=%s=%X ",machine().describe_context(),data&0xe0);
|
||||
}
|
||||
|
||||
void gts3_state::machine_reset()
|
||||
{
|
||||
m_digit = 0;
|
||||
m_dispclk = 0;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER( gts3_state, gts3 )
|
||||
@ -62,9 +111,9 @@ static MACHINE_CONFIG_START( gts3, gts3_state )
|
||||
MCFG_VIA6522_IRQ_HANDLER(DEVWRITELINE("maincpu", m65c02_device, irq_line))
|
||||
//MCFG_VIA6522_READPA_HANDLER(WRITE8(gts3_state, u4a_r))
|
||||
//MCFG_VIA6522_READPB_HANDLER(WRITE8(gts3_state, u4b_r))
|
||||
//MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(gts3_state, u4b_w))
|
||||
MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(gts3_state, u4b_w))
|
||||
//MCFG_VIA6522_CA2_HANDLER(WRITELINE(gts3_state, u4ca2_w))
|
||||
MCFG_VIA6522_CB2_HANDLER(DEVWRITELINE("maincpu", m65c02_device, nmi_line))
|
||||
MCFG_VIA6522_CB2_HANDLER(WRITELINE(gts3_state, nmi_w))
|
||||
|
||||
MCFG_DEVICE_ADD("u5", VIA6522, 0)
|
||||
MCFG_VIA6522_IRQ_HANDLER(DEVWRITELINE("maincpu", m65c02_device, irq_line))
|
||||
@ -330,6 +379,7 @@ ROM_END
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
/ Unnamed game? by Toptronic HGmbH, Germany
|
||||
/ Shows as "GAME NAME" in display, (#7**)
|
||||
/-------------------------------------------------------------------*/
|
||||
ROM_START(tt_game)
|
||||
ROM_REGION(0x10000, "maincpu", 0)
|
||||
|
Loading…
Reference in New Issue
Block a user