Previous 199869 Revisions Next

r18589 Thursday 18th October, 2012 at 12:28:16 UTC by Robbbert
williams system3 wip
[src/mame/drivers]s3.c

trunk/src/mame/drivers/s3.c
r18588r18589
33    Pinball
44    Williams System 3
55
6    Typical of Williams hardware: Motorola 8-bit CPUs, and lots of PIAs.
7
8    Sound doesn't work because the diagram doesn't show where the sound data
9    comes from. (variable m_sound_data needs to be written to).
10
611************************************************************************************/
712
813
9#include "emu.h"
14#include "machine/genpin.h"
1015#include "cpu/m6800/m6800.h"
16#include "machine/6821pia.h"
17#include "sound/dac.h"
18//#include "s3.lh"
1119
12class williams_s3_state : public driver_device
20
21class s3_state : public genpin_class
1322{
1423public:
15   williams_s3_state(const machine_config &mconfig, device_type type, const char *tag)
16      : driver_device(mconfig, type, tag),
17   m_maincpu(*this, "maincpu")
24   s3_state(const machine_config &mconfig, device_type type, const char *tag)
25      : genpin_class(mconfig, type, tag),
26   m_maincpu(*this, "maincpu"),
27   m_dac(*this, "dac"),
28   m_pia0(*this, "pia0"),
29   m_pia1(*this, "pia1"),
30   m_pia2(*this, "pia2"),
31   m_pia3(*this, "pia3"),
32   m_pia4(*this, "pia4")
1833   { }
1934
35   DECLARE_READ8_MEMBER(dac_r);
36   DECLARE_WRITE8_MEMBER(dac_w);
37   DECLARE_READ_LINE_MEMBER(cb1_r);
38   TIMER_DEVICE_CALLBACK_MEMBER(irq);
2039protected:
2140
2241   // devices
2342   required_device<cpu_device> m_maincpu;
43   required_device<dac_device> m_dac;
44   required_device<pia6821_device> m_pia0;
45   required_device<pia6821_device> m_pia1;
46   required_device<pia6821_device> m_pia2;
47   required_device<pia6821_device> m_pia3;
48   required_device<pia6821_device> m_pia4;
2449
2550   // driver_device overrides
2651   virtual void machine_reset();
27public:
28   DECLARE_DRIVER_INIT(williams_s3);
52private:
53   UINT8 m_t_c;
54   UINT8 m_sound_data;
55   bool m_cb1;
2956};
3057
31static ADDRESS_MAP_START( williams_s3_map, AS_PROGRAM, 8, williams_s3_state )
58static ADDRESS_MAP_START( s3_main_map, AS_PROGRAM, 8, s3_state )
3259   ADDRESS_MAP_GLOBAL_MASK(0x7fff)
3360   AM_RANGE(0x0000, 0x01ff) AM_RAM
34   //AM_RANGE(0x2200, 0x2203) AM_WRITE
35   //AM_RANGE(0x2400, 0x2403) AM_WRITE
36   //AM_RANGE(0x2800, 0x2803) AM_WRITE
61   AM_RANGE(0x2200, 0x2203) AM_DEVREADWRITE("pia0", pia6821_device, read, write) // solenoids
62   AM_RANGE(0x2400, 0x2403) AM_DEVREADWRITE("pia1", pia6821_device, read, write) // lamps
63   AM_RANGE(0x2800, 0x2803) AM_DEVREADWRITE("pia2", pia6821_device, read, write) // display
64   AM_RANGE(0x3000, 0x3003) AM_DEVREADWRITE("pia3", pia6821_device, read, write) // inputs
3765   AM_RANGE(0x6000, 0x67ff) AM_ROM
3866   AM_RANGE(0x7000, 0x7fff) AM_ROM
3967ADDRESS_MAP_END
4068
41static ADDRESS_MAP_START( williams_s3_sub_map, AS_PROGRAM, 8, williams_s3_state )
42   ADDRESS_MAP_GLOBAL_MASK(0x7fff)
69static ADDRESS_MAP_START( s3_audio_map, AS_PROGRAM, 8, s3_state )
70   ADDRESS_MAP_GLOBAL_MASK(0xfff)
4371   AM_RANGE(0x0000, 0x007f) AM_RAM
44   //AM_RANGE(0x0400, 0x0403) AM_WRITE
45   AM_RANGE(0x7800, 0x7fff) AM_ROM
72   AM_RANGE(0x0400, 0x0403) AM_DEVREADWRITE("pia4", pia6821_device, read, write) // sounds
73   AM_RANGE(0x0800, 0x0fff) AM_ROM
4674ADDRESS_MAP_END
4775
48static INPUT_PORTS_START( williams_s3 )
76static INPUT_PORTS_START( s3 )
4977INPUT_PORTS_END
5078
51void williams_s3_state::machine_reset()
79void s3_state::machine_reset()
5280{
81   m_t_c = 0;
5382}
5483
55DRIVER_INIT_MEMBER(williams_s3_state,williams_s3)
84static const pia6821_interface pia0_intf =
5685{
86   DEVCB_NULL,      /* port A in */
87   DEVCB_NULL,      /* port B in */
88   DEVCB_NULL,      /* line CA1 in */
89   DEVCB_NULL,      /* line CB1 in */
90   DEVCB_NULL,      /* line CA2 in */
91   DEVCB_NULL,      /* line CB2 in */
92   DEVCB_NULL,      /* port A out */
93   DEVCB_NULL,      /* port B out */
94   DEVCB_NULL,      /* line CA2 out */
95   DEVCB_NULL,      /* port CB2 out */
96   DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE),      /* IRQA */
97   DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE)      /* IRQB */
98};
99
100static const pia6821_interface pia1_intf =
101{
102   DEVCB_NULL,      /* port A in */
103   DEVCB_NULL,      /* port B in */
104   DEVCB_NULL,      /* line CA1 in */
105   DEVCB_NULL,      /* line CB1 in */
106   DEVCB_NULL,      /* line CA2 in */
107   DEVCB_NULL,      /* line CB2 in */
108   DEVCB_NULL,      /* port A out */
109   DEVCB_NULL,      /* port B out */
110   DEVCB_NULL,      /* line CA2 out */
111   DEVCB_NULL,      /* port CB2 out */
112   DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE),      /* IRQA */
113   DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE)      /* IRQB */
114};
115
116static const pia6821_interface pia2_intf =
117{
118   DEVCB_NULL,      /* port A in */
119   DEVCB_NULL,      /* port B in */
120   DEVCB_NULL,      /* line CA1 in */
121   DEVCB_NULL,      /* line CB1 in */
122   DEVCB_NULL,      /* line CA2 in */
123   DEVCB_NULL,      /* line CB2 in */
124   DEVCB_NULL,      /* port A out */
125   DEVCB_NULL,      /* port B out */
126   DEVCB_NULL,      /* line CA2 out */
127   DEVCB_NULL,      /* port CB2 out */
128   DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE),      /* IRQA */
129   DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE)      /* IRQB */
130};
131
132static const pia6821_interface pia3_intf =
133{
134   DEVCB_NULL,      /* port A in */
135   DEVCB_NULL,      /* port B in */
136   DEVCB_NULL,      /* line CA1 in */
137   DEVCB_NULL,      /* line CB1 in */
138   DEVCB_NULL,      /* line CA2 in */
139   DEVCB_NULL,      /* line CB2 in */
140   DEVCB_NULL,      /* port A out */
141   DEVCB_NULL,      /* port B out */
142   DEVCB_NULL,      /* line CA2 out */
143   DEVCB_NULL,      /* port CB2 out */
144   DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE),      /* IRQA */
145   DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE)      /* IRQB */
146};
147
148READ_LINE_MEMBER( s3_state::cb1_r )
149{
150   return m_cb1;
57151}
58static MACHINE_CONFIG_START( williams_s3, williams_s3_state )
152
153READ8_MEMBER( s3_state::dac_r )
154{
155   m_cb1 = (m_sound_data < 255);
156   // add code to activate cb1
157   return m_sound_data;   
158}
159
160WRITE8_MEMBER( s3_state::dac_w )
161{
162   m_dac->write_unsigned8(data);
163}
164
165static const pia6821_interface pia4_intf =
166{
167   DEVCB_NULL,      /* port A in */
168   DEVCB_NULL,      /* port B in */
169   DEVCB_NULL,      /* line CA1 in */
170   DEVCB_DRIVER_LINE_MEMBER(s3_state, cb1_r),      /* line CB1 in */
171   DEVCB_NULL,      /* line CA2 in */
172   DEVCB_NULL,      /* line CB2 in */
173   DEVCB_DRIVER_MEMBER(s3_state, dac_w),      /* port A out */
174   DEVCB_NULL,      /* port B out */
175   DEVCB_NULL,      /* line CA2 out */
176   DEVCB_NULL,      /* port CB2 out */
177   DEVCB_CPU_INPUT_LINE("audiocpu", M6800_IRQ_LINE),      /* IRQA */
178   DEVCB_CPU_INPUT_LINE("audiocpu", M6800_IRQ_LINE)      /* IRQB */
179};
180
181TIMER_DEVICE_CALLBACK_MEMBER( s3_state::irq)
182{
183   if (m_t_c > 0x10)
184      m_maincpu->set_input_line(M6800_IRQ_LINE, ASSERT_LINE);
185   else
186      m_t_c++;
187   m_maincpu->set_input_line(M6800_IRQ_LINE, CLEAR_LINE);
188}
189
190static MACHINE_CONFIG_START( s3, s3_state )
59191   /* basic machine hardware */
60   MCFG_CPU_ADD("maincpu", M6800, 3580000 / 4)
61   MCFG_CPU_PROGRAM_MAP(williams_s3_map)
62   MCFG_CPU_ADD("cpu2", M6800, 3580000 / 4)
63   MCFG_CPU_PROGRAM_MAP(williams_s3_sub_map)
192   MCFG_CPU_ADD("maincpu", M6800, 3580000)
193   MCFG_CPU_PROGRAM_MAP(s3_main_map)
194   MCFG_CPU_ADD("audiocpu", M6802, 3580000)
195   MCFG_CPU_PROGRAM_MAP(s3_audio_map)
196   MCFG_TIMER_DRIVER_ADD_PERIODIC("irq", s3_state, irq, attotime::from_hz(1000))
197
198   /* Video */
199   //MCFG_DEFAULT_LAYOUT(layout_s3)
200
201   /* Sound */
202   MCFG_FRAGMENT_ADD( genpin_audio )
203   MCFG_SPEAKER_STANDARD_MONO("mono")
204   MCFG_SOUND_ADD("dac", DAC, 0)
205   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
206
207   /* Devices */
208   MCFG_PIA6821_ADD("pia0", pia0_intf)
209   MCFG_PIA6821_ADD("pia1", pia1_intf)
210   MCFG_PIA6821_ADD("pia2", pia2_intf)
211   MCFG_PIA6821_ADD("pia3", pia3_intf)
212   MCFG_PIA6821_ADD("pia4", pia4_intf)
64213MACHINE_CONFIG_END
65214
66215/*-------------------------------------
r18588r18589
72221   ROM_LOAD("white1.716", 0x7000, 0x0800, CRC(9bbbf14f) SHA1(b0542ffdd683fa0ea4a9819576f3789cd5a4b2eb))
73222   ROM_LOAD("white2.716", 0x7800, 0x0800, CRC(4d4010dd) SHA1(11221124fef3b7bf82d353d65ce851495f6946a7))
74223
75   ROM_REGION(0x10000, "cpu2", 0)
76   ROM_LOAD("sound1.716", 0x7800, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
224   ROM_REGION(0x10000, "audiocpu", 0)
225   ROM_LOAD("sound1.716", 0x0800, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
77226ROM_END
78227
79228/*-------------------------------------
r18588r18589
85234   ROM_LOAD("white1.716", 0x7000, 0x0800, CRC(9bbbf14f) SHA1(b0542ffdd683fa0ea4a9819576f3789cd5a4b2eb))
86235   ROM_LOAD("white2.716", 0x7800, 0x0800, CRC(4d4010dd) SHA1(11221124fef3b7bf82d353d65ce851495f6946a7))
87236
88   ROM_REGION(0x10000, "cpu2", 0)
89   ROM_LOAD("sound1.716", 0x7800, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
237   ROM_REGION(0x10000, "audiocpu", 0)
238   ROM_LOAD("sound1.716", 0x0800, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
90239ROM_END
91240
92241/*----------------------------
r18588r18589
98247   ROM_LOAD("white1.716", 0x7000, 0x0800, CRC(9bbbf14f) SHA1(b0542ffdd683fa0ea4a9819576f3789cd5a4b2eb))
99248   ROM_LOAD("white2.716", 0x7800, 0x0800, CRC(4d4010dd) SHA1(11221124fef3b7bf82d353d65ce851495f6946a7))
100249
101   ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF)
250   ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF)
102251ROM_END
103252
104253/*---------------------------------
r18588r18589
110259   ROM_LOAD("white1.716", 0x7000, 0x0800, CRC(9bbbf14f) SHA1(b0542ffdd683fa0ea4a9819576f3789cd5a4b2eb))
111260   ROM_LOAD("white2.716", 0x7800, 0x0800, CRC(4d4010dd) SHA1(11221124fef3b7bf82d353d65ce851495f6946a7))
112261
113   ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF)
262   ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF)
114263ROM_END
115264
116265/*-------------------------------------
r18588r18589
122271   ROM_LOAD("white1.716", 0x7000, 0x0800, CRC(9bbbf14f) SHA1(b0542ffdd683fa0ea4a9819576f3789cd5a4b2eb))
123272   ROM_LOAD("white2wc.716", 0x7800, 0x0800, CRC(618d15b5) SHA1(527387893eeb2cd4aa563a4cfb1948a15d2ed741))
124273
125   ROM_REGION(0x10000, "cpu2", 0)
126   ROM_LOAD("sound1.716", 0x7800, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
274   ROM_REGION(0x10000, "audiocpu", 0)
275   ROM_LOAD("sound1.716", 0x0800, 0x0800, CRC(f4190ca3) SHA1(ee234fb5c894fca5876ee6dc7ea8e89e7e0aec9c))
127276ROM_END
128277
129278
130GAME( 1977, httip_l1, 0, williams_s3, williams_s3, williams_s3_state, williams_s3, ROT0, "Williams", "Hot Tip (L-1)",         GAME_IS_SKELETON_MECHANICAL)
131GAME( 1977, lucky_l1, 0, williams_s3, williams_s3, williams_s3_state, williams_s3, ROT0, "Williams", "Lucky Seven (L-1)",      GAME_IS_SKELETON_MECHANICAL)
132GAME( 1978, wldcp_l1, 0, williams_s3, williams_s3, williams_s3_state, williams_s3, ROT0, "Williams", "World Cup Soccer (L-1)",   GAME_IS_SKELETON_MECHANICAL)
133GAME( 1978, cntct_l1, 0, williams_s3, williams_s3, williams_s3_state, williams_s3, ROT0, "Williams", "Contact (L-1)",         GAME_IS_SKELETON_MECHANICAL)
134GAME( 1978, disco_l1, 0, williams_s3, williams_s3, williams_s3_state, williams_s3, ROT0, "Williams", "Disco Fever (L-1)",      GAME_IS_SKELETON_MECHANICAL)
279GAME( 1977, httip_l1, 0, s3, s3, driver_device, 0, ROT0, "Williams", "Hot Tip (L-1)", GAME_IS_SKELETON_MECHANICAL)
280GAME( 1977, lucky_l1, 0, s3, s3, driver_device, 0, ROT0, "Williams", "Lucky Seven (L-1)", GAME_IS_SKELETON_MECHANICAL)
281GAME( 1978, wldcp_l1, 0, s3, s3, driver_device, 0, ROT0, "Williams", "World Cup Soccer (L-1)", GAME_IS_SKELETON_MECHANICAL)
282GAME( 1978, cntct_l1, 0, s3, s3, driver_device, 0, ROT0, "Williams", "Contact (L-1)", GAME_IS_SKELETON_MECHANICAL)
283GAME( 1978, disco_l1, 0, s3, s3, driver_device, 0, ROT0, "Williams", "Disco Fever (L-1)", GAME_IS_SKELETON_MECHANICAL)

Previous 199869 Revisions Next


© 1997-2024 The MAME Team