/*************************************************************************** Burger Time driver by Zsolt Vasvari hardware description: Actually Lock'n'Chase is (C)1981 while Burger Time is (C)1982, so it might be more accurate to say 'Lock'n'Chase hardware'. The bootleg called Cook Race runs on hardware similar but different. The fact that it addresses the program ROMs in the range 0500-3fff instead of the usual c000-ffff makes me suspect that it is a bootleg of the *tape system* version. Little is known about that system, but it is quite likely that it would have RAM in the range 0000-3fff and load the program there from tape. This hardware is pretty straightforward, but has a couple of interesting twists. There are two ports to the video and color RAMs, one normal access, and one with X and Y coordinates swapped. The sprite RAM occupies the first row of the swapped area, so it appears in the regular video RAM as the first column of on the left side. These games don't have VBLANK interrupts, but instead an IRQ or NMI (depending on the particular board) is generated when a coin is inserted. Some of the games also have a background playfield which, in the case of Bump 'n' Jump and Zoar, can be scrolled vertically. These boards use two 8910's for sound, controlled by a dedicated 6502. The main processor triggers an IRQ request when writing a command to the sound CPU. PCB Layouts ----------- Zoar Data East, 1982 Top PCB DE-0123 |---------------------------------| |UPC1181H SW2 Z17.15B | | VOL SW1 |-| | Z16.13B | | | 2128 Z15.12B | | | X | | | AY-3-8910 X |-| | AY-3-8910 DIP24 | | 6502 | |1 Z13.6B | |8 |-| |W Z12.4B | | |A | | |Y Z11.3B | | | |-| | 555 Z10.1B | |---------------------------------| Notes: 6502 - clock 500.0kHz [12/24] AY-3-8910 - clock 3.00MHz(both) [12/4] 2128 - 2k x8 SRAM == 6116 X - Position for a socket, but not populated with anything DIP24 - Empty socket. There are rumours that this socket would hold test mode code or something else. It's possible a factory test ROM did exist for factory-only testing as this was common with several manufacturers at the time. However the PCB came from the factory with this socket empty so it would be extremely unlikely to find a PCB with that socket populated. SW1/2 - 8 position DIP switches To set cocktail mode, set DIP#1 SW7 & 8 OFF. The player has 2 buttons only and the screen will flip between PL1 & PL2 To set upright mode, set DIP#1 SW7 & 8 ON. The player has 3 buttons and the screen will not flip between PL1 & PL2 DIP Notes: SW1 #5 is unused SW1 #6 must remain OFF otherwise the game will not boot-up and just displays garbage. There is no TEST mode. SW2 #5 is listed in the manual as "Panel B". This enables or removes the 2nd button. There were two types of panels supplied, either cocktail or upright cabs. The cocktail panel doesn't have 3 buttons. The 2 buttons are air-air missile and air-ground missile/bomb and there's an extra button for accelerate on the 3 button panel. On the 2 button panel, button 1 is the air-air and air-ground missile/bomb weapon button and is auto selected based on the enemies on screen and the 2nd button is wired to accelerate. There is no button for manually selecting the missiles/bombs. Bottom PCB DE-0122 |---------------------------------| | Z08.15L PB3 PB0 2128 | | Z07.14L 2128 |-------| |-| | 2128 | | | | | Z06.12L | CPU-7 | | | | | | | | | Z05.11L | | |-| | |-------| | | Z04.9L | | Z03.8L Z19.7B | | AM93425 |-| |1 Z02.6L AM93425 AM93425 | | |0 Z01.5L AM93425 AM93425 PB2 | | |W Z00.3L AM93425 PB4 PB1 | | |A Z21.2L PB4 555 |-| |Y Z20.1L 12MHz | |---------------------------------| Notes: CPU-7 - Epoxy block containing a 6502 clocked at 1.5MHz [12/8] and possibly something else ^_^ 2128 - 2k x8 SRAM == 6116 AM93425 - 1k x1 SRAM == 2125 PB* - PALs (not dumped, registered types) Z19/20/21 - PROMs, type Harris 7603 (32 bytes) VSync - 57.4358Hz HSync - 15.6235kHz Note on Lock'n'Chase: The watchdog test prints "WATCHDOG TEST ER". Just by looking at the code, I can't see how it could print anything else, there is only one path it can take. Should the game reset???? 2008-07: Verified dip locations for: btime (manual), bnj (dips listing), lnc (manual), zoar (manual), disco (dips listing). Names of disco switches in DIPLOC are not confirmed (manual needed, in the meanwhile I put generic SW1 & SW2). A few notes: * all the documents says that DSW1 bit 7 is related to the cocktail mode (either flipping the screen or changing the control panel) * according to manuals, btime & bnj Service dips should have a different effect, using 2 bits to access different tests (see commented out settings below) * how do country codes affect disco? are there other values other than the ones in the manual? ***************************************************************************/ #include "emu.h" #include "cpu/m6502/m6502.h" #include "sound/ay8910.h" #include "sound/discrete.h" #include "includes/btime.h" #define MASTER_CLOCK XTAL_12MHz #define HCLK (MASTER_CLOCK/2) #define HCLK1 (HCLK/2) #define HCLK2 (HCLK1/2) #define HCLK4 (HCLK2/2) enum { AUDIO_ENABLE_NONE, AUDIO_ENABLE_DIRECT, /* via direct address in memory map */ AUDIO_ENABLE_AY8910 /* via ay-8910 port A */ }; static WRITE8_HANDLER( audio_command_w ); static READ8_HANDLER( audio_command_r ); static READ8_HANDLER( zoar_dsw1_read ); static UINT8 *decrypted; static WRITE8_HANDLER( audio_nmi_enable_w ) { btime_state *state = space->machine().driver_data(); /* for most games, this serves as the NMI enable for the audio CPU; however, lnc and disco use bit 0 of the first AY-8910's port A instead; many other games also write there in addition to this address */ if (state->m_audio_nmi_enable_type == AUDIO_ENABLE_DIRECT) { state->m_audio_nmi_enabled = data & 1; device_set_input_line(state->m_audiocpu, INPUT_LINE_NMI, (state->m_audio_nmi_enabled && state->m_audio_nmi_state) ? ASSERT_LINE : CLEAR_LINE); } } static WRITE8_DEVICE_HANDLER( ay_audio_nmi_enable_w ) { btime_state *state = device->machine().driver_data(); /* port A bit 0, when 1, inhibits the NMI */ if (state->m_audio_nmi_enable_type == AUDIO_ENABLE_AY8910) { state->m_audio_nmi_enabled = ~data & 1; device_set_input_line(state->m_audiocpu, INPUT_LINE_NMI, (state->m_audio_nmi_enabled && state->m_audio_nmi_state) ? ASSERT_LINE : CLEAR_LINE); } } static TIMER_DEVICE_CALLBACK( audio_nmi_gen ) { btime_state *state = timer.machine().driver_data(); int scanline = param; state->m_audio_nmi_state = scanline & 8; device_set_input_line(state->m_audiocpu, INPUT_LINE_NMI, (state->m_audio_nmi_enabled && state->m_audio_nmi_state) ? ASSERT_LINE : CLEAR_LINE); } INLINE UINT8 swap_bits_5_6(UINT8 data) { return BITSWAP8(data,7,5,6,4,3,2,1,0); } static void btime_decrypt( address_space *space ) { btime_state *state = space->machine().driver_data(); UINT8 *src, *src1; int addr, addr1; /* the encryption is a simple bit rotation: 76543210 -> 65342710, but */ /* with a catch: it is only applied if the previous instruction did a */ /* memory write. Also, only opcodes at addresses with this bit pattern: */ /* xxxx xxx1 xxxx x1xx are encrypted. */ /* get the address of the next opcode */ addr = cpu_get_pc(&space->device()); /* however if the previous instruction was JSR (which caused a write to */ /* the stack), fetch the address of the next instruction. */ addr1 = cpu_get_previouspc(&space->device()); src1 = (addr1 < 0x9000) ? state->m_rambase : space->machine().region("maincpu")->base(); if (decrypted[addr1] == 0x20) /* JSR $xxxx */ addr = src1[addr1 + 1] + 256 * src1[addr1 + 2]; /* If the address of the next instruction is xxxx xxx1 xxxx x1xx, decode it. */ src = (addr < 0x9000) ? state->m_rambase : space->machine().region("maincpu")->base(); if ((addr & 0x0104) == 0x0104) { /* 76543210 -> 65342710 bit rotation */ decrypted[addr] = BITSWAP8(src[addr],6,5,3,4,2,7,1,0); } } static WRITE8_HANDLER( lnc_w ) { btime_state *state = space->machine().driver_data(); if (offset <= 0x3bff) ; else if (offset >= 0x3c00 && offset <= 0x3fff) { lnc_videoram_w(space, offset - 0x3c00, data); return; } else if (offset >= 0x7c00 && offset <= 0x7fff) { lnc_mirrorvideoram_w(space, offset - 0x7c00, data); return; } else if (offset == 0x8000) { return; } /* AM_NOP */ else if (offset == 0x8001) { bnj_video_control_w(space, 0, data); return; } else if (offset == 0x8003) ; else if (offset == 0x9000) { return; } /* AM_NOP */ else if (offset == 0x9002) { audio_command_w(space, 0, data); return; } else if (offset >= 0xb000 && offset <= 0xb1ff) ; else logerror("CPU '%s' PC %04x: warning - write %02x to unmapped memory address %04x\n", space->device().tag(), cpu_get_pc(&space->device()), data, offset); state->m_rambase[offset] = data; /* Swap bits 5 & 6 for opcodes */ decrypted[offset] = swap_bits_5_6(data); } static WRITE8_HANDLER( mmonkey_w ) { btime_state *state = space->machine().driver_data(); if (offset <= 0x3bff) ; else if (offset >= 0x3c00 && offset <= 0x3fff) { lnc_videoram_w(space, offset - 0x3c00, data); return; } else if (offset >= 0x7c00 && offset <= 0x7fff) { lnc_mirrorvideoram_w(space, offset - 0x7c00, data); return; } else if (offset == 0x8001) { bnj_video_control_w(space, 0, data); return; } else if (offset == 0x8003) ; else if (offset == 0x9000) { return; } /* AM_NOP */ else if (offset == 0x9002) { audio_command_w(space, 0, data); return; } else if (offset >= 0xb000 && offset <= 0xbfff) { mmonkey_protection_w(space, offset - 0xb000, data); return; } else logerror("CPU '%s' PC %04x: warning - write %02x to unmapped memory address %04x\n", space->device().tag(), cpu_get_pc(&space->device()), data, offset); state->m_rambase[offset] = data; /* Swap bits 5 & 6 for opcodes */ decrypted[offset] = swap_bits_5_6(data); } static WRITE8_HANDLER( btime_w ) { btime_state *state = space->machine().driver_data(); if (offset <= 0x07ff) ; else if (offset >= 0x0c00 && offset <= 0x0c0f) btime_paletteram_w(space, offset - 0x0c00, data); else if (offset >= 0x1000 && offset <= 0x17ff) ; else if (offset >= 0x1800 && offset <= 0x1bff) btime_mirrorvideoram_w(space, offset - 0x1800, data); else if (offset >= 0x1c00 && offset <= 0x1fff) btime_mirrorcolorram_w(space, offset - 0x1c00, data); else if (offset == 0x4002) btime_video_control_w(space, 0, data); else if (offset == 0x4003) audio_command_w(space, 0, data); else if (offset == 0x4004) bnj_scroll1_w(space, 0, data); else logerror("CPU '%s' PC %04x: warning - write %02x to unmapped memory address %04x\n", space->device().tag(), cpu_get_pc(&space->device()), data, offset); state->m_rambase[offset] = data; btime_decrypt(space); } static WRITE8_HANDLER( tisland_w ) { btime_state *state = space->machine().driver_data(); if (offset <= 0x07ff) ; else if (offset >= 0x0c00 && offset <= 0x0c0f) btime_paletteram_w(space, offset - 0x0c00, data); else if (offset >= 0x1000 && offset <= 0x17ff) ; else if (offset >= 0x1800 && offset <= 0x1bff) btime_mirrorvideoram_w(space, offset - 0x1800, data); else if (offset >= 0x1c00 && offset <= 0x1fff) btime_mirrorcolorram_w(space, offset - 0x1c00, data); else if (offset == 0x4002) btime_video_control_w(space, 0, data); else if (offset == 0x4003) audio_command_w(space, 0, data); else if (offset == 0x4004) bnj_scroll1_w(space, 0, data); else if (offset == 0x4005) bnj_scroll2_w(space, 0, data); // else if (offset == 0x8000) btime_video_control_w(space,0,data); else logerror("CPU '%s' PC %04x: warning - write %02x to unmapped memory address %04x\n", space->device().tag(), cpu_get_pc(&space->device()), data, offset); state->m_rambase[offset] = data; btime_decrypt(space); } static WRITE8_HANDLER( zoar_w ) { btime_state *state = space->machine().driver_data(); if (offset <= 0x07ff) ; else if (offset >= 0x8000 && offset <= 0x87ff) ; else if (offset >= 0x8800 && offset <= 0x8bff) btime_mirrorvideoram_w(space, offset - 0x8800, data); else if (offset >= 0x8c00 && offset <= 0x8fff) btime_mirrorcolorram_w(space, offset - 0x8c00, data); else if (offset == 0x9000) zoar_video_control_w(space, 0, data); else if (offset >= 0x9800 && offset <= 0x9803) ; else if (offset == 0x9804) bnj_scroll2_w(space, 0, data); else if (offset == 0x9805) bnj_scroll1_w(space, 0, data); else if (offset == 0x9806) audio_command_w(space, 0, data); else logerror("CPU '%s' PC %04x: warning - write %02x to unmapped memory address %04x\n", space->device().tag(), cpu_get_pc(&space->device()), data, offset); state->m_rambase[offset] = data; btime_decrypt(space); } static WRITE8_HANDLER( disco_w ) { btime_state *state = space->machine().driver_data(); if (offset <= 0x04ff) ; else if (offset >= 0x2000 && offset <= 0x7fff) deco_charram_w(space, offset - 0x2000, data); else if (offset >= 0x8000 && offset <= 0x881f) ; else if (offset == 0x9a00) audio_command_w(space, 0, data); else if (offset == 0x9c00) disco_video_control_w(space, 0, data); else logerror("CPU '%s' PC %04x: warning - write %02x to unmapped memory address %04x\n", space->device().tag(), cpu_get_pc(&space->device()), data, offset); state->m_rambase[offset] = data; btime_decrypt(space); } static ADDRESS_MAP_START( btime_map, AS_PROGRAM, 8 ) AM_RANGE(0x0000, 0xffff) AM_WRITE(btime_w) /* override the following entries to */ /* support ROM decryption */ AM_RANGE(0x0000, 0x07ff) AM_RAM AM_BASE_MEMBER(btime_state, m_rambase) AM_RANGE(0x0c00, 0x0c0f) AM_WRITE(btime_paletteram_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x1000, 0x13ff) AM_RAM AM_BASE_SIZE_MEMBER(btime_state, m_videoram, m_videoram_size) AM_RANGE(0x1400, 0x17ff) AM_RAM AM_BASE_MEMBER(btime_state, m_colorram) AM_RANGE(0x1800, 0x1bff) AM_READWRITE(btime_mirrorvideoram_r, btime_mirrorvideoram_w) AM_RANGE(0x1c00, 0x1fff) AM_READWRITE(btime_mirrorcolorram_r, btime_mirrorcolorram_w) AM_RANGE(0x4000, 0x4000) AM_READ_PORT("P1") AM_WRITENOP AM_RANGE(0x4001, 0x4001) AM_READ_PORT("P2") AM_RANGE(0x4002, 0x4002) AM_READ_PORT("SYSTEM") AM_WRITE(btime_video_control_w) AM_RANGE(0x4003, 0x4003) AM_READ_PORT("DSW1") AM_WRITE(audio_command_w) AM_RANGE(0x4004, 0x4004) AM_READ_PORT("DSW2") AM_WRITE(bnj_scroll1_w) AM_RANGE(0xb000, 0xffff) AM_ROM ADDRESS_MAP_END static ADDRESS_MAP_START( cookrace_map, AS_PROGRAM, 8 ) AM_RANGE(0x0000, 0x03ff) AM_RAM AM_BASE_MEMBER(btime_state, m_rambase) AM_RANGE(0x0500, 0x3fff) AM_ROM AM_RANGE(0xc000, 0xc3ff) AM_RAM AM_BASE_SIZE_MEMBER(btime_state, m_videoram, m_videoram_size) AM_RANGE(0xc400, 0xc7ff) AM_RAM AM_BASE_MEMBER(btime_state, m_colorram) AM_RANGE(0xc800, 0xcbff) AM_READWRITE(btime_mirrorvideoram_r, btime_mirrorvideoram_w) AM_RANGE(0xcc00, 0xcfff) AM_READWRITE(btime_mirrorcolorram_r, btime_mirrorcolorram_w) AM_RANGE(0xd000, 0xd0ff) AM_RAM /* background? */ AM_RANGE(0xd100, 0xd3ff) AM_RAM /* ? */ AM_RANGE(0xd400, 0xd7ff) AM_RAM AM_BASE_SIZE_MEMBER(btime_state, m_bnj_backgroundram, m_bnj_backgroundram_size) AM_RANGE(0xe000, 0xe000) AM_READ_PORT("DSW1") AM_WRITE(bnj_video_control_w) AM_RANGE(0xe300, 0xe300) AM_READ_PORT("DSW1") /* mirror address used on high score name entry */ /* screen */ AM_RANGE(0xe001, 0xe001) AM_READ_PORT("DSW2") AM_WRITE(audio_command_w) AM_RANGE(0xe002, 0xe002) AM_READ_PORT("P1") AM_RANGE(0xe003, 0xe003) AM_READ_PORT("P2") AM_RANGE(0xe004, 0xe004) AM_READ_PORT("SYSTEM") AM_RANGE(0xfff9, 0xffff) AM_ROM ADDRESS_MAP_END static ADDRESS_MAP_START( tisland_map, AS_PROGRAM, 8 ) AM_RANGE(0x0000, 0xffff) AM_WRITE(tisland_w) /* override the following entries to */ /* support ROM decryption */ AM_RANGE(0x0000, 0x07ff) AM_RAM AM_BASE_MEMBER(btime_state, m_rambase) AM_RANGE(0x0c00, 0x0c0f) AM_WRITE(btime_paletteram_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x1000, 0x13ff) AM_RAM AM_BASE_SIZE_MEMBER(btime_state, m_videoram, m_videoram_size) AM_RANGE(0x1400, 0x17ff) AM_RAM AM_BASE_MEMBER(btime_state, m_colorram) AM_RANGE(0x1800, 0x1bff) AM_READWRITE(btime_mirrorvideoram_r, btime_mirrorvideoram_w) AM_RANGE(0x1c00, 0x1fff) AM_READWRITE(btime_mirrorcolorram_r, btime_mirrorcolorram_w) AM_RANGE(0x4000, 0x4000) AM_READ_PORT("P1") AM_WRITENOP AM_RANGE(0x4001, 0x4001) AM_READ_PORT("P2") AM_RANGE(0x4002, 0x4002) AM_READ_PORT("SYSTEM") AM_WRITE(btime_video_control_w) AM_RANGE(0x4003, 0x4003) AM_READ_PORT("DSW1") AM_WRITE(audio_command_w) AM_RANGE(0x4004, 0x4004) AM_READ_PORT("DSW2") AM_WRITE(bnj_scroll1_w) AM_RANGE(0x4005, 0x4005) AM_WRITE(bnj_scroll2_w) AM_RANGE(0x9000, 0xffff) AM_ROM ADDRESS_MAP_END static ADDRESS_MAP_START( zoar_map, AS_PROGRAM, 8 ) AM_RANGE(0x0000, 0xffff) AM_WRITE(zoar_w) /* override the following entries to */ /* support ROM decryption */ AM_RANGE(0x0000, 0x07ff) AM_RAM AM_BASE_MEMBER(btime_state, m_rambase) AM_RANGE(0x8000, 0x83ff) AM_WRITEONLY AM_BASE_SIZE_MEMBER(btime_state, m_videoram, m_videoram_size) AM_RANGE(0x8400, 0x87ff) AM_WRITEONLY AM_BASE_MEMBER(btime_state, m_colorram) AM_RANGE(0x8800, 0x8bff) AM_WRITE(btime_mirrorvideoram_w) AM_RANGE(0x8c00, 0x8fff) AM_WRITE(btime_mirrorcolorram_w) AM_RANGE(0x9000, 0x9000) AM_WRITE(zoar_video_control_w) AM_RANGE(0x9800, 0x9800) AM_READ(zoar_dsw1_read) AM_RANGE(0x9801, 0x9801) AM_READ_PORT("DSW2") AM_RANGE(0x9802, 0x9802) AM_READ_PORT("P1") AM_RANGE(0x9803, 0x9803) AM_READ_PORT("P2") AM_RANGE(0x9800, 0x9803) AM_WRITEONLY AM_BASE_MEMBER(btime_state, m_zoar_scrollram) AM_RANGE(0x9804, 0x9804) AM_READ_PORT("SYSTEM") AM_WRITE(bnj_scroll2_w) AM_RANGE(0x9805, 0x9805) AM_WRITE(bnj_scroll1_w) AM_RANGE(0x9806, 0x9806) AM_WRITE(audio_command_w) AM_RANGE(0xd000, 0xffff) AM_ROM ADDRESS_MAP_END static ADDRESS_MAP_START( lnc_map, AS_PROGRAM, 8 ) AM_RANGE(0x0000, 0xffff) AM_WRITE(lnc_w) /* override the following entries to */ /* support ROM decryption */ AM_RANGE(0x0000, 0x3bff) AM_RAM AM_BASE_MEMBER(btime_state, m_rambase) AM_RANGE(0x3c00, 0x3fff) AM_RAM_WRITE(lnc_videoram_w) AM_BASE_SIZE_MEMBER(btime_state, m_videoram, m_videoram_size) AM_RANGE(0x7800, 0x7bff) AM_WRITEONLY AM_BASE_MEMBER(btime_state, m_colorram) /* this is just here to initialize the pointer */ AM_RANGE(0x7c00, 0x7fff) AM_READWRITE(btime_mirrorvideoram_r, lnc_mirrorvideoram_w) AM_RANGE(0x8000, 0x8000) AM_READ_PORT("DSW1") AM_WRITENOP /* ??? */ AM_RANGE(0x8001, 0x8001) AM_READ_PORT("DSW2") AM_WRITE(bnj_video_control_w) AM_RANGE(0x8003, 0x8003) AM_WRITEONLY AM_BASE_MEMBER(btime_state, m_lnc_charbank) AM_RANGE(0x9000, 0x9000) AM_READ_PORT("P1") AM_WRITENOP /* IRQ ack??? */ AM_RANGE(0x9001, 0x9001) AM_READ_PORT("P2") AM_RANGE(0x9002, 0x9002) AM_READ_PORT("SYSTEM") AM_WRITE(audio_command_w) AM_RANGE(0xb000, 0xb1ff) AM_RAM AM_RANGE(0xc000, 0xffff) AM_ROM ADDRESS_MAP_END static ADDRESS_MAP_START( mmonkey_map, AS_PROGRAM, 8 ) AM_RANGE(0x0000, 0xffff) AM_WRITE(mmonkey_w) /* override the following entries to */ /* support ROM decryption */ AM_RANGE(0x0000, 0x3bff) AM_RAM AM_BASE_MEMBER(btime_state, m_rambase) AM_RANGE(0x3c00, 0x3fff) AM_RAM_WRITE(lnc_videoram_w) AM_BASE_SIZE_MEMBER(btime_state, m_videoram, m_videoram_size) AM_RANGE(0x7800, 0x7bff) AM_WRITEONLY AM_BASE_MEMBER(btime_state, m_colorram) /* this is just here to initialize the pointer */ AM_RANGE(0x7c00, 0x7fff) AM_READWRITE(btime_mirrorvideoram_r, lnc_mirrorvideoram_w) AM_RANGE(0x8000, 0x8000) AM_READ_PORT("DSW1") AM_RANGE(0x8001, 0x8001) AM_READ_PORT("DSW2") AM_WRITE(bnj_video_control_w) AM_RANGE(0x8003, 0x8003) AM_WRITEONLY AM_BASE_MEMBER(btime_state, m_lnc_charbank) AM_RANGE(0x9000, 0x9000) AM_READ_PORT("P1") AM_WRITENOP /* IRQ ack??? */ AM_RANGE(0x9001, 0x9001) AM_READ_PORT("P2") AM_RANGE(0x9002, 0x9002) AM_READ_PORT("SYSTEM") AM_WRITE(audio_command_w) AM_RANGE(0xb000, 0xbfff) AM_READWRITE(mmonkey_protection_r, mmonkey_protection_w) AM_RANGE(0xc000, 0xffff) AM_ROM ADDRESS_MAP_END static ADDRESS_MAP_START( bnj_map, AS_PROGRAM, 8 ) AM_RANGE(0x0000, 0x07ff) AM_RAM AM_BASE_MEMBER(btime_state, m_rambase) AM_RANGE(0x1000, 0x1000) AM_READ_PORT("DSW1") AM_RANGE(0x1001, 0x1001) AM_READ_PORT("DSW2") AM_WRITE(bnj_video_control_w) AM_RANGE(0x1002, 0x1002) AM_READ_PORT("P1") AM_WRITE(audio_command_w) AM_RANGE(0x1003, 0x1003) AM_READ_PORT("P2") AM_RANGE(0x1004, 0x1004) AM_READ_PORT("SYSTEM") AM_RANGE(0x4000, 0x43ff) AM_RAM AM_BASE_SIZE_MEMBER(btime_state, m_videoram, m_videoram_size) AM_RANGE(0x4400, 0x47ff) AM_RAM AM_BASE_MEMBER(btime_state, m_colorram) AM_RANGE(0x4800, 0x4bff) AM_READWRITE(btime_mirrorvideoram_r, btime_mirrorvideoram_w) AM_RANGE(0x4c00, 0x4fff) AM_READWRITE(btime_mirrorcolorram_r, btime_mirrorcolorram_w) AM_RANGE(0x5000, 0x51ff) AM_WRITE(bnj_background_w) AM_BASE_SIZE_MEMBER(btime_state, m_bnj_backgroundram, m_bnj_backgroundram_size) AM_RANGE(0x5400, 0x5400) AM_WRITE(bnj_scroll1_w) AM_RANGE(0x5800, 0x5800) AM_WRITE(bnj_scroll2_w) AM_RANGE(0x5c00, 0x5c0f) AM_WRITE(btime_paletteram_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0xa000, 0xffff) AM_ROM ADDRESS_MAP_END static ADDRESS_MAP_START( disco_map, AS_PROGRAM, 8 ) AM_RANGE(0x0000, 0xffff) AM_WRITE(disco_w) /* override the following entries to */ /* support ROM decryption */ AM_RANGE(0x0000, 0x04ff) AM_RAM AM_BASE_MEMBER(btime_state, m_rambase) AM_RANGE(0x2000, 0x7fff) AM_RAM_WRITE(deco_charram_w) AM_BASE_MEMBER(btime_state, m_deco_charram) AM_RANGE(0x8000, 0x83ff) AM_RAM AM_BASE_SIZE_MEMBER(btime_state, m_videoram, m_videoram_size) AM_RANGE(0x8400, 0x87ff) AM_RAM AM_BASE_MEMBER(btime_state, m_colorram) AM_RANGE(0x8800, 0x881f) AM_RAM AM_BASE_SIZE_MEMBER(btime_state, m_spriteram, m_spriteram_size) AM_RANGE(0x9000, 0x9000) AM_READ_PORT("SYSTEM") AM_RANGE(0x9200, 0x9200) AM_READ_PORT("P1") AM_RANGE(0x9400, 0x9400) AM_READ_PORT("P2") AM_RANGE(0x9800, 0x9800) AM_READ_PORT("DSW1") AM_RANGE(0x9a00, 0x9a00) AM_READ_PORT("DSW2") AM_WRITE(audio_command_w) AM_RANGE(0x9c00, 0x9c00) AM_READ_PORT("VBLANK") AM_WRITE(disco_video_control_w) AM_RANGE(0xa000, 0xffff) AM_ROM ADDRESS_MAP_END static ADDRESS_MAP_START( audio_map, AS_PROGRAM, 8 ) AM_RANGE(0x0000, 0x03ff) AM_MIRROR(0x1c00) AM_RAM AM_BASE_MEMBER(btime_state, m_audio_rambase) AM_RANGE(0x2000, 0x3fff) AM_DEVWRITE("ay1", ay8910_data_w) AM_RANGE(0x4000, 0x5fff) AM_DEVWRITE("ay1", ay8910_address_w) AM_RANGE(0x6000, 0x7fff) AM_DEVWRITE("ay2", ay8910_data_w) AM_RANGE(0x8000, 0x9fff) AM_DEVWRITE("ay2", ay8910_address_w) AM_RANGE(0xa000, 0xbfff) AM_READ(audio_command_r) AM_RANGE(0xc000, 0xdfff) AM_WRITE(audio_nmi_enable_w) AM_RANGE(0xe000, 0xefff) AM_MIRROR(0x1000) AM_ROM ADDRESS_MAP_END static ADDRESS_MAP_START( disco_audio_map, AS_PROGRAM, 8 ) AM_RANGE(0x0000, 0x03ff) AM_RAM AM_RANGE(0x4000, 0x4fff) AM_DEVWRITE("ay1", ay8910_data_w) AM_RANGE(0x5000, 0x5fff) AM_DEVWRITE("ay1", ay8910_address_w) AM_RANGE(0x6000, 0x6fff) AM_DEVWRITE("ay2", ay8910_data_w) AM_RANGE(0x7000, 0x7fff) AM_DEVWRITE("ay2", ay8910_address_w) AM_RANGE(0x8000, 0x8fff) AM_READ(soundlatch_r) AM_WRITENOP /* ack ? */ AM_RANGE(0xf000, 0xffff) AM_ROM ADDRESS_MAP_END static INPUT_CHANGED( coin_inserted_irq_hi ) { btime_state *state = field.machine().driver_data(); if (newval) device_set_input_line(state->m_maincpu, 0, HOLD_LINE); } static INPUT_CHANGED( coin_inserted_irq_lo ) { btime_state *state = field.machine().driver_data(); if (!newval) device_set_input_line(state->m_maincpu, 0, HOLD_LINE); } static INPUT_CHANGED( coin_inserted_nmi_lo ) { btime_state *state = field.machine().driver_data(); device_set_input_line(state->m_maincpu, INPUT_LINE_NMI, newval ? CLEAR_LINE : ASSERT_LINE); } static WRITE8_HANDLER( audio_command_w ) { btime_state *state = space->machine().driver_data(); soundlatch_w(space, offset, data); device_set_input_line(state->m_audiocpu, 0, ASSERT_LINE); } static READ8_HANDLER( audio_command_r ) { btime_state *state = space->machine().driver_data(); device_set_input_line(state->m_audiocpu, 0, CLEAR_LINE); return soundlatch_r(space, offset); } static READ8_HANDLER( zoar_dsw1_read ) { return (!space->machine().primary_screen->vblank() << 7) | (input_port_read(space->machine(), "DSW1") & 0x7f); } static INPUT_PORTS_START( btime ) PORT_START("P1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("P2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("SYSTEM") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_TILT ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_CHANGED(coin_inserted_irq_hi, 0) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_CHANGED(coin_inserted_irq_hi, 0) PORT_START("DSW1") PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("15D:1,2") PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("15D:3,4") PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_3C ) ) /* Manual gives the following Test settings, but they don't seem to correspond to the actual effect */ // PORT_DIPNAME( 0x30, 0x30, "Test Mode" ) PORT_DIPLOCATION("15D:5,6") // PORT_DIPSETTING( 0x30, DEF_STR( Off ) ) // PORT_DIPSETTING( 0x00, "Sound I/O Board Only" ) // PORT_DIPSETTING( 0x10, "Normal Test" ) // PORT_DIPSETTING( 0x20, "Cross Hatch Only" ) PORT_SERVICE_DIPLOC( 0x10, IP_ACTIVE_LOW, "15D:5" ) PORT_DIPNAME( 0x20, 0x20, "Cross Hatch Pattern" ) PORT_DIPLOCATION("15D:6") PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x40, 0x00, "Control Panel" ) PORT_DIPLOCATION("15D:7") PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x40, DEF_STR( Cocktail ) ) // PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("15D:8") // PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) // PORT_DIPSETTING( 0x80, DEF_STR( Cocktail ) ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_VBLANK ) PORT_START("DSW2") PORT_DIPNAME( 0x01, 0x01, DEF_STR( Lives ) ) PORT_DIPLOCATION("14D:1") PORT_DIPSETTING( 0x01, "3" ) PORT_DIPSETTING( 0x00, "5" ) PORT_DIPNAME( 0x06, 0x02, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("14D:2,3") PORT_DIPSETTING( 0x06, "10000" ) PORT_DIPSETTING( 0x04, "15000" ) PORT_DIPSETTING( 0x02, "20000" ) PORT_DIPSETTING( 0x00, "30000" ) PORT_DIPNAME( 0x08, 0x08, "Enemies" ) PORT_DIPLOCATION("14D:4") PORT_DIPSETTING( 0x08, "4" ) PORT_DIPSETTING( 0x00, "6" ) PORT_DIPNAME( 0x10, 0x00, "End of Level Pepper" ) PORT_DIPLOCATION("14D:5") PORT_DIPSETTING( 0x10, DEF_STR( No ) ) PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "14D:6" ) /* it should be OFF according to the manual */ PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "14D:7" ) /* it should be OFF according to the manual */ PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "14D:8" ) /* it should be OFF according to the manual */ INPUT_PORTS_END static INPUT_PORTS_START( cookrace ) PORT_START("P1") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_4WAY PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_START("P2") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_START("SYSTEM") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START1 ) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START2 ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_CHANGED(coin_inserted_nmi_lo, 0) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CHANGED(coin_inserted_nmi_lo, 0) PORT_START("DSW1") PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_3C ) ) PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x10, DEF_STR( On ) ) PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x20, DEF_STR( On ) ) PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) ) PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x40, DEF_STR( Cocktail ) ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_VBLANK ) PORT_START("DSW2") PORT_DIPNAME( 0x01, 0x01, DEF_STR( Lives ) ) PORT_DIPSETTING( 0x01, "3" ) PORT_DIPSETTING( 0x00, "5" ) PORT_DIPNAME( 0x06, 0x06, DEF_STR( Bonus_Life ) ) PORT_DIPSETTING( 0x06, "20000" ) PORT_DIPSETTING( 0x04, "30000" ) PORT_DIPSETTING( 0x02, "40000" ) PORT_DIPSETTING( 0x00, "50000" ) PORT_DIPNAME( 0x08, 0x08, "Enemies" ) PORT_DIPSETTING( 0x08, "4" ) PORT_DIPSETTING( 0x00, "6" ) PORT_DIPNAME( 0x10, 0x10, "End of Level Pepper" ) PORT_DIPSETTING( 0x10, DEF_STR( No ) ) PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x20, DEF_STR( On ) ) PORT_DIPNAME( 0xc0, 0x80, DEF_STR( Difficulty ) ) PORT_DIPSETTING( 0xc0, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x80, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x40, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) INPUT_PORTS_END static INPUT_PORTS_START( zoar ) PORT_START("P1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("P2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("SYSTEM") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CHANGED(coin_inserted_irq_lo, 0) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_CHANGED(coin_inserted_irq_lo, 0) PORT_START("DSW1") PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_3C ) ) /* Manual says bit 4,5 have to stay OFF */ PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "SW1:5" ) /* almost certainly unused */ /* Service mode doesn't work because of missing ROMs */ PORT_SERVICE_DIPLOC( 0x20, IP_ACTIVE_LOW, "SW1:6" ) PORT_DIPNAME( 0x40, 0x00, "Control Panel" ) PORT_DIPLOCATION("SW1:7") PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x40, DEF_STR( Cocktail ) ) // PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:8") // PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) // PORT_DIPSETTING( 0x80, DEF_STR( Cocktail ) ) /* I can't use IPT_VBLANK as players would have almost no time to enter their initials */ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_START("DSW2") PORT_DIPNAME( 0x01, 0x01, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1") PORT_DIPSETTING( 0x01, "3" ) PORT_DIPSETTING( 0x00, "5" ) PORT_DIPNAME( 0x06, 0x06, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:2,3") PORT_DIPSETTING( 0x06, "5000" ) PORT_DIPSETTING( 0x04, "10000" ) PORT_DIPSETTING( 0x02, "15000" ) PORT_DIPSETTING( 0x00, "20000" ) PORT_DIPNAME( 0x08, 0x08, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:4") PORT_DIPSETTING( 0x08, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hard ) ) PORT_DIPNAME( 0x10, 0x00, "Weapon Select" ) PORT_DIPLOCATION("SW2:5") PORT_DIPSETTING( 0x00, "Manual" ) PORT_DIPSETTING( 0x10, "Auto" ) PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW2:6" ) /* These 3 switches have something to do with coinage */ PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW2:7" ) /* See code at $d234. Feel free to figure them out */ PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW2:8" ) /* Manual says to leave them OFF */ INPUT_PORTS_END static INPUT_PORTS_START( lnc ) PORT_START("P1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("P2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("SYSTEM") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CHANGED(coin_inserted_nmi_lo, 0) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_CHANGED(coin_inserted_nmi_lo, 0) PORT_START("DSW1") PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_3C ) ) PORT_DIPNAME( 0x30, 0x30, "Test Mode" ) PORT_DIPLOCATION("SW1:5,6") /* Manual says these bits are unused */ PORT_DIPSETTING( 0x30, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, "RAM Test Only" ) PORT_DIPSETTING( 0x20, "Watchdog Test Only" ) PORT_DIPSETTING( 0x10, "All Tests" ) PORT_DIPNAME( 0x40, 0x00, "Control Panel" ) PORT_DIPLOCATION("SW1:7") PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x40, DEF_STR( Cocktail ) ) // PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:8") // PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) // PORT_DIPSETTING( 0x80, DEF_STR( Cocktail ) ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_VBLANK ) PORT_START("DSW2") PORT_DIPNAME( 0x01, 0x01, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1") PORT_DIPSETTING( 0x01, "3" ) PORT_DIPSETTING( 0x00, "5" ) PORT_DIPNAME( 0x06, 0x06, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:2,3") PORT_DIPSETTING( 0x06, "15000" ) PORT_DIPSETTING( 0x04, "20000" ) PORT_DIPSETTING( 0x02, "30000" ) PORT_DIPSETTING( 0x00, DEF_STR( None ) ) PORT_DIPNAME( 0x08, 0x08, "Game Speed" ) PORT_DIPLOCATION("SW2:4") PORT_DIPSETTING( 0x08, "Slow" ) PORT_DIPSETTING( 0x00, DEF_STR( Hard ) ) PORT_DIPUNUSED_DIPLOC( 0x10, 0x00, "SW2:5" ) /* it should be OFF according to the manual */ PORT_DIPUNUSED_DIPLOC( 0x20, 0x00, "SW2:6" ) /* it should be OFF according to the manual */ PORT_DIPUNUSED_DIPLOC( 0x40, 0x00, "SW2:7" ) /* it should be OFF according to the manual */ PORT_DIPUNUSED_DIPLOC( 0x80, 0x00, "SW2:8" ) /* it should be OFF according to the manual */ INPUT_PORTS_END static INPUT_PORTS_START( wtennis ) PORT_START("P1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("P2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("SYSTEM") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CHANGED(coin_inserted_nmi_lo, 0) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_CHANGED(coin_inserted_nmi_lo, 0) PORT_START("DSW1") PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) ) PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) ) PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_3C ) ) PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x10, DEF_STR( On ) ) PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x20, DEF_STR( On ) ) PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) ) PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x40, DEF_STR( Cocktail ) ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_VBLANK ) PORT_START("DSW2") PORT_DIPNAME( 0x01, 0x01, DEF_STR( Lives ) ) PORT_DIPSETTING( 0x01, "2" ) PORT_DIPSETTING( 0x00, "3" ) PORT_DIPNAME( 0x06, 0x06, DEF_STR( Bonus_Life ) ) PORT_DIPSETTING( 0x06, "10000" ) PORT_DIPSETTING( 0x04, "20000" ) PORT_DIPSETTING( 0x02, "30000" ) PORT_DIPSETTING( 0x00, DEF_STR( None ) ) PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) /* definitely used */ PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x08, DEF_STR( On ) ) PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unused ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x10, DEF_STR( On ) ) PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) /* These 3 switches */ PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) /* have to do with */ PORT_DIPSETTING( 0x20, DEF_STR( On ) ) /* coinage. */ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x40, DEF_STR( On ) ) PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x80, DEF_STR( On ) ) INPUT_PORTS_END static INPUT_PORTS_START( mmonkey ) PORT_START("P1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("P2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("SYSTEM") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CHANGED(coin_inserted_nmi_lo, 0) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_CHANGED(coin_inserted_nmi_lo, 0) PORT_START("DSW1") PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_3C ) ) PORT_DIPNAME( 0x10, 0x10, DEF_STR( Free_Play ) ) PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPUNUSED( 0x20, 0x00 ) /* almost certainly unused */ PORT_DIPNAME( 0x40, 0x00, "Control Panel" ) PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x40, DEF_STR( Cocktail ) ) // PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) ) // PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) // PORT_DIPSETTING( 0x80, DEF_STR( Cocktail ) ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_VBLANK ) PORT_START("DSW2") PORT_DIPNAME( 0x01, 0x01, DEF_STR( Lives ) ) PORT_DIPSETTING( 0x01, "3" ) PORT_DIPSETTING( 0x00, "5" ) PORT_DIPNAME( 0x06, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPSETTING( 0x02, "Every 15000" ) PORT_DIPSETTING( 0x04, "Every 30000" ) PORT_DIPSETTING( 0x00, "20000" ) PORT_DIPSETTING( 0x06, DEF_STR( None ) ) PORT_DIPNAME( 0x18, 0x08, DEF_STR( Difficulty ) ) PORT_DIPSETTING( 0x18, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x08, DEF_STR( Medium ) ) PORT_DIPSETTING( 0x10, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, "Level Skip Mode (Cheat)") PORT_DIPUNUSED( 0x20, 0x00 ) /* almost certainly unused */ PORT_DIPUNUSED( 0x40, 0x00 ) /* almost certainly unused */ PORT_SERVICE( 0x80, IP_ACTIVE_LOW ) INPUT_PORTS_END static INPUT_PORTS_START( bnj ) PORT_START("P1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("P2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("SYSTEM") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_TILT ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CHANGED(coin_inserted_nmi_lo, 0) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_CHANGED(coin_inserted_nmi_lo, 0) PORT_START("DSW1") PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("8D:1,2") PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("8D:3,4") PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_3C ) ) /* Manual gives the following Test settings, but they don't seem to correspond to the actual effect */ // PORT_DIPNAME( 0x30, 0x30, "Test Mode" ) PORT_DIPLOCATION("8D:5,6") // PORT_DIPSETTING( 0x30, DEF_STR( Off ) ) // PORT_DIPSETTING( 0x00, "Video PC Board Only" ) // PORT_DIPSETTING( 0x10, "Normal Test" ) // PORT_DIPSETTING( 0x20, "No Effect" ) PORT_SERVICE_DIPLOC( 0x10, IP_ACTIVE_LOW, "8D:5" ) PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x00, "8D:6" ) PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("8D:7") PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x40, DEF_STR( Cocktail ) ) /* According to crazykong.com dips this should change the control layout */ // PORT_DIPNAME( 0x80, 0x00, "Control Panel" ) PORT_DIPLOCATION("8D:8") // PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) // PORT_DIPSETTING( 0x80, DEF_STR( Cocktail ) ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_VBLANK ) PORT_START("DSW2") PORT_DIPNAME( 0x01, 0x01, DEF_STR( Lives ) ) PORT_DIPLOCATION("7D:1") PORT_DIPSETTING( 0x01, "3" ) PORT_DIPSETTING( 0x00, "5" ) PORT_DIPNAME( 0x06, 0x06, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("7D:2,3") PORT_DIPSETTING( 0x06, "Every 30000" ) PORT_DIPSETTING( 0x04, "Every 70000" ) PORT_DIPSETTING( 0x02, "20000 Only" ) PORT_DIPSETTING( 0x00, "30000 Only" ) PORT_DIPNAME( 0x08, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("7D:4") PORT_DIPSETTING( 0x08, DEF_STR( No ) ) PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) PORT_DIPNAME( 0x10, 0x10, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("7D:5") PORT_DIPSETTING( 0x10, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hard ) ) PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "7D:6" ) /* it should be OFF according to the manual */ PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "7D:7" ) /* it should be OFF according to the manual */ PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "7D:8" ) /* it should be OFF according to the manual */ INPUT_PORTS_END static INPUT_PORTS_START( disco ) PORT_START("P1") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_4WAY PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_BIT( 0x60, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START1 ) PORT_START("P2") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL PORT_BIT( 0x60, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START2 ) PORT_START("SYSTEM") PORT_BIT( 0x1f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x40, IP_ACTIVE_HIGH,IPT_COIN1 ) PORT_CHANGED(coin_inserted_irq_hi, 0) PORT_BIT( 0x80, IP_ACTIVE_HIGH,IPT_COIN2 ) PORT_CHANGED(coin_inserted_irq_hi, 0) PORT_START("DSW1") PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) ) PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") PORT_DIPSETTING( 0x0c, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_3C ) ) PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x00, "SW1:5" ) PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x00, "SW1:6" ) PORT_DIPNAME( 0x40, 0x40, "Control Panel" ) PORT_DIPLOCATION("SW1:7") PORT_DIPSETTING( 0x40, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) PORT_DIPNAME( 0x80, 0x80, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:8") PORT_DIPSETTING( 0x80, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) PORT_START("DSW2") PORT_DIPNAME( 0x01, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1") PORT_DIPSETTING( 0x00, "3" ) PORT_DIPSETTING( 0x01, "5" ) PORT_DIPNAME( 0x06, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:2,3") PORT_DIPSETTING( 0x00, "10000" ) PORT_DIPSETTING( 0x02, "20000" ) PORT_DIPSETTING( 0x04, "30000" ) PORT_DIPSETTING( 0x06, DEF_STR( None ) ) PORT_DIPNAME( 0x08, 0x00, "Music Weapons" ) PORT_DIPLOCATION("SW2:4") PORT_DIPSETTING( 0x00, "5" ) PORT_DIPSETTING( 0x08, "8" ) PORT_DIPNAME( 0x10, 0x00, "Game Speed" ) PORT_DIPLOCATION("SW2:5") PORT_DIPSETTING( 0x00, "Slow" ) PORT_DIPSETTING( 0x10, "Fast" ) PORT_DIPNAME( 0xe0, 0x00, "Country Code" ) PORT_DIPLOCATION("SW2:6,7,8") PORT_DIPSETTING( 0x00, "A" ) PORT_DIPSETTING( 0x20, "B" ) PORT_DIPSETTING( 0x40, "C" ) PORT_DIPSETTING( 0x60, "D" ) PORT_DIPSETTING( 0x80, "E" ) PORT_DIPSETTING( 0xa0, "F" ) PORT_START("VBLANK") PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_VBLANK ) INPUT_PORTS_END static INPUT_PORTS_START( sdtennis ) PORT_START("P1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("P2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("SYSTEM") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_TILT ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CHANGED(coin_inserted_nmi_lo, 0) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_CHANGED(coin_inserted_nmi_lo, 0) PORT_START("DSW1") PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_3C ) ) PORT_SERVICE( 0x10, IP_ACTIVE_LOW ) PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x20, DEF_STR( On ) ) PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) ) PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x40, DEF_STR( Cocktail ) ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_VBLANK ) PORT_START("DSW2") PORT_DIPNAME( 0x01, 0x01, DEF_STR( Lives ) ) PORT_DIPSETTING( 0x00, "1" ) PORT_DIPSETTING( 0x01, "2" ) PORT_DIPNAME( 0x06, 0x06, DEF_STR( Bonus_Life ) ) PORT_DIPSETTING( 0x06, "1 Set won" ) PORT_DIPSETTING( 0x04, "2 Sets won" ) PORT_DIPSETTING( 0x02, "3 Sets won" ) PORT_DIPSETTING( 0x00, DEF_STR( None ) ) PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) // Check code at 0xc55b PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) // Check code at 0xc5af PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0xe0, 0xe0, "Copyright" ) PORT_DIPSETTING( 0xe0, "Data East Corporation" ) PORT_DIPSETTING( 0xc0, "Data East USA" ) /* Other values are the same as 0xe0 */ /* 0x60 also gives a special coinage : COIN1 gives 3 credits and COIN2 gives 8 credits whatever the coinage Dip Switch are (they are not read in this case) */ INPUT_PORTS_END static const gfx_layout tile8layout = { 8,8, RGN_FRAC(1,3), 3, { RGN_FRAC(2,3), RGN_FRAC(1,3), RGN_FRAC(0,3) }, { STEP8(0,1) }, { STEP8(0,8) }, 8*8 }; static const gfx_layout disco_tile8layout = { 8,8, 0x6000/3/8, 3, { 0x4000*8, 0x2000*8, 0x0000*8 }, { STEP8(0,1) }, { STEP8(0,8) }, 8*8 }; static const gfx_layout tile16layout = { 16,16, RGN_FRAC(1,3), 3, { RGN_FRAC(2,3), RGN_FRAC(1,3), RGN_FRAC(0,3) }, { STEP8(16*8,1), STEP8(0,1) }, { STEP16(0,8) }, 32*8 }; static const gfx_layout disco_tile16layout = { 16,16, 0x6000/3/32, 3, { 0x4000*8, 0x2000*8, 0x0000*8 }, { STEP8(16*8,1), STEP8(0,1) }, { STEP16(0,8) }, 32*8 }; static const gfx_layout bnj_tile16layout = { 16,16, RGN_FRAC(1,2), 3, { RGN_FRAC(1,2)+4, RGN_FRAC(0,2)+0, RGN_FRAC(0,2)+4 }, { STEP4(3*16*8,1), STEP4(2*16*8,1), STEP4(1*16*8,1), STEP4(0*16*8,1) }, { STEP16(0,8) }, 64*8 }; static GFXDECODE_START( btime ) GFXDECODE_ENTRY( "gfx1", 0, tile8layout, 0, 1 ) /* char set #1 */ GFXDECODE_ENTRY( "gfx1", 0, tile16layout, 0, 1 ) /* sprites */ GFXDECODE_ENTRY( "gfx2", 0, tile16layout, 8, 1 ) /* background tiles */ GFXDECODE_END static GFXDECODE_START( cookrace ) GFXDECODE_ENTRY( "gfx1", 0, tile8layout, 0, 1 ) /* char set #1 */ GFXDECODE_ENTRY( "gfx1", 0, tile16layout, 0, 1 ) /* sprites */ GFXDECODE_ENTRY( "gfx2", 0, tile8layout, 8, 1 ) /* background tiles */ GFXDECODE_END static GFXDECODE_START( lnc ) GFXDECODE_ENTRY( "gfx1", 0, tile8layout, 0, 1 ) /* char set #1 */ GFXDECODE_ENTRY( "gfx1", 0, tile16layout, 0, 1 ) /* sprites */ GFXDECODE_END static GFXDECODE_START( bnj ) GFXDECODE_ENTRY( "gfx1", 0, tile8layout, 0, 1 ) /* char set #1 */ GFXDECODE_ENTRY( "gfx1", 0, tile16layout, 0, 1 ) /* sprites */ GFXDECODE_ENTRY( "gfx2", 0, bnj_tile16layout,8, 1 ) /* background tiles */ GFXDECODE_END static GFXDECODE_START( zoar ) GFXDECODE_ENTRY( "gfx1", 0, tile8layout, 0, 8 ) /* char set #1 */ GFXDECODE_ENTRY( "gfx3", 0, tile16layout, 0, 8 ) /* sprites */ GFXDECODE_ENTRY( "gfx2", 0, tile16layout, 0, 8 ) /* background tiles */ GFXDECODE_END static GFXDECODE_START( disco ) GFXDECODE_ENTRY( NULL, 0, disco_tile8layout, 0, 4 ) /* char set #1 */ GFXDECODE_ENTRY( NULL, 0, disco_tile16layout, 0, 4 ) /* sprites */ GFXDECODE_END /*************************************************************************** Discrete Filtering and Mixing All values taken from Burger Time Schematics. ****************************************************************************/ static const ay8910_interface ay1_intf = { AY8910_DISCRETE_OUTPUT, {RES_K(5), RES_K(5), RES_K(5)}, DEVCB_NULL, DEVCB_NULL, DEVCB_HANDLER(ay_audio_nmi_enable_w), DEVCB_NULL }; static const ay8910_interface ay2_intf = { AY8910_DISCRETE_OUTPUT, {RES_K(1), RES_K(5), RES_K(5)}, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL }; static const discrete_mixer_desc btime_sound_mixer_desc = {DISC_MIXER_IS_OP_AMP, {RES_K(100), RES_K(100)}, {0,0}, /* no variable resistors */ {0,0}, /* no node capacitors */ 0, /* no RI */ RES_K(10), CAP_P(150), 0, /* Modelled separately */ 0, 1}; /* R49 has 4.7k in schematics, but listed as 47k in bill of material * 47k gives proper low pass filtering * * Anoid measured R49 to R52 on a Burger Time pcb. These are * listed below */ #define BTIME_R49 RES_K(47) /* pcb: 47.4k */ /* The input divider R51 R50 is not independent of R52, which * also depends on ay internal resistance. * FIXME: Develop proper model when I am retired. * * With R51 being 1K, the gain is way to high (23.5). Therefore R51 * is set to 5k, but this is a hack. With the modification, * sound levels are in line with observations. * R51,R50,R52 and R49 verified on real pcb by Anoid. * * http://www.coinopvideogames.com/videogames01.php * There are two recordings from 1982 where the filtered sound is way louder * than the music. There is a later recording * http://www.coinopvideogames.com/videogames03.php * in which the filtered sounds have volumes closer to the music. * */ #define BTIME_R52 RES_K(1) /* pcb: .912k = 1K || 11k */ #define BTIME_R51 RES_K(5) /* pcb: .923k = 1k || 11k schematics 1k */ #define BTIME_R50 RES_K(10) /* pcb: 1.667k = 10k || 2k */ static const discrete_op_amp_filt_info btime_opamp_desc = {BTIME_R51, 0, BTIME_R50, 0, BTIME_R49, CAP_U(0.068), CAP_U(0.068), 0, 0, 5.0, -5.0}; static DISCRETE_SOUND_START( btime_sound ) DISCRETE_INPUTX_STREAM(NODE_01, 0, 5.0/32767.0, 0) DISCRETE_INPUTX_STREAM(NODE_02, 1, 5.0/32767.0, 0) DISCRETE_INPUTX_STREAM(NODE_03, 2, 5.0/32767.0, 0) DISCRETE_INPUTX_STREAM(NODE_04, 3, 5.0/32767.0, 0) DISCRETE_INPUTX_STREAM(NODE_05, 4, 5.0/32767.0, 0) DISCRETE_INPUTX_STREAM(NODE_06, 5, 5.0/32767.0, 0) /* Mix 5 channels 1A, 1B, 1C, 2B, 2C directly */ DISCRETE_ADDER3(NODE_20, 1, NODE_01, NODE_02, NODE_03) DISCRETE_ADDER3(NODE_21, 1, NODE_20, NODE_05, NODE_06) DISCRETE_MULTIPLY(NODE_22, NODE_21, 0.2) /* Filter of channel 2A */ DISCRETE_OP_AMP_FILTER(NODE_30, 1, NODE_04, NODE_NC, DISC_OP_AMP_FILTER_IS_BAND_PASS_1M, &btime_opamp_desc) DISCRETE_MIXER2(NODE_40, 1, NODE_22, NODE_30, &btime_sound_mixer_desc) DISCRETE_CRFILTER(NODE_41, NODE_40, RES_K(10), CAP_U(10)) /* Amplifier is upc1181H3 * * http://www.ic-ts-histo.de/fad/ics/upc1181/upc1181.htm * * A linear frequency response is mentioned as well as a lower * edge frequency determined by cap on pin3, however no formula given. * * not modelled here */ /* Assuming a 4 Ohm impedance speaker */ DISCRETE_CRFILTER(NODE_43, NODE_41, 3.0, CAP_U(100)) DISCRETE_OUTPUT(NODE_43, 32767.0 / 5. * 35.0) DISCRETE_SOUND_END static MACHINE_START( btime ) { btime_state *state = machine.driver_data(); state->m_maincpu = machine.device("maincpu"); state->m_audiocpu = machine.device("audiocpu"); state->save_item(NAME(state->m_btime_palette)); state->save_item(NAME(state->m_bnj_scroll1)); state->save_item(NAME(state->m_bnj_scroll2)); state->save_item(NAME(state->m_btime_tilemap)); state->save_item(NAME(state->m_audio_nmi_enabled)); state->save_item(NAME(state->m_audio_nmi_state)); } static MACHINE_START( mmonkey ) { btime_state *state = machine.driver_data(); MACHINE_START_CALL(btime); state->save_item(NAME(state->m_protection_command)); state->save_item(NAME(state->m_protection_status)); state->save_item(NAME(state->m_protection_value)); state->save_item(NAME(state->m_protection_ret)); } static MACHINE_RESET( btime ) { btime_state *state = machine.driver_data(); /* by default, the audio NMI is disabled, except for bootlegs which don't use the enable */ state->m_audio_nmi_enabled = (state->m_audio_nmi_enable_type == AUDIO_ENABLE_NONE); state->m_btime_palette = 0; state->m_bnj_scroll1 = 0; state->m_bnj_scroll2 = 0; state->m_btime_tilemap[0] = 0; state->m_btime_tilemap[1] = 0; state->m_btime_tilemap[2] = 0; state->m_btime_tilemap[3] = 0; state->m_audio_nmi_state = 0; } static MACHINE_RESET( lnc ) { btime_state *state = machine.driver_data(); *state->m_lnc_charbank = 1; MACHINE_RESET_CALL(btime); } static MACHINE_RESET( mmonkey ) { btime_state *state = machine.driver_data(); MACHINE_RESET_CALL(lnc); state->m_protection_command = 0; state->m_protection_status = 0; state->m_protection_value = 0; state->m_protection_ret = 0; } static MACHINE_CONFIG_START( btime, btime_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M6502, HCLK2) /* seletable between H2/H4 via jumper */ MCFG_CPU_PROGRAM_MAP(btime_map) MCFG_CPU_ADD("audiocpu", M6502, HCLK1/3/2) MCFG_CPU_PROGRAM_MAP(audio_map) MCFG_TIMER_ADD_SCANLINE("audionmi", audio_nmi_gen, "screen", 0, 8) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) MCFG_SCREEN_RAW_PARAMS(HCLK, 384, 8, 248, 272, 8, 248) MCFG_SCREEN_UPDATE(btime) MCFG_MACHINE_START(btime) MCFG_MACHINE_RESET(btime) MCFG_GFXDECODE(btime) MCFG_PALETTE_LENGTH(16) MCFG_PALETTE_INIT(btime) MCFG_VIDEO_START(btime) /* audio hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ay1", AY8910, HCLK2) MCFG_SOUND_CONFIG(ay1_intf) MCFG_SOUND_ROUTE_EX(0, "discrete", 1.0, 0) MCFG_SOUND_ROUTE_EX(1, "discrete", 1.0, 1) MCFG_SOUND_ROUTE_EX(2, "discrete", 1.0, 2) MCFG_SOUND_ADD("ay2", AY8910, HCLK2) MCFG_SOUND_CONFIG(ay2_intf) MCFG_SOUND_ROUTE_EX(0, "discrete", 1.0, 3) MCFG_SOUND_ROUTE_EX(1, "discrete", 1.0, 4) MCFG_SOUND_ROUTE_EX(2, "discrete", 1.0, 5) MCFG_SOUND_ADD("discrete", DISCRETE, 0) MCFG_SOUND_CONFIG_DISCRETE(btime_sound) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( cookrace, btime ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(cookrace_map) MCFG_CPU_MODIFY("audiocpu") MCFG_CPU_PROGRAM_MAP(audio_map) /* video hardware */ MCFG_GFXDECODE(cookrace) MCFG_PALETTE_LENGTH(16) MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_UPDATE(cookrace) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( lnc, btime ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(lnc_map) MCFG_MACHINE_RESET(lnc) /* video hardware */ MCFG_GFXDECODE(lnc) MCFG_PALETTE_LENGTH(8) MCFG_PALETTE_INIT(lnc) MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_UPDATE(lnc) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( wtennis, lnc ) /* basic machine hardware */ /* video hardware */ MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_UPDATE(eggs) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( mmonkey, wtennis ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(mmonkey_map) MCFG_MACHINE_START(mmonkey) MCFG_MACHINE_RESET(mmonkey) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( sdtennis, btime ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") MCFG_CPU_CLOCK(HCLK4) MCFG_CPU_PROGRAM_MAP(bnj_map) /* video hardware */ MCFG_GFXDECODE(bnj) MCFG_PALETTE_LENGTH(16) MCFG_VIDEO_START(bnj) MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_UPDATE(bnj) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( bnj, sdtennis ) /* basic machine hardware */ /* video hardware */ MCFG_DEVICE_MODIFY("screen") MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) // 256 * 240, confirmed MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( zoar, btime ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(zoar_map) /* video hardware */ MCFG_DEVICE_MODIFY("screen") MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) // 256 * 240, confirmed MCFG_GFXDECODE(zoar) MCFG_PALETTE_LENGTH(64) MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_UPDATE(zoar) MCFG_SOUND_REPLACE("ay1", AY8910, HCLK1) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.23) MCFG_SOUND_CONFIG(ay1_intf) MCFG_SOUND_REPLACE("ay2", AY8910, HCLK1) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.23) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( disco, btime ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") MCFG_CPU_CLOCK(HCLK4) MCFG_CPU_PROGRAM_MAP(disco_map) MCFG_CPU_MODIFY("audiocpu") MCFG_CPU_PROGRAM_MAP(disco_audio_map) /* video hardware */ MCFG_GFXDECODE(disco) MCFG_PALETTE_LENGTH(32) MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_UPDATE(disco) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( tisland, btime ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(tisland_map) /* video hardware */ MCFG_GFXDECODE(zoar) MACHINE_CONFIG_END /*************************************************************************** Game driver(s) ***************************************************************************/ ROM_START( btime ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "aa04.9b", 0xc000, 0x1000, CRC(368a25b5) SHA1(ed3f3712423979dcb351941fa85dce6a0a7bb16b) ) ROM_LOAD( "aa06.13b", 0xd000, 0x1000, CRC(b4ba400d) SHA1(8c77397e934907bc47a739f263196a0f2f81ba3d) ) ROM_LOAD( "aa05.10b", 0xe000, 0x1000, CRC(8005bffa) SHA1(d0da4e360039f6a8d8142a4e8e05c1f90c0af68a) ) ROM_LOAD( "aa07.15b", 0xf000, 0x1000, CRC(086440ad) SHA1(4a32bc92f8ff5fbe112f56e62d2c03da8851a7b9) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "ab14.12h", 0xe000, 0x1000, CRC(f55e5211) SHA1(27940026d0c6212d1138d2fd88880df697218627) ) ROM_REGION( 0x6000, "gfx1", 0 ) ROM_LOAD( "aa12.7k", 0x0000, 0x1000, CRC(c4617243) SHA1(24204d591aa2c264a852ee9ba8c4be63efd97728) ) /* charset #1 */ ROM_LOAD( "ab13.9k", 0x1000, 0x1000, CRC(ac01042f) SHA1(e64b6381a9298eaf74e79fa5f1ea8e9596c58a49) ) ROM_LOAD( "ab10.10k", 0x2000, 0x1000, CRC(854a872a) SHA1(3d2ecfd54a5a9d68b53cf4b4ee1f2daa6aef2123) ) ROM_LOAD( "ab11.12k", 0x3000, 0x1000, CRC(d4848014) SHA1(0a55b091cd4e7f317c35defe13d5051b26042eee) ) ROM_LOAD( "aa8.13k", 0x4000, 0x1000, CRC(8650c788) SHA1(d9b1ee2d1f2fd66705d497c80252861b49aa9254) ) ROM_LOAD( "ab9.15k", 0x5000, 0x1000, CRC(8dec15e6) SHA1(b72633de6268ce16742bba4dcba835df860d6c2f) ) ROM_REGION( 0x1800, "gfx2", 0 ) ROM_LOAD( "ab00.1b", 0x0000, 0x0800, CRC(c7a14485) SHA1(6a0a8e6b7860859f22daa33634e34fbf91387659) ) /* charset #2 */ ROM_LOAD( "ab01.3b", 0x0800, 0x0800, CRC(25b49078) SHA1(4abdcbd4f3362c3e4463a1274731289f1a72d2e6) ) ROM_LOAD( "ab02.4b", 0x1000, 0x0800, CRC(b8ef56c3) SHA1(4a03bf011dc1fb2902f42587b1174b880cf06df1) ) ROM_REGION( 0x0800, "bg_map", 0 ) /* background tilemaps */ ROM_LOAD( "ab03.6b", 0x0000, 0x0800, CRC(d26bc1f3) SHA1(737af6e264183a1f151f277a07cf250d6abb3fd8) ) ROM_END ROM_START( btime2 ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "aa04.9b2", 0xc000, 0x1000, CRC(a041e25b) SHA1(caaab3ae46619d0a87a8985d316411f23be0b696) ) ROM_LOAD( "aa06.13b", 0xd000, 0x1000, CRC(b4ba400d) SHA1(8c77397e934907bc47a739f263196a0f2f81ba3d) ) ROM_LOAD( "aa05.10b", 0xe000, 0x1000, CRC(8005bffa) SHA1(d0da4e360039f6a8d8142a4e8e05c1f90c0af68a) ) ROM_LOAD( "aa07.15b", 0xf000, 0x1000, CRC(086440ad) SHA1(4a32bc92f8ff5fbe112f56e62d2c03da8851a7b9) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "ab14.12h", 0xe000, 0x1000, CRC(f55e5211) SHA1(27940026d0c6212d1138d2fd88880df697218627) ) ROM_REGION( 0x6000, "gfx1", 0 ) ROM_LOAD( "aa12.7k", 0x0000, 0x1000, CRC(c4617243) SHA1(24204d591aa2c264a852ee9ba8c4be63efd97728) ) /* charset #1 */ ROM_LOAD( "ab13.9k", 0x1000, 0x1000, CRC(ac01042f) SHA1(e64b6381a9298eaf74e79fa5f1ea8e9596c58a49) ) ROM_LOAD( "ab10.10k", 0x2000, 0x1000, CRC(854a872a) SHA1(3d2ecfd54a5a9d68b53cf4b4ee1f2daa6aef2123) ) ROM_LOAD( "ab11.12k", 0x3000, 0x1000, CRC(d4848014) SHA1(0a55b091cd4e7f317c35defe13d5051b26042eee) ) ROM_LOAD( "aa8.13k", 0x4000, 0x1000, CRC(8650c788) SHA1(d9b1ee2d1f2fd66705d497c80252861b49aa9254) ) ROM_LOAD( "ab9.15k", 0x5000, 0x1000, CRC(8dec15e6) SHA1(b72633de6268ce16742bba4dcba835df860d6c2f) ) ROM_REGION( 0x1800, "gfx2", 0 ) ROM_LOAD( "ab00.1b", 0x0000, 0x0800, CRC(c7a14485) SHA1(6a0a8e6b7860859f22daa33634e34fbf91387659) ) /* charset #2 */ ROM_LOAD( "ab01.3b", 0x0800, 0x0800, CRC(25b49078) SHA1(4abdcbd4f3362c3e4463a1274731289f1a72d2e6) ) ROM_LOAD( "ab02.4b", 0x1000, 0x0800, CRC(b8ef56c3) SHA1(4a03bf011dc1fb2902f42587b1174b880cf06df1) ) ROM_REGION( 0x0800, "bg_map", 0 ) /* background tilemaps */ ROM_LOAD( "ab03.6b", 0x0000, 0x0800, CRC(d26bc1f3) SHA1(737af6e264183a1f151f277a07cf250d6abb3fd8) ) ROM_END ROM_START( btimem ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "ab05a1.12b", 0xb000, 0x1000, CRC(0a98b230) SHA1(aeee4f6f0aaa27575b80261d03c5453cc6ebd646) ) ROM_LOAD( "ab04.9b", 0xc000, 0x1000, CRC(797e5f75) SHA1(35ea5fa4b8f3494adf7774b3946ed2540ac826ff) ) ROM_LOAD( "ab06.13b", 0xd000, 0x1000, CRC(c77f3f64) SHA1(f283087fad0a102fe92be7ce80ed18e64dc93b67) ) ROM_LOAD( "ab05.10b", 0xe000, 0x1000, CRC(b0d3640f) SHA1(6ba28971714ece6f1c04fa2dbf1f9f216ded7cfa) ) ROM_LOAD( "ab07.15b", 0xf000, 0x1000, CRC(a142f862) SHA1(39d7ef172d18874885f1b1542e885cc4287dc344) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "ab14.12h", 0xe000, 0x1000, CRC(f55e5211) SHA1(27940026d0c6212d1138d2fd88880df697218627) ) ROM_REGION( 0x6000, "gfx1", 0 ) ROM_LOAD( "ab12.7k", 0x0000, 0x1000, CRC(6c79f79f) SHA1(338009199b5889621693833d88c35abb8e9e38a2) ) /* charset #1 */ ROM_LOAD( "ab13.9k", 0x1000, 0x1000, CRC(ac01042f) SHA1(e64b6381a9298eaf74e79fa5f1ea8e9596c58a49) ) ROM_LOAD( "ab10.10k", 0x2000, 0x1000, CRC(854a872a) SHA1(3d2ecfd54a5a9d68b53cf4b4ee1f2daa6aef2123) ) ROM_LOAD( "ab11.12k", 0x3000, 0x1000, CRC(d4848014) SHA1(0a55b091cd4e7f317c35defe13d5051b26042eee) ) ROM_LOAD( "ab8.13k", 0x4000, 0x1000, CRC(70b35bbe) SHA1(ee8d70d6792ac4b8fe3de90c665457fedb94a7ba) ) ROM_LOAD( "ab9.15k", 0x5000, 0x1000, CRC(8dec15e6) SHA1(b72633de6268ce16742bba4dcba835df860d6c2f) ) ROM_REGION( 0x1800, "gfx2", 0 ) ROM_LOAD( "ab00.1b", 0x0000, 0x0800, CRC(c7a14485) SHA1(6a0a8e6b7860859f22daa33634e34fbf91387659) ) /* charset #2 */ ROM_LOAD( "ab01.3b", 0x0800, 0x0800, CRC(25b49078) SHA1(4abdcbd4f3362c3e4463a1274731289f1a72d2e6) ) ROM_LOAD( "ab02.4b", 0x1000, 0x0800, CRC(b8ef56c3) SHA1(4a03bf011dc1fb2902f42587b1174b880cf06df1) ) ROM_REGION( 0x0800, "bg_map", 0 ) /* background tilemaps */ ROM_LOAD( "ab03.6b", 0x0000, 0x0800, CRC(d26bc1f3) SHA1(737af6e264183a1f151f277a07cf250d6abb3fd8) ) ROM_END ROM_START( cookrace ) ROM_REGION( 0x10000, "maincpu", 0 ) /* code is in the range 0500-3fff, encrypted */ ROM_LOAD( "1f.1", 0x0000, 0x2000, CRC(68759d32) SHA1(2112a6f17b871aefdb39739e47d4a9f368a2eb3c) ) ROM_LOAD( "2f.2", 0x2000, 0x2000, CRC(be7d72d1) SHA1(232d108098cb490e7c828aa4524ad09d3866ae18) ) ROM_LOAD( "2k", 0xffe0, 0x0020, CRC(e2553b3d) SHA1(0a38929cdb3f37c6e4bacc5c3f94c049b4352858) ) /* reset/interrupt vectors */ ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "6f.6", 0xe000, 0x1000, CRC(6b8e0272) SHA1(372a891b7b357aea0297ba9bcae752c3c9d8c1be) ) /* starts at 0000, not f000; 0000-01ff is RAM */ ROM_REGION( 0x6000, "gfx1", 0 ) ROM_LOAD( "m8.7", 0x0000, 0x2000, CRC(a1a0d5a6) SHA1(e9583320e9c303407abfe02988b95403e5209c52) ) /* charset #1 */ ROM_LOAD( "m7.8", 0x2000, 0x2000, CRC(1104f497) SHA1(60abd05c2549fe014660c169011480beb191f36d) ) ROM_LOAD( "m6.9", 0x4000, 0x2000, CRC(d0d94477) SHA1(74ca9134a52cabe5769d714855b38a49632b9e40) ) ROM_REGION( 0x1800, "gfx2", 0 ) ROM_LOAD( "2f.3", 0x0000, 0x0800, CRC(28609a75) SHA1(ab5d02bc0a771227db820a79b16aa662fb2140cf) ) /* garbage?? */ ROM_CONTINUE( 0x0000, 0x0800 ) /* charset #2 */ ROM_LOAD( "4f.4", 0x0800, 0x0800, CRC(7742e771) SHA1(c938c5714273bd4f2a1beb23d781ecbe7b023e6d) ) /* garbage?? */ ROM_CONTINUE( 0x0800, 0x0800 ) ROM_LOAD( "5f.5", 0x1000, 0x0800, CRC(611c686f) SHA1(e2c45061597d3d1a855a625a906b5a17a87deb2c) ) /* garbage?? */ ROM_CONTINUE( 0x1000, 0x0800 ) ROM_REGION( 0x0040, "proms", 0 ) ROM_LOAD( "f9.clr", 0x0000, 0x0020, CRC(c2348c1d) SHA1(a7cc4b499b6c89c5966711f8bb922026c2978e1a) ) /* palette */ ROM_LOAD( "b7", 0x0020, 0x0020, CRC(e4268fa6) SHA1(93f74e633c3a19755e78e0e2883109cd8ccde9a8) ) /* unknown */ ROM_END ROM_START( tisland ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "t-04.b7", 0xa000, 0x1000, CRC(641af7f9) SHA1(50cd8f2372725356bb5a66024084363f5c5a870d) ) ROM_RELOAD( 0x9000, 0x1000 ) ROM_LOAD( "t-07.b11", 0xb000, 0x1000, CRC(6af00c8b) SHA1(e3948ca36642d3c2a1f94b017893d6e2fe178bb0) ) ROM_LOAD( "t-05.b9", 0xc000, 0x1000, CRC(95b1a1d3) SHA1(5636580f26e839d1140838c7efc1cabc2cf06f6f) ) ROM_LOAD( "t-08.b13", 0xd000, 0x1000, CRC(b7bbc008) SHA1(751491eac90f46985c83a6c06088638bcd0c0f20) ) ROM_LOAD( "t-06.b10", 0xe000, 0x1000, CRC(5a6783cf) SHA1(f518290efec0fedb92432b4e3448aea2438b8448) ) ROM_LOAD( "t-09.b14", 0xf000, 0x1000, CRC(5b26771a) SHA1(31d86acba4b6549fc08a3947d6d6d1a470fcb9da) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "t-0a.j11", 0xe000, 0x1000, CRC(807e1652) SHA1(ccfee616dc0e34d10a0e62b9864fd987291bf176) ) ROM_REGION( 0x3000, "gfx1", 0 ) ROM_LOAD( "t-13.k14", 0x0000, 0x1000, CRC(95bdec2f) SHA1(201b9c53ea53a25535b619231d0d14e08c206ecf) ) ROM_LOAD( "t-10.k10", 0x1000, 0x1000, CRC(3ba416cb) SHA1(90c968f963ba6f52f979f28f62eaccc0e2911508) ) ROM_LOAD( "t-0d.k5", 0x2000, 0x1000, CRC(3d3e40b2) SHA1(90576c82500ce8eddbf4dd02e59ec4ccc3b13000) ) /* 8x8 tiles */ ROM_REGION( 0x1800, "gfx2", 0 ) /* bg tiles */ // also contains the (incomplete) bg tilemap data for 1 tilemap (0x400-0x7ff of every rom is same as bg_map region, leftover?) */ ROM_LOAD( "t-00.b1", 0x0000, 0x0800, CRC(05eaf899) SHA1(b03a1b7d985b4d841d6bbb213a32a33e324dff89) ) /* charset #2 */ ROM_LOAD( "t-01.b2", 0x0800, 0x0800, CRC(f692e9e0) SHA1(e07ef20de8e9387f1096412d42d14ed5e52bbbd9) ) ROM_LOAD( "t-02.b4", 0x1000, 0x0800, CRC(88396cae) SHA1(47233d91e9c7b14091a0050524fa49e1bc69311d) ) ROM_REGION( 0x6000, "gfx3", 0 ) ROM_LOAD( "t-11.k11", 0x0000, 0x1000, CRC(779cc47c) SHA1(8921b81d460232252fd5a3c9bb2ad0befc1421da) ) /* 16x16 tiles*/ ROM_LOAD( "t-12.k13", 0x1000, 0x1000, CRC(c804a8aa) SHA1(f8ce1da88443416b6cd276741a600104d36c3725) ) ROM_LOAD( "t-0e.k6", 0x2000, 0x1000, CRC(63aa2b22) SHA1(765c405b1948191f5bdf1d8c1e7f20acb0894195) ) ROM_LOAD( "t-0f.k8", 0x3000, 0x1000, CRC(3eeca392) SHA1(78deceea3628aed0a57cb4208d260a91a304695a) ) ROM_LOAD( "t-0b.k2", 0x4000, 0x1000, CRC(ec416f20) SHA1(20852ef9753b103c5ec03d5eede778c0e25fc059) ) ROM_LOAD( "t-0c.k4", 0x5000, 0x1000, CRC(428513a7) SHA1(aab97ee938dc743a2941f71f827c22b9dde8aef0) ) ROM_REGION( 0x1000, "bg_map", 0 ) /* bg tilemap data */ ROM_LOAD( "t-03.b5", 0x0000, 0x1000, CRC(68df6d50) SHA1(461acc39089faac36bf8a8d279fbb6c046ae0264) ) ROM_END /* There is a flyer with a screen shot for Lock'n'Chase at: http://www.arcadeflyers.com/?page=flyer&db=videodb&id=608&image=1 */ ROM_START( lnc ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "s3-3d", 0xc000, 0x1000, CRC(1ab4f2c2) SHA1(c5890b768172cd2e3912b84db5f71546969ad7e2) ) ROM_LOAD( "s2-3c", 0xd000, 0x1000, CRC(5e46b789) SHA1(00b2510e07eb565cb373db798dd537191b0b7cc8) ) ROM_LOAD( "s1-3b", 0xe000, 0x1000, CRC(1308a32e) SHA1(da64fe7b76f5ac8ac35460e6c789ab1e986c78ef) ) ROM_LOAD( "s0-3a", 0xf000, 0x1000, CRC(beb4b1fc) SHA1(166a96b5757946231f3619844366218065412935) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "sa-1h", 0xe000, 0x1000, CRC(379387ec) SHA1(29d37f04c64ed53a2573962dfa9c0623b89e0045) ) ROM_REGION( 0x6000, "gfx1", 0 ) ROM_LOAD( "s4-11l", 0x0000, 0x1000, CRC(a2162a9e) SHA1(2729cef805c8e863af540424faa1aca82d3525e2) ) ROM_LOAD( "s5-11m", 0x1000, 0x1000, CRC(12f1c2db) SHA1(004e25a53ffa197e1238dfa53c530f128cf40516) ) ROM_LOAD( "s6-13l", 0x2000, 0x1000, CRC(d21e2a57) SHA1(0462cd3a5be87da97ed1bd8b79f8822cd5a33cf1) ) ROM_LOAD( "s7-13m", 0x3000, 0x1000, CRC(c4f247cd) SHA1(2c86bf479169981daf0378eb0b3e1a600937aaf2) ) ROM_LOAD( "s8-15l", 0x4000, 0x1000, CRC(672a92d0) SHA1(1bc89f6a76873504aa0fcfa0c6a43e8546edde27) ) ROM_LOAD( "s9-15m", 0x5000, 0x1000, CRC(87c8ee9a) SHA1(158019b18bc3e5104bebeb241c077a706bf72ff2) ) ROM_REGION( 0x0040, "proms", 0 ) ROM_LOAD( "sc-5m", 0x0000, 0x0020, CRC(2a976ebe) SHA1(f3c1b0d98f431f9cd0d5fa009fafa1115aabe6e5) ) /* palette */ ROM_LOAD( "sb-4c", 0x0020, 0x0020, CRC(a29b4204) SHA1(7f15cae5c4aaa29638fb45029782dafd2b3d1484) ) /* RAS/CAS logic - not used */ ROM_END /*This one doesn't have the (c) deco and the "pro" word at the title screen so I'm assuming it's a bootleg.*/ ROM_START( protennb ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "t6.a1", 0xa000, 0x1000, CRC(e89cc295) SHA1(68f1578c4be816db6028a561d286b19553c87506) ) ROM_LOAD( "t5.a3", 0xb000, 0x1000, CRC(9131ed87) SHA1(af2276a82e024bf00c6db02deb7f06ade89dd386) ) ROM_LOAD( "t4.a4", 0xc000, 0x1000, CRC(01dc0e71) SHA1(a359468fb9dab9cfadcf8ec22a4d7ce9341f4324) ) ROM_LOAD( "t3.a6", 0xd000, 0x1000, CRC(6253acec) SHA1(24aaac1cdea1c60f8ff05dff6c17ba3a0e732187) ) ROM_LOAD( "t2.a8", 0xe000, 0x1000, CRC(6faf561c) SHA1(7fd5430af4b3f255e2c01e9b092b960ebdca8d13) ) ROM_LOAD( "t1.a9", 0xf000, 0x1000, CRC(baa330ae) SHA1(b10c66d9a03b036d95926d0c0fe441bb7ca4015d) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "t7.b1", 0xf000, 0x1000, CRC(a6bcc2d1) SHA1(383cd170417256467dfce94939d6afa66518c6d2) ) ROM_REGION( 0x6000, "gfx1", ROMREGION_ERASE00 ) /* dynamically allocated */ ROM_REGION( 0x0040, "proms", 0 ) ROM_LOAD( "82s123n.a8", 0x0000, 0x0020, CRC(6a0006ac) SHA1(72265bc472fb7610af190130560ef507244ce41c) ) /* palette */ ROM_LOAD( "82s123n.j10", 0x0020, 0x0020, CRC(27b004e3) SHA1(4b9960b99130281a3b07f44816001e5eabf7a6fc) ) /* RAS/CAS logic - not used */ ROM_END ROM_START( wtennis ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "tx", 0xc000, 0x0800, CRC(fd343474) SHA1(1e1fd3f20ce1c7533767344f924029c8c62139a1) ) ROM_LOAD( "t4", 0xd000, 0x1000, CRC(e465d82c) SHA1(c357dcf17539150425574985afa559db2e6ab834) ) ROM_LOAD( "t3", 0xe000, 0x1000, CRC(8f090eab) SHA1(baeef8ee05010bf44cf8865a22911f3d458df1b0) ) ROM_LOAD( "t2", 0xf000, 0x1000, CRC(d2f9dd30) SHA1(1faa088806e8627b5e561d8b99054d295045dcfb) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "t1", 0xe000, 0x1000, CRC(40737ea7) SHA1(27e8474028385574035d3982f9c576bb9bb3facd) ) /* starts at 0000, not f000; 0000-01ff is RAM */ ROM_REGION( 0x6000, "gfx1", 0 ) ROM_LOAD( "t7", 0x0000, 0x1000, CRC(aa935169) SHA1(965f41a9fcf35ac7c899e79acd0a85ab588d5831) ) ROM_LOAD( "t10", 0x1000, 0x1000, CRC(746be927) SHA1(a3361384437ac7c494fde92953c5aa5e3c104644) ) ROM_LOAD( "t6", 0x2000, 0x1000, CRC(4fb8565d) SHA1(6de865e41dcba45190af0753baebf5ab66e4eeb4) ) ROM_LOAD( "t9", 0x3000, 0x1000, CRC(4893286d) SHA1(f2c330286272b8d334b887bc4dd9608158249fc3) ) ROM_LOAD( "t5", 0x4000, 0x1000, CRC(ea1efa5d) SHA1(dd8ef1991d74778e6844a669e6de649e1130ec79) ) ROM_LOAD( "t8", 0x5000, 0x1000, CRC(542ace7b) SHA1(b1423d39302ad7d98c9223d8b1d6d062b7676dd9) ) ROM_REGION( 0x0040, "proms", 0 ) ROM_LOAD( "mb7051.m5", 0x0000, 0x0020, CRC(f051cb28) SHA1(6aebccd38ba7887caff248c8acddb8e14526f1e7) ) /* palette */ ROM_LOAD( "sb-4c", 0x0020, 0x0020, CRC(a29b4204) SHA1(7f15cae5c4aaa29638fb45029782dafd2b3d1484) ) /* RAS/CAS logic - not used */ ROM_END ROM_START( mmonkey ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "mmonkey.e4", 0xc000, 0x1000, CRC(8d31bf6a) SHA1(77b44d8e2b4db148727e7bfc5162c7e9e9cfc662) ) ROM_LOAD( "mmonkey.d4", 0xd000, 0x1000, CRC(e54f584a) SHA1(a03fef09f6a0bb6802b33b28c45548efb85cda5c) ) ROM_LOAD( "mmonkey.b4", 0xe000, 0x1000, CRC(399a161e) SHA1(0eb3c5031a7d8c7b14019e215b18dac24a9e70dd) ) ROM_LOAD( "mmonkey.a4", 0xf000, 0x1000, CRC(f7d3d1e3) SHA1(ff650a833e5e8975fe5b4a644ce6c35de5e04740) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "mmonkey.h1", 0xe000, 0x1000, CRC(5bcb2e81) SHA1(60fb8fd83c83b278e3aaf96f0b6dbefbc1eef0f7) ) ROM_REGION( 0x6000, "gfx1", 0 ) ROM_LOAD( "mmonkey.l11", 0x0000, 0x1000, CRC(b6aa8566) SHA1(bc90d4cfa9a221477d1989fea532621ce3e76439) ) ROM_LOAD( "mmonkey.m11", 0x1000, 0x1000, CRC(6cc4d0c4) SHA1(f43450e97dd0c6d0a269c06e4c4253d0814590e9) ) ROM_LOAD( "mmonkey.l13", 0x2000, 0x1000, CRC(2a343b7e) SHA1(1dba32a83db933096b9a9fbcfd8e0290aba76483) ) ROM_LOAD( "mmonkey.m13", 0x3000, 0x1000, CRC(0230b50d) SHA1(d62b5d1be35c8bf29483fb616cd7e3949a422e76) ) ROM_LOAD( "mmonkey.l14", 0x4000, 0x1000, CRC(922bb3e1) SHA1(72d2017e80bea7700a3a61a06882839ecffcabe8) ) ROM_LOAD( "mmonkey.m14", 0x5000, 0x1000, CRC(f943e28c) SHA1(6ff536a21f34cbb958f6d0f84791102938966ff3) ) ROM_REGION( 0x0040, "proms", 0 ) ROM_LOAD( "mmi6331.m5", 0x0000, 0x0020, CRC(55e28b32) SHA1(b73f85224738252dc8dbb38a54250dcfe1fc3ae3) ) /* palette */ ROM_LOAD( "sb-4c", 0x0020, 0x0020, CRC(a29b4204) SHA1(7f15cae5c4aaa29638fb45029782dafd2b3d1484) ) /* RAS/CAS logic - not used */ ROM_END ROM_START( brubber ) ROM_REGION( 0x10000, "maincpu", 0 ) /* a000-bfff space for the service ROM */ ROM_LOAD( "brubber.12c", 0xc000, 0x2000, CRC(b5279c70) SHA1(5fb1c50040dc4e9444aed440e2c3cf4c79b72311) ) ROM_LOAD( "brubber.12d", 0xe000, 0x2000, CRC(b2ce51f5) SHA1(5e38ea24bcafef1faba023def96532abd6f97d38) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "bnj6c.bin", 0xe000, 0x1000, CRC(8c02f662) SHA1(1279d564e65fd3ccac25b1f9fbb40d910de2b544) ) ROM_REGION( 0x6000, "gfx1", 0 ) ROM_LOAD( "bnj4e.bin", 0x0000, 0x2000, CRC(b864d082) SHA1(cacf71fa6c0f7121d077381a0ff6222f534295ab) ) ROM_LOAD( "bnj4f.bin", 0x2000, 0x2000, CRC(6c31d77a) SHA1(5e52554f594f569527af4768d244cc40a7b4460a) ) ROM_LOAD( "bnj4h.bin", 0x4000, 0x2000, CRC(5824e6fb) SHA1(e98f0eb476b8f033f5cc70a6e503afc4e651fd45) ) ROM_REGION( 0x2000, "gfx2", 0 ) ROM_LOAD( "bnj10e.bin", 0x0000, 0x1000, CRC(f4e9eb49) SHA1(b356512d2ebd4e2005e76496b434e5ecebadb251) ) ROM_LOAD( "bnj10f.bin", 0x1000, 0x1000, CRC(a9ffacb4) SHA1(49d5f9c0b695f474197fbb761bacc065b6b5808a) ) ROM_END ROM_START( bnj ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "bnj12b.bin", 0xa000, 0x2000, CRC(ba3e3801) SHA1(56284076d938c33c1492a07281b936681eb09808) ) ROM_LOAD( "bnj12c.bin", 0xc000, 0x2000, CRC(fb3a2cdd) SHA1(4a964389cc8035b9264d4cb133eb6d3826e74b95) ) ROM_LOAD( "bnj12d.bin", 0xe000, 0x2000, CRC(b88bc99e) SHA1(08a4ddea4037f9e14d0d9f4262a1746b0a3a140c) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "bnj6c.bin", 0xe000, 0x1000, CRC(8c02f662) SHA1(1279d564e65fd3ccac25b1f9fbb40d910de2b544) ) ROM_REGION( 0x6000, "gfx1", 0 ) ROM_LOAD( "bnj4e.bin", 0x0000, 0x2000, CRC(b864d082) SHA1(cacf71fa6c0f7121d077381a0ff6222f534295ab) ) ROM_LOAD( "bnj4f.bin", 0x2000, 0x2000, CRC(6c31d77a) SHA1(5e52554f594f569527af4768d244cc40a7b4460a) ) ROM_LOAD( "bnj4h.bin", 0x4000, 0x2000, CRC(5824e6fb) SHA1(e98f0eb476b8f033f5cc70a6e503afc4e651fd45) ) ROM_REGION( 0x2000, "gfx2", 0 ) ROM_LOAD( "bnj10e.bin", 0x0000, 0x1000, CRC(f4e9eb49) SHA1(b356512d2ebd4e2005e76496b434e5ecebadb251) ) ROM_LOAD( "bnj10f.bin", 0x1000, 0x1000, CRC(a9ffacb4) SHA1(49d5f9c0b695f474197fbb761bacc065b6b5808a) ) ROM_END ROM_START( caractn ) ROM_REGION( 0x10000, "maincpu", 0 ) /* a000-bfff space for the service ROM */ ROM_LOAD( "c7.12c", 0xc000, 0x2000, CRC(b5279c70) SHA1(5fb1c50040dc4e9444aed440e2c3cf4c79b72311) ) ROM_LOAD( "c6.12d", 0xe000, 0x2000, CRC(1d6957c4) SHA1(bd30f00187e56eef9adcc167dd752a3bb616454c) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "c5.6c", 0xe000, 0x1000, CRC(8c02f662) SHA1(1279d564e65fd3ccac25b1f9fbb40d910de2b544) ) ROM_REGION( 0x6000, "gfx1", 0 ) ROM_LOAD( "c0.4e", 0x0000, 0x2000, CRC(bf3ea732) SHA1(d98970b2dda8c3435506656909e5e3aa70d45652) ) ROM_LOAD( "c1.4f", 0x2000, 0x2000, CRC(9789f639) SHA1(77a4d494698718c052fa1967242a0e4fa263b6ad) ) ROM_LOAD( "c2.4h", 0x4000, 0x2000, CRC(51dcc111) SHA1(9753d682ba2f4fb4d3b14783ac35ad214bf788b5) ) ROM_REGION( 0x2000, "gfx2", 0 ) ROM_LOAD( "c3.10e", 0x0000, 0x1000, CRC(f4e9eb49) SHA1(b356512d2ebd4e2005e76496b434e5ecebadb251) ) ROM_LOAD( "c4.10f", 0x1000, 0x1000, CRC(a9ffacb4) SHA1(49d5f9c0b695f474197fbb761bacc065b6b5808a) ) ROM_REGION( 0x0040, "proms", 0 ) ROM_LOAD( "tbp18s030.11a", 0x0000, 0x020, CRC(318d25b9) SHA1(9a82619c94f5911d01ddf6b85f7e30cdc6f1d0a3) ) /* palette */ ROM_LOAD( "tbp18s030.cpu", 0x0020, 0x020, CRC(6b0c2942) SHA1(7d25acc753923b265792fc78f8fc70175c0e0ec2) ) /* RAS/CAS logic - not used */ ROM_REGION( 0x0140, "plds", 0 ) ROM_LOAD( "pal10l8.10k", 0x0000, 0x002c, CRC(dc72a65f) SHA1(d61c149d4df93a2074debf7c5e46557c6b06d10d) ) ROM_LOAD( "pal16r4a.2d", 0x0030, 0x0104, CRC(fd1f3aa2) SHA1(67f1e74fcfc0e2301204ed58b8c6e35d4866a344) ) ROM_END ROM_START( zoar ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "z15.12b", 0xd000, 0x1000, CRC(1f0cfdb7) SHA1(ce7e871f17c52b6eaf99cfb721e702e4f0e6bb25) ) ROM_LOAD( "z16.13b", 0xe000, 0x1000, CRC(7685999c) SHA1(fabe38d71e797ae0b04b5d3aba228b4c85d96185) ) ROM_LOAD( "z17.15b", 0xf000, 0x1000, CRC(619ea867) SHA1(0a3735384f03a1052d54ab799b5e37038d8ece2a) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "z09.13c", 0xe000, 0x1000, CRC(18d96ff1) SHA1(671d934a451e0b042450ea86d24c3751a39b38f8) ) ROM_REGION( 0x6000, "gfx1", 0 ) ROM_LOAD( "z00.3l", 0x0000, 0x1000, CRC(fd2dcb64) SHA1(1a49a6ec6ffd354d872b1af83d55ec96e8215b2b) ) ROM_LOAD( "z01.5l", 0x1000, 0x1000, CRC(74d3ca48) SHA1(2c75ea246f86a057467deb35ef6a6e72f667dd84) ) ROM_LOAD( "z03.8l", 0x2000, 0x1000, CRC(77b7df14) SHA1(a1cbc214fc849b7e3417b1156d1e4440ab67f631) ) ROM_LOAD( "z04.9l", 0x3000, 0x1000, CRC(9be786de) SHA1(480733a1438dffa4b0fac6f76bf84a0deec5d1fa) ) ROM_LOAD( "z06.12l", 0x4000, 0x1000, CRC(07638c71) SHA1(1a7fc49657ac7ac0033bd60c86663bd615079230) ) ROM_LOAD( "z07.14l", 0x5000, 0x1000, CRC(f4710f25) SHA1(08b4cc4252f83a689cded38d9a5a50f55ee6beee) ) ROM_REGION( 0x1800, "gfx2", 0 ) ROM_LOAD( "z10.1b", 0x0000, 0x0800, CRC(aa8bcab8) SHA1(81f1a9fd754fd6f8030ff6b5aa80c7670be9d02e) ) ROM_LOAD( "z11.3b", 0x0800, 0x0800, CRC(dcdad357) SHA1(d1569e1d38f14f5f457547e24df4f80f726c6157) ) ROM_LOAD( "z12.4b", 0x1000, 0x0800, CRC(ed317e40) SHA1(db70889af5f233ca71acf734abfbdb74b6a393c0) ) ROM_REGION( 0x3000, "gfx3", 0 ) ROM_LOAD( "z02.6l", 0x0000, 0x1000, CRC(d8c3c122) SHA1(841006cc84622e851df462a64696b64bb8cb62a1) ) ROM_LOAD( "z05.14l", 0x1000, 0x1000, CRC(05dc6b09) SHA1(197c720544a090e12980513b441a2b9cf04e212f) ) ROM_LOAD( "z08.15l", 0x2000, 0x1000, CRC(9a148551) SHA1(db92dd7552c6f76a062910f37a3fe3524fdffd38) ) ROM_REGION( 0x1000, "bg_map", 0 ) /* background tilemaps */ ROM_LOAD( "z13.6b", 0x0000, 0x1000, CRC(8fefa960) SHA1(614026aa71703dd3898e470f45730e5c6934b31b) ) ROM_REGION( 0x0060, "proms", 0 ) ROM_LOAD( "z20.1l", 0x0000, 0x0020, CRC(a63f0a07) SHA1(16532d3ac0536ad4b712005fd722ee8c14d02e9b) ) ROM_LOAD( "z21.2l", 0x0020, 0x0020, CRC(5e1e5788) SHA1(56068b209cc7c734bbcbb9858f40faa6474c8095) ) ROM_LOAD( "z19.7b", 0x0040, 0x0020, CRC(03ee3a96) SHA1(4acb4061ef0d8a1fab50207fc81a54bfa4c7455d) ) ROM_END ROM_START( disco ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "disco.w5", 0xa000, 0x1000, CRC(b2c87b78) SHA1(4095f0052ff0ac35ecd2ec1c1e99d21283d336e1) ) ROM_LOAD( "disco.w4", 0xb000, 0x1000, CRC(ad7040ee) SHA1(287a4ff06edda4c66e2351e49a94212728aacb4e) ) ROM_LOAD( "disco.w3", 0xc000, 0x1000, CRC(12fb4f08) SHA1(d6095f20d8676df89b1459134b5521ac311ddded) ) ROM_LOAD( "disco.w2", 0xd000, 0x1000, CRC(73f6fb2f) SHA1(7b75b825d9bf7e512e054762500f79c18a276e1f) ) ROM_LOAD( "disco.w1", 0xe000, 0x1000, CRC(ee7b536b) SHA1(b2de5da15cee1d80391eafd0a08361803f859c89) ) ROM_LOAD( "disco.w0", 0xf000, 0x1000, CRC(7c26e76b) SHA1(952e91c4acc18d01b0e2c3efd764da8768f583da) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "disco.w6", 0xf000, 0x1000, CRC(d81e781e) SHA1(bde510bfed06a13bd56bf7ddbf220e7cf82f79b6) ) ROM_REGION( 0x0020, "proms", 0 ) ROM_LOAD( "disco.clr", 0x0000, 0x0020, CRC(a393f913) SHA1(42dce159283427064b3f5ce3a6e2189744ecd943) ) ROM_END ROM_START( discof ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "w5-f", 0xa000, 0x1000, CRC(9d53c71c) SHA1(53c410cfa4fbbfd08e1c3cf7aeba1c9627171a71) ) ROM_LOAD( "w4-f", 0xb000, 0x1000, CRC(c1f8d747) SHA1(33f5fe73d1851ef4da670075d1aec1550e0417ce) ) ROM_LOAD( "w3-f", 0xc000, 0x1000, CRC(9aadd252) SHA1(c6da7ef46333d525e676c59f03ccc908108b41ba) ) ROM_LOAD( "w2-f", 0xd000, 0x1000, CRC(f131a5bb) SHA1(84b7dea112dce12e5cb235a13f6dc4edcfb18c06) ) ROM_LOAD( "w1-f", 0xe000, 0x1000, CRC(c8ec57c5) SHA1(904a9ed0a7f1230c611bf473b9bc52e63eb56dbe) ) ROM_LOAD( "w0-f", 0xf000, 0x1000, CRC(b3787a92) SHA1(7f40621dc739c1108a5df43142ab04709a380219) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "disco.w6", 0xf000, 0x1000, CRC(d81e781e) SHA1(bde510bfed06a13bd56bf7ddbf220e7cf82f79b6) ) ROM_REGION( 0x0020, "proms", 0 ) ROM_LOAD( "disco.clr", 0x0000, 0x0020, CRC(a393f913) SHA1(42dce159283427064b3f5ce3a6e2189744ecd943) ) ROM_END ROM_START( sdtennis ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "ao_08.12b", 0xa000, 0x2000, CRC(6193724c) SHA1(97239c5aa8c8cd1812fba1b15be4d9a48eb0651a) ) ROM_LOAD( "ao_07.12c", 0xc000, 0x2000, CRC(064888db) SHA1(f7bb728ab3408bb553191d9e131a441db1b39666) ) ROM_LOAD( "ao_06.12d", 0xe000, 0x2000, CRC(413c984c) SHA1(1431df4db52d621ba39fd47dbd49da103b5c0bcf) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "ao_05.6c", 0xe000, 0x1000, CRC(46833e38) SHA1(420831149a566199d6a3c74ef3df0687b4ddcbe4) ) ROM_REGION( 0x6000, "gfx1", 0 ) ROM_LOAD( "ao_00.4e", 0x0000, 0x2000, CRC(f4e0cbd6) SHA1(a2ede0ce4a26957a5d3b62872a42b8979f5000aa) ) ROM_LOAD( "ao_01.4f", 0x2000, 0x2000, CRC(f99029da) SHA1(45bc56ff6284d02371d5e1cd5239be665f9e56c7) ) ROM_LOAD( "ao_02.4h", 0x4000, 0x2000, CRC(c3077555) SHA1(addfc67735dc22dfed9c4c4ec8d9dcf590c76737) ) ROM_REGION( 0x2000, "gfx2", 0 ) ROM_LOAD( "ao_03.10e", 0x0000, 0x1000, CRC(1977db9b) SHA1(d175974967fdeb608df668089fa2a14b2d1609e6) ) ROM_LOAD( "ao_04.10f", 0x1000, 0x1000, CRC(921952af) SHA1(4e9248f3493a5f4651278f27c11f507571242317) ) ROM_END static void decrypt_C10707_cpu(running_machine &machine, const char *cputag) { address_space *space = machine.device(cputag)->memory().space(AS_PROGRAM); UINT8 *decrypt = auto_alloc_array(machine, UINT8, 0x10000); UINT8 *rom = machine.region(cputag)->base(); offs_t addr; space->set_decrypted_region(0x0000, 0xffff, decrypt); /* Swap bits 5 & 6 for opcodes */ for (addr = 0; addr < 0x10000; addr++) decrypt[addr] = swap_bits_5_6(rom[addr]); if (&space->device() == machine.device("maincpu")) decrypted = decrypt; } static READ8_HANDLER( wtennis_reset_hack_r ) { UINT8 *RAM = space->machine().region("maincpu")->base(); /* Otherwise the game goes into test mode and there is no way out that I can see. I'm not sure how it can work, it probably somehow has to do with the tape system */ RAM[0xfc30] = 0; return RAM[0xc15f]; } static void init_rom1(running_machine &machine) { address_space *space = machine.device("maincpu")->memory().space(AS_PROGRAM); UINT8 *rom = machine.region("maincpu")->base(); decrypted = auto_alloc_array(machine, UINT8, 0x10000); space->set_decrypted_region(0x0000, 0xffff, decrypted); /* For now, just copy the RAM array over to ROM. Decryption will happen */ /* at run time, since the CPU applies the decryption only if the previous */ /* instruction did a memory write. */ memcpy(decrypted,rom,0x10000); } static DRIVER_INIT( btime ) { btime_state *state = machine.driver_data(); init_rom1(machine); state->m_audio_nmi_enable_type = AUDIO_ENABLE_DIRECT; } static DRIVER_INIT( zoar ) { btime_state *state = machine.driver_data(); UINT8 *rom = machine.region("maincpu")->base(); /* At location 0xD50A is what looks like an undocumented opcode. I tried implementing it given what opcode 0x23 should do, but it still didn't work in demo mode. So this could be another protection or a bad ROM read. I'm NOPing it out for now. */ memset(&rom[0xd50a],0xea,8); init_rom1(machine); state->m_audio_nmi_enable_type = AUDIO_ENABLE_AY8910; } static DRIVER_INIT( tisland ) { btime_state *state = machine.driver_data(); UINT8 *rom = machine.region("maincpu")->base(); /* At location 0xa2b6 there's a strange RLA followed by a BPL that reads from an unmapped area that causes the game to fail in several circumstances.On the Cassette version the RLA (33) is in reality a BIT (24),so I'm guessing that there's something wrong going on in the encryption scheme.*/ memset(&rom[0xa2b6],0x24,1); init_rom1(machine); state->m_audio_nmi_enable_type = AUDIO_ENABLE_DIRECT; } static DRIVER_INIT( lnc ) { btime_state *state = machine.driver_data(); decrypt_C10707_cpu(machine, "maincpu"); state->m_audio_nmi_enable_type = AUDIO_ENABLE_AY8910; } static DRIVER_INIT( bnj ) { btime_state *state = machine.driver_data(); decrypt_C10707_cpu(machine, "maincpu"); state->m_audio_nmi_enable_type = AUDIO_ENABLE_DIRECT; } static DRIVER_INIT( disco ) { btime_state *state = machine.driver_data(); DRIVER_INIT_CALL(btime); state->m_audio_nmi_enable_type = AUDIO_ENABLE_AY8910; } static DRIVER_INIT( cookrace ) { btime_state *state = machine.driver_data(); decrypt_C10707_cpu(machine, "maincpu"); machine.device("audiocpu")->memory().space(AS_PROGRAM)->install_read_bank(0x0200, 0x0fff, "bank10"); memory_set_bankptr(machine, "bank10", machine.region("audiocpu")->base() + 0xe200); state->m_audio_nmi_enable_type = AUDIO_ENABLE_DIRECT; } static DRIVER_INIT( protennb ) { btime_state *state = machine.driver_data(); DRIVER_INIT_CALL(btime); state->m_audio_nmi_enable_type = AUDIO_ENABLE_AY8910; } static DRIVER_INIT( wtennis ) { btime_state *state = machine.driver_data(); decrypt_C10707_cpu(machine, "maincpu"); machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0xc15f, 0xc15f, FUNC(wtennis_reset_hack_r)); machine.device("audiocpu")->memory().space(AS_PROGRAM)->install_read_bank(0x0200, 0x0fff, "bank10"); memory_set_bankptr(machine, "bank10", machine.region("audiocpu")->base() + 0xe200); state->m_audio_nmi_enable_type = AUDIO_ENABLE_AY8910; } static DRIVER_INIT( sdtennis ) { btime_state *state = machine.driver_data(); decrypt_C10707_cpu(machine, "maincpu"); decrypt_C10707_cpu(machine, "audiocpu"); state->m_audio_nmi_enable_type = AUDIO_ENABLE_DIRECT; } GAME( 1982, btime, 0, btime, btime, btime, ROT270, "Data East Corporation", "Burger Time (Data East set 1)", GAME_SUPPORTS_SAVE ) GAME( 1982, btime2, btime, btime, btime, btime, ROT270, "Data East Corporation", "Burger Time (Data East set 2)", GAME_SUPPORTS_SAVE ) GAME( 1982, btimem, btime, btime, btime, btime, ROT270, "Data East (Bally Midway license)", "Burger Time (Midway)", GAME_SUPPORTS_SAVE ) GAME( 1982, cookrace, btime, cookrace, cookrace, cookrace, ROT270, "bootleg", "Cook Race", GAME_SUPPORTS_SAVE ) GAME( 1981, tisland, 0, tisland, btime, tisland, ROT270, "Data East Corporation", "Treasure Island", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) GAME( 1981, lnc, 0, lnc, lnc, lnc, ROT270, "Data East Corporation", "Lock'n'Chase", GAME_SUPPORTS_SAVE ) GAME( 1982, protennb, 0, disco, disco, protennb, ROT270, "bootleg", "Tennis (bootleg of Pro Tennis)", GAME_SUPPORTS_SAVE ) GAME( 1982, wtennis, 0, wtennis, wtennis, wtennis, ROT270, "bootleg", "World Tennis", GAME_SUPPORTS_SAVE ) GAME( 1982, mmonkey, 0, mmonkey, mmonkey, lnc, ROT270, "Technos Japan / Roller Tron", "Minky Monkey", GAME_SUPPORTS_SAVE ) GAME( 1982, brubber, 0, bnj, bnj, bnj, ROT270, "Data East", "Burnin' Rubber", GAME_SUPPORTS_SAVE ) GAME( 1982, bnj, brubber, bnj, bnj, bnj, ROT270, "Data East USA (Bally Midway license)", "Bump 'n' Jump", GAME_SUPPORTS_SAVE ) GAME( 1982, caractn, brubber, bnj, bnj, bnj, ROT270, "bootleg", "Car Action", GAME_SUPPORTS_SAVE ) GAME( 1982, zoar, 0, zoar, zoar, zoar, ROT270, "Data East USA", "Zoar", GAME_SUPPORTS_SAVE ) GAME( 1982, disco, 0, disco, disco, disco, ROT270, "Data East", "Disco No.1", GAME_SUPPORTS_SAVE ) GAME( 1982, discof, disco, disco, disco, disco, ROT270, "Data East", "Disco No.1 (Rev.F)", GAME_SUPPORTS_SAVE ) GAME( 1983, sdtennis, 0, sdtennis, sdtennis, sdtennis, ROT270, "Data East Corporation", "Super Doubles Tennis", GAME_SUPPORTS_SAVE )