trunk/src/mame/layout/atari_s1.lay
r0 | r18328 | |
| 1 | <!-- atari_s1.lay --> |
| 2 | |
| 3 | <!-- 2012-10-07: Initial version. [Robbbert] --> |
| 4 | |
| 5 | <mamelayout version="2"> |
| 6 | |
| 7 | <element name="digit" defstate="0"> |
| 8 | <led7seg> |
| 9 | <color red="1.0" green="0.25" blue="0.0" /> |
| 10 | </led7seg> |
| 11 | </element> |
| 12 | |
| 13 | <element name="background"> |
| 14 | <rect> |
| 15 | <bounds left="0" top="0" right="1" bottom="1" /> |
| 16 | <color red="0.0" green="0.0" blue="0.0" /> |
| 17 | </rect> |
| 18 | </element> |
| 19 | <element name="P0"><text string="Ball / Match"><color red="1.0" green="1.0" blue="1.0" /></text></element> |
| 20 | <element name="P1"><text string="Credits"><color red="1.0" green="1.0" blue="1.0" /></text></element> |
| 21 | <element name="P3"><text string="Player 1"><color red="1.0" green="1.0" blue="1.0" /></text></element> |
| 22 | <element name="P4"><text string="Player 2"><color red="1.0" green="1.0" blue="1.0" /></text></element> |
| 23 | <element name="P5"><text string="Player 3"><color red="1.0" green="1.0" blue="1.0" /></text></element> |
| 24 | <element name="P6"><text string="Player 4"><color red="1.0" green="1.0" blue="1.0" /></text></element> |
| 25 | |
| 26 | <view name="Default Layout"> |
| 27 | |
| 28 | <!-- Background --> |
| 29 | <backdrop element="background"> |
| 30 | <bounds left="0" top="20" right="274" bottom="394" /> |
| 31 | </backdrop> |
| 32 | |
| 33 | <!-- LEDs --> |
| 34 | |
| 35 | <!-- Player 1 Score --> |
| 36 | |
| 37 | <bezel name="digit28" element="digit"> |
| 38 | <bounds left="10" top="45" right="44" bottom="84" /> |
| 39 | </bezel> |
| 40 | <bezel name="digit29" element="digit"> |
| 41 | <bounds left="54" top="45" right="88" bottom="84" /> |
| 42 | </bezel> |
| 43 | <bezel name="digit26" element="digit"> |
| 44 | <bounds left="98" top="45" right="132" bottom="84" /> |
| 45 | </bezel> |
| 46 | <bezel name="digit27" element="digit"> |
| 47 | <bounds left="142" top="45" right="176" bottom="84" /> |
| 48 | </bezel> |
| 49 | <bezel name="digit24" element="digit"> |
| 50 | <bounds left="186" top="45" right="220" bottom="84" /> |
| 51 | </bezel> |
| 52 | <bezel name="digit25" element="digit"> |
| 53 | <bounds left="230" top="45" right="264" bottom="84" /> |
| 54 | </bezel> |
| 55 | |
| 56 | <!-- Player 2 Score --> |
| 57 | <bezel name="digit20" element="digit"> |
| 58 | <bounds left="10" top="105" right="44" bottom="144" /> |
| 59 | </bezel> |
| 60 | <bezel name="digit21" element="digit"> |
| 61 | <bounds left="54" top="105" right="88" bottom="144" /> |
| 62 | </bezel> |
| 63 | <bezel name="digit18" element="digit"> |
| 64 | <bounds left="98" top="105" right="132" bottom="144" /> |
| 65 | </bezel> |
| 66 | <bezel name="digit19" element="digit"> |
| 67 | <bounds left="142" top="105" right="176" bottom="144" /> |
| 68 | </bezel> |
| 69 | <bezel name="digit16" element="digit"> |
| 70 | <bounds left="186" top="105" right="220" bottom="144" /> |
| 71 | </bezel> |
| 72 | <bezel name="digit17" element="digit"> |
| 73 | <bounds left="230" top="105" right="264" bottom="144" /> |
| 74 | </bezel> |
| 75 | |
| 76 | <!-- Player 3 Score --> |
| 77 | <bezel name="digit12" element="digit"> |
| 78 | <bounds left="10" top="165" right="44" bottom="204" /> |
| 79 | </bezel> |
| 80 | <bezel name="digit13" element="digit"> |
| 81 | <bounds left="54" top="165" right="88" bottom="204" /> |
| 82 | </bezel> |
| 83 | <bezel name="digit10" element="digit"> |
| 84 | <bounds left="98" top="165" right="132" bottom="204" /> |
| 85 | </bezel> |
| 86 | <bezel name="digit11" element="digit"> |
| 87 | <bounds left="142" top="165" right="176" bottom="204" /> |
| 88 | </bezel> |
| 89 | <bezel name="digit8" element="digit"> |
| 90 | <bounds left="186" top="165" right="220" bottom="204" /> |
| 91 | </bezel> |
| 92 | <bezel name="digit9" element="digit"> |
| 93 | <bounds left="230" top="165" right="264" bottom="204" /> |
| 94 | </bezel> |
| 95 | |
| 96 | <!-- Player 4 Score --> |
| 97 | <bezel name="digit4" element="digit"> |
| 98 | <bounds left="10" top="225" right="44" bottom="264" /> |
| 99 | </bezel> |
| 100 | <bezel name="digit5" element="digit"> |
| 101 | <bounds left="54" top="225" right="88" bottom="264" /> |
| 102 | </bezel> |
| 103 | <bezel name="digit2" element="digit"> |
| 104 | <bounds left="98" top="225" right="132" bottom="264" /> |
| 105 | </bezel> |
| 106 | <bezel name="digit3" element="digit"> |
| 107 | <bounds left="142" top="225" right="176" bottom="264" /> |
| 108 | </bezel> |
| 109 | <bezel name="digit0" element="digit"> |
| 110 | <bounds left="186" top="225" right="220" bottom="264" /> |
| 111 | </bezel> |
| 112 | <bezel name="digit1" element="digit"> |
| 113 | <bounds left="230" top="225" right="264" bottom="264" /> |
| 114 | </bezel> |
| 115 | |
| 116 | <!-- Credits and Balls --> |
| 117 | <bezel name="digit58" element="digit"> |
| 118 | <bounds left="10" top="345" right="44" bottom="384" /> |
| 119 | </bezel> |
| 120 | <bezel name="digit59" element="digit"> |
| 121 | <bounds left="54" top="345" right="88" bottom="384" /> |
| 122 | </bezel> |
| 123 | <bezel name="digit70" element="digit"> |
| 124 | <bounds left="98" top="345" right="132" bottom="384" /> |
| 125 | </bezel> |
| 126 | <bezel name="digit71" element="digit"> |
| 127 | <bounds left="142" top="345" right="176" bottom="384" /> |
| 128 | </bezel> |
| 129 | <bezel name="digit56" element="digit"> |
| 130 | <bounds left="186" top="345" right="220" bottom="384" /> |
| 131 | </bezel> |
| 132 | <bezel name="digit57" element="digit"> |
| 133 | <bounds left="230" top="345" right="264" bottom="384" /> |
| 134 | </bezel> |
| 135 | <bezel element="P0"><bounds left="200" right="258" top="330" bottom="342" /></bezel> |
| 136 | <bezel element="P1"><bounds left="30" right="88" top="330" bottom="342" /></bezel> |
| 137 | <bezel element="P3"><bounds left="100" right="180" top="30" bottom="42" /></bezel> |
| 138 | <bezel element="P4"><bounds left="100" right="180" top="90" bottom="102" /></bezel> |
| 139 | <bezel element="P5"><bounds left="100" right="180" top="150" bottom="162" /></bezel> |
| 140 | <bezel element="P6"><bounds left="100" right="180" top="210" bottom="222" /></bezel> |
| 141 | </view> |
| 142 | </mamelayout> |
trunk/src/mame/drivers/atari_s1.c
r18327 | r18328 | |
2 | 2 | |
3 | 3 | Pinball |
4 | 4 | Atari Generation/System 1 |
| 5 | These were the first widebody pinball machines. |
| 6 | Unfortunately they tended to be boring. |
5 | 7 | |
| 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 | |
| 12 | Schematics and PinMAME used as references. |
| 13 | |
| 14 | ToDo: |
| 15 | - Inputs per game; the ones there are for Airborne Avenger |
| 16 | - Link up switches where 2 or more act together |
| 17 | - Sound |
| 18 | - Lamps, solenoids |
| 19 | |
| 20 | |
6 | 21 | ************************************************************************************/ |
7 | 22 | |
8 | | #include "emu.h" |
| 23 | #include "machine/genpin.h" |
9 | 24 | #include "cpu/m6800/m6800.h" |
| 25 | #include "atari_s1.lh" |
10 | 26 | |
11 | | //extern const char layout_pinball[]; |
| 27 | // looking at chip '29 74', this could be /8 |
| 28 | #define MASTER_CLK XTAL_4MHz / 4 |
| 29 | #define DMA_CLK MASTER_CLK / 2 |
| 30 | //#define AUDIO_CLK DMA_CLK / 4 |
| 31 | #define DMA_INT DMA_CLK / 128 |
| 32 | #define NMI_INT DMA_INT / 16 |
| 33 | //#define BIT6_CLK NMI_INT / 4 |
| 34 | |
12 | 35 | class atari_s1_state : public driver_device |
13 | 36 | { |
14 | 37 | public: |
15 | 38 | atari_s1_state(const machine_config &mconfig, device_type type, const char *tag) |
16 | 39 | : driver_device(mconfig, type, tag), |
17 | | m_maincpu(*this, "maincpu") |
| 40 | m_maincpu(*this, "maincpu"), |
| 41 | m_p_ram(*this, "ram"), |
| 42 | m_samples(*this, "samples") |
18 | 43 | { } |
19 | 44 | |
| 45 | DECLARE_READ8_MEMBER(switch_r); |
| 46 | DECLARE_READ8_MEMBER(latch_r); |
| 47 | DECLARE_WRITE8_MEMBER(latch_w); |
| 48 | |
| 49 | TIMER_DEVICE_CALLBACK_MEMBER(nmi); |
| 50 | |
20 | 51 | protected: |
21 | 52 | |
22 | 53 | // devices |
23 | 54 | required_device<cpu_device> m_maincpu; |
| 55 | required_shared_ptr<UINT8> m_p_ram; |
| 56 | required_device<samples_device> m_samples; |
24 | 57 | |
25 | 58 | // driver_device overrides |
26 | 59 | virtual void machine_reset(); |
27 | | public: |
28 | | DECLARE_DRIVER_INIT(atari_s1); |
| 60 | private: |
| 61 | UINT8 m_bit6; |
| 62 | UINT8 m_out_offs; |
29 | 63 | }; |
30 | 64 | |
31 | 65 | static ADDRESS_MAP_START( atari_s1_map, AS_PROGRAM, 8, atari_s1_state ) |
32 | 66 | ADDRESS_MAP_GLOBAL_MASK(0x7fff) |
33 | | AM_RANGE(0x0000, 0x01ff) AM_RAM |
34 | | //AM_RANGE(0x1080, 0x1080) AM_READWRITE(latch1080_r,latch1080_w) |
35 | | //AM_RANGE(0x1084, 0x1084) AM_READWRITE(latch1084_r,latch1084_w) |
36 | | //AM_RANGE(0x1088, 0x1088) AM_READWRITE(latch1088_r,latch1088_w) |
37 | | //AM_RANGE(0x108c, 0x108c) AM_READWRITE(latch108c_r,latch108c_w) |
38 | | //AM_RANGE(0x2000, 0x200f) AM_READWRITE(dipg1_r,dipg1_w) |
39 | | //AM_RANGE(0x2010, 0x204f) AM_READ(swg1_r) |
40 | | //AM_RANGE(0x3000, 0x3000) AM_WRITE(soundg1_w) |
41 | | //AM_RANGE(0x4000, 0x4000) AM_WRITE(watchdog_w) |
| 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) |
| 71 | AM_RANGE(0x2000, 0x204f) AM_MIRROR(0x0F80) AM_READ(switch_r) |
| 72 | //AM_RANGE(0x3000, 0x3fff) AM_WRITE(soundg1_w) // audio enable |
| 73 | AM_RANGE(0x4000, 0x4fff) AM_WRITE(watchdog_reset_w) |
42 | 74 | //AM_RANGE(0x508c, 0x508c) AM_WRITE(latch508c_w) |
43 | | //AM_RANGE(0x6000, 0x6000) AM_WRITE(audiog1_w) |
| 75 | //AM_RANGE(0x6000, 0x6fff) AM_WRITE(audiog1_w) // audio reset |
44 | 76 | AM_RANGE(0x7000, 0x7fff) AM_ROM |
45 | 77 | ADDRESS_MAP_END |
46 | 78 | |
47 | 79 | static INPUT_PORTS_START( atari_s1 ) |
| 80 | // need to fix these, the manual has a lot of mistakes |
| 81 | PORT_START("INP00") |
| 82 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Test") PORT_CODE(KEYCODE_0) |
| 83 | PORT_START("INP01") |
| 84 | PORT_DIPNAME( 0x80, 0x80, "Spelling Award" ) |
| 85 | PORT_DIPSETTING( 0x80, "Extra Ball" ) |
| 86 | PORT_DIPSETTING( 0x00, "20,000 points" ) |
| 87 | PORT_START("INP02") |
| 88 | PORT_DIPNAME( 0x80, 0x80, "Last Ball double bonus" ) |
| 89 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
| 90 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 91 | PORT_START("INP03") |
| 92 | // This switch together with INP4C thru 4F, sets the scores at which a replay is awarded |
| 93 | PORT_DIPNAME( 0x80, 0x80, "Replay score" ) |
| 94 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
| 95 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 96 | // These 2 dips control max number of credits (both off = 8; then 12, 15, both on=20) |
| 97 | PORT_START("INP04") |
| 98 | PORT_DIPNAME( 0x80, 0x80, "Max Credits-a" ) |
| 99 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
| 100 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 101 | PORT_START("INP05") |
| 102 | PORT_DIPNAME( 0x80, 0x80, "Max Credits-b" ) |
| 103 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
| 104 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 105 | PORT_START("INP06") |
| 106 | PORT_DIPNAME( 0x80, 0x80, "Exceed replay score" ) |
| 107 | PORT_DIPSETTING( 0x80, "Nothing" ) |
| 108 | PORT_DIPSETTING( 0x00, "Extra Ball" ) |
| 109 | PORT_START("INP07") |
| 110 | PORT_DIPNAME( 0x80, 0x80, "Replay when Exceed replay score" ) // overrides INP06 if on |
| 111 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
| 112 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 113 | PORT_START("INP08") |
| 114 | PORT_DIPNAME( 0x80, 0x80, "Balls" ) |
| 115 | PORT_DIPSETTING( 0x80, "5" ) |
| 116 | PORT_DIPSETTING( 0x00, "3" ) |
| 117 | PORT_START("INP09") |
| 118 | PORT_DIPNAME( 0x80, 0x80, "Match" ) |
| 119 | PORT_DIPSETTING( 0x80, DEF_STR( On ) ) |
| 120 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 121 | // next 4 dips control coins and credits. Leave them all off for 1coin=1credit. |
| 122 | PORT_START("INP0A") |
| 123 | PORT_DIPNAME( 0x80, 0x80, "Coins-a" ) |
| 124 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
| 125 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 126 | PORT_START("INP0B") |
| 127 | PORT_DIPNAME( 0x80, 0x80, "Coins-b" ) // this is actually the test button |
| 128 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
| 129 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 130 | PORT_START("INP0C") |
| 131 | PORT_DIPNAME( 0x80, 0x80, "Coins-c" ) |
| 132 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
| 133 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 134 | PORT_START("INP0D") |
| 135 | PORT_DIPNAME( 0x80, 0x80, "Coins-d" ) |
| 136 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
| 137 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 138 | PORT_START("INP0E") |
| 139 | PORT_DIPNAME( 0x80, 0x80, "Special" ) |
| 140 | PORT_DIPSETTING( 0x80, "Extra Ball" ) |
| 141 | PORT_DIPSETTING( 0x00, "Free Game" ) |
| 142 | PORT_START("INP0F") |
| 143 | PORT_DIPNAME( 0x80, 0x80, "20000 points for special" ) // overrides INP0E if on |
| 144 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
| 145 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 146 | PORT_START("INP10") |
| 147 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 ) |
| 148 | PORT_START("INP11") |
| 149 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN2 ) |
| 150 | PORT_START("INP12") |
| 151 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START ) |
| 152 | PORT_START("INP13") |
| 153 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Slam Tilt") |
| 154 | PORT_START("INP14") |
| 155 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 156 | PORT_START("INP15") |
| 157 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 158 | PORT_START("INP16") |
| 159 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 160 | PORT_START("INP17") |
| 161 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 162 | PORT_START("INP18") |
| 163 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 164 | PORT_START("INP19") |
| 165 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 166 | PORT_START("INP1A") |
| 167 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 168 | PORT_START("INP1B") |
| 169 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 170 | PORT_START("INP1C") |
| 171 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 172 | PORT_START("INP1D") |
| 173 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 174 | PORT_START("INP1E") |
| 175 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 176 | PORT_START("INP1F") |
| 177 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 178 | PORT_START("INP20") |
| 179 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Cabinet Tilt") |
| 180 | PORT_START("INP21") |
| 181 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_TILT ) PORT_NAME("Pendulum Tilt") |
| 182 | PORT_START("INP22") |
| 183 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Left Flipper") PORT_CODE(KEYCODE_LSHIFT) |
| 184 | PORT_START("INP23") |
| 185 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Right Flipper") PORT_CODE(KEYCODE_RSHIFT) |
| 186 | PORT_START("INP24") |
| 187 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Target 4") |
| 188 | PORT_START("INP25") |
| 189 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Target 3") |
| 190 | PORT_START("INP26") |
| 191 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Target 2") |
| 192 | PORT_START("INP27") |
| 193 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Target 1") |
| 194 | PORT_START("INP28") |
| 195 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 196 | PORT_START("INP29") |
| 197 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 198 | PORT_START("INP2A") |
| 199 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 200 | PORT_START("INP2B") |
| 201 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 202 | PORT_START("INP2C") |
| 203 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 204 | PORT_START("INP2D") |
| 205 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 206 | PORT_START("INP2E") |
| 207 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 208 | PORT_START("INP2F") |
| 209 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 210 | PORT_START("INP30") |
| 211 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 212 | PORT_START("INP31") |
| 213 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 3") PORT_CODE(KEYCODE_Q) |
| 214 | PORT_START("INP32") |
| 215 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 2") PORT_CODE(KEYCODE_W) |
| 216 | PORT_START("INP33") |
| 217 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 1") PORT_CODE(KEYCODE_E) |
| 218 | PORT_START("INP34") |
| 219 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 8") PORT_CODE(KEYCODE_R) |
| 220 | PORT_START("INP35") |
| 221 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 7") PORT_CODE(KEYCODE_Y) |
| 222 | PORT_START("INP36") |
| 223 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 6") PORT_CODE(KEYCODE_U) |
| 224 | PORT_START("INP37") |
| 225 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 5") PORT_CODE(KEYCODE_I) |
| 226 | PORT_START("INP38") |
| 227 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("L Hole") PORT_CODE(KEYCODE_O) |
| 228 | PORT_START("INP39") |
| 229 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Bumper 1") PORT_CODE(KEYCODE_V) |
| 230 | PORT_START("INP3A") |
| 231 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Bumper 2") PORT_CODE(KEYCODE_B) |
| 232 | PORT_START("INP3B") |
| 233 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Bumper 3") PORT_CODE(KEYCODE_N) |
| 234 | PORT_START("INP3C") |
| 235 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Spinner") PORT_CODE(KEYCODE_M) |
| 236 | PORT_START("INP3D") |
| 237 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("R Pocket") PORT_CODE(KEYCODE_A) |
| 238 | PORT_START("INP3E") |
| 239 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("L Pocket") PORT_CODE(KEYCODE_S) |
| 240 | PORT_START("INP3F") |
| 241 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("R Hole") PORT_CODE(KEYCODE_D) |
| 242 | PORT_START("INP40") |
| 243 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("L Triangle") PORT_CODE(KEYCODE_F) |
| 244 | PORT_START("INP41") |
| 245 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("10 points") PORT_CODE(KEYCODE_G) |
| 246 | PORT_START("INP42") |
| 247 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("50 points") PORT_CODE(KEYCODE_H) |
| 248 | PORT_START("INP43") |
| 249 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("OutHole") PORT_CODE(KEYCODE_X) |
| 250 | PORT_START("INP44") |
| 251 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 252 | PORT_START("INP45") |
| 253 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 254 | PORT_START("INP46") |
| 255 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 256 | PORT_START("INP47") |
| 257 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("R Triangle") PORT_CODE(KEYCODE_J) |
| 258 | PORT_START("INP48") |
| 259 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("50 points and adv letter") PORT_CODE(KEYCODE_K) |
| 260 | PORT_START("INP49") |
| 261 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Captive ball rollovers") PORT_CODE(KEYCODE_L) |
| 262 | PORT_START("INP4A") |
| 263 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rollover 'B' centre") PORT_CODE(KEYCODE_Z) |
| 264 | PORT_START("INP4B") |
| 265 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Roll thru upper right") PORT_CODE(KEYCODE_C) |
| 266 | PORT_START("INP4C") |
| 267 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 268 | PORT_START("INP4D") |
| 269 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 270 | PORT_START("INP4E") |
| 271 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 272 | PORT_START("INP4F") |
| 273 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) |
48 | 274 | INPUT_PORTS_END |
49 | 275 | |
50 | 276 | void atari_s1_state::machine_reset() |
51 | 277 | { |
52 | 278 | } |
53 | 279 | |
54 | | DRIVER_INIT_MEMBER(atari_s1_state,atari_s1) |
| 280 | READ8_MEMBER( atari_s1_state::latch_r ) |
55 | 281 | { |
| 282 | return 0; |
56 | 283 | } |
57 | 284 | |
| 285 | WRITE8_MEMBER( atari_s1_state::latch_w ) |
| 286 | { |
| 287 | } |
| 288 | |
| 289 | READ8_MEMBER( atari_s1_state::switch_r ) |
| 290 | { |
| 291 | char kbdrow[8]; |
| 292 | sprintf(kbdrow,"INP%02X",offset); |
| 293 | return ioport(kbdrow)->read() | (BIT(m_bit6, 1) << 6); |
| 294 | } |
| 295 | |
| 296 | TIMER_DEVICE_CALLBACK_MEMBER( atari_s1_state::nmi ) |
| 297 | { |
| 298 | m_bit6++; |
| 299 | m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); |
| 300 | |
| 301 | static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0, 0, 0, 0, 0, 0 }; |
| 302 | m_out_offs++; |
| 303 | m_out_offs &= 0x1f; |
| 304 | output_set_digit_value(m_out_offs << 1, patterns[m_p_ram[m_out_offs]>>4]); |
| 305 | output_set_digit_value((m_out_offs << 1)+1, patterns[m_p_ram[m_out_offs]&15]); |
| 306 | } |
| 307 | |
58 | 308 | static MACHINE_CONFIG_START( atari_s1, atari_s1_state ) |
59 | 309 | /* basic machine hardware */ |
60 | | MCFG_CPU_ADD("maincpu", M6800, 1000000) |
| 310 | MCFG_CPU_ADD("maincpu", M6800, MASTER_CLK) |
61 | 311 | MCFG_CPU_PROGRAM_MAP(atari_s1_map) |
| 312 | MCFG_TIMER_DRIVER_ADD_PERIODIC("nmi", atari_s1_state, nmi, attotime::from_hz(NMI_INT)) |
| 313 | |
| 314 | /* Sound */ |
| 315 | MCFG_FRAGMENT_ADD( genpin_audio ) |
| 316 | |
| 317 | /* Video */ |
| 318 | MCFG_DEFAULT_LAYOUT(layout_atari_s1) |
62 | 319 | MACHINE_CONFIG_END |
63 | 320 | |
64 | 321 | /*------------------------------------------------------------------- |
r18327 | r18328 | |
116 | 373 | ROM_END |
117 | 374 | |
118 | 375 | |
119 | | GAME( 1976, atarians, 0, atari_s1, atari_s1, atari_s1_state, atari_s1, ROT0, "Atari","The Atarians", GAME_IS_SKELETON_MECHANICAL) |
120 | | //GAME( 2002, atarianb, atarians, atari_s1, atari_s1, atari_s1_state, atari_s1, ROT0, "Atari / Gaston","The Atarians (working bootleg)", GAME_IS_SKELETON_MECHANICAL) |
121 | | GAME( 1977, time2000, 0, atari_s1, atari_s1, atari_s1_state, atari_s1, ROT0, "Atari","Time 2000", GAME_IS_SKELETON_MECHANICAL) |
122 | | GAME( 1977, aavenger, 0, atari_s1, atari_s1, atari_s1_state, atari_s1, ROT0, "Atari","Airborne Avenger", GAME_IS_SKELETON_MECHANICAL) |
123 | | GAME( 1978, midearth, 0, atari_s1, atari_s1, atari_s1_state, atari_s1, ROT0, "Atari","Middle Earth", GAME_IS_SKELETON_MECHANICAL) |
124 | | GAME( 1978, spcrider, 0, atari_s1, atari_s1, atari_s1_state, atari_s1, ROT0, "Atari","Space Riders", GAME_IS_SKELETON_MECHANICAL) |
| 376 | GAME( 1976, atarians, 0, atari_s1, atari_s1, driver_device, 0, ROT0, "Atari","The Atarians", GAME_IS_SKELETON_MECHANICAL) |
| 377 | //GAME( 2002, atarianb, atarians, atari_s1, atari_s1, driver_device, 0, ROT0, "Atari / Gaston","The Atarians (working bootleg)", GAME_IS_SKELETON_MECHANICAL) |
| 378 | GAME( 1977, time2000, 0, atari_s1, atari_s1, driver_device, 0, ROT0, "Atari","Time 2000", GAME_IS_SKELETON_MECHANICAL) |
| 379 | GAME( 1977, aavenger, 0, atari_s1, atari_s1, driver_device, 0, ROT0, "Atari","Airborne Avenger", GAME_IS_SKELETON_MECHANICAL) |
| 380 | GAME( 1978, midearth, 0, atari_s1, atari_s1, driver_device, 0, ROT0, "Atari","Middle Earth", GAME_IS_SKELETON_MECHANICAL) |
| 381 | GAME( 1978, spcrider, 0, atari_s1, atari_s1, driver_device, 0, ROT0, "Atari","Space Riders", GAME_IS_SKELETON_MECHANICAL) |