trunk/src/mame/drivers/dec8.c
| r18962 | r18963 | |
| 55 | 55 | |
| 56 | 56 | /******************************************************************************/ |
| 57 | 57 | |
| 58 | class deco_222_device : public m6502_device { |
| 59 | public: |
| 60 | deco_222_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 61 | |
| 62 | protected: |
| 63 | class mi_decrypt : public mi_default_normal { |
| 64 | public: |
| 65 | bool had_written; |
| 66 | |
| 67 | virtual ~mi_decrypt() {} |
| 68 | virtual UINT8 read_decrypted(UINT16 adr); |
| 69 | }; |
| 70 | |
| 71 | virtual void device_start(); |
| 72 | virtual void device_reset(); |
| 73 | |
| 74 | }; |
| 75 | |
| 76 | static const device_type DECO_222 = &device_creator<deco_222_device>; |
| 77 | |
| 78 | deco_222_device::deco_222_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : |
| 79 | m6502_device(mconfig, DECO_222, "DECO 222", tag, owner, clock) |
| 80 | { |
| 81 | } |
| 82 | |
| 83 | void deco_222_device::device_start() |
| 84 | { |
| 85 | mintf = new mi_decrypt; |
| 86 | init(); |
| 87 | } |
| 88 | |
| 89 | void deco_222_device::device_reset() |
| 90 | { |
| 91 | m6502_device::device_reset(); |
| 92 | static_cast<mi_decrypt *>(mintf)->had_written = false; |
| 93 | } |
| 94 | |
| 95 | UINT8 deco_222_device::mi_decrypt::read_decrypted(UINT16 adr) |
| 96 | { |
| 97 | return BITSWAP8(direct->read_raw_byte(adr) ,7,5,6,4,3,2,1,0);; |
| 98 | } |
| 99 | |
| 100 | |
| 58 | 101 | WRITE8_MEMBER(dec8_state::dec8_mxc06_karn_buffer_spriteram_w) |
| 59 | 102 | { |
| 60 | 103 | UINT8* spriteram = m_spriteram->live(); |
| r18962 | r18963 | |
| 458 | 501 | membank("bank1")->set_entry(data >> 4); |
| 459 | 502 | |
| 460 | 503 | if ((data&1)==0) m_maincpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); |
| 461 | | m_nmi_enable = (data & 2) >> 1; |
| 504 | if (data & 2) m_nmi_enable =1; else m_nmi_enable = 0; |
| 462 | 505 | flip_screen_set(data & 0x08); |
| 463 | 506 | } |
| 464 | 507 | |
| r18962 | r18963 | |
| 533 | 576 | /* Used by Shackled, Last Mission, Captain Silver */ |
| 534 | 577 | WRITE8_MEMBER(dec8_state::shackled_int_w) |
| 535 | 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 */ |
| 536 | 583 | switch (offset) |
| 537 | 584 | { |
| 538 | 585 | case 0: /* CPU 2 - IRQ acknowledge */ |
| r18962 | r18963 | |
| 550 | 597 | m_subcpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE); |
| 551 | 598 | return; |
| 552 | 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 | m_maincpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE); |
| 612 | return; |
| 613 | case 4: /* IRQ 2 */ |
| 614 | m_subcpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE); |
| 615 | return; |
| 616 | } |
| 553 | 617 | } |
| 554 | 618 | |
| 555 | 619 | /******************************************************************************/ |
| r18962 | r18963 | |
| 2004 | 2068 | } |
| 2005 | 2069 | } |
| 2006 | 2070 | |
| 2007 | | // MCFG_SCREEN_RAW_PARAMS(DEC8_PIXEL_CLOCK, DEC8_HTOTAL, DEC8_HBEND, DEC8_HBSTART, DEC8_VTOTAL, DEC8_VBEND, DEC8_VBSTART) |
| 2008 | 2071 | |
| 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 | | |
| 2018 | 2072 | static MACHINE_CONFIG_START( lastmisn, dec8_state ) |
| 2019 | 2073 | |
| 2020 | 2074 | /* basic machine hardware */ |
| r18962 | r18963 | |
| 2027 | 2081 | MCFG_CPU_ADD("audiocpu", M6502, 1500000) |
| 2028 | 2082 | MCFG_CPU_PROGRAM_MAP(ym3526_s_map) |
| 2029 | 2083 | /* NMIs are caused by the main CPU */ |
| 2030 | | |
| 2031 | 2084 | MCFG_QUANTUM_TIME(attotime::from_hz(12000)) |
| 2032 | 2085 | |
| 2086 | |
| 2033 | 2087 | /* video hardware */ |
| 2034 | 2088 | MCFG_BUFFERED_SPRITERAM8_ADD("spriteram") |
| 2035 | 2089 | |
| r18962 | r18963 | |
| 2037 | 2091 | deco_karnovsprites_device::set_gfx_region(*device, 1); |
| 2038 | 2092 | |
| 2039 | 2093 | MCFG_SCREEN_ADD("screen", RASTER) |
| 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) |
| 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) |
| 2045 | 2098 | MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_lastmisn) |
| 2046 | 2099 | |
| 2047 | 2100 | MCFG_GFXDECODE(shackled) |
| r18962 | r18963 | |
| 2075 | 2128 | MCFG_CPU_ADD("audiocpu", M6502, 1500000) |
| 2076 | 2129 | MCFG_CPU_PROGRAM_MAP(ym3526_s_map) |
| 2077 | 2130 | /* NMIs are caused by the main CPU */ |
| 2131 | MCFG_QUANTUM_TIME(attotime::from_hz(4800)) |
| 2078 | 2132 | |
| 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 |
| 2081 | 2133 | |
| 2082 | 2134 | /* video hardware */ |
| 2083 | 2135 | MCFG_BUFFERED_SPRITERAM8_ADD("spriteram") |
| r18962 | r18963 | |
| 2086 | 2138 | deco_karnovsprites_device::set_gfx_region(*device, 1); |
| 2087 | 2139 | |
| 2088 | 2140 | MCFG_SCREEN_ADD("screen", RASTER) |
| 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) |
| 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) |
| 2094 | 2145 | MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_shackled) |
| 2095 | 2146 | |
| 2096 | 2147 | MCFG_GFXDECODE(shackled) |
| r18962 | r18963 | |
| 2134 | 2185 | deco_karnovsprites_device::set_gfx_region(*device, 1); |
| 2135 | 2186 | |
| 2136 | 2187 | MCFG_SCREEN_ADD("screen", RASTER) |
| 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) |
| 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) |
| 2142 | 2192 | MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_gondo) |
| 2143 | 2193 | MCFG_SCREEN_VBLANK_DRIVER(dec8_state, screen_eof_dec8) |
| 2144 | 2194 | |
| r18962 | r18963 | |
| 2183 | 2233 | deco_karnovsprites_device::set_gfx_region(*device, 1); |
| 2184 | 2234 | |
| 2185 | 2235 | MCFG_SCREEN_ADD("screen", RASTER) |
| 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) |
| 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) |
| 2191 | 2240 | MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_garyoret) |
| 2192 | 2241 | MCFG_SCREEN_VBLANK_DRIVER(dec8_state, screen_eof_dec8) |
| 2193 | 2242 | |
| r18962 | r18963 | |
| 2217 | 2266 | MCFG_CPU_PROGRAM_MAP(meikyuh_map) |
| 2218 | 2267 | MCFG_CPU_VBLANK_INT_DRIVER("screen", dec8_state, gondo_interrupt) |
| 2219 | 2268 | |
| 2220 | | MCFG_CPU_ADD("audiocpu", M6502, 1500000) |
| 2269 | MCFG_CPU_ADD("audiocpu", DECO_222, 1500000) |
| 2221 | 2270 | MCFG_CPU_PROGRAM_MAP(dec8_s_map) |
| 2222 | 2271 | /* NMIs are caused by the main CPU */ |
| 2223 | 2272 | |
| r18962 | r18963 | |
| 2235 | 2284 | deco_karnovsprites_device::set_gfx_region(*device, 1); |
| 2236 | 2285 | |
| 2237 | 2286 | MCFG_SCREEN_ADD("screen", RASTER) |
| 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) |
| 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) |
| 2243 | 2291 | MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_ghostb) |
| 2244 | 2292 | MCFG_SCREEN_VBLANK_DRIVER(dec8_state, screen_eof_dec8) |
| 2245 | 2293 | |
| r18962 | r18963 | |
| 2276 | 2324 | MCFG_CPU_ADD("audiocpu", M6502, XTAL_12MHz/8) /* verified on pcb */ |
| 2277 | 2325 | MCFG_CPU_PROGRAM_MAP(csilver_s_map) |
| 2278 | 2326 | /* NMIs are caused by the main CPU */ |
| 2279 | | |
| 2280 | 2327 | MCFG_QUANTUM_TIME(attotime::from_hz(6000)) |
| 2281 | 2328 | |
| 2329 | |
| 2282 | 2330 | /* video hardware */ |
| 2283 | 2331 | MCFG_BUFFERED_SPRITERAM8_ADD("spriteram") |
| 2284 | 2332 | |
| r18962 | r18963 | |
| 2286 | 2334 | deco_karnovsprites_device::set_gfx_region(*device, 1); |
| 2287 | 2335 | |
| 2288 | 2336 | MCFG_SCREEN_ADD("screen", RASTER) |
| 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) |
| 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) |
| 2294 | 2341 | MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_lastmisn) |
| 2295 | 2342 | |
| 2296 | 2343 | MCFG_GFXDECODE(shackled) |
| r18962 | r18963 | |
| 2326 | 2373 | MCFG_CPU_ADD("sub", HD6309, XTAL_12MHz/2) /* verified on pcb */ |
| 2327 | 2374 | MCFG_CPU_PROGRAM_MAP(oscar_sub_map) |
| 2328 | 2375 | |
| 2329 | | MCFG_CPU_ADD("audiocpu", M6502, XTAL_12MHz/8) |
| 2376 | MCFG_CPU_ADD("audiocpu", DECO_222, XTAL_12MHz/8) |
| 2330 | 2377 | MCFG_CPU_PROGRAM_MAP(oscar_s_map) |
| 2331 | 2378 | /* NMIs are caused by the main CPU */ |
| 2332 | 2379 | MCFG_QUANTUM_TIME(attotime::from_hz(2400)) /* 40 CPU slices per frame */ |
| r18962 | r18963 | |
| 2342 | 2389 | deco_mxc06_device::set_gfx_region(*device, 1); |
| 2343 | 2390 | |
| 2344 | 2391 | MCFG_SCREEN_ADD("screen", RASTER) |
| 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) |
| 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) |
| 2350 | 2396 | MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_oscar) |
| 2351 | 2397 | |
| 2352 | 2398 | MCFG_GFXDECODE(oscar) |
| r18962 | r18963 | |
| 2375 | 2421 | MCFG_CPU_PROGRAM_MAP(srdarwin_map) |
| 2376 | 2422 | MCFG_CPU_VBLANK_INT_DRIVER("screen", dec8_state, nmi_line_pulse) |
| 2377 | 2423 | |
| 2378 | | MCFG_CPU_ADD("audiocpu", M6502, 1500000) |
| 2424 | MCFG_CPU_ADD("audiocpu", DECO_222, 1500000) |
| 2379 | 2425 | MCFG_CPU_PROGRAM_MAP(dec8_s_map) |
| 2380 | 2426 | /* NMIs are caused by the main CPU */ |
| 2381 | 2427 | |
| r18962 | r18963 | |
| 2384 | 2430 | MCFG_BUFFERED_SPRITERAM8_ADD("spriteram") |
| 2385 | 2431 | |
| 2386 | 2432 | MCFG_SCREEN_ADD("screen", RASTER) |
| 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) |
| 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) |
| 2392 | 2437 | MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_srdarwin) |
| 2393 | 2438 | |
| 2394 | 2439 | MCFG_GFXDECODE(srdarwin) |
| r18962 | r18963 | |
| 2435 | 2480 | |
| 2436 | 2481 | |
| 2437 | 2482 | MCFG_SCREEN_ADD("screen", RASTER) |
| 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) |
| 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) |
| 2443 | 2487 | MCFG_SCREEN_UPDATE_DRIVER(dec8_state, screen_update_cobracom) |
| 2444 | 2488 | |
| 2445 | 2489 | MCFG_GFXDECODE(cobracom) |
| r18962 | r18963 | |
| 3519 | 3563 | m_latch = 0; |
| 3520 | 3564 | } |
| 3521 | 3565 | |
| 3522 | | /* Ghostbusters, Darwin, Oscar use a "Deco 222" custom 6502 for sound. */ |
| 3523 | | DRIVER_INIT_MEMBER(dec8_state,deco222) |
| 3524 | | { |
| 3525 | | address_space &space = machine().device("audiocpu")->memory().space(AS_PROGRAM); |
| 3526 | | int A; |
| 3527 | | UINT8 *decrypt; |
| 3528 | | UINT8 *rom; |
| 3529 | | |
| 3530 | | /* bits 5 and 6 of the opcodes are swapped */ |
| 3531 | | rom = memregion("audiocpu")->base(); |
| 3532 | | decrypt = auto_alloc_array(machine(), UINT8, 0x8000); |
| 3533 | | |
| 3534 | | space.set_decrypted_region(0x8000, 0xffff, decrypt); |
| 3535 | | |
| 3536 | | for (A = 0x8000; A < 0x10000; A++) |
| 3537 | | decrypt[A - 0x8000] = (rom[A] & 0x9f) | ((rom[A] & 0x20) << 1) | ((rom[A] & 0x40) >> 1); |
| 3538 | | |
| 3539 | | m_latch = 1; |
| 3540 | | } |
| 3541 | | |
| 3542 | 3566 | /* Below, I set up the correct number of banks depending on the "maincpu" region size */ |
| 3543 | 3567 | DRIVER_INIT_MEMBER(dec8_state,lastmisn) |
| 3544 | 3568 | { |
| r18962 | r18963 | |
| 3577 | 3601 | memset(RAM + 0x20, 0, 0xe0); |
| 3578 | 3602 | |
| 3579 | 3603 | machine().root_device().membank("bank1")->configure_entries(0, 16, &ROM[0x10000], 0x4000); |
| 3580 | | DRIVER_INIT_CALL(deco222); |
| 3604 | DRIVER_INIT_CALL(dec8); |
| 3581 | 3605 | } |
| 3582 | 3606 | |
| 3583 | 3607 | DRIVER_INIT_MEMBER(dec8_state,meikyuh) |
| r18962 | r18963 | |
| 3606 | 3630 | { |
| 3607 | 3631 | UINT8 *ROM = machine().root_device().memregion("maincpu")->base(); |
| 3608 | 3632 | machine().root_device().membank("bank1")->configure_entries(0, 4, &ROM[0x10000], 0x4000); |
| 3609 | | DRIVER_INIT_CALL(deco222); |
| 3633 | DRIVER_INIT_CALL(dec8); |
| 3610 | 3634 | } |
| 3611 | 3635 | |
| 3612 | 3636 | DRIVER_INIT_MEMBER(dec8_state,srdarwin) |
| 3613 | 3637 | { |
| 3614 | 3638 | UINT8 *ROM = machine().root_device().memregion("maincpu")->base(); |
| 3615 | 3639 | machine().root_device().membank("bank1")->configure_entries(0, 6, &ROM[0x10000], 0x4000); |
| 3616 | | DRIVER_INIT_CALL(deco222); |
| 3640 | DRIVER_INIT_CALL(dec8); |
| 3617 | 3641 | } |
| 3618 | 3642 | |
| 3619 | 3643 | DRIVER_INIT_MEMBER(dec8_state,cobracom) |