trunk/src/mame/drivers/byvid.c
| r31249 | r31250 | |
| 1 | | /* |
| 1 | /************************************************************** |
| 2 | |
| 3 | PINBALL |
| 2 | 4 | Bally MPU AS-2518-133 |
| 3 | | */ |
| 5 | Baby Pacman |
| 6 | Granny & the Gators |
| 7 | A blend of arcade video game, and pinball. |
| 4 | 8 | |
| 9 | ToDo: |
| 10 | - No sound |
| 11 | - No inputs |
| 12 | - Mechanical |
| 13 | - Artwork |
| 14 | - Beeper needs to be replaced by a red LED when artwork gets done. |
| 5 | 15 | |
| 16 | ***************************************************************/ |
| 17 | |
| 18 | |
| 6 | 19 | #include "emu.h" |
| 7 | 20 | #include "cpu/m6800/m6800.h" |
| 8 | 21 | #include "cpu/m6809/m6809.h" |
| 9 | 22 | #include "video/tms9928a.h" |
| 10 | 23 | #include "machine/6821pia.h" |
| 11 | 24 | #include "sound/dac.h" |
| 25 | #include "sound/beep.h" |
| 12 | 26 | |
| 13 | 27 | class by133_state : public driver_device |
| 14 | 28 | { |
| 15 | 29 | public: |
| 16 | 30 | by133_state(const machine_config &mconfig, device_type type, const char *tag) |
| 17 | | : driver_device(mconfig, type, tag), |
| 18 | | m_maincpu(*this, "maincpu"), |
| 19 | | m_videocpu(*this, "videocpu"), |
| 20 | | m_audiocpu(*this, "audiocpu"), |
| 21 | | m_videopia(*this, "videopia") |
| 31 | : driver_device(mconfig, type, tag) |
| 32 | , m_maincpu(*this, "maincpu") |
| 33 | , m_videocpu(*this, "videocpu") |
| 34 | , m_audiocpu(*this, "audiocpu") |
| 35 | , m_pia_u7(*this, "pia_u7") |
| 36 | , m_pia_u10(*this, "pia_u10") |
| 37 | , m_pia_u11(*this, "pia_u11") |
| 38 | , m_beep(*this, "beeper") |
| 22 | 39 | { } |
| 23 | 40 | |
| 24 | | // devices |
| 25 | | required_device<cpu_device> m_maincpu; |
| 26 | | required_device<cpu_device> m_videocpu; |
| 27 | | required_device<cpu_device> m_audiocpu; |
| 28 | | required_device<pia6821_device> m_videopia; |
| 29 | | |
| 41 | DECLARE_READ8_MEMBER(sound_data_r); |
| 42 | DECLARE_WRITE8_MEMBER(sound_data_w); |
| 30 | 43 | DECLARE_READ8_MEMBER(m6803_port2_r); |
| 31 | 44 | DECLARE_WRITE8_MEMBER(m6803_port2_w); |
| 32 | | |
| 33 | 45 | DECLARE_INPUT_CHANGED_MEMBER(video_test); |
| 34 | 46 | DECLARE_INPUT_CHANGED_MEMBER(sound_test); |
| 35 | | |
| 36 | | UINT8 m_sound_port2; |
| 37 | | DECLARE_WRITE_LINE_MEMBER(vdp_interrupt); |
| 38 | | DECLARE_WRITE_LINE_MEMBER(by133_firq); |
| 39 | | DECLARE_WRITE_LINE_MEMBER(by133_cb2); |
| 40 | | DECLARE_READ8_MEMBER(by133_portb_r); |
| 41 | | DECLARE_WRITE8_MEMBER(by133_portb_w); |
| 47 | DECLARE_INPUT_CHANGED_MEMBER(activity_test); |
| 48 | DECLARE_INPUT_CHANGED_MEMBER(self_test); |
| 49 | DECLARE_READ8_MEMBER(u7_a_r); |
| 50 | DECLARE_WRITE8_MEMBER(u7_a_w); |
| 51 | DECLARE_READ8_MEMBER(u7_b_r); |
| 52 | DECLARE_WRITE8_MEMBER(u7_b_w); |
| 53 | DECLARE_READ8_MEMBER(u10_a_r); |
| 54 | DECLARE_WRITE8_MEMBER(u10_a_w); |
| 55 | DECLARE_READ8_MEMBER(u10_b_r); |
| 56 | DECLARE_WRITE8_MEMBER(u10_b_w); |
| 57 | DECLARE_READ8_MEMBER(u11_a_r); |
| 58 | DECLARE_WRITE8_MEMBER(u11_a_w); |
| 59 | DECLARE_READ8_MEMBER(u11_b_r); |
| 60 | DECLARE_WRITE8_MEMBER(u11_b_w); |
| 61 | DECLARE_WRITE_LINE_MEMBER(u7_ca2_w); |
| 62 | DECLARE_WRITE_LINE_MEMBER(u10_ca2_w); |
| 63 | DECLARE_WRITE_LINE_MEMBER(u11_ca2_w); |
| 64 | DECLARE_WRITE_LINE_MEMBER(u7_cb2_w); |
| 65 | DECLARE_WRITE_LINE_MEMBER(u10_cb2_w); |
| 66 | DECLARE_WRITE_LINE_MEMBER(u11_cb2_w); |
| 67 | TIMER_DEVICE_CALLBACK_MEMBER(u10_timer); |
| 68 | TIMER_DEVICE_CALLBACK_MEMBER(u11_timer); |
| 69 | private: |
| 70 | UINT8 m_mpu_to_vid; |
| 71 | UINT8 m_vid_to_mpu; |
| 72 | UINT8 m_u7_a; |
| 73 | UINT8 m_u7_b; |
| 74 | UINT8 m_u10_a; |
| 75 | UINT8 m_u10_b; |
| 76 | bool m_u10_cb2; |
| 77 | UINT8 m_u11_a; |
| 78 | UINT8 m_u11_b; |
| 79 | bool m_u10_timer; |
| 80 | bool m_u11_timer; |
| 42 | 81 | virtual void machine_reset(); |
| 82 | required_device<m6800_cpu_device> m_maincpu; |
| 83 | required_device<m6809e_device> m_videocpu; |
| 84 | required_device<m6803_cpu_device> m_audiocpu; |
| 85 | required_device<pia6821_device> m_pia_u7; |
| 86 | required_device<pia6821_device> m_pia_u10; |
| 87 | required_device<pia6821_device> m_pia_u11; |
| 88 | optional_device<beep_device> m_beep; |
| 43 | 89 | }; |
| 44 | 90 | |
| 45 | 91 | |
| 46 | | static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, by133_state ) |
| 47 | | AM_RANGE(0x0000, 0xffff) AM_NOP |
| 92 | static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, by133_state ) // U9 MPU |
| 48 | 93 | ADDRESS_MAP_GLOBAL_MASK(0x7fff) |
| 49 | | AM_RANGE(0x1000, 0x7fff) AM_ROM |
| 94 | AM_RANGE(0x0000, 0x007f) AM_RAM // 128x8 in MC6810 U7 MPU |
| 95 | AM_RANGE(0x0088, 0x008b) AM_DEVREADWRITE("pia_u10", pia6821_device, read, write) // PIA U10 MPU |
| 96 | AM_RANGE(0x0090, 0x0093) AM_DEVREADWRITE("pia_u11", pia6821_device, read, write) // PIA U11 MPU |
| 97 | AM_RANGE(0x0200, 0x03ff) AM_RAM // 256x4 in 5101L U8 MPU, battery backed (D4-7 are data, A4-8 are address) |
| 98 | AM_RANGE(0x1000, 0x17ff) AM_ROM AM_REGION("roms", 0x0000) |
| 99 | AM_RANGE(0x1800, 0x1fff) AM_ROM AM_REGION("roms", 0x1000) |
| 100 | AM_RANGE(0x5000, 0x57ff) AM_ROM AM_REGION("roms", 0x0800) |
| 101 | AM_RANGE(0x5800, 0x5fff) AM_ROM AM_REGION("roms", 0x1800) |
| 102 | AM_RANGE(0x7000, 0x7fff) AM_ROM AM_REGION("roms", 0x1000) |
| 50 | 103 | ADDRESS_MAP_END |
| 51 | 104 | |
| 52 | | |
| 53 | | |
| 54 | | static ADDRESS_MAP_START( video_map, AS_PROGRAM, 8, by133_state ) |
| 55 | | // AM_RANGE(0x0000, 0x1fff) communication with main CPU |
| 56 | | AM_RANGE(0x2000, 0x2003) AM_DEVREADWRITE("videopia", pia6821_device, read, write) |
| 57 | | AM_RANGE(0x4000, 0x4000) AM_DEVREADWRITE("tms9928a", tms9928a_device, vram_read, vram_write) |
| 58 | | AM_RANGE(0x4001, 0x4001) AM_DEVREADWRITE("tms9928a", tms9928a_device, register_read, register_write) |
| 59 | | AM_RANGE(0x6000, 0x63ff) AM_RAM |
| 105 | static ADDRESS_MAP_START( video_map, AS_PROGRAM, 8, by133_state ) // U8 Vidiot |
| 106 | AM_RANGE(0x0000, 0x1fff) AM_READWRITE(sound_data_r,sound_data_w) |
| 107 | AM_RANGE(0x2000, 0x2003) AM_MIRROR(0x0ffc) AM_DEVREADWRITE("pia_u7", pia6821_device, read, write) // PIA U7 Vidiot |
| 108 | AM_RANGE(0x4000, 0x4000) AM_MIRROR(0x0ffe) AM_DEVREADWRITE("tms9928a", tms9928a_device, vram_read, vram_write) |
| 109 | AM_RANGE(0x4001, 0x4001) AM_MIRROR(0x0ffe) AM_DEVREADWRITE("tms9928a", tms9928a_device, register_read, register_write) |
| 110 | AM_RANGE(0x6000, 0x63ff) AM_MIRROR(0x1c00) AM_RAM |
| 60 | 111 | AM_RANGE(0x8000, 0xffff) AM_ROM |
| 61 | 112 | ADDRESS_MAP_END |
| 62 | 113 | |
| 63 | | |
| 64 | | |
| 65 | | READ8_MEMBER(by133_state::m6803_port2_r) |
| 66 | | { |
| 67 | | machine().scheduler().synchronize(); |
| 68 | | return m_sound_port2; |
| 69 | | } |
| 70 | | |
| 71 | | WRITE8_MEMBER(by133_state::m6803_port2_w) |
| 72 | | { |
| 73 | | } |
| 74 | | |
| 75 | | static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, by133_state ) |
| 114 | static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, by133_state ) // U27 Vidiot |
| 76 | 115 | AM_RANGE(0xc000, 0xffff) AM_ROM |
| 77 | 116 | ADDRESS_MAP_END |
| 78 | 117 | |
| 79 | 118 | static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, by133_state ) |
| 80 | | AM_RANGE(M6801_PORT1, M6801_PORT1) AM_DEVWRITE("dac", dac_device, write_unsigned8) |
| 81 | | AM_RANGE(M6801_PORT2, M6801_PORT2) AM_READWRITE(m6803_port2_r, m6803_port2_w) |
| 119 | AM_RANGE(M6801_PORT1, M6801_PORT1) AM_DEVWRITE("dac", dac_device, write_unsigned8) // P10-P17 |
| 120 | AM_RANGE(M6801_PORT2, M6801_PORT2) AM_READWRITE(m6803_port2_r, m6803_port2_w) // P20-P24 |
| 82 | 121 | ADDRESS_MAP_END |
| 83 | 122 | |
| 84 | 123 | |
| 85 | | INPUT_CHANGED_MEMBER(by133_state::video_test) |
| 124 | INPUT_CHANGED_MEMBER( by133_state::video_test ) |
| 86 | 125 | { |
| 87 | 126 | if(newval) |
| 88 | 127 | m_videocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); |
| 89 | 128 | } |
| 90 | 129 | |
| 91 | | INPUT_CHANGED_MEMBER(by133_state::sound_test) |
| 130 | INPUT_CHANGED_MEMBER( by133_state::sound_test ) |
| 92 | 131 | { |
| 93 | 132 | if(newval) |
| 94 | 133 | m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); |
| 95 | 134 | } |
| 96 | 135 | |
| 136 | // doesn't appear to do anything |
| 137 | INPUT_CHANGED_MEMBER( by133_state::activity_test ) |
| 138 | { |
| 139 | if(newval) |
| 140 | m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); |
| 141 | } |
| 142 | |
| 143 | INPUT_CHANGED_MEMBER( by133_state::self_test ) |
| 144 | { |
| 145 | m_pia_u10->ca1_w(newval); |
| 146 | } |
| 147 | |
| 97 | 148 | static INPUT_PORTS_START( by133 ) |
| 98 | | /* test switch is directly hard-wired to the NMI signal */ |
| 99 | 149 | PORT_START("TEST") |
| 100 | 150 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Video Test") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, by133_state, video_test, 0) |
| 101 | 151 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Sound Test") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, by133_state, sound_test, 0) |
| 152 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_NAME("Activity") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, by133_state, activity_test, 0) |
| 153 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE4 ) PORT_NAME("Self Test") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, by133_state, self_test, 0) |
| 154 | |
| 155 | PORT_START("DSW0") |
| 156 | PORT_DIPNAME( 0x01, 0x00, "S01") |
| 157 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 158 | PORT_DIPSETTING( 0x01, DEF_STR( On )) |
| 159 | PORT_DIPNAME( 0x02, 0x00, "S02") |
| 160 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 161 | PORT_DIPSETTING( 0x02, DEF_STR( On )) |
| 162 | PORT_DIPNAME( 0x04, 0x00, "S03") |
| 163 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 164 | PORT_DIPSETTING( 0x04, DEF_STR( On )) |
| 165 | PORT_DIPNAME( 0x08, 0x00, "S04") |
| 166 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 167 | PORT_DIPSETTING( 0x08, DEF_STR( On )) |
| 168 | PORT_DIPNAME( 0x10, 0x00, "S05") |
| 169 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 170 | PORT_DIPSETTING( 0x10, DEF_STR( On )) |
| 171 | PORT_DIPNAME( 0x20, 0x00, "S06") |
| 172 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 173 | PORT_DIPSETTING( 0x20, DEF_STR( On )) |
| 174 | PORT_DIPNAME( 0x40, 0x00, "S07") |
| 175 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 176 | PORT_DIPSETTING( 0x40, DEF_STR( On )) |
| 177 | PORT_DIPNAME( 0x80, 0x00, "S08") |
| 178 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 179 | PORT_DIPSETTING( 0x80, DEF_STR( On )) |
| 180 | |
| 181 | PORT_START("DSW1") |
| 182 | PORT_DIPNAME( 0x01, 0x00, "S09") |
| 183 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 184 | PORT_DIPSETTING( 0x01, DEF_STR( On )) |
| 185 | PORT_DIPNAME( 0x02, 0x00, "S10") |
| 186 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 187 | PORT_DIPSETTING( 0x02, DEF_STR( On )) |
| 188 | PORT_DIPNAME( 0x04, 0x00, "S11") |
| 189 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 190 | PORT_DIPSETTING( 0x04, DEF_STR( On )) |
| 191 | PORT_DIPNAME( 0x08, 0x00, "S12") |
| 192 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 193 | PORT_DIPSETTING( 0x08, DEF_STR( On )) |
| 194 | PORT_DIPNAME( 0x10, 0x00, "S13") |
| 195 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 196 | PORT_DIPSETTING( 0x10, DEF_STR( On )) |
| 197 | PORT_DIPNAME( 0x20, 0x00, "S14") |
| 198 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 199 | PORT_DIPSETTING( 0x20, DEF_STR( On )) |
| 200 | PORT_DIPNAME( 0x40, 0x00, "S15") |
| 201 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 202 | PORT_DIPSETTING( 0x40, DEF_STR( On )) |
| 203 | PORT_DIPNAME( 0x80, 0x00, "S16") |
| 204 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 205 | PORT_DIPSETTING( 0x80, DEF_STR( On )) |
| 206 | |
| 207 | PORT_START("DSW2") |
| 208 | PORT_DIPNAME( 0x01, 0x00, "S17") |
| 209 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 210 | PORT_DIPSETTING( 0x01, DEF_STR( On )) |
| 211 | PORT_DIPNAME( 0x02, 0x00, "S18") |
| 212 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 213 | PORT_DIPSETTING( 0x02, DEF_STR( On )) |
| 214 | PORT_DIPNAME( 0x04, 0x00, "S19") |
| 215 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 216 | PORT_DIPSETTING( 0x04, DEF_STR( On )) |
| 217 | PORT_DIPNAME( 0x08, 0x00, "S20") |
| 218 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 219 | PORT_DIPSETTING( 0x08, DEF_STR( On )) |
| 220 | PORT_DIPNAME( 0x10, 0x00, "S21") |
| 221 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 222 | PORT_DIPSETTING( 0x10, DEF_STR( On )) |
| 223 | PORT_DIPNAME( 0x20, 0x00, "S22") |
| 224 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 225 | PORT_DIPSETTING( 0x20, DEF_STR( On )) |
| 226 | PORT_DIPNAME( 0x40, 0x00, "S23") |
| 227 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 228 | PORT_DIPSETTING( 0x40, DEF_STR( On )) |
| 229 | PORT_DIPNAME( 0x80, 0x00, "S24") |
| 230 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 231 | PORT_DIPSETTING( 0x80, DEF_STR( On )) |
| 232 | |
| 233 | PORT_START("DSW3") |
| 234 | PORT_DIPNAME( 0x01, 0x00, "S25") |
| 235 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 236 | PORT_DIPSETTING( 0x01, DEF_STR( On )) |
| 237 | PORT_DIPNAME( 0x02, 0x00, "S26") |
| 238 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 239 | PORT_DIPSETTING( 0x02, DEF_STR( On )) |
| 240 | PORT_DIPNAME( 0x04, 0x00, "S27") |
| 241 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 242 | PORT_DIPSETTING( 0x04, DEF_STR( On )) |
| 243 | PORT_DIPNAME( 0x08, 0x00, "S28") |
| 244 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 245 | PORT_DIPSETTING( 0x08, DEF_STR( On )) |
| 246 | PORT_DIPNAME( 0x10, 0x00, "S29") |
| 247 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 248 | PORT_DIPSETTING( 0x10, DEF_STR( On )) |
| 249 | PORT_DIPNAME( 0x20, 0x00, DEF_STR( Free_Play ) ) |
| 250 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 251 | PORT_DIPSETTING( 0x20, DEF_STR( On )) |
| 252 | PORT_DIPNAME( 0x40, 0x00, "S31") |
| 253 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 254 | PORT_DIPSETTING( 0x40, DEF_STR( On )) |
| 255 | PORT_DIPNAME( 0x80, 0x00, "S32") |
| 256 | PORT_DIPSETTING( 0x00, DEF_STR( Off )) |
| 257 | PORT_DIPSETTING( 0x80, DEF_STR( On )) |
| 102 | 258 | INPUT_PORTS_END |
| 103 | 259 | |
| 104 | 260 | |
| 105 | | WRITE_LINE_MEMBER(by133_state::vdp_interrupt) |
| 261 | READ8_MEMBER( by133_state::sound_data_r ) |
| 262 | {//printf("%X ",m_mpu_to_vid); |
| 263 | return m_mpu_to_vid; |
| 264 | } |
| 265 | |
| 266 | WRITE8_MEMBER( by133_state::sound_data_w ) |
| 106 | 267 | { |
| 107 | | m_videocpu->set_input_line(M6809_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE); |
| 268 | m_vid_to_mpu = data; |
| 108 | 269 | } |
| 109 | 270 | |
| 110 | | WRITE_LINE_MEMBER(by133_state::by133_firq) |
| 271 | READ8_MEMBER( by133_state::m6803_port2_r ) |
| 111 | 272 | { |
| 112 | | m_videocpu->set_input_line(M6809_FIRQ_LINE, (m_videopia->irq_a_state() || m_videopia->irq_b_state()) ? ASSERT_LINE : CLEAR_LINE); |
| 273 | //printf("%X %s\n",m_u7_b,machine().describe_context()); |
| 274 | //machine().scheduler().synchronize(); |
| 275 | return (m_u7_b << 1) | 0; |
| 113 | 276 | } |
| 114 | 277 | |
| 115 | | WRITE_LINE_MEMBER(by133_state::by133_cb2) |
| 278 | WRITE8_MEMBER( by133_state::m6803_port2_w ) |
| 116 | 279 | { |
| 117 | | // to M6803 port 2 d0? |
| 118 | | // m_audiocpu->set_input_line(M6801_TIN_LINE, state ? ASSERT_LINE : CLEAR_LINE); |
| 280 | //m_u7_b = data >> 1; |
| 281 | m_beep->set_frequency(600); |
| 282 | m_beep->set_state(BIT(data, 0)); |
| 119 | 283 | } |
| 120 | 284 | |
| 121 | | READ8_MEMBER(by133_state::by133_portb_r) |
| 285 | WRITE_LINE_MEMBER( by133_state::u7_ca2_w ) |
| 122 | 286 | { |
| 123 | | return 0; |
| 287 | // comms out |
| 124 | 288 | } |
| 125 | 289 | |
| 126 | | WRITE8_MEMBER(by133_state::by133_portb_w) |
| 290 | WRITE_LINE_MEMBER( by133_state::u10_ca2_w ) |
| 127 | 291 | { |
| 128 | | machine().scheduler().synchronize(); |
| 292 | // enable digital display |
| 293 | } |
| 129 | 294 | |
| 130 | | // d0-d3 to m6803 d1-d4 |
| 131 | | m_sound_port2 = data << 1 & 0x1f; |
| 295 | WRITE_LINE_MEMBER( by133_state::u11_ca2_w ) |
| 296 | { |
| 297 | // green led |
| 132 | 298 | } |
| 133 | 299 | |
| 300 | WRITE_LINE_MEMBER( by133_state::u7_cb2_w ) |
| 301 | { |
| 302 | // red led |
| 303 | m_beep->set_frequency(950); |
| 304 | m_beep->set_state(state); |
| 305 | //address_space &space = m_audiocpu->space(AS_PROGRAM); |
| 306 | //m_audiocpu->m6801_io_r(space, 3, ((m_u7_b << 1) | (UINT8)state) ); |
| 307 | m_audiocpu->set_input_line(M6801_TIN_LINE, state ? ASSERT_LINE : CLEAR_LINE); |
| 308 | } |
| 309 | |
| 310 | WRITE_LINE_MEMBER( by133_state::u10_cb2_w ) |
| 311 | { |
| 312 | // lamp strobe #1 |
| 313 | m_u10_cb2 = state; |
| 314 | } |
| 315 | |
| 316 | WRITE_LINE_MEMBER( by133_state::u11_cb2_w ) |
| 317 | { |
| 318 | // solenoid-sound selector |
| 319 | } |
| 320 | |
| 321 | READ8_MEMBER( by133_state::u7_a_r ) |
| 322 | { |
| 323 | return m_u7_a; |
| 324 | } |
| 325 | |
| 326 | WRITE8_MEMBER( by133_state::u7_a_w ) |
| 327 | { |
| 328 | m_u7_a = data; |
| 329 | } |
| 330 | |
| 331 | READ8_MEMBER( by133_state::u7_b_r ) |
| 332 | { |
| 333 | return m_u7_b; |
| 334 | } |
| 335 | |
| 336 | WRITE8_MEMBER( by133_state::u7_b_w ) |
| 337 | { |
| 338 | //machine().scheduler().synchronize(); |
| 339 | m_u7_b = data; |
| 340 | } |
| 341 | |
| 342 | READ8_MEMBER( by133_state::u10_a_r ) |
| 343 | { |
| 344 | return m_u10_a; |
| 345 | } |
| 346 | |
| 347 | WRITE8_MEMBER( by133_state::u10_a_w ) |
| 348 | { |
| 349 | m_u10_a = data; |
| 350 | if (BIT(m_u11_a, 2) == 0) |
| 351 | m_mpu_to_vid = data ^ 0x0f; |
| 352 | } |
| 353 | |
| 354 | READ8_MEMBER( by133_state::u10_b_r ) |
| 355 | { |
| 356 | if (BIT(m_u11_a, 3) == 0) |
| 357 | return ~m_u7_a & 0x03; |
| 358 | |
| 359 | if (BIT(m_u11_a, 1) == 0) |
| 360 | return m_vid_to_mpu; |
| 361 | |
| 362 | UINT8 data = 0; |
| 363 | |
| 364 | if (BIT(m_u10_a, 5)) |
| 365 | data |= ioport("DSW0")->read(); |
| 366 | |
| 367 | if (BIT(m_u10_a, 6)) |
| 368 | data |= ioport("DSW1")->read(); |
| 369 | |
| 370 | if (BIT(m_u10_a, 7)) |
| 371 | data |= ioport("DSW2")->read(); |
| 372 | |
| 373 | if (m_u10_cb2) |
| 374 | data |= ioport("DSW3")->read(); |
| 375 | |
| 376 | return data; |
| 377 | } |
| 378 | |
| 379 | WRITE8_MEMBER( by133_state::u10_b_w ) |
| 380 | { |
| 381 | m_u10_b = data; |
| 382 | } |
| 383 | |
| 384 | READ8_MEMBER( by133_state::u11_a_r ) |
| 385 | { |
| 386 | return m_u11_a; |
| 387 | } |
| 388 | |
| 389 | WRITE8_MEMBER( by133_state::u11_a_w ) |
| 390 | { |
| 391 | m_u11_a = data; |
| 392 | m_pia_u7->ca1_w(BIT(data, 1)); |
| 393 | m_pia_u7->ca2_w(BIT(data, 2)); |
| 394 | } |
| 395 | |
| 396 | READ8_MEMBER( by133_state::u11_b_r ) |
| 397 | { |
| 398 | return m_u11_b; |
| 399 | } |
| 400 | |
| 401 | WRITE8_MEMBER( by133_state::u11_b_w ) |
| 402 | { |
| 403 | m_u11_b = data; |
| 404 | } |
| 405 | |
| 406 | // zero-cross detection |
| 407 | TIMER_DEVICE_CALLBACK_MEMBER( by133_state::u10_timer ) |
| 408 | { |
| 409 | m_u10_timer ^= 1; |
| 410 | m_pia_u10->cb1_w(m_u10_timer); |
| 411 | } |
| 412 | |
| 413 | // 555 timer for display refresh |
| 414 | TIMER_DEVICE_CALLBACK_MEMBER( by133_state::u11_timer ) |
| 415 | { |
| 416 | m_u11_timer ^= 1; |
| 417 | m_pia_u11->ca1_w(m_u11_timer); |
| 418 | } |
| 419 | |
| 134 | 420 | void by133_state::machine_reset() |
| 135 | 421 | { |
| 136 | | m_sound_port2 = 2; // forced to 010 on /reset |
| 422 | m_u7_a = 0; |
| 423 | m_u7_b = 1; // select mode 2 of mc6803 on /reset |
| 424 | m_u10_a = 0; |
| 425 | m_u10_b = 0; |
| 426 | m_u10_cb2 = 0; |
| 427 | m_u11_a = 0; |
| 428 | m_u11_b = 0; |
| 429 | m_mpu_to_vid = 0; |
| 430 | m_vid_to_mpu = 0; |
| 431 | m_beep->set_state(0); |
| 137 | 432 | } |
| 138 | 433 | |
| 139 | 434 | static MACHINE_CONFIG_START( by133, by133_state ) |
| 140 | 435 | /* basic machine hardware */ |
| 141 | | MCFG_CPU_ADD("maincpu", M6800, 3580000/4) |
| 142 | | MCFG_DEVICE_DISABLE() |
| 436 | MCFG_CPU_ADD("maincpu", M6800, XTAL_3_579545MHz/4) // no xtal, just 2 chips |
| 143 | 437 | MCFG_CPU_PROGRAM_MAP(main_map) |
| 144 | 438 | |
| 145 | | MCFG_CPU_ADD("videocpu", M6809, 3580000/4) |
| 439 | MCFG_CPU_ADD("videocpu", M6809E, XTAL_3_579545MHz) |
| 146 | 440 | MCFG_CPU_PROGRAM_MAP(video_map) |
| 147 | 441 | |
| 148 | 442 | MCFG_CPU_ADD("audiocpu", M6803, XTAL_3_579545MHz) |
| 149 | 443 | MCFG_CPU_PROGRAM_MAP(sound_map) |
| 150 | 444 | MCFG_CPU_IO_MAP(sound_portmap) |
| 151 | 445 | |
| 152 | | MCFG_DEVICE_ADD("videopia", PIA6821, 0) |
| 153 | | MCFG_PIA_READPB_HANDLER(READ8(by133_state, by133_portb_r)) |
| 154 | | MCFG_PIA_WRITEPB_HANDLER(WRITE8(by133_state, by133_portb_w)) |
| 155 | | MCFG_PIA_CB2_HANDLER(WRITELINE(by133_state, by133_cb2)) |
| 156 | | MCFG_PIA_IRQA_HANDLER(WRITELINE(by133_state, by133_firq)) |
| 157 | | MCFG_PIA_IRQB_HANDLER(WRITELINE(by133_state, by133_firq)) |
| 446 | MCFG_DEVICE_ADD("pia_u7", PIA6821, 0) |
| 447 | MCFG_PIA_READPA_HANDLER(READ8(by133_state, u7_a_r)) |
| 448 | MCFG_PIA_WRITEPA_HANDLER(WRITE8(by133_state, u7_a_w)) |
| 449 | MCFG_PIA_READPB_HANDLER(READ8(by133_state, u7_b_r)) |
| 450 | MCFG_PIA_WRITEPB_HANDLER(WRITE8(by133_state, u7_b_w)) |
| 451 | MCFG_PIA_CA2_HANDLER(WRITELINE(by133_state, u7_ca2_w)) |
| 452 | MCFG_PIA_CB2_HANDLER(WRITELINE(by133_state, u7_cb2_w)) |
| 453 | MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("videocpu", m6809e_device, firq_line)) |
| 454 | MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("videocpu", m6809e_device, firq_line)) |
| 158 | 455 | |
| 456 | MCFG_DEVICE_ADD("pia_u10", PIA6821, 0) |
| 457 | MCFG_PIA_READPA_HANDLER(READ8(by133_state, u10_a_r)) |
| 458 | MCFG_PIA_WRITEPA_HANDLER(WRITE8(by133_state, u10_a_w)) |
| 459 | MCFG_PIA_READPB_HANDLER(READ8(by133_state, u10_b_r)) |
| 460 | MCFG_PIA_WRITEPB_HANDLER(WRITE8(by133_state, u10_b_w)) |
| 461 | MCFG_PIA_CA2_HANDLER(WRITELINE(by133_state, u10_ca2_w)) |
| 462 | MCFG_PIA_CB2_HANDLER(WRITELINE(by133_state, u10_cb2_w)) |
| 463 | MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("maincpu", m6800_cpu_device, irq_line)) |
| 464 | MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("maincpu", m6800_cpu_device, irq_line)) |
| 465 | MCFG_TIMER_DRIVER_ADD_PERIODIC("babypac1", by133_state, u10_timer, attotime::from_hz(120)) // mains freq |
| 466 | |
| 467 | MCFG_DEVICE_ADD("pia_u11", PIA6821, 0) |
| 468 | MCFG_PIA_READPA_HANDLER(READ8(by133_state, u11_a_r)) |
| 469 | MCFG_PIA_WRITEPA_HANDLER(WRITE8(by133_state, u11_a_w)) |
| 470 | MCFG_PIA_READPB_HANDLER(READ8(by133_state, u11_b_r)) |
| 471 | MCFG_PIA_WRITEPB_HANDLER(WRITE8(by133_state, u11_b_w)) |
| 472 | MCFG_PIA_CA2_HANDLER(WRITELINE(by133_state, u11_ca2_w)) |
| 473 | MCFG_PIA_CB2_HANDLER(WRITELINE(by133_state, u11_cb2_w)) |
| 474 | MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("maincpu", m6800_cpu_device, irq_line)) |
| 475 | MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("maincpu", m6800_cpu_device, irq_line)) |
| 476 | MCFG_TIMER_DRIVER_ADD_PERIODIC("babypac2", by133_state, u11_timer, attotime::from_hz(634)) // 555 timer |
| 477 | |
| 159 | 478 | /* video hardware */ |
| 160 | 479 | MCFG_DEVICE_ADD( "tms9928a", TMS9928A, XTAL_10_738635MHz / 2 ) |
| 161 | 480 | MCFG_TMS9928A_VRAM_SIZE(0x4000) |
| 162 | | MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(by133_state, vdp_interrupt)) |
| 481 | MCFG_TMS9928A_OUT_INT_LINE_CB(DEVWRITELINE("videocpu", m6809e_device, irq_line)) |
| 163 | 482 | MCFG_TMS9928A_SCREEN_ADD_NTSC( "screen" ) |
| 164 | 483 | MCFG_SCREEN_UPDATE_DEVICE( "tms9928a", tms9928a_device, screen_update ) |
| 165 | 484 | |
| 166 | 485 | /* sound hardware */ |
| 167 | 486 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 168 | | |
| 169 | 487 | MCFG_DAC_ADD("dac") |
| 170 | 488 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) |
| 489 | MCFG_SPEAKER_STANDARD_MONO("beee") |
| 490 | MCFG_SOUND_ADD("beeper", BEEP, 0) |
| 491 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "beee", 0.10) |
| 171 | 492 | MACHINE_CONFIG_END |
| 172 | 493 | |
| 173 | 494 | /*----------------------------------------------------- |
| 174 | 495 | / Baby Pacman (Video/Pinball Combo) (BY133-891: 10/82) |
| 175 | 496 | /-----------------------------------------------------*/ |
| 176 | 497 | ROM_START(babypac) |
| 177 | | ROM_REGION(0x10000, "maincpu", 0) |
| 178 | | ROM_LOAD( "891-u2.732", 0x1000, 0x0800, CRC(7f7242d1) SHA1(213a697bb7fc69f93ea04621f0fcfdd796f35196)) |
| 179 | | ROM_CONTINUE( 0x5000, 0x0800) |
| 180 | | ROM_LOAD( "891-u6.732", 0x1800, 0x0800, CRC(6136d636) SHA1(c01a0a2fcad3bdabd649128e012ab558b1c90cd3) ) |
| 181 | | ROM_CONTINUE( 0x5800, 0x0800) |
| 182 | | ROM_RELOAD( 0x7000, 0x1000) |
| 498 | ROM_REGION(0x2000, "roms", 0) |
| 499 | ROM_LOAD( "891-u2.732", 0x0000, 0x1000, CRC(7f7242d1) SHA1(213a697bb7fc69f93ea04621f0fcfdd796f35196)) |
| 500 | ROM_LOAD( "891-u6.732", 0x1000, 0x1000, CRC(6136d636) SHA1(c01a0a2fcad3bdabd649128e012ab558b1c90cd3) ) |
| 183 | 501 | |
| 184 | 502 | ROM_REGION(0x10000, "videocpu", 0) |
| 185 | 503 | ROM_LOAD( "891-16-u09.764", 0x8000, 0x2000, CRC(781e90e9) SHA1(940047cc875ae531a825af069bb650d59c9495a6)) |
| r31249 | r31250 | |
| 192 | 510 | ROM_END |
| 193 | 511 | |
| 194 | 512 | ROM_START(babypac2) |
| 195 | | ROM_REGION(0x10000, "maincpu", 0) |
| 196 | | ROM_LOAD( "891-u2.732", 0x1000, 0x0800, CRC(7f7242d1) SHA1(213a697bb7fc69f93ea04621f0fcfdd796f35196)) |
| 197 | | ROM_CONTINUE( 0x5000, 0x0800) |
| 198 | | ROM_LOAD( "891-u6.732", 0x1800, 0x0800, CRC(6136d636) SHA1(c01a0a2fcad3bdabd649128e012ab558b1c90cd3) ) |
| 199 | | ROM_CONTINUE( 0x5800, 0x0800) |
| 200 | | ROM_RELOAD( 0x7000, 0x1000) |
| 513 | ROM_REGION(0x2000, "roms", 0) |
| 514 | ROM_LOAD( "891-u2.732", 0x0000, 0x1000, CRC(7f7242d1) SHA1(213a697bb7fc69f93ea04621f0fcfdd796f35196)) |
| 515 | ROM_LOAD( "891-u6.732", 0x1000, 0x1000, CRC(6136d636) SHA1(c01a0a2fcad3bdabd649128e012ab558b1c90cd3) ) |
| 201 | 516 | |
| 202 | 517 | ROM_REGION(0x10000, "videocpu", 0) |
| 203 | 518 | ROM_LOAD( "891-13-u09.764", 0x8000, 0x2000, CRC(7fa570f3) SHA1(423ad9266b1ded00fa52ce4180d518874142a203)) |
| r31249 | r31250 | |
| 213 | 528 | / Granny and the Gators (Video/Pinball Combo) - (BY35-???: 01/84) |
| 214 | 529 | /----------------------------------------------------------------*/ |
| 215 | 530 | ROM_START(granny) |
| 216 | | ROM_REGION(0x10000, "maincpu", 0) |
| 217 | | ROM_LOAD( "cpu_u2.532", 0x1000, 0x0800, CRC(d45bb956) SHA1(86a6942ff9fe38fa109ecde40dc2dd19adf938a9)) |
| 218 | | ROM_CONTINUE( 0x5000, 0x0800) |
| 219 | | ROM_LOAD( "cpu_u6.532", 0x1800, 0x0800, CRC(306aa673) SHA1(422c3d9decf9214a18edb536c2077bf52b272e7d) ) |
| 220 | | ROM_CONTINUE( 0x5800, 0x0800) |
| 221 | | ROM_RELOAD( 0xf000, 0x1000) |
| 531 | ROM_REGION(0x2000, "roms", 0) |
| 532 | ROM_LOAD( "cpu_u2.532", 0x0000, 0x1000, CRC(d45bb956) SHA1(86a6942ff9fe38fa109ecde40dc2dd19adf938a9)) |
| 533 | ROM_LOAD( "cpu_u6.532", 0x1000, 0x1000, CRC(306aa673) SHA1(422c3d9decf9214a18edb536c2077bf52b272e7d) ) |
| 222 | 534 | |
| 223 | 535 | ROM_REGION(0x10000, "videocpu", 0) |
| 224 | 536 | ROM_LOAD( "vid_u4.764", 0x4000, 0x2000, CRC(3a3d4c6b) SHA1(a6c27eee178a4bde67004e11f6ddf3b6414571dd)) |
| r31249 | r31250 | |
| 233 | 545 | ROM_END |
| 234 | 546 | |
| 235 | 547 | |
| 236 | | GAME( 1982, babypac, 0, by133, by133, driver_device, 0, ROT90, "Dave Nutting Associates / Bally", "Baby Pac-Man (set 1)", GAME_IS_SKELETON_MECHANICAL) |
| 237 | | GAME( 1982, babypac2, babypac, by133, by133, driver_device, 0, ROT90, "Dave Nutting Associates / Bally", "Baby Pac-Man (set 2)", GAME_IS_SKELETON_MECHANICAL) |
| 238 | | GAME( 1984, granny, 0, by133, by133, driver_device, 0, ROT0, "Bally", "Granny and the Gators", GAME_IS_SKELETON_MECHANICAL) |
| 548 | GAME( 1982, babypac, 0, by133, by133, driver_device, 0, ROT90, "Dave Nutting Associates / Bally", "Baby Pac-Man (set 1)", GAME_IS_SKELETON_MECHANICAL) |
| 549 | GAME( 1982, babypac2, babypac, by133, by133, driver_device, 0, ROT90, "Dave Nutting Associates / Bally", "Baby Pac-Man (set 2)", GAME_IS_SKELETON_MECHANICAL) |
| 550 | GAME( 1984, granny, 0, by133, by133, driver_device, 0, ROT0, "Bally", "Granny and the Gators", GAME_IS_SKELETON_MECHANICAL) |