Previous 199869 Revisions Next

r31251 Thursday 10th July, 2014 at 13:01:57 UTC by Robbbert
babypac WIP : added coin and start inputs, and something for granny.
[src/mame/drivers]byvid.c

trunk/src/mame/drivers/byvid.c
r31250r31251
66    Granny & the Gators
77    A blend of arcade video game, and pinball.
88
9ToDo:
9ToDo (babypac):
1010- No sound
1111- No inputs
1212- Mechanical
1313- Artwork
1414- Beeper needs to be replaced by a red LED when artwork gets done.
1515
16ToDo (granny):
17- All of the above, plus:
18- Doesn't boot.
19- It has 2xTMS9928 but only 1 screen. The outputs need to be
20  blended with transparency. The '9' test screen will have
21  coloured stripes overlaid with the text names.
22- The RAM layout is incorrect.
23- No schematic found.
24- DIP names are different.
25
1626***************************************************************/
1727
1828
r31250r31251
3545      , m_pia_u7(*this, "pia_u7")
3646      , m_pia_u10(*this, "pia_u10")
3747      , m_pia_u11(*this, "pia_u11")
48      , m_crtc(*this, "crtc")
49      , m_crtc2(*this, "crtc2")
3850      , m_beep(*this, "beeper")
3951   { }
4052
r31250r31251
6678   DECLARE_WRITE_LINE_MEMBER(u11_cb2_w);
6779   TIMER_DEVICE_CALLBACK_MEMBER(u10_timer);
6880   TIMER_DEVICE_CALLBACK_MEMBER(u11_timer);
81   DECLARE_WRITE8_MEMBER(granny_crtc_w);
6982private:
7083   UINT8 m_mpu_to_vid;
7184   UINT8 m_vid_to_mpu;
r31250r31251
8598   required_device<pia6821_device> m_pia_u7;
8699   required_device<pia6821_device> m_pia_u10;
87100   required_device<pia6821_device> m_pia_u11;
88   optional_device<beep_device> m_beep;
101   required_device<tms9928a_device> m_crtc;
102   optional_device<tms9928a_device> m_crtc2; // for Granny only
103   optional_device<beep_device> m_beep; // temp
89104};
90105
91106
r31250r31251
105120static ADDRESS_MAP_START( video_map, AS_PROGRAM, 8, by133_state ) // U8 Vidiot
106121   AM_RANGE(0x0000, 0x1fff) AM_READWRITE(sound_data_r,sound_data_w)
107122   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)
123   AM_RANGE(0x4000, 0x4000) AM_MIRROR(0x0ffe) AM_DEVREADWRITE("crtc", tms9928a_device, vram_read, vram_write)
124   AM_RANGE(0x4001, 0x4001) AM_MIRROR(0x0ffe) AM_DEVREADWRITE("crtc", tms9928a_device, register_read, register_write)
110125   AM_RANGE(0x6000, 0x63ff) AM_MIRROR(0x1c00) AM_RAM
111126   AM_RANGE(0x8000, 0xffff) AM_ROM
112127ADDRESS_MAP_END
113128
129static ADDRESS_MAP_START( granny_map, AS_PROGRAM, 8, by133_state )
130   AM_RANGE(0x0000, 0x0001) AM_READWRITE(sound_data_r,sound_data_w)
131   AM_RANGE(0x0002, 0x0002) AM_DEVREADWRITE("crtc", tms9928a_device, vram_read, vram_write)
132   AM_RANGE(0x0003, 0x0003) AM_DEVREADWRITE("crtc", tms9928a_device, register_read, register_write)
133   AM_RANGE(0x0004, 0x0004) AM_DEVREADWRITE("crtc2", tms9928a_device, vram_read, vram_write)
134   AM_RANGE(0x0005, 0x0005) AM_DEVREADWRITE("crtc2", tms9928a_device, register_read, register_write)
135   AM_RANGE(0x0006, 0x0007) AM_WRITE(granny_crtc_w) // can write to both at once
136   AM_RANGE(0x0008, 0x000b) AM_DEVREADWRITE("pia_u7", pia6821_device, read, write)
137   AM_RANGE(0x0300, 0x3fff) AM_RAM
138   AM_RANGE(0x4000, 0xffff) AM_ROM
139ADDRESS_MAP_END
140
114141static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, by133_state ) // U27 Vidiot
115142   AM_RANGE(0xc000, 0xffff) AM_ROM
116143ADDRESS_MAP_END
r31250r31251
153180   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)
154181
155182   PORT_START("DSW0")
156   PORT_DIPNAME( 0x01, 0x00, "S01")
183   PORT_DIPNAME( 0x01, 0x00, "S01") // S1-5: 32 combinations of coins/credits of a coin slot. S9-13 other slot.
157184   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
158185   PORT_DIPSETTING(    0x01, DEF_STR( On ))
159186   PORT_DIPNAME( 0x02, 0x00, "S02")
r31250r31251
168195   PORT_DIPNAME( 0x10, 0x00, "S05")
169196   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
170197   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 ))
198   PORT_DIPNAME( 0x20, 0x20, "Remember centre arrows")
199   PORT_DIPSETTING(    0x00, DEF_STR( No ))
200   PORT_DIPSETTING(    0x20, DEF_STR( Yes ))
201   PORT_DIPNAME( 0x40, 0x40, "Cherry at start of game")
202   PORT_DIPSETTING(    0x00, DEF_STR( No ))
203   PORT_DIPSETTING(    0x40, DEF_STR( Yes ))
204   PORT_DIPNAME( 0x80, 0x80, "Side tunnel open at start of game")
205   PORT_DIPSETTING(    0x00, DEF_STR( No ))
206   PORT_DIPSETTING(    0x80, DEF_STR( Yes ))
180207
181208   PORT_START("DSW1")
182209   PORT_DIPNAME( 0x01, 0x00, "S09")
r31250r31251
194221   PORT_DIPNAME( 0x10, 0x00, "S13")
195222   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
196223   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 ))
224   PORT_DIPNAME( 0x20, 0x00, "After 3 balls without score the ball is lost")
225   PORT_DIPSETTING(    0x00, DEF_STR( Yes ))
226   PORT_DIPSETTING(    0x20, DEF_STR( No ))
227   PORT_DIPNAME( 0x40, 0x40, "Remember energisers")
228   PORT_DIPSETTING(    0x00, DEF_STR( No ))
229   PORT_DIPSETTING(    0x40, DEF_STR( Yes ))
230   PORT_DIPNAME( 0x80, 0x00, "Disable video")
231   PORT_DIPSETTING(    0x00, DEF_STR( No ))
232   PORT_DIPSETTING(    0x80, DEF_STR( Yes ))
206233
207234   PORT_START("DSW2")
208235   PORT_DIPNAME( 0x01, 0x00, "S17")
r31250r31251
220247   PORT_DIPNAME( 0x10, 0x00, "S21")
221248   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
222249   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 ))
250   PORT_DIPNAME( 0x60, 0x00, "Special after x mazes")
251   PORT_DIPSETTING(    0x00, "3") // also 0x40
252   PORT_DIPSETTING(    0x20, "4")
253   PORT_DIPSETTING(    0x60, "5")
254   PORT_DIPNAME( 0x80, 0x80, "Remember centre arrows")
255   PORT_DIPSETTING(    0x00, DEF_STR( No ))
256   PORT_DIPSETTING(    0x80, DEF_STR( Yes ))
232257
233258   PORT_START("DSW3")
234259   PORT_DIPNAME( 0x01, 0x00, "S25")
r31250r31251
237262   PORT_DIPNAME( 0x02, 0x00, "S26")
238263   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
239264   PORT_DIPSETTING(    0x02, DEF_STR( On ))
240   PORT_DIPNAME( 0x04, 0x00, "S27")
265   PORT_DIPNAME( 0x04, 0x04, "Credits displayed")
241266   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
242267   PORT_DIPSETTING(    0x04, DEF_STR( On ))
243268   PORT_DIPNAME( 0x08, 0x00, "S28")
r31250r31251
249274   PORT_DIPNAME( 0x20, 0x00, DEF_STR( Free_Play ) )
250275   PORT_DIPSETTING(    0x00, DEF_STR( Off ))
251276   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 ))
277   PORT_DIPNAME( 0xC0, 0x40, DEF_STR( Lives ))
278   PORT_DIPSETTING(    0xC0, "2")
279   PORT_DIPSETTING(    0x00, "3")
280   PORT_DIPSETTING(    0x80, "4")
281   PORT_DIPSETTING(    0x40, "5")
282
283   PORT_START("X0")
284   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Right Flipper EOS")
285   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
286   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START2 )
287   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
288   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rebounds")
289   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START1)
290   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Right Spinner")
291   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Left Spinner")
292
293   PORT_START("X1")
294   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 )
295   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN1 )
296   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
297   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
298   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
299   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
300   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_TILT )
301   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Slam Tilt")
302
303   PORT_START("X2")
304   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("R. Top Loop Lane")
305   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
306   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
307   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("L. Top Loop Lane")
308   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Tunnel Outlane")
309   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Fruits Outlane")
310   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("R. Inside Outlane")
311   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("L. Inside Outlane")
312
313   PORT_START("X3")
314   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("#5 Drop Target (R.)")
315   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("#4 Drop Target")
316   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("#3 Drop Target")
317   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("#2 Drop Target")
318   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("#1 Drop Target (L.)")
319   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Outhole")
320   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("R. Maze Saucer")
321   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("L. Maze Saucer")
258322INPUT_PORTS_END
259323
260324
325WRITE8_MEMBER( by133_state::granny_crtc_w )
326{
327   if (offset)
328   {
329      m_crtc->register_write(space, 0, data);
330      m_crtc2->register_write(space, 0, data);
331   }
332   else
333   {
334      m_crtc->vram_write(space, 0, data);
335      m_crtc2->vram_write(space, 0, data);
336   }
337}
338
261339READ8_MEMBER( by133_state::sound_data_r )
262340{//printf("%X ",m_mpu_to_vid);
263341   return m_mpu_to_vid;
r31250r31251
361439
362440   UINT8 data = 0;
363441
442   if (BIT(m_u10_a, 0))
443      data |= ioport("X0")->read();
444
445   if (BIT(m_u10_a, 1))
446      data |= ioport("X1")->read();
447
448   if (BIT(m_u10_a, 2))
449      data |= ioport("X2")->read();
450
451   if (BIT(m_u10_a, 3))
452      data |= ioport("X3")->read();
453
364454   if (BIT(m_u10_a, 5))
365455      data |= ioport("DSW0")->read();
366456
r31250r31251
462552   MCFG_PIA_CB2_HANDLER(WRITELINE(by133_state, u10_cb2_w))
463553   MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("maincpu", m6800_cpu_device, irq_line))
464554   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
555   MCFG_TIMER_DRIVER_ADD_PERIODIC("babypac1", by133_state, u10_timer, attotime::from_hz(120)) // mains freq*2
466556
467557   MCFG_DEVICE_ADD("pia_u11", PIA6821, 0)
468558   MCFG_PIA_READPA_HANDLER(READ8(by133_state, u11_a_r))
r31250r31251
473563   MCFG_PIA_CB2_HANDLER(WRITELINE(by133_state, u11_cb2_w))
474564   MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("maincpu", m6800_cpu_device, irq_line))
475565   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
566   MCFG_TIMER_DRIVER_ADD_PERIODIC("babypac2", by133_state, u11_timer, attotime::from_hz(634)) // 555 timer*2
477567
478568   /* video hardware */
479   MCFG_DEVICE_ADD( "tms9928a", TMS9928A, XTAL_10_738635MHz / 2 )
569   MCFG_DEVICE_ADD( "crtc", TMS9928A, XTAL_10_738635MHz / 2 )
480570   MCFG_TMS9928A_VRAM_SIZE(0x4000)
481571   MCFG_TMS9928A_OUT_INT_LINE_CB(DEVWRITELINE("videocpu", m6809e_device, irq_line))
482572   MCFG_TMS9928A_SCREEN_ADD_NTSC( "screen" )
483   MCFG_SCREEN_UPDATE_DEVICE( "tms9928a", tms9928a_device, screen_update )
573   MCFG_SCREEN_UPDATE_DEVICE( "crtc", tms9928a_device, screen_update )
484574
485575   /* sound hardware */
486576   MCFG_SPEAKER_STANDARD_MONO("mono")
r31250r31251
491581   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "beee", 0.10)
492582MACHINE_CONFIG_END
493583
584static MACHINE_CONFIG_DERIVED( granny, by133 )
585   MCFG_CPU_MODIFY( "videocpu" )
586   MCFG_CPU_PROGRAM_MAP(granny_map)
587
588   MCFG_DEVICE_ADD( "crtc2", TMS9928A, XTAL_10_738635MHz / 2 )
589   MCFG_TMS9928A_VRAM_SIZE(0x4000)
590   MCFG_TMS9928A_OUT_INT_LINE_CB(DEVWRITELINE("videocpu", m6809e_device, irq_line))
591   MCFG_TMS9928A_SCREEN_ADD_NTSC( "screen2" ) // there is only 1 screen
592   MCFG_SCREEN_UPDATE_DEVICE( "crtc2", tms9928a_device, screen_update )
593MACHINE_CONFIG_END
594
595
494596/*-----------------------------------------------------
495597/ Baby Pacman (Video/Pinball Combo) (BY133-891:  10/82)
496598/-----------------------------------------------------*/
r31250r31251
547649
548650GAME( 1982, babypac,  0,        by133,  by133, driver_device,  0,  ROT90, "Dave Nutting Associates / Bally", "Baby Pac-Man (set 1)", GAME_IS_SKELETON_MECHANICAL)
549651GAME( 1982, babypac2, babypac,  by133,  by133, driver_device,  0,  ROT90, "Dave Nutting Associates / Bally", "Baby Pac-Man (set 2)", GAME_IS_SKELETON_MECHANICAL)
550GAME( 1984, granny,   0,        by133, by133, driver_device,  0,  ROT0,  "Bally", "Granny and the Gators", GAME_IS_SKELETON_MECHANICAL)
652GAME( 1984, granny,   0,        granny, by133, driver_device,  0,  ROT0,  "Bally", "Granny and the Gators", GAME_IS_SKELETON_MECHANICAL)

Previous 199869 Revisions Next


© 1997-2024 The MAME Team