williams system3 wip

This commit is contained in:
Robbbert 2012-10-18 12:28:16 +00:00
parent 9c52646148
commit befda9da82

View File

@ -3,64 +3,213 @@
Pinball
Williams System 3
Typical of Williams hardware: Motorola 8-bit CPUs, and lots of PIAs.
Sound doesn't work because the diagram doesn't show where the sound data
comes from. (variable m_sound_data needs to be written to).
************************************************************************************/
#include "emu.h"
#include "machine/genpin.h"
#include "cpu/m6800/m6800.h"
#include "machine/6821pia.h"
#include "sound/dac.h"
//#include "s3.lh"
class williams_s3_state : public driver_device
class s3_state : public genpin_class
{
public:
williams_s3_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu")
s3_state(const machine_config &mconfig, device_type type, const char *tag)
: genpin_class(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_dac(*this, "dac"),
m_pia0(*this, "pia0"),
m_pia1(*this, "pia1"),
m_pia2(*this, "pia2"),
m_pia3(*this, "pia3"),
m_pia4(*this, "pia4")
{ }
DECLARE_READ8_MEMBER(dac_r);
DECLARE_WRITE8_MEMBER(dac_w);
DECLARE_READ_LINE_MEMBER(cb1_r);
TIMER_DEVICE_CALLBACK_MEMBER(irq);
protected:
// devices
required_device<cpu_device> m_maincpu;
required_device<dac_device> m_dac;
required_device<pia6821_device> m_pia0;
required_device<pia6821_device> m_pia1;
required_device<pia6821_device> m_pia2;
required_device<pia6821_device> m_pia3;
required_device<pia6821_device> m_pia4;
// driver_device overrides
virtual void machine_reset();
public:
DECLARE_DRIVER_INIT(williams_s3);
private:
UINT8 m_t_c;
UINT8 m_sound_data;
bool m_cb1;
};
static ADDRESS_MAP_START( williams_s3_map, AS_PROGRAM, 8, williams_s3_state )
static ADDRESS_MAP_START( s3_main_map, AS_PROGRAM, 8, s3_state )
ADDRESS_MAP_GLOBAL_MASK(0x7fff)
AM_RANGE(0x0000, 0x01ff) AM_RAM
//AM_RANGE(0x2200, 0x2203) AM_WRITE
//AM_RANGE(0x2400, 0x2403) AM_WRITE
//AM_RANGE(0x2800, 0x2803) AM_WRITE
AM_RANGE(0x2200, 0x2203) AM_DEVREADWRITE("pia0", pia6821_device, read, write) // solenoids
AM_RANGE(0x2400, 0x2403) AM_DEVREADWRITE("pia1", pia6821_device, read, write) // lamps
AM_RANGE(0x2800, 0x2803) AM_DEVREADWRITE("pia2", pia6821_device, read, write) // display
AM_RANGE(0x3000, 0x3003) AM_DEVREADWRITE("pia3", pia6821_device, read, write) // inputs
AM_RANGE(0x6000, 0x67ff) AM_ROM
AM_RANGE(0x7000, 0x7fff) AM_ROM
ADDRESS_MAP_END
static ADDRESS_MAP_START( williams_s3_sub_map, AS_PROGRAM, 8, williams_s3_state )
ADDRESS_MAP_GLOBAL_MASK(0x7fff)
static ADDRESS_MAP_START( s3_audio_map, AS_PROGRAM, 8, s3_state )
ADDRESS_MAP_GLOBAL_MASK(0xfff)
AM_RANGE(0x0000, 0x007f) AM_RAM
//AM_RANGE(0x0400, 0x0403) AM_WRITE
AM_RANGE(0x7800, 0x7fff) AM_ROM
AM_RANGE(0x0400, 0x0403) AM_DEVREADWRITE("pia4", pia6821_device, read, write) // sounds
AM_RANGE(0x0800, 0x0fff) AM_ROM
ADDRESS_MAP_END
static INPUT_PORTS_START( williams_s3 )
static INPUT_PORTS_START( s3 )
INPUT_PORTS_END
void williams_s3_state::machine_reset()
void s3_state::machine_reset()
{
m_t_c = 0;
}
DRIVER_INIT_MEMBER(williams_s3_state,williams_s3)
static const pia6821_interface pia0_intf =
{
DEVCB_NULL, /* port A in */
DEVCB_NULL, /* port B in */
DEVCB_NULL, /* line CA1 in */
DEVCB_NULL, /* line CB1 in */
DEVCB_NULL, /* line CA2 in */
DEVCB_NULL, /* line CB2 in */
DEVCB_NULL, /* port A out */
DEVCB_NULL, /* port B out */
DEVCB_NULL, /* line CA2 out */
DEVCB_NULL, /* port CB2 out */
DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE), /* IRQA */
DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE) /* IRQB */
};
static const pia6821_interface pia1_intf =
{
DEVCB_NULL, /* port A in */
DEVCB_NULL, /* port B in */
DEVCB_NULL, /* line CA1 in */
DEVCB_NULL, /* line CB1 in */
DEVCB_NULL, /* line CA2 in */
DEVCB_NULL, /* line CB2 in */
DEVCB_NULL, /* port A out */
DEVCB_NULL, /* port B out */
DEVCB_NULL, /* line CA2 out */
DEVCB_NULL, /* port CB2 out */
DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE), /* IRQA */
DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE) /* IRQB */
};
static const pia6821_interface pia2_intf =
{
DEVCB_NULL, /* port A in */
DEVCB_NULL, /* port B in */
DEVCB_NULL, /* line CA1 in */
DEVCB_NULL, /* line CB1 in */
DEVCB_NULL, /* line CA2 in */
DEVCB_NULL, /* line CB2 in */
DEVCB_NULL, /* port A out */
DEVCB_NULL, /* port B out */
DEVCB_NULL, /* line CA2 out */
DEVCB_NULL, /* port CB2 out */
DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE), /* IRQA */
DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE) /* IRQB */
};
static const pia6821_interface pia3_intf =
{
DEVCB_NULL, /* port A in */
DEVCB_NULL, /* port B in */
DEVCB_NULL, /* line CA1 in */
DEVCB_NULL, /* line CB1 in */
DEVCB_NULL, /* line CA2 in */
DEVCB_NULL, /* line CB2 in */
DEVCB_NULL, /* port A out */
DEVCB_NULL, /* port B out */
DEVCB_NULL, /* line CA2 out */
DEVCB_NULL, /* port CB2 out */
DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE), /* IRQA */
DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE) /* IRQB */
};
READ_LINE_MEMBER( s3_state::cb1_r )
{
return m_cb1;
}
static MACHINE_CONFIG_START( williams_s3, williams_s3_state )
READ8_MEMBER( s3_state::dac_r )
{
m_cb1 = (m_sound_data < 255);
// add code to activate cb1
return m_sound_data;
}
WRITE8_MEMBER( s3_state::dac_w )
{
m_dac->write_unsigned8(data);
}
static const pia6821_interface pia4_intf =
{
DEVCB_NULL, /* port A in */
DEVCB_NULL, /* port B in */
DEVCB_NULL, /* line CA1 in */
DEVCB_DRIVER_LINE_MEMBER(s3_state, cb1_r), /* line CB1 in */
DEVCB_NULL, /* line CA2 in */
DEVCB_NULL, /* line CB2 in */
DEVCB_DRIVER_MEMBER(s3_state, dac_w), /* port A out */
DEVCB_NULL, /* port B out */
DEVCB_NULL, /* line CA2 out */
DEVCB_NULL, /* port CB2 out */
DEVCB_CPU_INPUT_LINE("audiocpu", M6800_IRQ_LINE), /* IRQA */
DEVCB_CPU_INPUT_LINE("audiocpu", M6800_IRQ_LINE) /* IRQB */
};
TIMER_DEVICE_CALLBACK_MEMBER( s3_state::irq)
{
if (m_t_c > 0x10)
m_maincpu->set_input_line(M6800_IRQ_LINE, ASSERT_LINE);
else
m_t_c++;
m_maincpu->set_input_line(M6800_IRQ_LINE, CLEAR_LINE);
}
static MACHINE_CONFIG_START( s3, s3_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M6800, 3580000 / 4)
MCFG_CPU_PROGRAM_MAP(williams_s3_map)
MCFG_CPU_ADD("cpu2", M6800, 3580000 / 4)
MCFG_CPU_PROGRAM_MAP(williams_s3_sub_map)
MCFG_CPU_ADD("maincpu", M6800, 3580000)
MCFG_CPU_PROGRAM_MAP(s3_main_map)
MCFG_CPU_ADD("audiocpu", M6802, 3580000)
MCFG_CPU_PROGRAM_MAP(s3_audio_map)
MCFG_TIMER_DRIVER_ADD_PERIODIC("irq", s3_state, irq, attotime::from_hz(1000))
/* Video */
//MCFG_DEFAULT_LAYOUT(layout_s3)
/* Sound */
MCFG_FRAGMENT_ADD( genpin_audio )
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("dac", DAC, 0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
/* Devices */
MCFG_PIA6821_ADD("pia0", pia0_intf)
MCFG_PIA6821_ADD("pia1", pia1_intf)
MCFG_PIA6821_ADD("pia2", pia2_intf)
MCFG_PIA6821_ADD("pia3", pia3_intf)
MCFG_PIA6821_ADD("pia4", pia4_intf)
MACHINE_CONFIG_END
/*-------------------------------------
@ -72,8 +221,8 @@ ROM_START(cntct_l1)
ROM_LOAD("white1.716", 0x7000, 0x0800, CRC(9bbbf14f) SHA1(b0542ffdd683fa0ea4a9819576f3789cd5a4b2eb))
ROM_LOAD("white2.716", 0x7800, 0x0800, CRC(4d4010dd) SHA1(11221124fef3b7bf82d353d65ce851495f6946a7))
ROM_REGION(0x10000, "cpu2", 0)
ROM_LOAD("sound1.716", 0x7800, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("sound1.716", 0x0800, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
ROM_END
/*-------------------------------------
@ -85,8 +234,8 @@ ROM_START(disco_l1)
ROM_LOAD("white1.716", 0x7000, 0x0800, CRC(9bbbf14f) SHA1(b0542ffdd683fa0ea4a9819576f3789cd5a4b2eb))
ROM_LOAD("white2.716", 0x7800, 0x0800, CRC(4d4010dd) SHA1(11221124fef3b7bf82d353d65ce851495f6946a7))
ROM_REGION(0x10000, "cpu2", 0)
ROM_LOAD("sound1.716", 0x7800, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("sound1.716", 0x0800, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
ROM_END
/*----------------------------
@ -98,7 +247,7 @@ ROM_START(httip_l1)
ROM_LOAD("white1.716", 0x7000, 0x0800, CRC(9bbbf14f) SHA1(b0542ffdd683fa0ea4a9819576f3789cd5a4b2eb))
ROM_LOAD("white2.716", 0x7800, 0x0800, CRC(4d4010dd) SHA1(11221124fef3b7bf82d353d65ce851495f6946a7))
ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF)
ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF)
ROM_END
/*---------------------------------
@ -110,7 +259,7 @@ ROM_START(lucky_l1)
ROM_LOAD("white1.716", 0x7000, 0x0800, CRC(9bbbf14f) SHA1(b0542ffdd683fa0ea4a9819576f3789cd5a4b2eb))
ROM_LOAD("white2.716", 0x7800, 0x0800, CRC(4d4010dd) SHA1(11221124fef3b7bf82d353d65ce851495f6946a7))
ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF)
ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF)
ROM_END
/*-------------------------------------
@ -122,13 +271,13 @@ ROM_START(wldcp_l1)
ROM_LOAD("white1.716", 0x7000, 0x0800, CRC(9bbbf14f) SHA1(b0542ffdd683fa0ea4a9819576f3789cd5a4b2eb))
ROM_LOAD("white2wc.716", 0x7800, 0x0800, CRC(618d15b5) SHA1(527387893eeb2cd4aa563a4cfb1948a15d2ed741))
ROM_REGION(0x10000, "cpu2", 0)
ROM_LOAD("sound1.716", 0x7800, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("sound1.716", 0x0800, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
ROM_END
GAME( 1977, httip_l1, 0, williams_s3, williams_s3, williams_s3_state, williams_s3, ROT0, "Williams", "Hot Tip (L-1)", GAME_IS_SKELETON_MECHANICAL)
GAME( 1977, lucky_l1, 0, williams_s3, williams_s3, williams_s3_state, williams_s3, ROT0, "Williams", "Lucky Seven (L-1)", GAME_IS_SKELETON_MECHANICAL)
GAME( 1978, wldcp_l1, 0, williams_s3, williams_s3, williams_s3_state, williams_s3, ROT0, "Williams", "World Cup Soccer (L-1)", GAME_IS_SKELETON_MECHANICAL)
GAME( 1978, cntct_l1, 0, williams_s3, williams_s3, williams_s3_state, williams_s3, ROT0, "Williams", "Contact (L-1)", GAME_IS_SKELETON_MECHANICAL)
GAME( 1978, disco_l1, 0, williams_s3, williams_s3, williams_s3_state, williams_s3, ROT0, "Williams", "Disco Fever (L-1)", GAME_IS_SKELETON_MECHANICAL)
GAME( 1977, httip_l1, 0, s3, s3, driver_device, 0, ROT0, "Williams", "Hot Tip (L-1)", GAME_IS_SKELETON_MECHANICAL)
GAME( 1977, lucky_l1, 0, s3, s3, driver_device, 0, ROT0, "Williams", "Lucky Seven (L-1)", GAME_IS_SKELETON_MECHANICAL)
GAME( 1978, wldcp_l1, 0, s3, s3, driver_device, 0, ROT0, "Williams", "World Cup Soccer (L-1)", GAME_IS_SKELETON_MECHANICAL)
GAME( 1978, cntct_l1, 0, s3, s3, driver_device, 0, ROT0, "Williams", "Contact (L-1)", GAME_IS_SKELETON_MECHANICAL)
GAME( 1978, disco_l1, 0, s3, s3, driver_device, 0, ROT0, "Williams", "Disco Fever (L-1)", GAME_IS_SKELETON_MECHANICAL)