Previous 199869 Revisions Next

r18373 Tuesday 9th October, 2012 at 11:08:19 UTC by Robbbert
atari_s1 : last commit for now
[src/mame/drivers]atari_s1.c

trunk/src/mame/drivers/atari_s1.c
r18372r18373
33    Pinball
44    Atari Generation/System 1
55    These were the first widebody pinball machines.
6    Unfortunately they tended to be boring.
76
8    The design of having the circuit boards under the playfield wasn't such a good
9    idea, because it allowed debris and loose screws that could fall off the
10    playfield to cause havoc among the electronics.
11
127    Schematics and PinMAME used as references.
138
9    Dipswitch vs address:
10    SW1 Toggle 1 = 200B
11    SW1 Toggle 2 = 200A
12    SW1 Toggle 3 = 2009
13    SW1 Toggle 4 = 2008
14    SW1 Toggle 5 = 200F
15    SW1 Toggle 6 = 200E
16    SW1 Toggle 7 = 200D
17    SW1 Toggle 8 = 200C
18    SW2 Toggle 1 = 2003
19    SW2 Toggle 2 = 2002
20    SW2 Toggle 3 = 2001
21    SW2 Toggle 4 = 2000
22    SW2 Toggle 5 = 2007
23    SW2 Toggle 6 = 2006
24    SW2 Toggle 7 = 2005
25    SW2 Toggle 8 = 2004
26
1427ToDo:
1528- Inputs per game; the ones there are for Airborne Avenger
1629- Link up switches where 2 or more act together
1730- Sound
1831- Lamps, solenoids
32- There is an undumped PROM type 020252 (D12) in the sound circuit.
1933
2034
2135************************************************************************************/
r18372r18373
2438#include "cpu/m6800/m6800.h"
2539#include "atari_s1.lh"
2640
27// looking at chip '29 74', this could be /8
41
2842#define MASTER_CLK XTAL_4MHz / 4
2943#define DMA_CLK MASTER_CLK / 2
3044//#define AUDIO_CLK DMA_CLK / 4
r18372r18373
4357   { }
4458
4559   DECLARE_READ8_MEMBER(switch_r);
46   DECLARE_READ8_MEMBER(latch_r);
47   DECLARE_WRITE8_MEMBER(latch_w);
60   DECLARE_WRITE8_MEMBER(meter_w);
61   DECLARE_WRITE8_MEMBER(audioen_w) {};
62   DECLARE_WRITE8_MEMBER(audiores_w) {};
4863
4964   TIMER_DEVICE_CALLBACK_MEMBER(nmi);
5065
r18372r18373
6075private:
6176   UINT8 m_bit6;
6277   UINT8 m_out_offs;
78   UINT8 m_t_c;
6379};
6480
6581static ADDRESS_MAP_START( atari_s1_map, AS_PROGRAM, 8, atari_s1_state )
6682   ADDRESS_MAP_GLOBAL_MASK(0x7fff)
67   AM_RANGE(0x0000, 0x00ff) AM_RAM AM_SHARE("ram")
68   //AM_RANGE(0x1000, 0x100f) AM_MIRROR(0x0F70) AM_WRITE(latch1000_w) // lamps
69   AM_RANGE(0x1080, 0x108f) AM_MIRROR(0x0F70) AM_READWRITE(latch_r,latch_w)
70   //AM_RANGE(0x2000, 0x200f) AM_WRITE(dipg1_w)
83   AM_RANGE(0x0000, 0x00ff) AM_MIRROR(0x1C00) AM_RAM AM_SHARE("ram")
84   AM_RANGE(0x2000, 0x204f) AM_MIRROR(0x0F80) AM_READ(switch_r) AM_WRITENOP // aavenger ROL 200B causes a spurious write
85   AM_RANGE(0x3000, 0x3fff) AM_WRITE(audioen_w) // audio enable
86   AM_RANGE(0x4000, 0x4fff) AM_WRITE(watchdog_reset_w)
87   AM_RANGE(0x5080, 0x508c) AM_MIRROR(3) AM_WRITE(meter_w) // time2000 only
88   AM_RANGE(0x6000, 0x6fff) AM_WRITE(audiores_w) // audio reset
89   AM_RANGE(0x7000, 0x7fff) AM_ROM
90ADDRESS_MAP_END
91
92static ADDRESS_MAP_START( atarians_map, AS_PROGRAM, 8, atari_s1_state ) // more ram
93   ADDRESS_MAP_GLOBAL_MASK(0x7fff)
94   AM_RANGE(0x0000, 0x01ff) AM_MIRROR(0x1C00) AM_RAM AM_SHARE("ram")
7195   AM_RANGE(0x2000, 0x204f) AM_MIRROR(0x0F80) AM_READ(switch_r)
72   //AM_RANGE(0x3000, 0x3fff) AM_WRITE(soundg1_w) // audio enable
96   AM_RANGE(0x3000, 0x3fff) AM_WRITE(audioen_w) // audio enable
7397   AM_RANGE(0x4000, 0x4fff) AM_WRITE(watchdog_reset_w)
74   //AM_RANGE(0x508c, 0x508c) AM_WRITE(latch508c_w)
75   //AM_RANGE(0x6000, 0x6fff) AM_WRITE(audiog1_w) // audio reset
98   AM_RANGE(0x6000, 0x6fff) AM_WRITE(audiores_w) // audio reset
7699   AM_RANGE(0x7000, 0x7fff) AM_ROM
77100ADDRESS_MAP_END
78101
102static ADDRESS_MAP_START( midearth_map, AS_PROGRAM, 8, atari_s1_state )
103   ADDRESS_MAP_GLOBAL_MASK(0x7fff)
104   AM_RANGE(0x0000, 0x00ff) AM_MIRROR(0x1C00) AM_RAM AM_SHARE("ram")
105   AM_RANGE(0x1100, 0x11ff) AM_WRITENOP
106   AM_RANGE(0x2000, 0x204f) AM_MIRROR(0x0F80) AM_READ(switch_r)
107   AM_RANGE(0x3000, 0x3fff) AM_WRITE(audioen_w) // audio enable
108   AM_RANGE(0x4000, 0x4fff) AM_WRITE(watchdog_reset_w)
109   AM_RANGE(0x6000, 0x6fff) AM_WRITE(audiores_w) // audio reset
110   AM_RANGE(0x7000, 0x7fff) AM_ROM AM_WRITENOP // writes to FFFF due to poor coding at 7FF5
111ADDRESS_MAP_END
112
79113static INPUT_PORTS_START( atari_s1 )
80   // need to fix these, the manual has a lot of mistakes
81   PORT_START("INP00")
82   PORT_DIPNAME( 0x80, 0x80, "2000" )
83   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
84   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
85   PORT_START("INP01")
86   PORT_DIPNAME( 0x80, 0x80, "Spelling Award" ) // actually = coins
87   PORT_DIPSETTING(    0x80, "Extra Ball" )
88   PORT_DIPSETTING(    0x00, "20,000 points" )
89   PORT_START("INP02")
90   PORT_DIPNAME( 0x80, 0x80, "Last Ball double bonus" ) // actually = match
91   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
92   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
93   PORT_START("INP03")
94   // This switch together with INP4C thru 4F, sets the scores at which a replay is awarded
95   PORT_DIPNAME( 0x80, 0x80, "Replay score" ) // actually = number of balls
96   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
97   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
98   // These 2 dips control max number of credits (both off = 8; then 12, 15, both on=20)
99   PORT_START("INP04")
100   PORT_DIPNAME( 0x80, 0x80, "Max Credits-a" )
101   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
102   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
103   PORT_START("INP05")
104   PORT_DIPNAME( 0x80, 0x80, "Max Credits-b" )
105   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
106   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
107   PORT_START("INP06")
108   PORT_DIPNAME( 0x80, 0x80, "Exceed replay score" )
109   PORT_DIPSETTING(    0x80, "Nothing" )
114   PORT_START("X0") // 2000-2007
115   PORT_DIPNAME( 0xc3, 0x00, DEF_STR( Coinage ) ) // left chute; right chute
116   PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )   // 1C_1C ; 1C_1C
117   PORT_DIPSETTING(    0x02, DEF_STR( 1C_2C ) )   // 1C_2C ; 1C_2C
118   PORT_DIPSETTING(    0x01, DEF_STR( 1C_3C ) )   // 1C_3C ; 1C_3C
119   PORT_DIPSETTING(    0x03, DEF_STR( 1C_4C ) )   // 1C_4C ; 1C_4C
120   PORT_DIPSETTING(    0x80, DEF_STR( 2C_1C ) )   // 2C_1C ; 2C_1C
121   PORT_DIPSETTING(    0x82, DEF_STR( 2C_3C ) )   // 2C_3C ; 2C_3C
122   PORT_DIPSETTING(    0x81, DEF_STR( 2C_5C ) )   // 2C_5C ; 2C_5C
123   // these work but they confuse the dipswitch menu
124   //PORT_DIPSETTING(    0x83, DEF_STR( 2C_1C ) )   // 2C_1C ; 1C_1C
125   //PORT_DIPSETTING(    0x40, DEF_STR( 1C_1C ) )   // 1C_1C ; 1C_2C
126   //PORT_DIPSETTING(    0x42, DEF_STR( 1C_2C ) )   // 1C_2C ; 1C_4C
127   //PORT_DIPSETTING(    0x41, DEF_STR( 1C_3C ) )   // 1C_3C ; 1C_6C
128   //PORT_DIPSETTING(    0x43, DEF_STR( 2C_3C ) )   // 2C_3C ; 2C_7C
129   //PORT_DIPSETTING(    0xc0, DEF_STR( 2C_5C ) )   // 2C_5C ; 1C_5C
130   //PORT_DIPSETTING(    0xc2, DEF_STR( 2C_7C ) )   // 2C_7C ; 1C_7C
131   //PORT_DIPSETTING(    0xc1, DEF_STR( 3C_1C ) )   // 3C_1C ; 1C_1C
132   //PORT_DIPSETTING(    0xc3, DEF_STR( 1C_1C ) )   // 1C_1C ; 1C_3C
133   PORT_DIPNAME( 0x04, 0x04, "Match" )
134   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
135   PORT_DIPSETTING(    0x04, DEF_STR( On ) )
136   PORT_DIPNAME( 0x08, 0x08, "Balls" )
137   PORT_DIPSETTING(    0x00, "5" )
138   PORT_DIPSETTING(    0x08, "3" )
139   PORT_DIPNAME( 0x30, 0x20, "Special" )
110140   PORT_DIPSETTING(    0x00, "Extra Ball" )
111   PORT_START("INP07")
112   PORT_DIPNAME( 0x80, 0x80, "Replay when Exceed replay score" ) // overrides INP06 if on
113   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
114   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
115   PORT_START("INP08")
116   PORT_DIPNAME( 0x80, 0x80, "Balls" )
117   PORT_DIPSETTING(    0x80, "5" )
118   PORT_DIPSETTING(    0x00, "3" )
119   PORT_START("INP09")
120   PORT_DIPNAME( 0x80, 0x80, "Match" )
121   PORT_DIPSETTING(    0x80, DEF_STR( On ) )
141   PORT_DIPSETTING(    0x20, "Free Game" )
142   PORT_DIPSETTING(    0x10, "20000 points" ) // same as 0x30
143
144   PORT_START("X1") // 2008-200F
145   // This switch together with 204C thru 204F, sets the scores at which a replay is awarded
146   PORT_DIPNAME( 0x01, 0x00, "Replay score" )
147   PORT_DIPSETTING(    0x01, DEF_STR( High ) )
148   PORT_DIPSETTING(    0x00, DEF_STR( Low ) )
149   PORT_DIPNAME( 0x02, 0x02, "Last Ball double bonus" )
122150   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
123   // next 4 dips control coins and credits. Leave them all off for 1coin=1credit.
124   PORT_START("INP0A")
125   PORT_DIPNAME( 0x80, 0x80, "Coins-a" )
126   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
127   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
128   PORT_START("INP0B")
129   PORT_DIPNAME( 0x80, 0x80, "Coins-b" ) // this is actually the test button
130   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
131   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
132   PORT_START("INP0C")
133   PORT_DIPNAME( 0x80, 0x80, "Coins-c" )
134   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
135   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
136   PORT_START("INP0D")
137   PORT_DIPNAME( 0x80, 0x80, "Coins-d" )
138   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
139   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
140   PORT_START("INP0E")
141   PORT_DIPNAME( 0x80, 0x80, "Special" )
142   PORT_DIPSETTING(    0x80, "Extra Ball" )
143   PORT_DIPSETTING(    0x00, "Free Game" )
144   PORT_START("INP0F")
145   PORT_DIPNAME( 0x80, 0x80, "20000 points for special" ) // overrides INP0E if on
146   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
147   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
148   PORT_START("INP10")
149   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 )
150   PORT_START("INP11")
151   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN2 )
152   PORT_START("INP12")
153   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START )
154   PORT_START("INP13")
155   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Slam Tilt")
156   PORT_START("INP14")
151   PORT_DIPSETTING(    0x02, DEF_STR( On ) )
152   PORT_DIPNAME( 0x04, 0x00, "Spelling Award" )
153   PORT_DIPSETTING(    0x00, "Extra Ball" )
154   PORT_DIPSETTING(    0x04, "20,000 points" )
155   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Test") PORT_CODE(KEYCODE_0)
156   PORT_DIPNAME( 0x30, 0x10, "Exceed replay score" )
157   PORT_DIPSETTING(    0x00, "Nothing" )
158   PORT_DIPSETTING(    0x20, "Extra Ball" )
159   PORT_DIPSETTING(    0x10, "Replay" ) // same as 0x30
160   PORT_DIPNAME( 0xc0, 0x00, "Max Credits" )
161   PORT_DIPSETTING(    0x00, "8" )
162   PORT_DIPSETTING(    0x80, "12" )
163   PORT_DIPSETTING(    0x40, "15" )
164   PORT_DIPSETTING(    0xc0, "20" )
165
166   PORT_START("X2") // 2010-2017
167   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
168   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
169   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START )
170   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Slam Tilt")
171   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER )
172   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER )
173   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER )
157174   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
158   PORT_START("INP15")
175
176   PORT_START("X3") // 2018-201F
177   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER )
178   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER )
179   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER )
180   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER )
181   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER )
182   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER )
183   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER )
159184   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
160   PORT_START("INP16")
161   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
162   PORT_START("INP17")
163   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
164   PORT_START("INP18")
165   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
166   PORT_START("INP19")
167   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
168   PORT_START("INP1A")
169   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
170   PORT_START("INP1B")
171   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
172   PORT_START("INP1C")
173   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
174   PORT_START("INP1D")
175   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
176   PORT_START("INP1E")
177   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
178   PORT_START("INP1F")
179   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
180   PORT_START("INP20")
181   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Cabinet Tilt")
182   PORT_START("INP21")
183   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_TILT ) PORT_NAME("Pendulum Tilt")
184   PORT_START("INP22")
185   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Left Flipper") PORT_CODE(KEYCODE_LSHIFT)
186   PORT_START("INP23")
187   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Right Flipper") PORT_CODE(KEYCODE_RSHIFT)
188   PORT_START("INP24")
189   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Target 4")
190   PORT_START("INP25")
191   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Target 3")
192   PORT_START("INP26")
193   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Target 2")
194   PORT_START("INP27")
185
186   PORT_START("X4") // 2020-2027
187   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Cabinet Tilt")
188   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_TILT ) PORT_NAME("Pendulum Tilt")
189   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Left Flipper") PORT_CODE(KEYCODE_LSHIFT)
190   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Right Flipper") PORT_CODE(KEYCODE_RSHIFT)
191   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Target 4")
192   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Target 3")
193   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Target 2")
195194   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Target 1")
196   PORT_START("INP28")
195
196   PORT_START("X5") // 2028-202F
197   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER )
198   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER )
199   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER )
200   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER )
201   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER )
202   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER )
203   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER )
197204   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
198   PORT_START("INP29")
199   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
200   PORT_START("INP2A")
201   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
202   PORT_START("INP2B")
203   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
204   PORT_START("INP2C")
205   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
206   PORT_START("INP2D")
207   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
208   PORT_START("INP2E")
209   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
210   PORT_START("INP2F")
211   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
212   PORT_START("INP30")
213   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
214   PORT_START("INP31")
215   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 3") PORT_CODE(KEYCODE_Q)
216   PORT_START("INP32")
217   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 2") PORT_CODE(KEYCODE_W)
218   PORT_START("INP33")
219   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 1") PORT_CODE(KEYCODE_E)
220   PORT_START("INP34")
221   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 8") PORT_CODE(KEYCODE_R)
222   PORT_START("INP35")
223   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 7") PORT_CODE(KEYCODE_Y)
224   PORT_START("INP36")
225   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 6") PORT_CODE(KEYCODE_U)
226   PORT_START("INP37")
205
206   PORT_START("X6") // 2030-2037
207   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER )
208   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 3") PORT_CODE(KEYCODE_Q)
209   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 2") PORT_CODE(KEYCODE_W)
210   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 1") PORT_CODE(KEYCODE_E)
211   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 8") PORT_CODE(KEYCODE_R)
212   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 7") PORT_CODE(KEYCODE_Y)
213   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 6") PORT_CODE(KEYCODE_U)
227214   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 5") PORT_CODE(KEYCODE_I)
228   PORT_START("INP38")
229   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("L Hole") PORT_CODE(KEYCODE_O)
230   PORT_START("INP39")
231   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Bumper 1") PORT_CODE(KEYCODE_V)
232   PORT_START("INP3A")
233   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Bumper 2") PORT_CODE(KEYCODE_B)
234   PORT_START("INP3B")
235   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Bumper 3") PORT_CODE(KEYCODE_N)
236   PORT_START("INP3C")
237   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Spinner") PORT_CODE(KEYCODE_M)
238   PORT_START("INP3D")
239   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("R Pocket") PORT_CODE(KEYCODE_A)
240   PORT_START("INP3E")
241   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("L Pocket") PORT_CODE(KEYCODE_S)
242   PORT_START("INP3F")
215
216   PORT_START("X7") // 2038-203F
217   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("L Hole") PORT_CODE(KEYCODE_O)
218   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Bumper 1") PORT_CODE(KEYCODE_V)
219   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Bumper 2") PORT_CODE(KEYCODE_B)
220   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Bumper 3") PORT_CODE(KEYCODE_N)
221   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Spinner") PORT_CODE(KEYCODE_M)
222   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("R Pocket") PORT_CODE(KEYCODE_A)
223   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("L Pocket") PORT_CODE(KEYCODE_S)
243224   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("R Hole") PORT_CODE(KEYCODE_D)
244   PORT_START("INP40")
245   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("L Triangle") PORT_CODE(KEYCODE_F)
246   PORT_START("INP41")
247   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("10 points") PORT_CODE(KEYCODE_G)
248   PORT_START("INP42")
249   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("50 points") PORT_CODE(KEYCODE_H)
250   PORT_START("INP43")
251   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("OutHole") PORT_CODE(KEYCODE_X)
252   PORT_START("INP44")
253   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
254   PORT_START("INP45")
255   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
256   PORT_START("INP46")
257   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
258   PORT_START("INP47")
225
226   PORT_START("X8") // 2040-2047
227   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("L Triangle") PORT_CODE(KEYCODE_F)
228   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("10 points") PORT_CODE(KEYCODE_G)
229   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("50 points") PORT_CODE(KEYCODE_H)
230   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("OutHole") PORT_CODE(KEYCODE_X)
231   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER )
232   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER )
233   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER )
259234   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("R Triangle") PORT_CODE(KEYCODE_J)
260   PORT_START("INP48")
261   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("50 points and adv letter") PORT_CODE(KEYCODE_K)
262   PORT_START("INP49")
263   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Captive ball rollovers") PORT_CODE(KEYCODE_L)
264   PORT_START("INP4A")
265   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 'B' centre") PORT_CODE(KEYCODE_Z)
266   PORT_START("INP4B")
267   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Roll thru upper right") PORT_CODE(KEYCODE_C)
268   PORT_START("INP4C")
235
236   PORT_START("X9") // 2048-204F
237   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("50 points and adv letter") PORT_CODE(KEYCODE_K)
238   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Captive ball rollovers") PORT_CODE(KEYCODE_L)
239   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 'B' centre") PORT_CODE(KEYCODE_Z)
240   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Roll thru upper right") PORT_CODE(KEYCODE_C)
241   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER )
242   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER )
243   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER )
269244   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
270   PORT_START("INP4D")
271   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
272   PORT_START("INP4E")
273   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
274   PORT_START("INP4F")
275   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER )
276245INPUT_PORTS_END
277246
278247void atari_s1_state::machine_reset()
279248{
249   m_t_c = 0;
280250}
281251
282READ8_MEMBER( atari_s1_state::latch_r )
252WRITE8_MEMBER( atari_s1_state::meter_w )
283253{
284   return 0;
254// time2000 has optional coin counters etc
285255}
286256
287WRITE8_MEMBER( atari_s1_state::latch_w )
288{
289}
290
291257READ8_MEMBER( atari_s1_state::switch_r )
292258{
293259   char kbdrow[8];
294   sprintf(kbdrow,"INP%02X",offset);
295   return ioport(kbdrow)->read() | (BIT(m_bit6, 1) << 6);
260   sprintf(kbdrow,"X%X",offset>>3);
261   return (BIT(ioport(kbdrow)->read(), offset&7 ) << 7) | (BIT(m_bit6, 1) << 6); // switch bit | BIT6_CLK
296262}
297263
298264TIMER_DEVICE_CALLBACK_MEMBER( atari_s1_state::nmi )
299265{
300   static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0, 0, 0, 0, 0, 0 };
266   static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // 4511
301267   m_bit6++;
302   m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
268   if (m_t_c > 0x40)
269      m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
270   else
271      m_t_c++;
303272
304273   m_out_offs++;
305274   m_out_offs &= 0x1f;
306275   if ((m_out_offs & 3) == 3)
307276   {
277      // Player number
308278      char wordnum[8];
309279      sprintf(wordnum,"text%d",m_out_offs>>2);
310      output_set_value(wordnum, !(m_p_ram[m_out_offs]==8));
280      output_set_value(wordnum, !BIT(patterns[m_p_ram[m_out_offs]&15], 6)); // uses 'g' segment
311281   }
312282   else
313283   {
284      // Digits
314285      output_set_digit_value(m_out_offs << 1, patterns[m_p_ram[m_out_offs]>>4]);
315286      output_set_digit_value((m_out_offs << 1)+1, patterns[m_p_ram[m_out_offs]&15]);
316287   }
r18372r18373
329300   MCFG_DEFAULT_LAYOUT(layout_atari_s1)
330301MACHINE_CONFIG_END
331302
303static MACHINE_CONFIG_DERIVED( atarians, atari_s1 )
304   MCFG_CPU_MODIFY("maincpu")
305   MCFG_CPU_PROGRAM_MAP(atarians_map)
306MACHINE_CONFIG_END
307
308static MACHINE_CONFIG_DERIVED( midearth, atari_s1 )
309   MCFG_CPU_MODIFY("maincpu")
310   MCFG_CPU_PROGRAM_MAP(midearth_map)
311MACHINE_CONFIG_END
312
332313/*-------------------------------------------------------------------
333314/ The Atarians (11/1976)
334315/-------------------------------------------------------------------*/
r18372r18373
384365ROM_END
385366
386367
387GAME( 1976, atarians, 0,      atari_s1, atari_s1, driver_device, 0, ROT0, "Atari","The Atarians",    GAME_IS_SKELETON_MECHANICAL)
388//GAME( 2002, atarianb, atarians,   atari_s1, atari_s1, driver_device, 0, ROT0, "Atari / Gaston","The Atarians (working bootleg)",  GAME_IS_SKELETON_MECHANICAL)
389GAME( 1977, time2000, 0,      atari_s1, atari_s1, driver_device, 0, ROT0, "Atari","Time 2000",      GAME_IS_SKELETON_MECHANICAL)
390GAME( 1977, aavenger, 0,      atari_s1, atari_s1, driver_device, 0, ROT0, "Atari","Airborne Avenger", GAME_IS_SKELETON_MECHANICAL)
391GAME( 1978, midearth, 0,      atari_s1, atari_s1, driver_device, 0, ROT0, "Atari","Middle Earth",    GAME_IS_SKELETON_MECHANICAL)
392GAME( 1978, spcrider, 0,      atari_s1, atari_s1, driver_device, 0, ROT0, "Atari","Space Riders",      GAME_IS_SKELETON_MECHANICAL)
368GAME( 1976, atarians, 0,         atarians, atari_s1, driver_device, 0, ROT0, "Atari", "The Atarians", GAME_MECHANICAL | GAME_NO_SOUND)
369//GAME( 2002, atarianb, atarians,   atari_s1, atari_s1, driver_device, 0, ROT0, "Atari / Gaston", "The Atarians (working bootleg)", GAME_IS_SKELETON_MECHANICAL)
370GAME( 1977, time2000, 0,         atari_s1, atari_s1, driver_device, 0, ROT0, "Atari", "Time 2000", GAME_MECHANICAL | GAME_NO_SOUND)
371GAME( 1977, aavenger, 0,         atari_s1, atari_s1, driver_device, 0, ROT0, "Atari", "Airborne Avenger", GAME_MECHANICAL | GAME_NO_SOUND)
372GAME( 1978, midearth, 0,         midearth, atari_s1, driver_device, 0, ROT0, "Atari", "Middle Earth", GAME_IS_SKELETON_MECHANICAL)
373GAME( 1978, spcrider, 0,         atari_s1, atari_s1, driver_device, 0, ROT0, "Atari", "Space Riders", GAME_MECHANICAL | GAME_NO_SOUND)

Previous 199869 Revisions Next


© 1997-2024 The MAME Team