trunk/src/mame/drivers/dec8.c
| r18964 | r18965 | |
| 501 | 501 | membank("bank1")->set_entry(data >> 4); |
| 502 | 502 | |
| 503 | 503 | if ((data&1)==0) m_maincpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); |
| 504 | | if (data & 2) m_nmi_enable =1; else m_nmi_enable = 0; |
| 504 | m_nmi_enable = (data & 2) >> 1; |
| 505 | 505 | flip_screen_set(data & 0x08); |
| 506 | 506 | } |
| 507 | 507 | |
| r18964 | r18965 | |
| 576 | 576 | /* Used by Shackled, Last Mission, Captain Silver */ |
| 577 | 577 | WRITE8_MEMBER(dec8_state::shackled_int_w) |
| 578 | 578 | { |
| 579 | | #if 0 |
| 580 | | /* This is correct, but the cpus in Shackled need an interleave of about 5000! |
| 581 | | With lower interleave CPU 0 misses an interrupt at the start of the game |
| 582 | | (The last interrupt has not finished and been ack'd when the new one occurs */ |
| 583 | 579 | switch (offset) |
| 584 | 580 | { |
| 585 | 581 | case 0: /* CPU 2 - IRQ acknowledge */ |
| 586 | | m_subcpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); |
| 587 | 582 | return; |
| 588 | 583 | case 1: /* CPU 1 - IRQ acknowledge */ |
| 589 | | m_maincpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); |
| 590 | 584 | return; |
| 591 | 585 | case 2: /* i8751 - FIRQ acknowledge */ |
| 592 | 586 | return; |
| 593 | 587 | case 3: /* IRQ 1 */ |
| 594 | | m_maincpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE); |
| 595 | | return; |
| 596 | | case 4: /* IRQ 2 */ |
| 597 | | m_subcpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE); |
| 598 | | return; |
| 599 | | } |
| 600 | | #endif |
| 601 | | |
| 602 | | switch (offset) |
| 603 | | { |
| 604 | | case 0: /* CPU 2 - IRQ acknowledge */ |
| 605 | | return; |
| 606 | | case 1: /* CPU 1 - IRQ acknowledge */ |
| 607 | | return; |
| 608 | | case 2: /* i8751 - FIRQ acknowledge */ |
| 609 | | return; |
| 610 | | case 3: /* IRQ 1 */ |
| 611 | 588 | m_maincpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE); |
| 612 | 589 | return; |
| 613 | 590 | case 4: /* IRQ 2 */ |
| r18964 | r18965 | |
| 2069 | 2046 | } |
| 2070 | 2047 | |
| 2071 | 2048 | |
| 2049 | /* TODO: These are raw guesses, only to get ~57,41 Hz, assume to be the same as dec0 */ |
| 2050 | #define DEC8_PIXEL_CLOCK XTAL_20MHz/4 |
| 2051 | #define DEC8_HTOTAL 256+74 |
| 2052 | #define DEC8_HBEND 0 |
| 2053 | #define DEC8_HBSTART 256 |
| 2054 | #define DEC8_VTOTAL 264 |
| 2055 | #define DEC8_VBEND 8 |
| 2056 | #define DEC8_VBSTART 256-8 |
| 2057 | |
| 2072 | 2058 | static MACHINE_CONFIG_START( lastmisn, dec8_state ) |
| 2073 | 2059 | |
| 2074 | 2060 | /* basic machine hardware */ |
| r18964 | r18965 | |
| 2091 | 2077 | deco_karnovsprites_device::set_gfx_region(*device, 1); |
| 2092 | 2078 | |
| 2093 | 2079 | MCFG_SCREEN_ADD("screen", RASTER) |
| 2094 | | MCFG_SCREEN_REFRESH_RATE(58) |
| 2095 | | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */) |
| 2096 | | MCFG_SCREEN_SIZE(32*8, 32*8) |
| 2097 | | MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) |
| 2080 | // MCFG_SCREEN_REFRESH_RATE(58) |
| 2081 | // MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */) |
| 2082 | // MCFG_SCREEN_SIZE(32*8, 32*8) |
| 2083 | // MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) |
| 2084 | MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART) |
| 2098 | 2085 | MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_lastmisn) |
| 2099 | 2086 | |
| 2100 | 2087 | MCFG_GFXDECODE(shackled) |
| r18964 | r18965 | |
| 2128 | 2115 | MCFG_CPU_ADD("audiocpu", M6502, 1500000) |
| 2129 | 2116 | MCFG_CPU_PROGRAM_MAP(ym3526_s_map) |
| 2130 | 2117 | /* NMIs are caused by the main CPU */ |
| 2131 | | MCFG_QUANTUM_TIME(attotime::from_hz(4800)) |
| 2132 | 2118 | |
| 2119 | // MCFG_QUANTUM_TIME(attotime::from_hz(100000)) |
| 2120 | MCFG_QUANTUM_PERFECT_CPU("maincpu") // needs heavy sync, otherwise one of the two CPUs will miss an irq and makes the game to hang |
| 2133 | 2121 | |
| 2134 | 2122 | /* video hardware */ |
| 2135 | 2123 | MCFG_BUFFERED_SPRITERAM8_ADD("spriteram") |
| r18964 | r18965 | |
| 2138 | 2126 | deco_karnovsprites_device::set_gfx_region(*device, 1); |
| 2139 | 2127 | |
| 2140 | 2128 | MCFG_SCREEN_ADD("screen", RASTER) |
| 2141 | | MCFG_SCREEN_REFRESH_RATE(58) |
| 2142 | | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */) |
| 2143 | | MCFG_SCREEN_SIZE(32*8, 32*8) |
| 2144 | | MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) |
| 2129 | // MCFG_SCREEN_REFRESH_RATE(58) |
| 2130 | // MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */) |
| 2131 | // MCFG_SCREEN_SIZE(32*8, 32*8) |
| 2132 | // MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) |
| 2133 | MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART) |
| 2145 | 2134 | MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_shackled) |
| 2146 | 2135 | |
| 2147 | 2136 | MCFG_GFXDECODE(shackled) |
| r18964 | r18965 | |
| 2185 | 2174 | deco_karnovsprites_device::set_gfx_region(*device, 1); |
| 2186 | 2175 | |
| 2187 | 2176 | MCFG_SCREEN_ADD("screen", RASTER) |
| 2188 | | MCFG_SCREEN_REFRESH_RATE(58) |
| 2189 | | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */) |
| 2190 | | MCFG_SCREEN_SIZE(32*8, 32*8) |
| 2191 | | MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) |
| 2177 | // MCFG_SCREEN_REFRESH_RATE(58) |
| 2178 | // MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */) |
| 2179 | // MCFG_SCREEN_SIZE(32*8, 32*8) |
| 2180 | // MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) |
| 2181 | MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART) |
| 2192 | 2182 | MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_gondo) |
| 2193 | 2183 | MCFG_SCREEN_VBLANK_DRIVER(dec8_state, screen_eof_dec8) |
| 2194 | 2184 | |
| r18964 | r18965 | |
| 2233 | 2223 | deco_karnovsprites_device::set_gfx_region(*device, 1); |
| 2234 | 2224 | |
| 2235 | 2225 | MCFG_SCREEN_ADD("screen", RASTER) |
| 2236 | | MCFG_SCREEN_REFRESH_RATE(58) |
| 2237 | | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */) |
| 2238 | | MCFG_SCREEN_SIZE(32*8, 32*8) |
| 2239 | | MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) |
| 2226 | // MCFG_SCREEN_REFRESH_RATE(58) |
| 2227 | // MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */) |
| 2228 | // MCFG_SCREEN_SIZE(32*8, 32*8) |
| 2229 | // MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) |
| 2230 | MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART) |
| 2240 | 2231 | MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_garyoret) |
| 2241 | 2232 | MCFG_SCREEN_VBLANK_DRIVER(dec8_state, screen_eof_dec8) |
| 2242 | 2233 | |
| r18964 | r18965 | |
| 2284 | 2275 | deco_karnovsprites_device::set_gfx_region(*device, 1); |
| 2285 | 2276 | |
| 2286 | 2277 | MCFG_SCREEN_ADD("screen", RASTER) |
| 2287 | | MCFG_SCREEN_REFRESH_RATE(58) |
| 2288 | | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */) |
| 2289 | | MCFG_SCREEN_SIZE(32*8, 32*8) |
| 2290 | | MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) |
| 2278 | // MCFG_SCREEN_REFRESH_RATE(58) |
| 2279 | // MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */) |
| 2280 | // MCFG_SCREEN_SIZE(32*8, 32*8) |
| 2281 | // MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) |
| 2282 | MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART) |
| 2291 | 2283 | MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_ghostb) |
| 2292 | 2284 | MCFG_SCREEN_VBLANK_DRIVER(dec8_state, screen_eof_dec8) |
| 2293 | 2285 | |
| r18964 | r18965 | |
| 2334 | 2326 | deco_karnovsprites_device::set_gfx_region(*device, 1); |
| 2335 | 2327 | |
| 2336 | 2328 | MCFG_SCREEN_ADD("screen", RASTER) |
| 2337 | | MCFG_SCREEN_REFRESH_RATE(58) |
| 2338 | | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */) |
| 2339 | | MCFG_SCREEN_SIZE(32*8, 32*8) |
| 2340 | | MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) |
| 2329 | // MCFG_SCREEN_REFRESH_RATE(58) |
| 2330 | // MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */) |
| 2331 | // MCFG_SCREEN_SIZE(32*8, 32*8) |
| 2332 | // MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) |
| 2333 | MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART) |
| 2341 | 2334 | MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_lastmisn) |
| 2342 | 2335 | |
| 2343 | 2336 | MCFG_GFXDECODE(shackled) |
| r18964 | r18965 | |
| 2389 | 2382 | deco_mxc06_device::set_gfx_region(*device, 1); |
| 2390 | 2383 | |
| 2391 | 2384 | MCFG_SCREEN_ADD("screen", RASTER) |
| 2392 | | MCFG_SCREEN_REFRESH_RATE(58) |
| 2393 | | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */) |
| 2394 | | MCFG_SCREEN_SIZE(32*8, 32*8) |
| 2395 | | MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) |
| 2385 | // MCFG_SCREEN_REFRESH_RATE(58) |
| 2386 | // MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* 58Hz, 529ms Vblank duration */) |
| 2387 | // MCFG_SCREEN_SIZE(32*8, 32*8) |
| 2388 | // MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) |
| 2389 | MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART) |
| 2396 | 2390 | MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_oscar) |
| 2397 | 2391 | |
| 2398 | 2392 | MCFG_GFXDECODE(oscar) |
| r18964 | r18965 | |
| 2430 | 2424 | MCFG_BUFFERED_SPRITERAM8_ADD("spriteram") |
| 2431 | 2425 | |
| 2432 | 2426 | MCFG_SCREEN_ADD("screen", RASTER) |
| 2433 | | MCFG_SCREEN_REFRESH_RATE(58) |
| 2434 | | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */) |
| 2435 | | MCFG_SCREEN_SIZE(32*8, 32*8) |
| 2436 | | MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) |
| 2427 | // MCFG_SCREEN_REFRESH_RATE(58) |
| 2428 | // MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */) |
| 2429 | // MCFG_SCREEN_SIZE(32*8, 32*8) |
| 2430 | // MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) |
| 2431 | MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART) |
| 2437 | 2432 | MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_srdarwin) |
| 2438 | 2433 | |
| 2439 | 2434 | MCFG_GFXDECODE(srdarwin) |
| r18964 | r18965 | |
| 2480 | 2475 | |
| 2481 | 2476 | |
| 2482 | 2477 | MCFG_SCREEN_ADD("screen", RASTER) |
| 2483 | | MCFG_SCREEN_REFRESH_RATE(58) |
| 2484 | | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */) |
| 2485 | | MCFG_SCREEN_SIZE(32*8, 32*8) |
| 2486 | | MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) |
| 2478 | // MCFG_SCREEN_REFRESH_RATE(58) |
| 2479 | // MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529ms Vblank duration */) |
| 2480 | // MCFG_SCREEN_SIZE(32*8, 32*8) |
| 2481 | // MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) |
| 2482 | MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART) |
| 2487 | 2483 | MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_cobracom) |
| 2488 | 2484 | |
| 2489 | 2485 | MCFG_GFXDECODE(cobracom) |