Previous 199869 Revisions Next

r18960 Wednesday 14th November, 2012 at 18:40:56 UTC by Angelo Salese
Various clean-ups of dec8 HW, added irq ack mechanism to Shackled, Last Mission and Captain Silver (they were commented out before) and hooked up SCREEN_RAW_PARAMS to all games in the driver [Angelo Salese]
[src/mame/drivers]dec8.c
[src/mame/video]dec8.c

trunk/src/mame/drivers/dec8.c
r18959r18960
458458   membank("bank1")->set_entry(data >> 4);
459459
460460   if ((data&1)==0) m_maincpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
461   if (data & 2) m_nmi_enable =1; else m_nmi_enable = 0;
461   m_nmi_enable = (data & 2) >> 1;
462462   flip_screen_set(data & 0x08);
463463}
464464
r18959r18960
533533/* Used by Shackled, Last Mission, Captain Silver */
534534WRITE8_MEMBER(dec8_state::shackled_int_w)
535535{
536#if 0
537/* This is correct, but the cpus in Shackled need an interleave of about 5000!
538    With lower interleave CPU 0 misses an interrupt at the start of the game
539    (The last interrupt has not finished and been ack'd when the new one occurs */
540536   switch (offset)
541537   {
542538   case 0: /* CPU 2 - IRQ acknowledge */
r18959r18960
554550      m_subcpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE);
555551      return;
556552   }
557#endif
558
559   switch (offset)
560   {
561   case 0: /* CPU 2 - IRQ acknowledge */
562      return;
563   case 1: /* CPU 1 - IRQ acknowledge */
564      return;
565   case 2: /* i8751 - FIRQ acknowledge */
566      return;
567   case 3: /* IRQ 1 */
568      m_maincpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE);
569      return;
570   case 4: /* IRQ 2 */
571      m_subcpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE);
572      return;
573   }
574553}
575554
576555/******************************************************************************/
r18959r18960
20252004   }
20262005}
20272006
2007//  MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART)
20282008
2009/* TODO: These are raw guesses, only to get ~57,41 Hz, assume to be the same as dec0 */
2010#define DEC8_PIXEL_CLOCK XTAL_20MHz/4
2011#define DEC8_HTOTAL 256+74
2012#define DEC8_HBEND 0
2013#define DEC8_HBSTART 256
2014#define DEC8_VTOTAL 264
2015#define DEC8_VBEND 8
2016#define DEC8_VBSTART 256-8
2017
20292018static MACHINE_CONFIG_START( lastmisn, dec8_state )
20302019
20312020   /* basic machine hardware */
r18959r18960
20382027   MCFG_CPU_ADD("audiocpu", M6502, 1500000)
20392028   MCFG_CPU_PROGRAM_MAP(ym3526_s_map)
20402029                        /* NMIs are caused by the main CPU */
2030
20412031   MCFG_QUANTUM_TIME(attotime::from_hz(12000))
20422032
2043
20442033   /* video hardware */
20452034   MCFG_BUFFERED_SPRITERAM8_ADD("spriteram")
20462035
r18959r18960
20482037   deco_karnovsprites_device::set_gfx_region(*device, 1);
20492038
20502039   MCFG_SCREEN_ADD("screen", RASTER)
2051   MCFG_SCREEN_REFRESH_RATE(58)
2052   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */)
2053   MCFG_SCREEN_SIZE(32*8, 32*8)
2054   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
2040//   MCFG_SCREEN_REFRESH_RATE(58)
2041//   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */)
2042//   MCFG_SCREEN_SIZE(32*8, 32*8)
2043//   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
2044   MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART)
20552045   MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_lastmisn)
20562046
20572047   MCFG_GFXDECODE(shackled)
r18959r18960
20852075   MCFG_CPU_ADD("audiocpu", M6502, 1500000)
20862076   MCFG_CPU_PROGRAM_MAP(ym3526_s_map)
20872077                        /* NMIs are caused by the main CPU */
2088   MCFG_QUANTUM_TIME(attotime::from_hz(4800))
20892078
2079//   MCFG_QUANTUM_TIME(attotime::from_hz(100000))
2080   MCFG_QUANTUM_PERFECT_CPU("maincpu") // needs heavy sync, otherwise one of the two CPUs will miss an irq and makes the game to hang
20902081
20912082   /* video hardware */
20922083   MCFG_BUFFERED_SPRITERAM8_ADD("spriteram")
r18959r18960
20952086   deco_karnovsprites_device::set_gfx_region(*device, 1);
20962087
20972088   MCFG_SCREEN_ADD("screen", RASTER)
2098   MCFG_SCREEN_REFRESH_RATE(58)
2099   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */)
2100   MCFG_SCREEN_SIZE(32*8, 32*8)
2101   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
2089//   MCFG_SCREEN_REFRESH_RATE(58)
2090//   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */)
2091//   MCFG_SCREEN_SIZE(32*8, 32*8)
2092//   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
2093   MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART)
21022094   MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_shackled)
21032095
21042096   MCFG_GFXDECODE(shackled)
r18959r18960
21422134   deco_karnovsprites_device::set_gfx_region(*device, 1);
21432135
21442136   MCFG_SCREEN_ADD("screen", RASTER)
2145   MCFG_SCREEN_REFRESH_RATE(58)
2146   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */)
2147   MCFG_SCREEN_SIZE(32*8, 32*8)
2148   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
2137//   MCFG_SCREEN_REFRESH_RATE(58)
2138//   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */)
2139//   MCFG_SCREEN_SIZE(32*8, 32*8)
2140//   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
2141   MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART)
21492142   MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_gondo)
21502143   MCFG_SCREEN_VBLANK_DRIVER(dec8_state, screen_eof_dec8)
21512144
r18959r18960
21902183   deco_karnovsprites_device::set_gfx_region(*device, 1);
21912184
21922185   MCFG_SCREEN_ADD("screen", RASTER)
2193   MCFG_SCREEN_REFRESH_RATE(58)
2194   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */)
2195   MCFG_SCREEN_SIZE(32*8, 32*8)
2196   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
2186//   MCFG_SCREEN_REFRESH_RATE(58)
2187//   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */)
2188//   MCFG_SCREEN_SIZE(32*8, 32*8)
2189//   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
2190   MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART)
21972191   MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_garyoret)
21982192   MCFG_SCREEN_VBLANK_DRIVER(dec8_state, screen_eof_dec8)
21992193
r18959r18960
22412235   deco_karnovsprites_device::set_gfx_region(*device, 1);
22422236
22432237   MCFG_SCREEN_ADD("screen", RASTER)
2244   MCFG_SCREEN_REFRESH_RATE(58)
2245   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */)
2246   MCFG_SCREEN_SIZE(32*8, 32*8)
2247   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
2238//   MCFG_SCREEN_REFRESH_RATE(58)
2239//   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */)
2240//   MCFG_SCREEN_SIZE(32*8, 32*8)
2241//   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
2242   MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART)
22482243   MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_ghostb)
22492244   MCFG_SCREEN_VBLANK_DRIVER(dec8_state, screen_eof_dec8)
22502245
r18959r18960
22812276   MCFG_CPU_ADD("audiocpu", M6502, XTAL_12MHz/8) /* verified on pcb */
22822277   MCFG_CPU_PROGRAM_MAP(csilver_s_map)
22832278                        /* NMIs are caused by the main CPU */
2279
22842280   MCFG_QUANTUM_TIME(attotime::from_hz(6000))
22852281
2286
22872282   /* video hardware */
22882283   MCFG_BUFFERED_SPRITERAM8_ADD("spriteram")
22892284
r18959r18960
22912286   deco_karnovsprites_device::set_gfx_region(*device, 1);
22922287
22932288   MCFG_SCREEN_ADD("screen", RASTER)
2294   MCFG_SCREEN_REFRESH_RATE(58)
2295   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */)
2296   MCFG_SCREEN_SIZE(32*8, 32*8)
2297   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
2289//   MCFG_SCREEN_REFRESH_RATE(58)
2290//   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */)
2291//   MCFG_SCREEN_SIZE(32*8, 32*8)
2292//   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
2293   MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART)
22982294   MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_lastmisn)
22992295
23002296   MCFG_GFXDECODE(shackled)
r18959r18960
23462342   deco_mxc06_device::set_gfx_region(*device, 1);
23472343
23482344   MCFG_SCREEN_ADD("screen", RASTER)
2349   MCFG_SCREEN_REFRESH_RATE(58)
2350   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */)
2351   MCFG_SCREEN_SIZE(32*8, 32*8)
2352   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
2345//   MCFG_SCREEN_REFRESH_RATE(58)
2346//   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */)
2347//   MCFG_SCREEN_SIZE(32*8, 32*8)
2348//   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
2349   MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART)
23532350   MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_oscar)
23542351
23552352   MCFG_GFXDECODE(oscar)
r18959r18960
23872384   MCFG_BUFFERED_SPRITERAM8_ADD("spriteram")
23882385
23892386   MCFG_SCREEN_ADD("screen", RASTER)
2390   MCFG_SCREEN_REFRESH_RATE(58)
2391   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */)
2392   MCFG_SCREEN_SIZE(32*8, 32*8)
2393   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
2387//   MCFG_SCREEN_REFRESH_RATE(58)
2388//   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */)
2389//   MCFG_SCREEN_SIZE(32*8, 32*8)
2390//   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
2391   MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART)
23942392   MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_srdarwin)
23952393
23962394   MCFG_GFXDECODE(srdarwin)
r18959r18960
24372435
24382436
24392437   MCFG_SCREEN_ADD("screen", RASTER)
2440   MCFG_SCREEN_REFRESH_RATE(58)
2441   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */)
2442   MCFG_SCREEN_SIZE(32*8, 32*8)
2443   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
2438//   MCFG_SCREEN_REFRESH_RATE(58)
2439//   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */)
2440//   MCFG_SCREEN_SIZE(32*8, 32*8)
2441//   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
2442   MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART)
24442443   MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_cobracom)
24452444
24462445   MCFG_GFXDECODE(cobracom)
trunk/src/mame/video/dec8.c
r18959r18960
265265
266266UINT32 dec8_state::screen_update_cobracom(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
267267{
268
269268   flip_screen_set(m_bg_control[0] >> 7);
270269
271270   machine().device<deco_bac06_device>("tilegen1")->deco_bac06_pf_draw(machine(),bitmap,cliprect,TILEMAP_DRAW_OPAQUE, 0x00, 0x00, 0x00, 0x00);
r18959r18960
301300   m_game_uses_priority = 0;
302301   machine().device<deco_bac06_device>("tilegen1")->set_colmask(0x3);
303302   machine().device<deco_bac06_device>("tilegen2")->set_colmask(0x3);
304
305303}
306304
307305/******************************************************************************/
r18959r18960
371369
372370   m_game_uses_priority = 1;
373371   machine().device<deco_bac06_device>("tilegen1")->set_colmask(0x7);
374
375372}
376373
377374/******************************************************************************/
r18959r18960
413410   int tile = m_bg_data[offs + 1] + (m_bg_data[offs] << 8);
414411   int color = tile >> 12;
415412
416   if (color > 7 && m_game_uses_priority)
413   if (color & 8 && m_game_uses_priority)
417414      tileinfo.category = 1;
418415   else
419416      tileinfo.category = 0;
r18959r18960
464461   m_bg_tilemap->set_scrollx(0, (m_scroll2[0] << 8) + m_scroll2[1]);
465462
466463   m_bg_tilemap->draw(bitmap, cliprect, TILEMAP_DRAW_LAYER1, 0);
467   srdarwin_draw_sprites(machine(), bitmap, cliprect, 0); //* (srdarwin37b5gre)
464   srdarwin_draw_sprites(machine(), bitmap, cliprect, 0);
468465   m_bg_tilemap->draw(bitmap, cliprect, TILEMAP_DRAW_LAYER0, 0);
469466   srdarwin_draw_sprites(machine(), bitmap, cliprect, 1);
470467   m_fix_tilemap->draw(bitmap, cliprect, 0, 0);
r18959r18960
476473   int tile = m_videoram[tile_index];
477474   int color = 0; /* ? */
478475
479   if (color > 1)
480      tileinfo.category = 1;
481   else
482      tileinfo.category = 0;
476   tileinfo.category = 0;
483477
484478   SET_TILE_INFO_MEMBER(
485479         0,
r18959r18960
488482         0);
489483}
490484
491//AT: improved priority and fixed stage 4+ crashes caused by bank overflow
492485TILE_GET_INFO_MEMBER(dec8_state::get_srdarwin_tile_info)
493486{
494487   int tile = m_bg_data[2 * tile_index + 1] + (m_bg_data[2 * tile_index] << 8);
r18959r18960
564557   int tile = m_bg_data[offs + 1] + (m_bg_data[offs] << 8);
565558   int color = tile>> 12;
566559
567   if (color > 7 && m_game_uses_priority)
560   if (color & 8 && m_game_uses_priority)
568561      tileinfo.category = 1;
569562   else
570563      tileinfo.category = 0;

Previous 199869 Revisions Next


© 1997-2024 The MAME Team