/*************************************************************************** -= IGS011 (Blitter) Based Hardware =- driver by Luca Elia (l.elia@tin.it) code decrypted by Olivier Galibert CPU : 68000 Sound : M6295 + Optional FM or ICS2115 Custom : IGS011 (blitter, protection) IGS012 (protection, optional) IGS003 (8255, protection) NVRAM : Battery for main RAM --------------------------------------------------------------------------- Year + Game PCB Sound Chips --------------------------------------------------------------------------- 95 Da Ban Cheng NO-T0084-1 M6295 IGS011 8255 95 Long Hu Bang V033C NO-T0093 M6295 IGS011 8255 95 Long Hu Bang V035C ? 95 Mj Ryukobou NO-T0094 M6295 IGS011 8255 95 Dragon World V010C NO-0105-4 M6295 YM3812 IGS011 IGS003 95 Dragon World V011H ? 95 Dragon World V020J ? M6295 YM3812 IGS011 IGS003 IGS012 95 Dragon World V021J ? 95 Dragon World V021O NO-0105-1 M6295 YM3812 IGS011 IGS003 IGS012 95 Dragon World V030O NO-0105-1 M6295 YM3812 IGS011 IGS003 97 Dragon World V040O NO-0105-5 M6295 YM3812 IGS011 IGS003c 96 Virtua Bowling V101XCM NO-0101-1 ICS2115 IGS011 IGS003e IGS012 96 Virtua Bowling V100JCM NO-0101-? ICS2115 IGS011 IGS003e IGS012 96 Long Hu Bang II V185H NO-0115 M6295 YM2413 IGS011 8255 96 Wan Li Chang Cheng ? 96 Xing Yen Man Guan ? 98 Mj Nenrikishu SP NO-0115-5 M6295 YM2413 IGS011 8255 --------------------------------------------------------------------------- To do: - Implement the I/O part of IGS003 as an 8255 - IGS003 parametric bitswap protection in lhb2, vbowl (instead of patching the roms) - Interrupt controller at 838000 or a38000 (there's a preliminary implementation for lhb) - A few graphical bugs - vbowl, vbowlj: trackball support. Wrong colors in "Game Over" screen. - lhb: in the copyright screen the '5' in '1995' is drawn by the cpu on layer 5, but with wrong colors (since the top nibble of the affected pixels is left to 0xf) (drgnwrld is like this too, maybe hacked, or a cheap year replacement by IGS) - dbc: in the title screen the '5' in '1995' is drawn by the cpu with wrong colors. (see above comment) Also the background palette is wrong since the fade routine is called with wrong parameters, but in this case the PCB does the same. Notes: - In most games, keep test button pressed during boot for another test mode ***************************************************************************/ #include "emu.h" #include "deprecat.h" #include "cpu/m68000/m68000.h" #include "sound/okim6295.h" #include "sound/2413intf.h" #include "sound/3812intf.h" #include "sound/ics2115.h" #include "machine/nvram.h" struct blitter_t { UINT16 x, y, w, h, gfx_lo, gfx_hi, depth, pen, flags; }; class igs011_state : public driver_device { public: igs011_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) { } UINT8 *m_layer[8]; UINT16 m_priority; UINT16 *m_priority_ram; UINT8 m_lhb2_pen_hi; UINT16 m_igs_dips_sel; UINT16 m_igs_input_sel; UINT16 m_igs_hopper; UINT8 m_prot1; UINT8 m_prot1_swap; UINT32 m_prot1_addr; UINT8 m_prot2; UINT8 m_igs012_prot; UINT8 m_igs012_prot_swap; UINT8 m_igs012_prot_mode; UINT16 m_igs003_reg[2]; UINT16 m_lhb_irq_enable; UINT16 *m_vbowl_trackball; blitter_t m_blitter; }; #define LOG_BLITTER 0 /*************************************************************************** Video There are 8 non scrolling layers as big as the screen (512 x 256). Each layer has 256 colors and its own palette. There are 8 priority codes with RAM associated to each (8 x 256 values). For each screen position, to determine which pixel to display, the video chip associates a bit to the opacity of that pixel for each layer (1 = transparent) to form an address into the selected priority RAM. The value at that address (0-7) is the topmost layer. ***************************************************************************/ static WRITE16_HANDLER( igs011_priority_w ) { igs011_state *state = space->machine().driver_data(); COMBINE_DATA(&state->m_priority); // logerror("%06x: priority = %02x\n", cpu_get_pc(&space->device()), state->m_priority); if (data & ~0x7) logerror("%06x: warning, unknown bits written to priority = %02x\n", cpu_get_pc(&space->device()), state->m_priority); } static VIDEO_START( igs011 ) { igs011_state *state = machine.driver_data(); int i; for (i = 0; i < 8; i++) { state->m_layer[i] = auto_alloc_array(machine, UINT8, 512 * 256); } state->m_lhb2_pen_hi = 0; } static SCREEN_UPDATE( igs011 ) { igs011_state *state = screen->machine().driver_data(); #ifdef MAME_DEBUG int layer_enable = -1; #endif int x,y,l,scr_addr,pri_addr; UINT16 *pri_ram; #ifdef MAME_DEBUG if (screen->machine().input().code_pressed(KEYCODE_Z)) { int mask = 0; if (screen->machine().input().code_pressed(KEYCODE_Q)) mask |= 0x01; if (screen->machine().input().code_pressed(KEYCODE_W)) mask |= 0x02; if (screen->machine().input().code_pressed(KEYCODE_E)) mask |= 0x04; if (screen->machine().input().code_pressed(KEYCODE_R)) mask |= 0x08; if (screen->machine().input().code_pressed(KEYCODE_A)) mask |= 0x10; if (screen->machine().input().code_pressed(KEYCODE_S)) mask |= 0x20; if (screen->machine().input().code_pressed(KEYCODE_D)) mask |= 0x40; if (screen->machine().input().code_pressed(KEYCODE_F)) mask |= 0x80; if (mask) layer_enable &= mask; } #endif pri_ram = &state->m_priority_ram[(state->m_priority & 7) * 512/2]; for (y = cliprect->min_y; y <= cliprect->max_y; y++) { for (x = cliprect->min_x; x <= cliprect->max_x; x++) { scr_addr = x + y * 512; pri_addr = 0xff; for (l = 0; l < 8; l++) { if ( (state->m_layer[l][scr_addr] != 0xff) #ifdef MAME_DEBUG && (layer_enable & (1 << l)) #endif ) pri_addr &= ~(1 << l); } l = pri_ram[pri_addr] & 7; #ifdef MAME_DEBUG if ((layer_enable != -1) && (pri_addr == 0xff)) *BITMAP_ADDR16(bitmap, y, x) = get_black_pen(screen->machine()); else #endif *BITMAP_ADDR16(bitmap, y, x) = state->m_layer[l][scr_addr] | (l << 8); } } return 0; } /*************************************************************************** In addition to the blitter, the CPU can also read from and write to the framebuffers for the 8 layers, seen as 0x100000 bytes in memory. The first half contains layers 0-3. Layers 4-7 are in the other half. The layers are interleaved: - bytes 0x00000-0x00003 contain the 1st pixel of layer 0,1,2,3 - bytes 0x00004-0x00007 contain the 2nd pixel of layer 0,1,2,3 ... - bytes 0x80000-0x80003 contain the 1st pixel of layer 4,5,6,7 - bytes 0x80004-0x80007 contain the 2nd pixel of layer 4,5,6,7 and so on. ***************************************************************************/ static READ16_HANDLER( igs011_layers_r ) { igs011_state *state = space->machine().driver_data(); int layer0 = ((offset & (0x80000/2)) ? 4 : 0) + ((offset & 1) ? 0 : 2); UINT8 *l0 = state->m_layer[layer0]; UINT8 *l1 = state->m_layer[layer0+1]; offset >>= 1; offset &= 0x1ffff; return (l0[offset] << 8) | l1[offset]; } static WRITE16_HANDLER( igs011_layers_w ) { igs011_state *state = space->machine().driver_data(); UINT16 word; int layer0 = ((offset & (0x80000/2)) ? 4 : 0) + ((offset & 1) ? 0 : 2); UINT8 *l0 = state->m_layer[layer0]; UINT8 *l1 = state->m_layer[layer0+1]; offset >>= 1; offset &= 0x1ffff; word = (l0[offset] << 8) | l1[offset]; COMBINE_DATA(&word); l0[offset] = word >> 8; l1[offset] = word; } /*************************************************************************** Palette (r5g5b5) offset + 0x000: xRRRRRGG offset + 0x800: GGGBBBBB ***************************************************************************/ static WRITE16_HANDLER( igs011_palette ) { int rgb; COMBINE_DATA(&space->machine().generic.paletteram.u16[offset]); rgb = (space->machine().generic.paletteram.u16[offset & 0x7ff] & 0xff) | ((space->machine().generic.paletteram.u16[offset | 0x800] & 0xff) << 8); palette_set_color_rgb(space->machine(),offset & 0x7ff,pal5bit(rgb >> 0),pal5bit(rgb >> 5),pal5bit(rgb >> 10)); } /*************************************************************************** Blitter ***************************************************************************/ static WRITE16_HANDLER( igs011_blit_x_w ) { igs011_state *state = space->machine().driver_data(); struct blitter_t &blitter = state->m_blitter; COMBINE_DATA(&blitter.x); } static WRITE16_HANDLER( igs011_blit_y_w ) { igs011_state *state = space->machine().driver_data(); struct blitter_t &blitter = state->m_blitter; COMBINE_DATA(&blitter.y); } static WRITE16_HANDLER( igs011_blit_gfx_lo_w ) { igs011_state *state = space->machine().driver_data(); struct blitter_t &blitter = state->m_blitter; COMBINE_DATA(&blitter.gfx_lo); } static WRITE16_HANDLER( igs011_blit_gfx_hi_w ) { igs011_state *state = space->machine().driver_data(); struct blitter_t &blitter = state->m_blitter; COMBINE_DATA(&blitter.gfx_hi); } static WRITE16_HANDLER( igs011_blit_w_w ) { igs011_state *state = space->machine().driver_data(); struct blitter_t &blitter = state->m_blitter; COMBINE_DATA(&blitter.w); } static WRITE16_HANDLER( igs011_blit_h_w ) { igs011_state *state = space->machine().driver_data(); struct blitter_t &blitter = state->m_blitter; COMBINE_DATA(&blitter.h); } static WRITE16_HANDLER( igs011_blit_depth_w ) { igs011_state *state = space->machine().driver_data(); struct blitter_t &blitter = state->m_blitter; COMBINE_DATA(&blitter.depth); } static WRITE16_HANDLER( igs011_blit_pen_w ) { igs011_state *state = space->machine().driver_data(); struct blitter_t &blitter = state->m_blitter; COMBINE_DATA(&blitter.pen); } static WRITE16_HANDLER( igs011_blit_flags_w ) { igs011_state *state = space->machine().driver_data(); struct blitter_t &blitter = state->m_blitter; int x, xstart, xend, xinc, flipx; int y, ystart, yend, yinc, flipy; int depth4, clear, opaque, z; UINT8 trans_pen, clear_pen, pen_hi, *dest; UINT8 pen = 0; UINT8 *gfx = space->machine().region("blitter")->base(); UINT8 *gfx2 = space->machine().region("blitter_hi")->base(); int gfx_size = space->machine().region("blitter")->bytes(); int gfx2_size = space->machine().region("blitter_hi")->bytes(); const rectangle &clip = space->machine().primary_screen->visible_area(); COMBINE_DATA(&blitter.flags); #if LOG_BLITTER logerror("%06x: blit x %03x, y %03x, w %03x, h %03x, gfx %03x%04x, depth %02x, pen %02x, flags %03x\n", cpu_get_pc(&space->device()), blitter.x,blitter.y,blitter.w,blitter.h,blitter.gfx_hi,blitter.gfx_lo,blitter.depth,blitter.pen,blitter.flags); #endif dest = state->m_layer[ blitter.flags & 0x0007 ]; opaque = !(blitter.flags & 0x0008); clear = blitter.flags & 0x0010; flipx = blitter.flags & 0x0020; flipy = blitter.flags & 0x0040; if (!(blitter.flags & 0x0400)) return; pen_hi = (state->m_lhb2_pen_hi & 0x07) << 5; // pixel address z = blitter.gfx_lo + (blitter.gfx_hi << 16); // what were they smoking??? depth4 = !((blitter.flags & 0x7) < (4 - (blitter.depth & 0x7))) || (z & 0x800000); // see lhb2 z &= 0x7fffff; if (depth4) { z *= 2; if (gfx2 && (blitter.gfx_hi & 0x80)) trans_pen = 0x1f; // lhb2 else trans_pen = 0x0f; clear_pen = blitter.pen | 0xf0; } else { if (gfx2) trans_pen = 0x1f; // vbowl else trans_pen = 0xff; clear_pen = blitter.pen; } xstart = (blitter.x & 0x1ff) - (blitter.x & 0x200); ystart = (blitter.y & 0x0ff) - (blitter.y & 0x100); if (flipx) { xend = xstart - (blitter.w & 0x1ff) - 1; xinc = -1; } else { xend = xstart + (blitter.w & 0x1ff) + 1; xinc = 1; } if (flipy) { yend = ystart - (blitter.h & 0x0ff) - 1; yinc = -1; } else { yend = ystart + (blitter.h & 0x0ff) + 1; yinc = 1; } for (y = ystart; y != yend; y += yinc) { for (x = xstart; x != xend; x += xinc) { // fetch the pixel if (!clear) { if (depth4) pen = (gfx[(z/2)%gfx_size] >> ((z&1)?4:0)) & 0x0f; else pen = gfx[z%gfx_size]; if ( gfx2 ) { pen &= 0x0f; if ( gfx2[(z/8)%gfx2_size] & (1 << (z & 7)) ) pen |= 0x10; } } // plot it if (x >= clip.min_x && x <= clip.max_x && y >= clip.min_y && y <= clip.max_y) { if (clear) dest[x + y * 512] = clear_pen; else if (pen != trans_pen) dest[x + y * 512] = pen | pen_hi; else if (opaque) dest[x + y * 512] = 0xff; } z++; } } #ifdef MAME_DEBUG #if 1 if (space->machine().input().code_pressed(KEYCODE_Z)) { char buf[20]; sprintf(buf, "%02X%02X",blitter.depth,blitter.flags&0xff); // ui_draw_text(buf, blitter.x, blitter.y); // crashes mame! } #endif #endif } /*************************************************************************** Common functions ***************************************************************************/ // Inputs static CUSTOM_INPUT( igs_hopper_r ) { igs011_state *state = field.machine().driver_data(); return (state->m_igs_hopper && ((field.machine().primary_screen->frame_number()/5)&1)) ? 0x0000 : 0x0001; } static WRITE16_HANDLER( igs_dips_w ) { igs011_state *state = space->machine().driver_data(); COMBINE_DATA(&state->m_igs_dips_sel); } INLINE UINT16 igs_dips_r(address_space *space, int NUM) { igs011_state *state = space->machine().driver_data(); int i; UINT16 ret=0; static const char *const dipnames[] = { "DSW1", "DSW2", "DSW3", "DSW4", "DSW5" }; for (i = 0; i < NUM; i++) if ((~state->m_igs_dips_sel) & (1 << i) ) ret = input_port_read(space->machine(), dipnames[i]); /* 0x0100 is blitter busy */ return (ret & 0xff) | 0x0000; } // Games have 3 to 5 dips static READ16_HANDLER( igs_3_dips_r ) { return igs_dips_r(space, 3); } static READ16_HANDLER( igs_4_dips_r ) { return igs_dips_r(space, 4); } static READ16_HANDLER( igs_5_dips_r ) { return igs_dips_r(space, 5); } /*************************************************************************** Code Decryption ***************************************************************************/ static void wlcc_decrypt(running_machine &machine) { int i; UINT16 *src = (UINT16 *) (machine.region("maincpu")->base()); int rom_size = 0x80000; for (i=0; ibase()); int rom_size = 0x80000; for (i=0; ibase()); int rom_size = 0x80000; for (i=0; ibase()); int rom_size = 0x80000; for (i=0; ibase()); int rom_size = 0x80000; for (i=0; ibase()); UINT16 *result_data = auto_alloc_array(machine, UINT16, rom_size/2); for (i=0; ibase()); UINT16 *result_data = auto_alloc_array(machine, UINT16, rom_size/2); for (i=0; ibase()); int rom_size = 0x80000; for(i=0; ibase()); int rom_size = 0x80000; for (i=0; ibase(); int rom_size = 0x80000; for (i=0; ibase()); UINT8 *result_data = auto_alloc_array(machine, UINT8, rom_size); for (i=0; ibase()); UINT8 *result_data = auto_alloc_array(machine, UINT8, rom_size); for (i=0; imachine().driver_data(); offset *= 2; switch (offset) { case 0: // COPY if (ACCESSING_BITS_8_15 && (data & 0xff00) == 0x3300) { state->m_prot1 = state->m_prot1_swap; return; } break; case 2: // INC if (ACCESSING_BITS_8_15 && (data & 0xff00) == 0xff00) { state->m_prot1++; return; } break; case 4: // DEC if (ACCESSING_BITS_8_15 && (data & 0xff00) == 0xaa00) { state->m_prot1--; return; } break; case 6: // SWAP if (ACCESSING_BITS_8_15 && (data & 0xff00) == 0x5500) { // b1 . (b2|b3) . b2 . (b0&b3) UINT8 x = state->m_prot1; state->m_prot1_swap = (BIT(x,1)<<3) | ((BIT(x,2)|BIT(x,3))<<2) | (BIT(x,2)<<1) | (BIT(x,0)&BIT(x,3)); return; } break; } logerror("%s: warning, unknown igs011_prot1_w( %04x, %04x )\n", space->machine().describe_context(), offset, data); } static READ16_HANDLER( igs011_prot1_r ) { igs011_state *state = space->machine().driver_data(); // !(b1&b2) . 0 . 0 . (b0^b3) . 0 . 0 UINT8 x = state->m_prot1; return (((BIT(x,1)&BIT(x,2))^1)<<5) | ((BIT(x,0)^BIT(x,3))<<2); } static WRITE16_HANDLER( igs011_prot_addr_w ) { igs011_state *state = space->machine().driver_data(); state->m_prot1 = 0x00; state->m_prot1_swap = 0x00; // state->m_prot2 = 0x00; address_space *sp = space->machine().device("maincpu")->memory().space(AS_PROGRAM); UINT8 *rom = space->machine().region("maincpu")->base(); // Plug previous address range with ROM access sp->install_rom(state->m_prot1_addr + 0, state->m_prot1_addr + 9, rom + state->m_prot1_addr); state->m_prot1_addr = (data << 4) ^ 0x8340; // Add protection memory range sp->install_legacy_write_handler(state->m_prot1_addr + 0, state->m_prot1_addr + 7, FUNC(igs011_prot1_w)); sp->install_legacy_read_handler (state->m_prot1_addr + 8, state->m_prot1_addr + 9, FUNC(igs011_prot1_r)); } /* static READ16_HANDLER( igs011_prot_fake_r ) { igs011_state *state = space->machine().driver_data(); switch (offset) { case 0: return state->m_prot1; case 1: return state->m_prot1_swap; case 2: return state->m_prot2; } return 0; } */ // Prot2 // drgnwrld (33) static WRITE16_HANDLER( igs011_prot2_reset_w ) { igs011_state *state = space->machine().driver_data(); state->m_prot2 = 0x00; } // wlcc static READ16_HANDLER( igs011_prot2_reset_r ) { igs011_state *state = space->machine().driver_data(); state->m_prot2 = 0x00; return 0; } // lhb2 (55), lhb/dbc/ryukobou (33) static WRITE16_HANDLER( igs011_prot2_inc_w ) { igs011_state *state = space->machine().driver_data(); // if ( (ACCESSING_BITS_8_15 && (data & 0xff00) == 0x5500) || ((ACCESSING_BITS_0_7 && (data & 0x00ff) == 0x0055)) ) { state->m_prot2++; } // else // logerror("%s: warning, unknown igs011_prot2_inc_w( %04x, %04x )\n", space->machine().describe_context(), offset, data); } // vbowl (33) static WRITE16_HANDLER( igs011_prot2_dec_w ) { igs011_state *state = space->machine().driver_data(); // if ( (ACCESSING_BITS_8_15 && (data & 0xff00) == 0x3300) || ((ACCESSING_BITS_0_7 && (data & 0x00ff) == 0x0033)) ) { state->m_prot2--; } // else // logerror("%s: warning, unknown igs011_prot2_dec_w( %04x, %04x )\n", space->machine().describe_context(), offset, data); } static WRITE16_HANDLER( drgnwrld_igs011_prot2_swap_w ) { igs011_state *state = space->machine().driver_data(); offset *= 2; // if ( (ACCESSING_BITS_8_15 && (data & 0xff00) == 0x3300) || ((ACCESSING_BITS_0_7 && (data & 0x00ff) == 0x0033)) ) { // (b3&b0) . b2 . (b0|b1) . (b2^!b4) . (!b1^b3) UINT8 x = state->m_prot2; state->m_prot2 = ((BIT(x,3)&BIT(x,0))<<4) | (BIT(x,2)<<3) | ((BIT(x,0)|BIT(x,1))<<2) | ((BIT(x,2)^BIT(x,4)^1)<<1) | (BIT(x,1)^1^BIT(x,3)); } // else // logerror("%s: warning, unknown igs011_prot2_swap_w( %04x, %04x )\n", space->machine().describe_context(), offset, data); } // lhb, xymg, lhb2 static WRITE16_HANDLER( lhb_igs011_prot2_swap_w ) { igs011_state *state = space->machine().driver_data(); offset *= 2; // if ( (ACCESSING_BITS_8_15 && (data & 0xff00) == 0x3300) || ((ACCESSING_BITS_0_7 && (data & 0x00ff) == 0x0033)) ) { // (!b0|b1) . b2 . (b0&b1) UINT8 x = state->m_prot2; state->m_prot2 = (((BIT(x,0)^1)|BIT(x,1))<<2) | (BIT(x,2)<<1) | (BIT(x,0)&BIT(x,1)); } // else // logerror("%s: warning, unknown igs011_prot2_swap_w( %04x, %04x )\n", space->machine().describe_context(), offset, data); } // wlcc static WRITE16_HANDLER( wlcc_igs011_prot2_swap_w ) { igs011_state *state = space->machine().driver_data(); offset *= 2; // if ( (ACCESSING_BITS_8_15 && (data & 0xff00) == 0x3300) || ((ACCESSING_BITS_0_7 && (data & 0x00ff) == 0x0033)) ) { // (b3 ^ b2) . (b2 ^ b1) . (b1 ^ b0) . !(b4 ^ b0) . !(b4 ^ b3) UINT8 x = state->m_prot2; state->m_prot2 = ((BIT(x,3)^BIT(x,2))<<4) | ((BIT(x,2)^BIT(x,1))<<3) | ((BIT(x,1)^BIT(x,0))<<2) | ((BIT(x,4)^BIT(x,0)^1)<<1) | (BIT(x,4)^BIT(x,3)^1); } // else // logerror("%s: warning, unknown igs011_prot2_swap_w( %04x, %04x )\n", space->machine().describe_context(), offset, data); } // vbowl static WRITE16_HANDLER( vbowl_igs011_prot2_swap_w ) { igs011_state *state = space->machine().driver_data(); offset *= 2; // if ( (ACCESSING_BITS_8_15 && (data & 0xff00) == 0x3300) || ((ACCESSING_BITS_0_7 && (data & 0x00ff) == 0x0033)) ) { // (b3 ^ b2) . (b2 ^ b1) . (b1 ^ b0) . (b4 ^ b0) . (b4 ^ b3) UINT8 x = state->m_prot2; state->m_prot2 = ((BIT(x,3)^BIT(x,2))<<4) | ((BIT(x,2)^BIT(x,1))<<3) | ((BIT(x,1)^BIT(x,0))<<2) | ((BIT(x,4)^BIT(x,0))<<1) | (BIT(x,4)^BIT(x,3)); } // else // logerror("%s: warning, unknown igs011_prot2_swap_w( %04x, %04x )\n", space->machine().describe_context(), offset, data); } // drgnwrld static READ16_HANDLER( drgnwrldv21_igs011_prot2_r ) { igs011_state *state = space->machine().driver_data(); // b9 = (!b4) | (!b0 & b2) | (!(b3 ^ b1) & !(!(b4 & b0) | b2)) UINT8 x = state->m_prot2; UINT8 b9 = (BIT(x,4)^1) | ((BIT(x,0)^1) & BIT(x,2)) | ( (BIT(x,3)^BIT(x,1)^1) & ((((BIT(x,4)^1) & BIT(x,0)) | BIT(x,2))^1) ); return (b9 << 9); } static READ16_HANDLER( drgnwrldv20j_igs011_prot2_r ) { igs011_state *state = space->machine().driver_data(); // b9 = (!b4 | !b0) | !(b3 | b1) | !(b2 & b0) UINT8 x = state->m_prot2; UINT8 b9 = ((BIT(x,4)^1) | (BIT(x,0)^1)) | ((BIT(x,3) | BIT(x,1))^1) | ((BIT(x,2) & BIT(x,0))^1); return (b9 << 9); } // lhb, xymg static READ16_HANDLER( lhb_igs011_prot2_r ) { igs011_state *state = space->machine().driver_data(); // b9 = !b2 | (b1 & b0) UINT8 x = state->m_prot2; UINT8 b9 = (BIT(x,2)^1) | (BIT(x,1) & BIT(x,0)); return (b9 << 9); } // dbc static READ16_HANDLER( dbc_igs011_prot2_r ) { igs011_state *state = space->machine().driver_data(); // b9 = !b1 | (!b0 & b2) UINT8 x = state->m_prot2; UINT8 b9 = (BIT(x,1)^1) | ((BIT(x,0)^1) & BIT(x,2)); return (b9 << 9); } // ryukobou static READ16_HANDLER( ryukobou_igs011_prot2_r ) { igs011_state *state = space->machine().driver_data(); // b9 = (!b1 | b2) & b0 UINT8 x = state->m_prot2; UINT8 b9 = ((BIT(x,1)^1) | BIT(x,2)) & BIT(x,0); return (b9 << 9); } // lhb2 static READ16_HANDLER( lhb2_igs011_prot2_r ) { igs011_state *state = space->machine().driver_data(); // b3 = !b2 | !b1 | b0 UINT8 x = state->m_prot2; UINT8 b3 = (BIT(x,2)^1) | (BIT(x,1)^1) | BIT(x,0); return (b3 << 3); } // vbowl static READ16_HANDLER( vbowl_igs011_prot2_r ) { igs011_state *state = space->machine().driver_data(); UINT8 x = state->m_prot2; UINT8 b9 = ((BIT(x,4)^1) & (BIT(x,3)^1)) | ((BIT(x,2) & BIT(x,1))^1) | ((BIT(x,4) | BIT(x,0))^1); return (b9 << 9); } /*************************************************************************** IGS012 Protection ("ASIC12 CHECK PORT ERROR") The chip holds an internal value, a buffered value and a mode. These are manipulated by issuing commands, where each command is assigned a specific address range, and is triggered by writing a specific byte value to that range. Possible commands: - INC: increment value - DEC: decrement value - SWAP: write bitswap1(value) to buffer - COPY: copy buffer to value - MODE: toggle mode (toggles address ranges to write/read and byte values to write) - RESET: value = 0, mode = 0 The protection value is read from an additional address range: - READ: read bitswap2(value). Only 2 bits are checked. ***************************************************************************/ static WRITE16_HANDLER( igs012_prot_reset_w ) { igs011_state *state = space->machine().driver_data(); state->m_igs012_prot = 0x00; state->m_igs012_prot_swap = 0x00; state->m_igs012_prot_mode = 0; } /* static READ16_HANDLER( igs012_prot_fake_r ) { igs011_state *state = space->machine().driver_data(); switch (offset) { case 0: return state->m_igs012_prot; case 1: return state->m_igs012_prot_swap; case 2: return state->m_igs012_prot_mode; } return 0; } */ // Macro that checks whether the current mode and data byte written match the arguments #define MODE_AND_DATA(_MODE,_DATA) (state->m_igs012_prot_mode == (_MODE) && ( (ACCESSING_BITS_8_15 && (data & 0xff00) == ((_DATA)<<8)) || (ACCESSING_BITS_0_7 && ((data & 0x00ff) == (_DATA))) ) ) static WRITE16_HANDLER( igs012_prot_mode_w ) { igs011_state *state = space->machine().driver_data(); if ( MODE_AND_DATA(0, 0xcc) || MODE_AND_DATA(1, 0xdd) ) { state->m_igs012_prot_mode = state->m_igs012_prot_mode ^ 1; } else logerror("%s: warning, unknown igs012_prot_mode_w( %04x, %04x ), mode %x\n", space->machine().describe_context(), offset, data, state->m_igs012_prot_mode); } static WRITE16_HANDLER( igs012_prot_inc_w ) { igs011_state *state = space->machine().driver_data(); if ( MODE_AND_DATA(0, 0xff) ) { state->m_igs012_prot = (state->m_igs012_prot + 1) & 0x1f; } else logerror("%s: warning, unknown igs012_prot_inc_w( %04x, %04x ), mode %x\n", space->machine().describe_context(), offset, data, state->m_igs012_prot_mode); } static WRITE16_HANDLER( igs012_prot_dec_inc_w ) { igs011_state *state = space->machine().driver_data(); if ( MODE_AND_DATA(0, 0xaa) ) { state->m_igs012_prot = (state->m_igs012_prot - 1) & 0x1f; } else if ( MODE_AND_DATA(1, 0xfa) ) { state->m_igs012_prot = (state->m_igs012_prot + 1) & 0x1f; } else logerror("%s: warning, unknown igs012_prot_dec_inc_w( %04x, %04x ), mode %x\n", space->machine().describe_context(), offset, data, state->m_igs012_prot_mode); } static WRITE16_HANDLER( igs012_prot_dec_copy_w ) { igs011_state *state = space->machine().driver_data(); if ( MODE_AND_DATA(0, 0x33) ) { state->m_igs012_prot = state->m_igs012_prot_swap; } else if ( MODE_AND_DATA(1, 0x5a) ) { state->m_igs012_prot = (state->m_igs012_prot - 1) & 0x1f; } else logerror("%s: warning, unknown igs012_prot_dec_copy_w( %04x, %04x ), mode %x\n", space->machine().describe_context(), offset, data, state->m_igs012_prot_mode); } static WRITE16_HANDLER( igs012_prot_copy_w ) { igs011_state *state = space->machine().driver_data(); if ( MODE_AND_DATA(1, 0x22) ) { state->m_igs012_prot = state->m_igs012_prot_swap; } else logerror("%s: warning, unknown igs012_prot_copy_w( %04x, %04x ), mode %x\n", space->machine().describe_context(), offset, data, state->m_igs012_prot_mode); } static WRITE16_HANDLER( igs012_prot_swap_w ) { igs011_state *state = space->machine().driver_data(); if ( MODE_AND_DATA(0, 0x55) || MODE_AND_DATA(1, 0xa5) ) { // !(3 | 1)..(2 & 1)..(3 ^ 0)..(!2) UINT8 x = state->m_igs012_prot; state->m_igs012_prot_swap = (((BIT(x,3)|BIT(x,1))^1)<<3) | ((BIT(x,2)&BIT(x,1))<<2) | ((BIT(x,3)^BIT(x,0))<<1) | (BIT(x,2)^1); } else logerror("%s: warning, unknown igs012_prot_swap_w( %04x, %04x ), mode %x\n", space->machine().describe_context(), offset, data, state->m_igs012_prot_mode); } static READ16_HANDLER( igs012_prot_r ) { igs011_state *state = space->machine().driver_data(); // FIXME: mode 0 and mode 1 are mapped to different memory ranges UINT8 x = state->m_igs012_prot; UINT8 b1 = (BIT(x,3) | BIT(x,1))^1; UINT8 b0 = BIT(x,3) ^ BIT(x,0); return (b1 << 1) | (b0 << 0); } /*************************************************************************** IGS003 (8255 I/O + Protection) ***************************************************************************/ static WRITE16_HANDLER( drgnwrld_igs003_w ) { igs011_state *state = space->machine().driver_data(); COMBINE_DATA(&state->m_igs003_reg[offset]); if (offset == 0) return; switch(state->m_igs003_reg[0]) { case 0x00: if (ACCESSING_BITS_0_7) coin_counter_w(space->machine(), 0,data & 2); if (data & ~0x2) logerror("%06x: warning, unknown bits written in coin counter = %02x\n", cpu_get_pc(&space->device()), data); break; // case 0x01: // 0,1,4 written // case 0x03: // case 0x04: // case 0x05: default: // popmessage("igs003 %x <- %04x",state->m_igs003_reg[0],data); logerror("%06x: warning, writing to igs003_reg %02x = %02x\n", cpu_get_pc(&space->device()), state->m_igs003_reg[0], data); } } static READ16_HANDLER( drgnwrld_igs003_r ) { igs011_state *state = space->machine().driver_data(); switch(state->m_igs003_reg[0]) { case 0x00: return input_port_read(space->machine(), "IN0"); case 0x01: return input_port_read(space->machine(), "IN1"); case 0x02: return input_port_read(space->machine(), "IN2"); case 0x20: return 0x49; case 0x21: return 0x47; case 0x22: return 0x53; case 0x24: return 0x41; case 0x25: return 0x41; case 0x26: return 0x7f; case 0x27: return 0x41; case 0x28: return 0x41; case 0x2a: return 0x3e; case 0x2b: return 0x41; case 0x2c: return 0x49; case 0x2d: return 0xf9; case 0x2e: return 0x0a; case 0x30: return 0x26; case 0x31: return 0x49; case 0x32: return 0x49; case 0x33: return 0x49; case 0x34: return 0x32; default: logerror("%06x: warning, reading with igs003_reg = %02x\n", cpu_get_pc(&space->device()), state->m_igs003_reg[0]); } return 0; } static WRITE16_HANDLER( lhb_inputs_w ) { igs011_state *state = space->machine().driver_data(); COMBINE_DATA(&state->m_igs_input_sel); if (ACCESSING_BITS_0_7) { coin_counter_w(space->machine(), 0, data & 0x20 ); // coin out data & 0x40 state->m_igs_hopper = data & 0x80; } if ( state->m_igs_input_sel & (~0xff) ) logerror("%06x: warning, unknown bits written in igs_input_sel = %02x\n", cpu_get_pc(&space->device()), state->m_igs_input_sel); // popmessage("sel2 %02x",state->m_igs_input_sel&~0x1f); } static READ16_HANDLER( lhb_inputs_r ) { igs011_state *state = space->machine().driver_data(); switch(offset) { case 0: return state->m_igs_input_sel; case 1: if (~state->m_igs_input_sel & 0x01) return input_port_read(space->machine(), "KEY0"); if (~state->m_igs_input_sel & 0x02) return input_port_read(space->machine(), "KEY1"); if (~state->m_igs_input_sel & 0x04) return input_port_read(space->machine(), "KEY2"); if (~state->m_igs_input_sel & 0x08) return input_port_read(space->machine(), "KEY3"); if (~state->m_igs_input_sel & 0x10) return input_port_read(space->machine(), "KEY4"); logerror("%06x: warning, reading with igs_input_sel = %02x\n", cpu_get_pc(&space->device()), state->m_igs_input_sel); break; } return 0; } static WRITE16_HANDLER( lhb2_igs003_w ) { igs011_state *state = space->machine().driver_data(); COMBINE_DATA(&state->m_igs003_reg[offset]); if (offset == 0) return; switch(state->m_igs003_reg[0]) { case 0x00: COMBINE_DATA(&state->m_igs_input_sel); if (ACCESSING_BITS_0_7) { coin_counter_w(space->machine(), 0, data & 0x20); // coin out data & 0x40 state->m_igs_hopper = data & 0x80; } if ( state->m_igs_input_sel & ~0x7f ) logerror("%06x: warning, unknown bits written in igs_input_sel = %02x\n", cpu_get_pc(&space->device()), state->m_igs_input_sel); // popmessage("sel2 %02x",state->m_igs_input_sel&~0x1f); break; case 0x02: if (ACCESSING_BITS_0_7) { state->m_lhb2_pen_hi = data & 0x07; okim6295_device *oki = space->machine().device("oki"); oki->set_bank_base((data & 0x08) ? 0x40000 : 0); } if ( state->m_lhb2_pen_hi & ~0xf ) logerror("%06x: warning, unknown bits written in lhb2_pen_hi = %02x\n", cpu_get_pc(&space->device()), state->m_lhb2_pen_hi); // popmessage("oki %02x",state->m_lhb2_pen_hi & 0x08); break; default: logerror("%06x: warning, writing to igs003_reg %02x = %02x\n", cpu_get_pc(&space->device()), state->m_igs003_reg[0], data); } } static READ16_HANDLER( lhb2_igs003_r ) { igs011_state *state = space->machine().driver_data(); switch(state->m_igs003_reg[0]) { case 0x01: if (~state->m_igs_input_sel & 0x01) return input_port_read(space->machine(), "KEY0"); if (~state->m_igs_input_sel & 0x02) return input_port_read(space->machine(), "KEY1"); if (~state->m_igs_input_sel & 0x04) return input_port_read(space->machine(), "KEY2"); if (~state->m_igs_input_sel & 0x08) return input_port_read(space->machine(), "KEY3"); if (~state->m_igs_input_sel & 0x10) return input_port_read(space->machine(), "KEY4"); /* fall through */ default: logerror("%06x: warning, reading with igs003_reg = %02x\n", cpu_get_pc(&space->device()), state->m_igs003_reg[0]); break; // case 0x03: // return 0xff; // parametric bitswaps? // Protection: // 0544FE: 20 21 22 24 25 26 27 28 2A 2B 2C 2D 2E 30 31 32 33 34 // 0544EC: 49 47 53 41 41 7F 41 41 3E 41 49 F9 0A 26 49 49 49 32 case 0x20: return 0x49; case 0x21: return 0x47; case 0x22: return 0x53; case 0x24: return 0x41; case 0x25: return 0x41; case 0x26: return 0x7f; case 0x27: return 0x41; case 0x28: return 0x41; case 0x2a: return 0x3e; case 0x2b: return 0x41; case 0x2c: return 0x49; case 0x2d: return 0xf9; case 0x2e: return 0x0a; case 0x30: return 0x26; case 0x31: return 0x49; case 0x32: return 0x49; case 0x33: return 0x49; case 0x34: return 0x32; } return 0; } static WRITE16_HANDLER( wlcc_igs003_w ) { igs011_state *state = space->machine().driver_data(); COMBINE_DATA(&state->m_igs003_reg[offset]); if (offset == 0) return; switch(state->m_igs003_reg[0]) { case 0x02: if (ACCESSING_BITS_0_7) { coin_counter_w(space->machine(), 0, data & 0x01); // coin out data & 0x02 okim6295_device *oki = space->machine().device("oki"); oki->set_bank_base((data & 0x10) ? 0x40000 : 0); state->m_igs_hopper = data & 0x20; } if (data & ~0x33) logerror("%06x: warning, unknown bits written in coin counter = %02x\n", cpu_get_pc(&space->device()), data); // popmessage("coin %02x",data); break; default: logerror("%06x: warning, writing to igs003_reg %02x = %02x\n", cpu_get_pc(&space->device()), state->m_igs003_reg[0], data); } } static READ16_HANDLER( wlcc_igs003_r ) { igs011_state *state = space->machine().driver_data(); switch(state->m_igs003_reg[0]) { case 0x00: return input_port_read(space->machine(), "IN0"); case 0x20: return 0x49; case 0x21: return 0x47; case 0x22: return 0x53; case 0x24: return 0x41; case 0x25: return 0x41; case 0x26: return 0x7f; case 0x27: return 0x41; case 0x28: return 0x41; case 0x2a: return 0x3e; case 0x2b: return 0x41; case 0x2c: return 0x49; case 0x2d: return 0xf9; case 0x2e: return 0x0a; case 0x30: return 0x26; case 0x31: return 0x49; case 0x32: return 0x49; case 0x33: return 0x49; case 0x34: return 0x32; default: logerror("%06x: warning, reading with igs003_reg = %02x\n", cpu_get_pc(&space->device()), state->m_igs003_reg[0]); } return 0; } static WRITE16_HANDLER( xymg_igs003_w ) { igs011_state *state = space->machine().driver_data(); COMBINE_DATA(&state->m_igs003_reg[offset]); if (offset == 0) return; switch(state->m_igs003_reg[0]) { case 0x01: COMBINE_DATA(&state->m_igs_input_sel); if (ACCESSING_BITS_0_7) { coin_counter_w(space->machine(), 0, data & 0x20); // coin out data & 0x40 state->m_igs_hopper = data & 0x80; } if ( state->m_igs_input_sel & 0x40 ) logerror("%06x: warning, unknown bits written in igs_input_sel = %02x\n", cpu_get_pc(&space->device()), state->m_igs_input_sel); // popmessage("sel2 %02x",state->m_igs_input_sel&~0x1f); break; default: logerror("%06x: warning, writing to igs003_reg %02x = %02x\n", cpu_get_pc(&space->device()), state->m_igs003_reg[0], data); } } static READ16_HANDLER( xymg_igs003_r ) { igs011_state *state = space->machine().driver_data(); switch(state->m_igs003_reg[0]) { case 0x00: return input_port_read(space->machine(), "COIN"); case 0x02: if (~state->m_igs_input_sel & 0x01) return input_port_read(space->machine(), "KEY0"); if (~state->m_igs_input_sel & 0x02) return input_port_read(space->machine(), "KEY1"); if (~state->m_igs_input_sel & 0x04) return input_port_read(space->machine(), "KEY2"); if (~state->m_igs_input_sel & 0x08) return input_port_read(space->machine(), "KEY3"); if (~state->m_igs_input_sel & 0x10) return input_port_read(space->machine(), "KEY4"); /* fall through */ case 0x20: return 0x49; case 0x21: return 0x47; case 0x22: return 0x53; case 0x24: return 0x41; case 0x25: return 0x41; case 0x26: return 0x7f; case 0x27: return 0x41; case 0x28: return 0x41; case 0x2a: return 0x3e; case 0x2b: return 0x41; case 0x2c: return 0x49; case 0x2d: return 0xf9; case 0x2e: return 0x0a; case 0x30: return 0x26; case 0x31: return 0x49; case 0x32: return 0x49; case 0x33: return 0x49; case 0x34: return 0x32; default: logerror("%06x: warning, reading with igs003_reg = %02x\n", cpu_get_pc(&space->device()), state->m_igs003_reg[0]); break; } return 0; } static WRITE16_HANDLER( vbowl_igs003_w ) { igs011_state *state = space->machine().driver_data(); COMBINE_DATA(&state->m_igs003_reg[offset]); if (offset == 0) return; switch(state->m_igs003_reg[0]) { case 0x02: if (ACCESSING_BITS_0_7) { coin_counter_w(space->machine(), 0, data & 1); coin_counter_w(space->machine(), 1, data & 2); } if (data & ~0x3) logerror("%06x: warning, unknown bits written in coin counter = %02x\n", cpu_get_pc(&space->device()), data); break; default: // popmessage("igs003 %x <- %04x",state->m_igs003_reg[0],data); logerror("%06x: warning, writing to igs003_reg %02x = %02x\n", cpu_get_pc(&space->device()), state->m_igs003_reg[0], data); } } static READ16_HANDLER( vbowl_igs003_r ) { igs011_state *state = space->machine().driver_data(); switch(state->m_igs003_reg[0]) { case 0x00: return input_port_read(space->machine(), "IN0"); case 0x01: return input_port_read(space->machine(), "IN1"); // case 0x03: // return 0xff; // parametric bitswaps? case 0x20: return 0x49; case 0x21: return 0x47; case 0x22: return 0x53; case 0x24: return 0x41; case 0x25: return 0x41; case 0x26: return 0x7f; case 0x27: return 0x41; case 0x28: return 0x41; case 0x2a: return 0x3e; case 0x2b: return 0x41; case 0x2c: return 0x49; case 0x2d: return 0xf9; case 0x2e: return 0x0a; case 0x30: return 0x26; case 0x31: return 0x49; case 0x32: return 0x49; case 0x33: return 0x49; case 0x34: return 0x32; default: logerror("%06x: warning, reading with igs003_reg = %02x\n", cpu_get_pc(&space->device()), state->m_igs003_reg[0]); } return 0; } /*************************************************************************** Driver Inits (Decryption, Protection Patches) ***************************************************************************/ // V0400O static DRIVER_INIT( drgnwrld ) { // UINT16 *rom = (UINT16 *) machine.region("maincpu")->base(); drgnwrld_type1_decrypt(machine); drgnwrld_gfx_decrypt(machine); /* // PROTECTION CHECKS rom[0x032ee/2] = 0x606c; // 0032EE: 676C beq 335c (ASIC11 CHECK PORT ERROR 3) rom[0x23d5e/2] = 0x606c; // 023D5E: 676C beq 23dcc (CHECK PORT ERROR 1) rom[0x23fd0/2] = 0x606c; // 023FD0: 676C beq 2403e (CHECK PORT ERROR 2) rom[0x24170/2] = 0x606c; // 024170: 676C beq 241de (CHECK PORT ERROR 3) rom[0x24348/2] = 0x606c; // 024348: 676C beq 243b6 (ASIC11 CHECK PORT ERROR 4) rom[0x2454e/2] = 0x606c; // 02454E: 676C beq 245bc (ASIC11 CHECK PORT ERROR 3) rom[0x246cc/2] = 0x606c; // 0246CC: 676C beq 2473a (ASIC11 CHECK PORT ERROR 2) rom[0x24922/2] = 0x606c; // 024922: 676C beq 24990 (ASIC11 CHECK PORT ERROR 1) rom[0x24b66/2] = 0x606c; // 024B66: 676C beq 24bd4 (ASIC12 CHECK PORT ERROR 4) rom[0x24de2/2] = 0x606c; // 024DE2: 676C beq 24e50 (ASIC12 CHECK PORT ERROR 3) rom[0x2502a/2] = 0x606c; // 02502A: 676C beq 25098 (ASIC12 CHECK PORT ERROR 2) rom[0x25556/2] = 0x6000; // 025556: 6700 E584 beq 23adc (ASIC12 CHECK PORT ERROR 1) rom[0x2a16c/2] = 0x606c; // 02A16C: 676C beq 2a1da (ASIC11 CHECK PORT ERROR 2) */ } static DRIVER_INIT( drgnwrldv30 ) { // UINT16 *rom = (UINT16 *) machine.region("maincpu")->base(); drgnwrld_type1_decrypt(machine); drgnwrld_gfx_decrypt(machine); /* // PROTECTION CHECKS rom[0x032ee/2] = 0x606c; // 0032EE: 676C beq 335c (ASIC11 CHECK PORT ERROR 3) rom[0x23d5e/2] = 0x606c; // 023D5E: 676C beq 23dcc (CHECK PORT ERROR 1) rom[0x23fd0/2] = 0x606c; // 023FD0: 676C beq 2403e (CHECK PORT ERROR 2) rom[0x24170/2] = 0x606c; // 024170: 676C beq 241de (CHECK PORT ERROR 3) rom[0x24348/2] = 0x606c; // 024348: 676C beq 243b6 (ASIC11 CHECK PORT ERROR 4) rom[0x2454e/2] = 0x606c; // 02454E: 676C beq 245bc (ASIC11 CHECK PORT ERROR 3) rom[0x246cc/2] = 0x606c; // 0246CC: 676C beq 2473a (ASIC11 CHECK PORT ERROR 2) rom[0x24922/2] = 0x606c; // 024922: 676C beq 24990 (ASIC11 CHECK PORT ERROR 1) rom[0x24b66/2] = 0x606c; // 024B66: 676C beq 24bd4 (ASIC12 CHECK PORT ERROR 4) rom[0x24de2/2] = 0x606c; // 024DE2: 676C beq 24e50 (ASIC12 CHECK PORT ERROR 3) rom[0x2502a/2] = 0x606c; // 02502A: 676C beq 25098 (ASIC12 CHECK PORT ERROR 2) rom[0x25556/2] = 0x6000; // 025556: 6700 E584 beq 23adc (ASIC12 CHECK PORT ERROR 1) // different from drgnwrld: rom[0x2a162/2] = 0x606c; // 02A162: 676C beq 2a1d0 (ASIC11 CHECK PORT ERROR 2) */ } static DRIVER_INIT( drgnwrldv21 ) { // UINT16 *rom = (UINT16 *) machine.region("maincpu")->base(); drgnwrld_type2_decrypt(machine); drgnwrld_gfx_decrypt(machine); machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0xd4c0, 0xd4ff, FUNC(drgnwrldv21_igs011_prot2_r)); /* // PROTECTION CHECKS // bp 32ee; bp 11ca8; bp 23d5e; bp 23fd0; bp 24170; bp 24348; bp 2454e; bp 246cc; bp 24922; bp 24b66; bp 24de2; bp 2502a; bp 25556; bp 269de; bp 2766a; bp 2a830 rom[0x032ee/2] = 0x606c; // 0032EE: 676C beq 335c (ASIC11 CHECK PORT ERROR 3) rom[0x11ca8/2] = 0x606c; // 011CA8: 676C beq 11d16 (CHECK PORT ERROR 1) rom[0x23d5e/2] = 0x606c; // 023D5E: 676C beq 23dcc (CHECK PORT ERROR 1) rom[0x23fd0/2] = 0x606c; // 023FD0: 676C beq 2403e (CHECK PORT ERROR 2) rom[0x24170/2] = 0x606c; // 024170: 676C beq 241de (CHECK PORT ERROR 3) rom[0x24348/2] = 0x606c; // 024348: 676C beq 243b6 (ASIC11 CHECK PORT ERROR 4) rom[0x2454e/2] = 0x606c; // 02454E: 676C beq 245bc (ASIC11 CHECK PORT ERROR 3) rom[0x246cc/2] = 0x606c; // 0246CC: 676C beq 2473a (ASIC11 CHECK PORT ERROR 2) rom[0x24922/2] = 0x606c; // 024922: 676C beq 24990 (ASIC11 CHECK PORT ERROR 1) rom[0x24b66/2] = 0x606c; // 024B66: 676C beq 24bd4 (ASIC12 CHECK PORT ERROR 4) rom[0x24de2/2] = 0x606c; // 024DE2: 676C beq 24e50 (ASIC12 CHECK PORT ERROR 3) rom[0x2502a/2] = 0x606c; // 02502A: 676C beq 25098 (ASIC12 CHECK PORT ERROR 2) rom[0x25556/2] = 0x6000; // 025556: 6700 E584 beq 23adc (ASIC12 CHECK PORT ERROR 1) rom[0x269de/2] = 0x606c; // 0269DE: 676C beq 26a4c (ASIC12 CHECK PORT ERROR 1) rom[0x2766a/2] = 0x606c; // 02766A: 676C beq 276d8 (CHECK PORT ERROR 3) rom[0x2a830/2] = 0x606c; // 02A830: 676C beq 2a89e (ASIC11 CHECK PORT ERROR 2) */ } static DRIVER_INIT( drgnwrldv21j ) { // UINT16 *rom = (UINT16 *) machine.region("maincpu")->base(); drgnwrld_type3_decrypt(machine); drgnwrld_gfx_decrypt(machine); /* // PROTECTION CHECKS rom[0x033d2/2] = 0x606c; // 0033D2: 676C beq 3440 (ASIC11 CHECK PORT ERROR 3) rom[0x11c74/2] = 0x606c; // 011C74: 676C beq 11ce2 (CHECK PORT ERROR 1) rom[0x23d2a/2] = 0x606c; // 023D2A: 676C beq 23d98 rom[0x23f68/2] = 0x606c; // 023F68: 676C beq 23fd6 rom[0x240d4/2] = 0x606c; // 0240D4: 676C beq 24142 (CHECK PORT ERROR 3) rom[0x242ac/2] = 0x606c; // 0242AC: 676C beq 2431a rom[0x244b2/2] = 0x606c; // 0244B2: 676C beq 24520 rom[0x24630/2] = 0x606c; // 024630: 676C beq 2469e rom[0x24886/2] = 0x606c; // 024886: 676C beq 248f4 rom[0x24aca/2] = 0x606c; // 024ACA: 676C beq 24b38 rom[0x24d46/2] = 0x606c; // 024D46: 676C beq 24db4 rom[0x24f8e/2] = 0x606c; // 024F8E: 676C beq 24ffc rom[0x254ba/2] = 0x6000; // 0254BA: 6700 E620 beq 23adc (ASIC12 CHECK PORT ERROR 1) rom[0x26a52/2] = 0x606c; // 026A52: 676C beq 26ac0 (ASIC12 CHECK PORT ERROR 1) rom[0x276aa/2] = 0x606c; // 0276AA: 676C beq 27718 (CHECK PORT ERROR 3) rom[0x2a870/2] = 0x606c; // 02A870: 676C beq 2a8de (ASIC11 CHECK PORT ERROR 2) */ } static DRIVER_INIT( drgnwrldv20j ) { // UINT16 *rom = (UINT16 *) machine.region("maincpu")->base(); drgnwrld_type3_decrypt(machine); drgnwrld_gfx_decrypt(machine); /* // PROTECTION CHECKS // bp 33d2; bp 11c74; bp 23d2a; bp 23f68; bp 240d4; bp 242ac; bp 244b2; bp 24630; bp 24886; bp 24aca; bp 24d46; bp 24f8e; bp 254ba; bp 26a52; bp 276a0; bp 2a86e rom[0x033d2/2] = 0x606c; // 0033D2: 676C beq 3440 (ASIC11 CHECK PORT ERROR 3) rom[0x11c74/2] = 0x606c; // 011C74: 676C beq 11ce2 (CHECK PORT ERROR 1) rom[0x23d2a/2] = 0x606c; // 023D2A: 676C beq 23d98 rom[0x23f68/2] = 0x606c; // 023F68: 676C beq 23fd6 rom[0x240d4/2] = 0x606c; // 0240D4: 676C beq 24142 (CHECK PORT ERROR 3) rom[0x242ac/2] = 0x606c; // 0242AC: 676C beq 2431a rom[0x244b2/2] = 0x606c; // 0244B2: 676C beq 24520 rom[0x24630/2] = 0x606c; // 024630: 676C beq 2469e rom[0x24886/2] = 0x606c; // 024886: 676C beq 248f4 rom[0x24aca/2] = 0x606c; // 024ACA: 676C beq 24b38 rom[0x24d46/2] = 0x606c; // 024D46: 676C beq 24db4 rom[0x24f8e/2] = 0x606c; // 024F8E: 676C beq 24ffc rom[0x254ba/2] = 0x6000; // 0254BA: 6700 E620 beq 23adc (ASIC12 CHECK PORT ERROR 1) rom[0x26a52/2] = 0x606c; // 026A52: 676C beq 26ac0 (ASIC12 CHECK PORT ERROR 1) // different from drgnwrldv21j: rom[0x276a0/2] = 0x606c; // 0276A0: 676C beq 2770e (CHECK PORT ERROR 3) rom[0x2a86e/2] = 0x606c; // 02A86E: 676C beq 2a8dc (ASIC11 CHECK PORT ERROR 2) */ } static DRIVER_INIT( drgnwrldv11h ) { drgnwrld_type1_decrypt(machine); drgnwrld_gfx_decrypt(machine); // PROTECTION CHECKS // the protection checks are already patched out like we do! } static DRIVER_INIT( drgnwrldv10c ) { // UINT16 *rom = (UINT16 *) machine.region("maincpu")->base(); drgnwrld_type1_decrypt(machine); drgnwrld_gfx_decrypt(machine); /* // PROTECTION CHECKS // bp 33d2; bp 23d0e; bp 23f58; bp 240d0; bp 242a8; bp 244ae; bp 2462c; bp 24882; bp 24ac6; bp 24d42; bp 24f8a; bp 254b6; bp 2a23a rom[0x033d2/2] = 0x606c; // 0033D2: 676C beq 3440 (ASIC11 CHECK PORT ERROR 3) rom[0x23d0e/2] = 0x606c; // 023D0E: 676C beq 23d7c (CHECK PORT ERROR 1) rom[0x23f58/2] = 0x606c; // 023F58: 676C beq 23fc6 (CHECK PORT ERROR 2) rom[0x240d0/2] = 0x606c; // 0240D0: 676C beq 2413e (CHECK PORT ERROR 3) rom[0x242a8/2] = 0x606c; // 0242A8: 676C beq 24316 (ASIC11 CHECK PORT ERROR 4) rom[0x244ae/2] = 0x606c; // 0244AE: 676C beq 2451c (ASIC11 CHECK PORT ERROR 3) rom[0x2462c/2] = 0x606c; // 02462C: 676C beq 2469a (ASIC11 CHECK PORT ERROR 2) rom[0x24882/2] = 0x606c; // 024882: 676C beq 248f0 (ASIC11 CHECK PORT ERROR 1) rom[0x24ac6/2] = 0x606c; // 024AC6: 676C beq 24b34 (ASIC12 CHECK PORT ERROR 4) rom[0x24d42/2] = 0x606c; // 024D42: 676C beq 24db0 (ASIC12 CHECK PORT ERROR 3) rom[0x24f8a/2] = 0x606c; // 024F8A: 676C beq 24ff8 (ASIC12 CHECK PORT ERROR 2) rom[0x254b6/2] = 0x6000; // 0254B6: 6700 E5FC beq 23ab4 (ASIC12 CHECK PORT ERROR 1) rom[0x2a23a/2] = 0x606c; // 02A23A: 676C beq 2a2a8 (ASIC11 CHECK PORT ERROR 2) */ } static DRIVER_INIT( lhb ) { // UINT16 *rom = (UINT16 *) machine.region("maincpu")->base(); lhb_decrypt(machine); // PROTECTION CHECKS // rom[0x2eef6/2] = 0x4e75; // 02EEF6: 4E56 FE00 link A6, #-$200 (fills palette with pink otherwise) } static DRIVER_INIT( lhbv33c ) { // UINT16 *rom = (UINT16 *) machine.region("maincpu")->base(); lhb_decrypt(machine); // PROTECTION CHECKS // rom[0x2e988/2] = 0x4e75; // 02E988: 4E56 FE00 link A6, #-$200 (fills palette with pink otherwise) } static DRIVER_INIT( dbc ) { // UINT16 *rom = (UINT16 *) machine.region("maincpu")->base(); dbc_decrypt(machine); machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x10600, 0x107ff, FUNC(dbc_igs011_prot2_r)); /* // PROTECTION CHECKS rom[0x04c42/2] = 0x602e; // 004C42: 6604 bne 4c48 (rom test error otherwise) rom[0x08694/2] = 0x6008; // 008694: 6408 bcc 869e (fills screen with characters otherwise) rom[0x0a05e/2] = 0x4e71; // 00A05E: 6408 bcc a068 (fills screen with characters otherwise) rom[0x0bec2/2] = 0x6008; // 00BEC2: 6408 bcc becc (fills screen with characters otherwise) rom[0x0c0d4/2] = 0x600a; // 00C0D4: 640A bcc c0e0 (wrong game state otherwise) rom[0x0c0f0/2] = 0x4e71; // 00C0F0: 6408 bcc c0fa (wrong palette otherwise) rom[0x0e292/2] = 0x6008; // 00E292: 6408 bcc e29c (fills screen with characters otherwise) rom[0x11b42/2] = 0x6008; // 011B42: 6408 bcc 11b4c (wrong game state otherwise) rom[0x11b5c/2] = 0x4e71; // 011B5C: 6408 bcc 11b66 (wrong palette otherwise) rom[0x170ae/2] = 0x4e71; // 0170AE: 6408 bcc 170b8 (fills screen with characters otherwise) rom[0x1842a/2] = 0x6024; // 01842A: 6724 beq 18450 (ASIC11 ERROR otherwise) rom[0x18538/2] = 0x6008; // 018538: 6408 bcc 18542 (wrong game state otherwise) rom[0x18552/2] = 0x4e71; // 018552: 6408 bcc 1855c (wrong palette otherwise) rom[0x18c0e/2] = 0x6006; // 018C0E: 6406 bcc 18c16 (fills screen with characters otherwise) rom[0x1923e/2] = 0x4e71; // 01923E: 6408 bcc 19248 (fills screen with characters otherwise) */ // Fix for the palette fade on title screen // rom[0x19E90/2] = 0x00ff; } static DRIVER_INIT( ryukobou ) { // UINT16 *rom = (UINT16 *) machine.region("maincpu")->base(); ryukobou_decrypt(machine); machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x10600, 0x107ff, FUNC(ryukobou_igs011_prot2_r)); // PROTECTION CHECKS // rom[0x2df68/2] = 0x4e75; // 02DF68: 4E56 FE00 link A6, #-$200 (fills palette with pink otherwise) } static DRIVER_INIT( xymg ) { // UINT16 *rom = (UINT16 *) machine.region("maincpu")->base(); lhb_decrypt(machine); /* // PROTECTION CHECKS rom[0x00502/2] = 0x6006; // 000502: 6050 bra 554 rom[0x0fc1c/2] = 0x6036; // 00FC1C: 6736 beq fc54 (fills palette with red otherwise) rom[0x1232a/2] = 0x6036; // 01232A: 6736 beq 12362 (fills palette with red otherwise) rom[0x18244/2] = 0x6036; // 018244: 6736 beq 1827c (fills palette with red otherwise) rom[0x1e15e/2] = 0x6036; // 01E15E: 6736 beq 1e196 (fills palette with red otherwise) rom[0x22286/2] = 0x6000; // 022286: 6700 02D2 beq 2255a (fills palette with green otherwise) rom[0x298ce/2] = 0x6036; // 0298CE: 6736 beq 29906 (fills palette with red otherwise) rom[0x2e07c/2] = 0x6036; // 02E07C: 6736 beq 2e0b4 (fills palette with red otherwise) rom[0x38f1c/2] = 0x6000; // 038F1C: 6700 071C beq 3963a (ASIC11 ERROR 1) rom[0x390e8/2] = 0x6000; // 0390E8: 6700 0550 beq 3963a (ASIC11 ERROR 2) rom[0x3933a/2] = 0x6000; // 03933A: 6700 02FE beq 3963a (ASIC11 ERROR 3) rom[0x3955c/2] = 0x6000; // 03955C: 6700 00DC beq 3963a (ASIC11 ERROR 4) rom[0x397f4/2] = 0x6000; // 0397F4: 6700 02C0 beq 39ab6 (fills palette with green otherwise) rom[0x39976/2] = 0x6000; // 039976: 6700 013E beq 39ab6 (fills palette with green otherwise) rom[0x39a7e/2] = 0x6036; // 039A7E: 6736 beq 39ab6 (fills palette with green otherwise) rom[0x4342c/2] = 0x4e75; // 04342C: 4E56 0000 link A6, #$0 rom[0x49966/2] = 0x6036; // 049966: 6736 beq 4999e (fills palette with blue otherwise) rom[0x58140/2] = 0x6036; // 058140: 6736 beq 58178 (fills palette with red otherwise) rom[0x5e05a/2] = 0x6036; // 05E05A: 6736 beq 5e092 (fills palette with red otherwise) rom[0x5ebf0/2] = 0x6000; // 05EBF0: 6700 0208 beq 5edfa (fills palette with red otherwise) rom[0x5edc2/2] = 0x6036; // 05EDC2: 6736 beq 5edfa (fills palette with green otherwise) rom[0x5f71c/2] = 0x6000; // 05F71C: 6700 01F2 beq 5f910 (fills palette with green otherwise) rom[0x5f8d8/2] = 0x6036; // 05F8D8: 6736 beq 5f910 (fills palette with red otherwise) rom[0x64836/2] = 0x6036; // 064836: 6736 beq 6486e (fills palette with red otherwise) */ } static DRIVER_INIT( wlcc ) { // UINT16 *rom = (UINT16 *) machine.region("maincpu")->base(); wlcc_decrypt(machine); /* // PROTECTION CHECKS rom[0x16b96/2] = 0x6000; // 016B96: 6700 02FE beq 16e96 (fills palette with red otherwise) rom[0x16e5e/2] = 0x6036; // 016E5E: 6736 beq 16e96 (fills palette with green otherwise) rom[0x17852/2] = 0x6000; // 017852: 6700 01F2 beq 17a46 (fills palette with green otherwise) rom[0x17a0e/2] = 0x6036; // 017A0E: 6736 beq 17a46 (fills palette with red otherwise) rom[0x23636/2] = 0x6036; // 023636: 6736 beq 2366e (fills palette with red otherwise) rom[0x2b1e6/2] = 0x6000; // 02B1E6: 6700 0218 beq 2b400 (fills palette with green otherwise) rom[0x2f9f2/2] = 0x6000; // 02F9F2: 6700 04CA beq 2febe (fills palette with green otherwise) rom[0x2fb2e/2] = 0x6000; // 02FB2E: 6700 038E beq 2febe (fills palette with red otherwise) rom[0x2fcf2/2] = 0x6000; // 02FCF2: 6700 01CA beq 2febe (fills palette with red otherwise) rom[0x2fe86/2] = 0x6036; // 02FE86: 6736 beq 2febe (fills palette with red otherwise) rom[0x3016e/2] = 0x6000; // 03016E: 6700 03F6 beq 30566 (fills palette with green otherwise) rom[0x303c8/2] = 0x6000; // 0303C8: 6700 019C beq 30566 (fills palette with green otherwise) rom[0x3052e/2] = 0x6036; // 03052E: 6736 beq 30566 (fills palette with green otherwise) */ } static DRIVER_INIT( lhb2 ) { UINT16 *rom = (UINT16 *) machine.region("maincpu")->base(); lhb2_decrypt(machine); lhb2_decrypt_gfx(machine); // PROTECTION CHECKS rom[0x034f4/2] = 0x4e71; // 0034F4: 660E bne 3504 (rom test, fills palette with white otherwise) rom[0x03502/2] = 0x6032; // 003502: 6732 beq 3536 (rom test, fills palette with white otherwise) rom[0x1afea/2] = 0x6034; // 01AFEA: 6734 beq 1b020 (fills palette with black otherwise) // rom[0x24b8a/2] = 0x6036; // 024B8A: 6736 beq 24bc2 (fills palette with green otherwise) // rom[0x29ef8/2] = 0x6036; // 029EF8: 6736 beq 29f30 (fills palette with red otherwise) // rom[0x2e69c/2] = 0x6036; // 02E69C: 6736 beq 2e6d4 (fills palette with green otherwise) // rom[0x2fe96/2] = 0x6036; // 02FE96: 6736 beq 2fece (fills palette with red otherwise) // rom[0x325da/2] = 0x6036; // 0325DA: 6736 beq 32612 (fills palette with green otherwise) rom[0x3d80a/2] = 0x6034; // 03D80A: 6734 beq 3d840 (fills palette with black otherwise) // rom[0x3ed80/2] = 0x6036; // 03ED80: 6736 beq 3edb8 (fills palette with red otherwise) rom[0x41d72/2] = 0x6034; // 041D72: 6734 beq 41da8 (fills palette with black otherwise) rom[0x44834/2] = 0x6034; // 044834: 6734 beq 4486a (fills palette with black otherwise) } static DRIVER_INIT( vbowl ) { UINT16 *rom = (UINT16 *) machine.region("maincpu")->base(); UINT8 *gfx = (UINT8 *) machine.region("blitter")->base(); int i; vbowlj_decrypt(machine); for (i = 0x400000-1; i >= 0; i--) { gfx[i * 2 + 1] = (gfx[i] & 0xf0) >> 4; gfx[i * 2 + 0] = (gfx[i] & 0x0f) >> 0; } // Patch the bad dump so that it doesn't reboot at the end of a game (the patched value is from vbowlj) rom[0x080e0/2] = 0xe549; // 0080E0: 0449 dc.w $0449; ILLEGAL // PROTECTION CHECKS // rom[0x03764/2] = 0x4e75; // 003764: 4E56 0000 link A6, #$0 rom[0x173ee/2] = 0x600c; // 0173EE: 670C beq $173fc rom[0x1e6e6/2] = 0x600c; // 01E6E6: 670C beq $1e6f4 rom[0x1f7ce/2] = 0x600c; // 01F7CE: 670C beq $1f7dc } static DRIVER_INIT( vbowlj ) { UINT16 *rom = (UINT16 *) machine.region("maincpu")->base(); UINT8 *gfx = (UINT8 *) machine.region("blitter")->base(); int i; vbowlj_decrypt(machine); for (i = 0x400000-1; i >= 0; i--) { gfx[i * 2 + 1] = (gfx[i] & 0xf0) >> 4; gfx[i * 2 + 0] = (gfx[i] & 0x0f) >> 0; } // PROTECTION CHECKS // rom[0x37b4/2] = 0x4e75; // 0037B4: 4E56 0000 link A6, #$0 rom[0x17720/2] = 0x600c; // 017720: 670C beq 1772e rom[0x1e6e6/2] = 0x600c; // 01E6E6: 670C beq $1e6f4 rom[0x1f7c8/2] = 0x600c; // 01F7C8: 670C beq 1f7d6 } static DRIVER_INIT( nkishusp ) { nkishusp_decrypt(machine); // PROTECTION CHECKS (similar to lhb2?) } /*************************************************************************** Memory Maps ***************************************************************************/ static ADDRESS_MAP_START( drgnwrld, AS_PROGRAM, 16 ) // drgnwrld: IGS011 protection dynamically mapped at 1dd7x // AM_RANGE( 0x01dd70, 0x01dd77 ) AM_WRITE( igs011_prot1_w ) // AM_RANGE( 0x01dd78, 0x01dd79 ) AM_READ ( igs011_prot1_r ) AM_RANGE( 0x000000, 0x07ffff ) AM_ROM AM_RANGE( 0x100000, 0x103fff ) AM_RAM AM_SHARE("nvram") AM_RANGE( 0x200000, 0x200fff ) AM_RAM AM_BASE_MEMBER(igs011_state, m_priority_ram ) AM_RANGE( 0x400000, 0x401fff ) AM_RAM_WRITE( igs011_palette ) AM_BASE_GENERIC( paletteram ) AM_RANGE( 0x500000, 0x500001 ) AM_READ_PORT( "COIN" ) AM_RANGE( 0x600000, 0x600001 ) AM_DEVREADWRITE8_MODERN("oki", okim6295_device, read, write, 0x00ff ) AM_RANGE( 0x700000, 0x700003 ) AM_DEVWRITE8( "ymsnd", ym3812_w, 0x00ff ) AM_RANGE( 0x800000, 0x800003 ) AM_WRITE( drgnwrld_igs003_w ) AM_RANGE( 0x800002, 0x800003 ) AM_READ ( drgnwrld_igs003_r ) AM_RANGE( 0xa20000, 0xa20001 ) AM_WRITE( igs011_priority_w ) AM_RANGE( 0xa40000, 0xa40001 ) AM_WRITE( igs_dips_w ) AM_RANGE( 0xa50000, 0xa50001 ) AM_WRITE( igs011_prot_addr_w ) // AM_RANGE( 0xa50000, 0xa50005 ) AM_READ( igs011_prot_fake_r ) AM_RANGE( 0xa58000, 0xa58001 ) AM_WRITE( igs011_blit_x_w ) AM_RANGE( 0xa58800, 0xa58801 ) AM_WRITE( igs011_blit_y_w ) AM_RANGE( 0xa59000, 0xa59001 ) AM_WRITE( igs011_blit_w_w ) AM_RANGE( 0xa59800, 0xa59801 ) AM_WRITE( igs011_blit_h_w ) AM_RANGE( 0xa5a000, 0xa5a001 ) AM_WRITE( igs011_blit_gfx_lo_w ) AM_RANGE( 0xa5a800, 0xa5a801 ) AM_WRITE( igs011_blit_gfx_hi_w ) AM_RANGE( 0xa5b000, 0xa5b001 ) AM_WRITE( igs011_blit_flags_w ) AM_RANGE( 0xa5b800, 0xa5b801 ) AM_WRITE( igs011_blit_pen_w ) AM_RANGE( 0xa5c000, 0xa5c001 ) AM_WRITE( igs011_blit_depth_w ) AM_RANGE( 0xa88000, 0xa88001 ) AM_READ( igs_3_dips_r ) ADDRESS_MAP_END static ADDRESS_MAP_START( drgnwrld_igs012, AS_PROGRAM, 16 ) // IGS012 AM_RANGE( 0x001600, 0x00160f ) AM_WRITE( igs012_prot_swap_w ) AM_MIRROR(0x01c000) // swap (a5 / 55) AM_RANGE( 0x001610, 0x00161f ) AM_READ ( igs012_prot_r ) AM_MIRROR(0x01c000) // read (mode 0) AM_RANGE( 0x001620, 0x00162f ) AM_WRITE( igs012_prot_dec_inc_w ) AM_MIRROR(0x01c000) // dec (aa), inc (fa) AM_RANGE( 0x001630, 0x00163f ) AM_WRITE( igs012_prot_inc_w ) AM_MIRROR(0x01c000) // inc (ff) AM_RANGE( 0x001640, 0x00164f ) AM_WRITE( igs012_prot_copy_w ) AM_MIRROR(0x01c000) // copy (22) AM_RANGE( 0x001650, 0x00165f ) AM_WRITE( igs012_prot_dec_copy_w ) AM_MIRROR(0x01c000) // dec (5a), copy (33) AM_RANGE( 0x001660, 0x00166f ) AM_READ ( igs012_prot_r ) AM_MIRROR(0x01c000) // read (mode 1) AM_RANGE( 0x001670, 0x00167f ) AM_WRITE( igs012_prot_mode_w ) AM_MIRROR(0x01c000) // mode (cc / dd) AM_RANGE( 0x00d400, 0x00d43f ) AM_WRITE( igs011_prot2_dec_w ) // dec (33) AM_RANGE( 0x00d440, 0x00d47f ) AM_WRITE( drgnwrld_igs011_prot2_swap_w ) // swap (33) AM_RANGE( 0x00d480, 0x00d4bf ) AM_WRITE( igs011_prot2_reset_w ) // reset (33) AM_RANGE( 0x00d4c0, 0x00d4ff ) AM_READ ( drgnwrldv20j_igs011_prot2_r ) // read AM_RANGE( 0x902000, 0x902fff ) AM_WRITE( igs012_prot_reset_w ) // reset? // AM_RANGE( 0x902000, 0x902005 ) AM_WRITE( igs012_prot_fake_r ) AM_IMPORT_FROM(drgnwrld) ADDRESS_MAP_END // Only values 0 and 7 are written (1 bit per irq source?) static WRITE16_HANDLER( lhb_irq_enable_w ) { igs011_state *state = space->machine().driver_data(); COMBINE_DATA( &state->m_lhb_irq_enable ); } static WRITE16_DEVICE_HANDLER( lhb_okibank_w ) { if (ACCESSING_BITS_8_15) { okim6295_device *oki = downcast(device); oki->set_bank_base((data & 0x200) ? 0x40000 : 0); } if ( data & (~0x200) ) logerror("%s: warning, unknown bits written in oki bank = %02x\n", device->machine().describe_context(), data); // popmessage("oki %04x",data); } static ADDRESS_MAP_START( lhb, AS_PROGRAM, 16 ) // lhb: IGS011 protection dynamically mapped at 834x // AM_RANGE( 0x008340, 0x008347 ) AM_WRITE( igs011_prot1_w ) // AM_RANGE( 0x008348, 0x008349 ) AM_READ ( igs011_prot1_r ) AM_RANGE( 0x010000, 0x010001 ) AM_DEVWRITE( "oki", lhb_okibank_w ) AM_RANGE( 0x010200, 0x0103ff ) AM_WRITE( igs011_prot2_inc_w ) AM_RANGE( 0x010400, 0x0105ff ) AM_WRITE( lhb_igs011_prot2_swap_w ) AM_RANGE( 0x010600, 0x0107ff ) AM_READ ( lhb_igs011_prot2_r ) // no reset AM_RANGE( 0x000000, 0x07ffff ) AM_ROM AM_RANGE( 0x100000, 0x103fff ) AM_RAM AM_SHARE("nvram") AM_RANGE( 0x200000, 0x200fff ) AM_RAM AM_BASE_MEMBER(igs011_state, m_priority_ram ) AM_RANGE( 0x300000, 0x3fffff ) AM_READWRITE( igs011_layers_r, igs011_layers_w ) AM_RANGE( 0x400000, 0x401fff ) AM_RAM_WRITE( igs011_palette ) AM_BASE_GENERIC( paletteram ) AM_RANGE( 0x600000, 0x600001 ) AM_DEVREADWRITE8_MODERN("oki", okim6295_device, read, write, 0x00ff ) AM_RANGE( 0x700000, 0x700001 ) AM_READ_PORT( "COIN" ) AM_RANGE( 0x700002, 0x700005 ) AM_READ ( lhb_inputs_r ) AM_RANGE( 0x700002, 0x700003 ) AM_WRITE( lhb_inputs_w ) AM_RANGE( 0x820000, 0x820001 ) AM_WRITE( igs011_priority_w ) AM_RANGE( 0x838000, 0x838001 ) AM_WRITE( lhb_irq_enable_w ) AM_RANGE( 0x840000, 0x840001 ) AM_WRITE( igs_dips_w ) AM_RANGE( 0x850000, 0x850001 ) AM_WRITE( igs011_prot_addr_w ) // AM_RANGE( 0x850000, 0x850005 ) AM_WRITE( igs011_prot_fake_r ) AM_RANGE( 0x858000, 0x858001 ) AM_WRITE( igs011_blit_x_w ) AM_RANGE( 0x858800, 0x858801 ) AM_WRITE( igs011_blit_y_w ) AM_RANGE( 0x859000, 0x859001 ) AM_WRITE( igs011_blit_w_w ) AM_RANGE( 0x859800, 0x859801 ) AM_WRITE( igs011_blit_h_w ) AM_RANGE( 0x85a000, 0x85a001 ) AM_WRITE( igs011_blit_gfx_lo_w ) AM_RANGE( 0x85a800, 0x85a801 ) AM_WRITE( igs011_blit_gfx_hi_w ) AM_RANGE( 0x85b000, 0x85b001 ) AM_WRITE( igs011_blit_flags_w ) AM_RANGE( 0x85b800, 0x85b801 ) AM_WRITE( igs011_blit_pen_w ) AM_RANGE( 0x85c000, 0x85c001 ) AM_WRITE( igs011_blit_depth_w ) AM_RANGE( 0x888000, 0x888001 ) AM_READ( igs_5_dips_r ) ADDRESS_MAP_END static ADDRESS_MAP_START( xymg, AS_PROGRAM, 16 ) // xymg: IGS011 protection dynamically mapped at 834x // AM_RANGE( 0x008340, 0x008347 ) AM_WRITE( igs011_prot1_w ) // AM_RANGE( 0x008348, 0x008349 ) AM_READ ( igs011_prot1_r ) AM_RANGE( 0x010000, 0x010001 ) AM_DEVWRITE( "oki", lhb_okibank_w ) AM_RANGE( 0x010200, 0x0103ff ) AM_WRITE( igs011_prot2_inc_w ) // inc (33) AM_RANGE( 0x010400, 0x0105ff ) AM_WRITE( lhb_igs011_prot2_swap_w ) // swap (33) AM_RANGE( 0x010600, 0x0107ff ) AM_READ ( lhb_igs011_prot2_r ) // read // no reset AM_RANGE( 0x000000, 0x07ffff ) AM_ROM AM_RANGE( 0x100000, 0x103fff ) AM_RAM AM_RANGE( 0x1f0000, 0x1f3fff ) AM_RAM AM_SHARE("nvram") // extra ram AM_RANGE( 0x200000, 0x200fff ) AM_RAM AM_BASE_MEMBER(igs011_state, m_priority_ram ) AM_RANGE( 0x300000, 0x3fffff ) AM_READWRITE( igs011_layers_r, igs011_layers_w ) AM_RANGE( 0x400000, 0x401fff ) AM_RAM_WRITE( igs011_palette ) AM_BASE_GENERIC( paletteram ) AM_RANGE( 0x600000, 0x600001 ) AM_DEVREADWRITE8_MODERN("oki", okim6295_device, read, write, 0x00ff ) AM_RANGE( 0x700000, 0x700003 ) AM_WRITE( xymg_igs003_w ) AM_RANGE( 0x700002, 0x700003 ) AM_READ ( xymg_igs003_r ) AM_RANGE( 0x820000, 0x820001 ) AM_WRITE( igs011_priority_w ) AM_RANGE( 0x840000, 0x840001 ) AM_WRITE( igs_dips_w ) AM_RANGE( 0x850000, 0x850001 ) AM_WRITE( igs011_prot_addr_w ) // AM_RANGE( 0x850000, 0x850005 ) AM_WRITE( igs011_prot_fake_r ) AM_RANGE( 0x858000, 0x858001 ) AM_WRITE( igs011_blit_x_w ) AM_RANGE( 0x858800, 0x858801 ) AM_WRITE( igs011_blit_y_w ) AM_RANGE( 0x859000, 0x859001 ) AM_WRITE( igs011_blit_w_w ) AM_RANGE( 0x859800, 0x859801 ) AM_WRITE( igs011_blit_h_w ) AM_RANGE( 0x85a000, 0x85a001 ) AM_WRITE( igs011_blit_gfx_lo_w ) AM_RANGE( 0x85a800, 0x85a801 ) AM_WRITE( igs011_blit_gfx_hi_w ) AM_RANGE( 0x85b000, 0x85b001 ) AM_WRITE( igs011_blit_flags_w ) AM_RANGE( 0x85b800, 0x85b801 ) AM_WRITE( igs011_blit_pen_w ) AM_RANGE( 0x85c000, 0x85c001 ) AM_WRITE( igs011_blit_depth_w ) AM_RANGE( 0x888000, 0x888001 ) AM_READ( igs_3_dips_r ) ADDRESS_MAP_END static ADDRESS_MAP_START( wlcc, AS_PROGRAM, 16 ) // wlcc: IGS011 protection dynamically mapped at 834x // AM_RANGE( 0x008340, 0x008347 ) AM_WRITE( igs011_prot1_w ) // AM_RANGE( 0x008348, 0x008349 ) AM_READ ( igs011_prot1_r ) AM_RANGE( 0x518000, 0x5181ff ) AM_WRITE( igs011_prot2_inc_w ) // inc (33) AM_RANGE( 0x518200, 0x5183ff ) AM_WRITE( wlcc_igs011_prot2_swap_w ) // swap (33) AM_RANGE( 0x518800, 0x5189ff ) AM_READ ( igs011_prot2_reset_r ) // reset AM_RANGE( 0x519000, 0x5195ff ) AM_READ ( lhb_igs011_prot2_r ) // read AM_RANGE( 0x000000, 0x07ffff ) AM_ROM AM_RANGE( 0x100000, 0x103fff ) AM_RAM AM_SHARE("nvram") AM_RANGE( 0x200000, 0x200fff ) AM_RAM AM_BASE_MEMBER(igs011_state, m_priority_ram ) AM_RANGE( 0x300000, 0x3fffff ) AM_READWRITE( igs011_layers_r, igs011_layers_w ) AM_RANGE( 0x400000, 0x401fff ) AM_RAM_WRITE( igs011_palette ) AM_BASE_GENERIC( paletteram ) AM_RANGE( 0x520000, 0x520001 ) AM_READ_PORT( "COIN" ) AM_RANGE( 0x600000, 0x600001 ) AM_DEVREADWRITE8_MODERN("oki", okim6295_device, read, write, 0x00ff ) AM_RANGE( 0x800000, 0x800003 ) AM_WRITE( wlcc_igs003_w ) AM_RANGE( 0x800002, 0x800003 ) AM_READ ( wlcc_igs003_r ) AM_RANGE( 0xa20000, 0xa20001 ) AM_WRITE( igs011_priority_w ) AM_RANGE( 0xa40000, 0xa40001 ) AM_WRITE( igs_dips_w ) AM_RANGE( 0xa50000, 0xa50001 ) AM_WRITE( igs011_prot_addr_w ) // AM_RANGE( 0xa50000, 0xa50005 ) AM_READ( igs011_prot_fake_r ) AM_RANGE( 0xa58000, 0xa58001 ) AM_WRITE( igs011_blit_x_w ) AM_RANGE( 0xa58800, 0xa58801 ) AM_WRITE( igs011_blit_y_w ) AM_RANGE( 0xa59000, 0xa59001 ) AM_WRITE( igs011_blit_w_w ) AM_RANGE( 0xa59800, 0xa59801 ) AM_WRITE( igs011_blit_h_w ) AM_RANGE( 0xa5a000, 0xa5a001 ) AM_WRITE( igs011_blit_gfx_lo_w ) AM_RANGE( 0xa5a800, 0xa5a801 ) AM_WRITE( igs011_blit_gfx_hi_w ) AM_RANGE( 0xa5b000, 0xa5b001 ) AM_WRITE( igs011_blit_flags_w ) AM_RANGE( 0xa5b800, 0xa5b801 ) AM_WRITE( igs011_blit_pen_w ) AM_RANGE( 0xa5c000, 0xa5c001 ) AM_WRITE( igs011_blit_depth_w ) AM_RANGE( 0xa88000, 0xa88001 ) AM_READ( igs_4_dips_r ) ADDRESS_MAP_END static ADDRESS_MAP_START( lhb2, AS_PROGRAM, 16 ) // lhb2: IGS011 protection dynamically mapped at 1ff8x // AM_RANGE( 0x01ff80, 0x01ff87 ) AM_WRITE( igs011_prot1_w ) // AM_RANGE( 0x01ff88, 0x01ff89 ) AM_READ ( igs011_prot1_r ) AM_RANGE( 0x020000, 0x0201ff ) AM_WRITE( igs011_prot2_inc_w ) // inc (55) AM_RANGE( 0x020200, 0x0203ff ) AM_WRITE( lhb_igs011_prot2_swap_w ) // swap (33) AM_RANGE( 0x020400, 0x0205ff ) AM_READ ( lhb2_igs011_prot2_r ) // read AM_RANGE( 0x020600, 0x0207ff ) AM_WRITE( igs011_prot2_reset_w ) // reset (55) AM_RANGE( 0x000000, 0x07ffff ) AM_ROM AM_RANGE( 0x100000, 0x103fff ) AM_RAM AM_SHARE("nvram") AM_RANGE( 0x200000, 0x200001 ) AM_DEVREADWRITE8_MODERN("oki", okim6295_device, read, write, 0x00ff ) AM_RANGE( 0x204000, 0x204003 ) AM_DEVWRITE8( "ymsnd", ym2413_w, 0x00ff ) AM_RANGE( 0x208000, 0x208003 ) AM_WRITE( lhb2_igs003_w ) AM_RANGE( 0x208002, 0x208003 ) AM_READ ( lhb2_igs003_r ) AM_RANGE( 0x20c000, 0x20cfff ) AM_RAM AM_BASE_MEMBER(igs011_state, m_priority_ram) AM_RANGE( 0x210000, 0x211fff ) AM_RAM_WRITE( igs011_palette ) AM_BASE_GENERIC( paletteram ) AM_RANGE( 0x214000, 0x214001 ) AM_READ_PORT( "COIN" ) AM_RANGE( 0x300000, 0x3fffff ) AM_READWRITE( igs011_layers_r, igs011_layers_w ) AM_RANGE( 0xa20000, 0xa20001 ) AM_WRITE( igs011_priority_w ) AM_RANGE( 0xa40000, 0xa40001 ) AM_WRITE( igs_dips_w ) AM_RANGE( 0xa50000, 0xa50001 ) AM_WRITE( igs011_prot_addr_w ) // AM_RANGE( 0xa50000, 0xa50005 ) AM_READ( igs011_prot_fake_r ) AM_RANGE( 0xa58000, 0xa58001 ) AM_WRITE( igs011_blit_x_w ) AM_RANGE( 0xa58800, 0xa58801 ) AM_WRITE( igs011_blit_y_w ) AM_RANGE( 0xa59000, 0xa59001 ) AM_WRITE( igs011_blit_w_w ) AM_RANGE( 0xa59800, 0xa59801 ) AM_WRITE( igs011_blit_h_w ) AM_RANGE( 0xa5a000, 0xa5a001 ) AM_WRITE( igs011_blit_gfx_lo_w ) AM_RANGE( 0xa5a800, 0xa5a801 ) AM_WRITE( igs011_blit_gfx_hi_w ) AM_RANGE( 0xa5b000, 0xa5b001 ) AM_WRITE( igs011_blit_flags_w ) AM_RANGE( 0xa5b800, 0xa5b801 ) AM_WRITE( igs011_blit_pen_w ) AM_RANGE( 0xa5c000, 0xa5c001 ) AM_WRITE( igs011_blit_depth_w ) AM_RANGE( 0xa88000, 0xa88001 ) AM_READ( igs_3_dips_r ) ADDRESS_MAP_END /* trap15's note: * TODO: change this horrible device-> chain to be proper. */ static READ16_DEVICE_HANDLER( ics2115_word_r ) { ics2115_device* ics2115 = device->machine().device("ics"); switch(offset) { case 0: return ics2115_device::read(ics2115, (offs_t)0); case 1: return ics2115_device::read(ics2115, (offs_t)1); case 2: return (ics2115_device::read(ics2115, (offs_t)3) << 8) | ics2115_device::read(ics2115, (offs_t)2); } return 0xff; } static WRITE16_DEVICE_HANDLER( ics2115_word_w ) { ics2115_device* ics2115 = device->machine().device("ics"); switch(offset) { case 1: if (ACCESSING_BITS_0_7) ics2115_device::write(ics2115,1,data); break; case 2: if (ACCESSING_BITS_0_7) ics2115_device::write(ics2115,2,data); if (ACCESSING_BITS_8_15) ics2115_device::write(ics2115,3,data>>8); break; } } static READ16_HANDLER( vbowl_unk_r ) { return 0xffff; } static SCREEN_EOF( vbowl ) { igs011_state *state = machine.driver_data(); state->m_vbowl_trackball[0] = state->m_vbowl_trackball[1]; state->m_vbowl_trackball[1] = (input_port_read(machine, "AN1") << 8) | input_port_read(machine, "AN0"); } static WRITE16_HANDLER( vbowl_pen_hi_w ) { igs011_state *state = space->machine().driver_data(); if (ACCESSING_BITS_0_7) { state->m_lhb2_pen_hi = data & 0x07; } if (data & ~0x7) logerror("%06x: warning, unknown bits written to pen_hi = %04x\n", cpu_get_pc(&space->device()), state->m_priority); } static WRITE16_HANDLER( vbowl_link_0_w ) { } static WRITE16_HANDLER( vbowl_link_1_w ) { } static WRITE16_HANDLER( vbowl_link_2_w ) { } static WRITE16_HANDLER( vbowl_link_3_w ) { } static ADDRESS_MAP_START( vbowl, AS_PROGRAM, 16 ) // vbowl: IGS011 protection dynamically mapped at 834x // AM_RANGE( 0x008340, 0x008347 ) AM_WRITE( igs011_prot1_w ) // AM_RANGE( 0x008348, 0x008349 ) AM_READ ( igs011_prot1_r ) // IGS012 AM_RANGE( 0x001600, 0x00160f ) AM_WRITE( igs012_prot_swap_w ) AM_MIRROR(0x01c000) // swap (a5 / 55) AM_RANGE( 0x001610, 0x00161f ) AM_READ ( igs012_prot_r ) AM_MIRROR(0x01c000) // read (mode 0) AM_RANGE( 0x001620, 0x00162f ) AM_WRITE( igs012_prot_dec_inc_w ) AM_MIRROR(0x01c000) // dec (aa), inc (fa) AM_RANGE( 0x001630, 0x00163f ) AM_WRITE( igs012_prot_inc_w ) AM_MIRROR(0x01c000) // inc (ff) AM_RANGE( 0x001640, 0x00164f ) AM_WRITE( igs012_prot_copy_w ) AM_MIRROR(0x01c000) // copy (22) AM_RANGE( 0x001650, 0x00165f ) AM_WRITE( igs012_prot_dec_copy_w ) AM_MIRROR(0x01c000) // dec (5a), copy (33) AM_RANGE( 0x001660, 0x00166f ) AM_READ ( igs012_prot_r ) AM_MIRROR(0x01c000) // read (mode 1) AM_RANGE( 0x001670, 0x00167f ) AM_WRITE( igs012_prot_mode_w ) AM_MIRROR(0x01c000) // mode (cc / dd) AM_RANGE( 0x00d400, 0x00d43f ) AM_WRITE( igs011_prot2_dec_w ) // dec (33) AM_RANGE( 0x00d440, 0x00d47f ) AM_WRITE( drgnwrld_igs011_prot2_swap_w ) // swap (33) AM_RANGE( 0x00d480, 0x00d4bf ) AM_WRITE( igs011_prot2_reset_w ) // reset (33) AM_RANGE( 0x00d4c0, 0x00d4ff ) AM_READ ( drgnwrldv20j_igs011_prot2_r ) // read AM_RANGE( 0x50f000, 0x50f1ff ) AM_WRITE( igs011_prot2_dec_w ) // dec (33) AM_RANGE( 0x50f200, 0x50f3ff ) AM_WRITE( vbowl_igs011_prot2_swap_w ) // swap (33) AM_RANGE( 0x50f400, 0x50f5ff ) AM_WRITE( igs011_prot2_reset_w ) // reset (33) AM_RANGE( 0x50f600, 0x50f7ff ) AM_READ ( vbowl_igs011_prot2_r ) // read AM_RANGE( 0x902000, 0x902fff ) AM_WRITE( igs012_prot_reset_w ) // reset? // AM_RANGE( 0x902000, 0x902005 ) AM_WRITE( igs012_prot_fake_r ) AM_RANGE( 0x000000, 0x07ffff ) AM_ROM AM_RANGE( 0x100000, 0x103fff ) AM_RAM AM_SHARE("nvram") AM_RANGE( 0x200000, 0x200fff ) AM_RAM AM_BASE_MEMBER(igs011_state, m_priority_ram ) AM_RANGE( 0x300000, 0x3fffff ) AM_READWRITE( igs011_layers_r, igs011_layers_w ) AM_RANGE( 0x400000, 0x401fff ) AM_RAM_WRITE( igs011_palette ) AM_BASE_GENERIC( paletteram ) AM_RANGE( 0x520000, 0x520001 ) AM_READ_PORT( "COIN" ) AM_RANGE( 0x600000, 0x600007 ) AM_DEVREADWRITE( "ics", ics2115_word_r, ics2115_word_w ) AM_RANGE( 0x700000, 0x700003 ) AM_RAM AM_BASE_MEMBER(igs011_state, m_vbowl_trackball ) AM_RANGE( 0x700004, 0x700005 ) AM_WRITE( vbowl_pen_hi_w ) AM_RANGE( 0x800000, 0x800003 ) AM_WRITE( vbowl_igs003_w ) AM_RANGE( 0x800002, 0x800003 ) AM_READ( vbowl_igs003_r ) AM_RANGE( 0xa00000, 0xa00001 ) AM_WRITE( vbowl_link_0_w ) AM_RANGE( 0xa08000, 0xa08001 ) AM_WRITE( vbowl_link_1_w ) AM_RANGE( 0xa10000, 0xa10001 ) AM_WRITE( vbowl_link_2_w ) AM_RANGE( 0xa18000, 0xa18001 ) AM_WRITE( vbowl_link_3_w ) AM_RANGE( 0xa20000, 0xa20001 ) AM_WRITE( igs011_priority_w ) AM_RANGE( 0xa40000, 0xa40001 ) AM_WRITE( igs_dips_w ) AM_RANGE( 0xa48000, 0xa48001 ) AM_WRITE( igs011_prot_addr_w ) // AM_RANGE( 0xa48000, 0xa48005 ) AM_WRITE( igs011_prot_fake_r ) AM_RANGE( 0xa58000, 0xa58001 ) AM_WRITE( igs011_blit_x_w ) AM_RANGE( 0xa58800, 0xa58801 ) AM_WRITE( igs011_blit_y_w ) AM_RANGE( 0xa59000, 0xa59001 ) AM_WRITE( igs011_blit_w_w ) AM_RANGE( 0xa59800, 0xa59801 ) AM_WRITE( igs011_blit_h_w ) AM_RANGE( 0xa5a000, 0xa5a001 ) AM_WRITE( igs011_blit_gfx_lo_w ) AM_RANGE( 0xa5a800, 0xa5a801 ) AM_WRITE( igs011_blit_gfx_hi_w ) AM_RANGE( 0xa5b000, 0xa5b001 ) AM_WRITE( igs011_blit_flags_w ) AM_RANGE( 0xa5b800, 0xa5b801 ) AM_WRITE( igs011_blit_pen_w ) AM_RANGE( 0xa5c000, 0xa5c001 ) AM_WRITE( igs011_blit_depth_w ) AM_RANGE( 0xa80000, 0xa80001 ) AM_READ( vbowl_unk_r ) AM_RANGE( 0xa88000, 0xa88001 ) AM_READ( igs_4_dips_r ) AM_RANGE( 0xa90000, 0xa90001 ) AM_READ( vbowl_unk_r ) AM_RANGE( 0xa98000, 0xa98001 ) AM_READ( vbowl_unk_r ) ADDRESS_MAP_END /*************************************************************************** Input Ports ***************************************************************************/ static INPUT_PORTS_START( drgnwrld ) PORT_START("DSW1") PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) ) PORT_DIPNAME( 0x18, 0x18, DEF_STR( Difficulty ) ) PORT_DIPSETTING( 0x18, DEF_STR( Normal ) ) // 513 PORT_DIPSETTING( 0x10, DEF_STR( Hard ) ) // 627 PORT_DIPSETTING( 0x08, DEF_STR( Harder ) ) // 741 PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) // 855 PORT_DIPUNKNOWN( 0x20, 0x20 ) PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_START("DSW2") PORT_DIPNAME( 0x01, 0x01, "Nudity" ) // "Open Girl" in test mode PORT_DIPSETTING( 0x00, DEF_STR( No ) ) PORT_DIPSETTING( 0x01, DEF_STR( Yes ) ) PORT_DIPNAME( 0x02, 0x02, "Background" ) PORT_DIPSETTING( 0x02, "Girl" ) PORT_DIPSETTING( 0x00, "Landscape" ) // broken backgrounds with Nudity on (PCB does the same) PORT_DIPNAME( 0x04, 0x04, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x04, DEF_STR( On ) ) PORT_DIPNAME( 0x08, 0x08, "Bang Turtle?" ) PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x10, 0x10, "Send Boom?" ) PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPUNKNOWN( 0x20, 0x20 ) PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_DIPNAME( 0x80, 0x80, "Test?" ) PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_START("DSW3") PORT_DIPUNKNOWN( 0x01, 0x01 ) PORT_DIPUNKNOWN( 0x02, 0x02 ) PORT_DIPUNKNOWN( 0x04, 0x04 ) PORT_DIPUNKNOWN( 0x08, 0x08 ) PORT_DIPUNKNOWN( 0x10, 0x10 ) PORT_DIPUNKNOWN( 0x20, 0x20 ) PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_START("COIN") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_LOW ) // keep pressed while booting PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE2 ) // used? PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE3 ) // used? PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) // press in girl test to pause, button 3 advances PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("IN1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_START("IN2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) INPUT_PORTS_END static INPUT_PORTS_START( drgnwrldc ) PORT_START("DSW1") PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) ) PORT_DIPNAME( 0x18, 0x18, DEF_STR( Difficulty ) ) PORT_DIPSETTING( 0x18, DEF_STR( Normal ) ) // 513 PORT_DIPSETTING( 0x10, DEF_STR( Hard ) ) // 627 PORT_DIPSETTING( 0x08, DEF_STR( Harder ) ) // 741 PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) // 855 PORT_DIPUNKNOWN( 0x20, 0x20 ) PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_START("DSW2") PORT_DIPNAME( 0x01, 0x01, "Nudity" ) // "Open Girl" in test mode PORT_DIPSETTING( 0x00, DEF_STR( No ) ) PORT_DIPSETTING( 0x01, DEF_STR( Yes ) ) PORT_DIPNAME( 0x02, 0x02, "Sex Question" ) // "background" in test mode PORT_DIPSETTING( 0x00, DEF_STR( No ) ) PORT_DIPSETTING( 0x02, DEF_STR( Yes ) ) PORT_DIPNAME( 0x04, 0x04, "Background" ) // "sex question" in test mode PORT_DIPSETTING( 0x04, "Girl" ) PORT_DIPSETTING( 0x00, "Landscape" ) // broken backgrounds with Nudity on (PCB does the same) PORT_DIPNAME( 0x08, 0x08, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x08, DEF_STR( On ) ) PORT_DIPNAME( 0x10, 0x10, "Tiles" ) PORT_DIPSETTING( 0x10, "Mahjong" ) PORT_DIPSETTING( 0x00, "Symbols" ) PORT_DIPUNKNOWN( 0x20, 0x20 ) PORT_DIPNAME( 0x40, 0x40, "Bang Turtle?" ) PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x80, 0x80, "Test?" ) PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_START("DSW3") PORT_DIPUNKNOWN( 0x01, 0x01 ) PORT_DIPUNKNOWN( 0x02, 0x02 ) PORT_DIPUNKNOWN( 0x04, 0x04 ) PORT_DIPUNKNOWN( 0x08, 0x08 ) PORT_DIPUNKNOWN( 0x10, 0x10 ) PORT_DIPUNKNOWN( 0x20, 0x20 ) PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_START("COIN") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_LOW ) // keep pressed while booting PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE2 ) // used? PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE3 ) // used? PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) // press in girl test to pause, button 3 advances PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("IN1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_START("IN2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) INPUT_PORTS_END static INPUT_PORTS_START( drgnwrldj ) PORT_START("DSW1") PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) ) PORT_DIPNAME( 0x18, 0x18, DEF_STR( Difficulty ) ) PORT_DIPSETTING( 0x18, DEF_STR( Normal ) ) // 513 PORT_DIPSETTING( 0x10, DEF_STR( Hard ) ) // 627 PORT_DIPSETTING( 0x08, DEF_STR( Harder ) ) // 741 PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) // 855 PORT_DIPUNKNOWN( 0x20, 0x20 ) PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_START("DSW2") PORT_DIPNAME( 0x01, 0x01, "Background" ) PORT_DIPSETTING( 0x01, "Girl" ) PORT_DIPSETTING( 0x00, "Landscape" ) PORT_DIPNAME( 0x02, 0x02, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x02, DEF_STR( On ) ) PORT_DIPNAME( 0x04, 0x04, "Tiles" ) PORT_DIPSETTING( 0x04, "Mahjong" ) PORT_DIPSETTING( 0x00, "Symbols" ) PORT_DIPNAME( 0x08, 0x08, "Send Boom?" ) PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPUNKNOWN( 0x10, 0x10 ) PORT_DIPUNKNOWN( 0x20, 0x20 ) PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_DIPNAME( 0x80, 0x80, "Test?" ) PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_START("DSW3") PORT_DIPUNKNOWN( 0x01, 0x01 ) PORT_DIPUNKNOWN( 0x02, 0x02 ) PORT_DIPUNKNOWN( 0x04, 0x04 ) PORT_DIPUNKNOWN( 0x08, 0x08 ) PORT_DIPUNKNOWN( 0x10, 0x10 ) PORT_DIPUNKNOWN( 0x20, 0x20 ) PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_START("COIN") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_LOW ) // keep pressed while booting PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE2 ) // used? PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE3 ) // used? PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) // press in girl test to pause, button 3 advances PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("IN1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_START("IN2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) INPUT_PORTS_END static INPUT_PORTS_START( lhb2 ) PORT_START("DSW1") PORT_DIPNAME( 0x07, 0x02, "Pay Out (%)" ) PORT_DIPSETTING( 0x07, "50" ) PORT_DIPSETTING( 0x06, "54" ) PORT_DIPSETTING( 0x05, "58" ) PORT_DIPSETTING( 0x04, "62" ) PORT_DIPSETTING( 0x03, "66" ) PORT_DIPSETTING( 0x02, "70" ) PORT_DIPSETTING( 0x01, "74" ) PORT_DIPSETTING( 0x00, "78" ) PORT_DIPNAME( 0x08, 0x08, "Odds Rate" ) PORT_DIPSETTING( 0x08, "1,2,3,5,8,15,30,50" ) PORT_DIPSETTING( 0x00, "1,2,3,4,5,6,7,8" ) PORT_DIPNAME( 0x10, 0x10, "Max Bet" ) PORT_DIPSETTING( 0x00, "5" ) PORT_DIPSETTING( 0x10, "10" ) PORT_DIPNAME( 0x60, 0x60, "Min Credits To Start" ) PORT_DIPSETTING( 0x60, "1" ) PORT_DIPSETTING( 0x40, "2" ) PORT_DIPSETTING( 0x20, "3" ) PORT_DIPSETTING( 0x00, "5" ) PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_START("DSW2") PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) ) // Only when bit 4 = 1 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( 0x04, 0x04, "Credits Per Note" ) // Only when bit 4 = 0 PORT_DIPSETTING( 0x04, "10" ) PORT_DIPSETTING( 0x00, "100" ) PORT_DIPNAME( 0x08, 0x08, "Max Note Credits" ) PORT_DIPSETTING( 0x08, "100" ) PORT_DIPSETTING( 0x00, "500" ) PORT_DIPNAME( 0x10, 0x10, "Money Type" ) // Decides whether to use bits 0&1 or bit 2 PORT_DIPSETTING( 0x10, "Coins" ) PORT_DIPSETTING( 0x00, "Notes" ) PORT_DIPNAME( 0x20, 0x20, "Pay Out Type" ) PORT_DIPSETTING( 0x20, "Coins" ) PORT_DIPSETTING( 0x00, "Notes" ) PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x80, DEF_STR( On ) ) PORT_START("DSW3") PORT_DIPNAME( 0x03, 0x03, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x03, "500" ) PORT_DIPSETTING( 0x02, "1000" ) PORT_DIPSETTING( 0x01, "2000" ) PORT_DIPSETTING( 0x00, "30000" ) PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0c, "0" ) PORT_DIPSETTING( 0x08, "1" ) PORT_DIPSETTING( 0x04, "2" ) // PORT_DIPSETTING( 0x00, "2" ) PORT_DIPNAME( 0x70, 0x70, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x70, "1 : 1" ) PORT_DIPSETTING( 0x60, "1 : 2" ) PORT_DIPSETTING( 0x50, "1 : 5" ) PORT_DIPSETTING( 0x40, "1 : 6" ) PORT_DIPSETTING( 0x30, "1 : 7" ) PORT_DIPSETTING( 0x20, "1 : 8" ) PORT_DIPSETTING( 0x10, "1 : 9" ) PORT_DIPSETTING( 0x00, "1 : 10" ) PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_START("COIN") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) // data clear PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_LOW ) // keep pressed while booting PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(igs_hopper_r, (void *)0) // hopper switch PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE2 ) // stats PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Pay Out") PORT_CODE(KEYCODE_O) // clear coin PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("KEY0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) // ? set to 0 both PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) // ? and you can't start a game PORT_START("KEY1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("KEY2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("KEY3") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("KEY4") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) INPUT_PORTS_END static INPUT_PORTS_START( wlcc ) PORT_START("DSW1") PORT_DIPUNKNOWN( 0x01, 0x01 ) PORT_DIPUNKNOWN( 0x02, 0x02 ) PORT_DIPUNKNOWN( 0x04, 0x04 ) PORT_DIPUNKNOWN( 0x08, 0x08 ) PORT_DIPUNKNOWN( 0x10, 0x10 ) PORT_DIPUNKNOWN( 0x20, 0x20 ) PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_START("DSW2") PORT_DIPNAME( 0x03, 0x03, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x03, "1000" ) PORT_DIPSETTING( 0x02, "1500" ) PORT_DIPSETTING( 0x01, "2000" ) PORT_DIPSETTING( 0x00, "3000" ) PORT_DIPNAME( 0x0c, 0x0c, "Min Credits To Start" ) PORT_DIPSETTING( 0x0c, "1" ) PORT_DIPSETTING( 0x08, "2" ) PORT_DIPSETTING( 0x04, "3" ) PORT_DIPSETTING( 0x00, "5" ) PORT_DIPUNKNOWN( 0x10, 0x10 ) // shown in test mode PORT_DIPUNKNOWN( 0x20, 0x20 ) PORT_DIPNAME( 0x40, 0x40, "Hide Title" ) PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_START("DSW3") PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x00, DEF_STR( 1C_4C ) ) PORT_DIPNAME( 0x0c, 0x0c, "Credits Per Note" ) PORT_DIPSETTING( 0x0c, "10" ) PORT_DIPSETTING( 0x08, "20" ) PORT_DIPSETTING( 0x04, "50" ) PORT_DIPSETTING( 0x00, "100" ) PORT_DIPNAME( 0x10, 0x10, "Max Note Credits" ) PORT_DIPSETTING( 0x10, "500" ) PORT_DIPSETTING( 0x00, "9999" ) PORT_DIPNAME( 0x20, 0x20, "Money Type" ) PORT_DIPSETTING( 0x20, "Coins" ) // use bits 0-1 PORT_DIPSETTING( 0x00, "Notes" ) // use bits 2-3 PORT_DIPNAME( 0x40, 0x00, "Pay Out Type" ) PORT_DIPSETTING( 0x00, "Coins" ) PORT_DIPSETTING( 0x40, "Notes" ) PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x80, DEF_STR( On ) ) PORT_START("DSW4") PORT_DIPUNKNOWN( 0x01, 0x01 ) PORT_DIPUNKNOWN( 0x02, 0x02 ) PORT_DIPUNKNOWN( 0x04, 0x04 ) PORT_DIPUNKNOWN( 0x08, 0x08 ) PORT_DIPUNKNOWN( 0x10, 0x10 ) PORT_DIPUNKNOWN( 0x20, 0x20 ) PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_START("COIN") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_LOW ) // keep pressed while booting PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE2 ) // shown in test mode PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Pay Out") PORT_CODE(KEYCODE_O) // clear coin PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(igs_hopper_r, (void *)0) // hopper switch PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) // bet PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) INPUT_PORTS_END static INPUT_PORTS_START( lhb ) PORT_START("DSW1") PORT_DIPNAME( 0x0f, 0x07, "Pay Out (%)" ) PORT_DIPSETTING( 0x0f, "96" ) PORT_DIPSETTING( 0x0e, "93" ) PORT_DIPSETTING( 0x0d, "90" ) PORT_DIPSETTING( 0x0c, "87" ) PORT_DIPSETTING( 0x0b, "84" ) PORT_DIPSETTING( 0x0a, "81" ) PORT_DIPSETTING( 0x09, "78" ) PORT_DIPSETTING( 0x08, "75" ) PORT_DIPSETTING( 0x07, "71" ) PORT_DIPSETTING( 0x06, "68" ) PORT_DIPSETTING( 0x05, "65" ) PORT_DIPSETTING( 0x04, "62" ) PORT_DIPSETTING( 0x03, "59" ) PORT_DIPSETTING( 0x02, "56" ) PORT_DIPSETTING( 0x01, "53" ) PORT_DIPSETTING( 0x00, "50" ) PORT_DIPNAME( 0x30, 0x30, "YAKUMAN Point" ) PORT_DIPSETTING( 0x30, "1" ) PORT_DIPSETTING( 0x20, "2" ) PORT_DIPSETTING( 0x10, "3" ) PORT_DIPSETTING( 0x00, "4" ) PORT_DIPNAME( 0xc0, 0xc0, "Max Bet" ) PORT_DIPSETTING( 0xc0, "1" ) PORT_DIPSETTING( 0x80, "5" ) PORT_DIPSETTING( 0x40, "10" ) PORT_DIPSETTING( 0x00, "20" ) PORT_START("DSW2") PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) ) 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, "Min Credits To Start" ) PORT_DIPSETTING( 0x0c, "1" ) PORT_DIPSETTING( 0x08, "2" ) PORT_DIPSETTING( 0x04, "3" ) PORT_DIPSETTING( 0x00, "5" ) PORT_DIPNAME( 0x70, 0x70, "DAI MANGUAN Cycle" ) PORT_DIPSETTING( 0x70, "300" ) // PORT_DIPSETTING( 0x60, "300" ) // PORT_DIPSETTING( 0x50, "300" ) // PORT_DIPSETTING( 0x40, "300" ) // PORT_DIPSETTING( 0x30, "300" ) // PORT_DIPSETTING( 0x20, "300" ) // PORT_DIPSETTING( 0x10, "300" ) // PORT_DIPSETTING( 0x00, "300" ) PORT_DIPNAME( 0x80, 0x80, "DAI MANGUAN Times" ) PORT_DIPSETTING( 0x80, "2" ) // PORT_DIPSETTING( 0x00, "2" ) PORT_START("DSW3") PORT_DIPNAME( 0x03, 0x03, "Max Credit" ) PORT_DIPSETTING( 0x03, "1000" ) PORT_DIPSETTING( 0x02, "2000" ) PORT_DIPSETTING( 0x01, "5000" ) PORT_DIPSETTING( 0x00, DEF_STR( No ) ) PORT_DIPNAME( 0x0c, 0x0c, "Max Note" ) PORT_DIPSETTING( 0x0c, "1000" ) PORT_DIPSETTING( 0x08, "2000" ) PORT_DIPSETTING( 0x04, "5000" ) PORT_DIPSETTING( 0x00, DEF_STR( No ) ) PORT_DIPNAME( 0x10, 0x10, "CPU Strength" ) PORT_DIPSETTING( 0x10, "Strong" ) PORT_DIPSETTING( 0x00, "Weak" ) PORT_DIPNAME( 0x20, 0x20, "Money Type" ) PORT_DIPSETTING( 0x20, "Coins" ) PORT_DIPSETTING( 0x00, "Notes" ) PORT_DIPNAME( 0xc0, 0xc0, "DONDEN Times" ) PORT_DIPSETTING( 0xc0, "0" ) PORT_DIPSETTING( 0x80, "3" ) PORT_DIPSETTING( 0x40, "5" ) PORT_DIPSETTING( 0x00, "8" ) PORT_START("DSW4") PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x02, 0x00, "In Game Music" ) PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x0c, 0x00, "Girls" ) PORT_DIPSETTING( 0x0c, DEF_STR( No ) ) PORT_DIPSETTING( 0x08, "Dressed" ) PORT_DIPSETTING( 0x04, "Underwear" ) PORT_DIPSETTING( 0x00, "Nude" ) PORT_DIPNAME( 0x10, 0x10, "Note Rate" ) PORT_DIPSETTING( 0x10, "5" ) PORT_DIPSETTING( 0x00, "10" ) PORT_DIPNAME( 0x20, 0x20, "Pay Out" ) PORT_DIPSETTING( 0x20, "Score" ) PORT_DIPSETTING( 0x00, "Coin" ) PORT_DIPNAME( 0x40, 0x40, "Coin In" ) PORT_DIPSETTING( 0x40, "Credit" ) PORT_DIPSETTING( 0x00, "Score" ) PORT_DIPNAME( 0x80, 0x80, "Last Chance" ) PORT_DIPSETTING( 0x00, DEF_STR( No ) ) PORT_DIPSETTING( 0x80, DEF_STR( Yes ) ) PORT_START("DSW5") PORT_DIPNAME( 0x01, 0x01, "In-Game Bet" ) PORT_DIPSETTING( 0x01, DEF_STR( No ) ) PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) PORT_DIPUNKNOWN( 0x02, 0x02 ) PORT_DIPUNKNOWN( 0x04, 0x04 ) PORT_DIPUNKNOWN( 0x08, 0x08 ) PORT_DIPUNKNOWN( 0x10, 0x10 ) PORT_DIPUNKNOWN( 0x20, 0x20 ) PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_START("COIN") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(igs_hopper_r, (void *)0) // hopper switch PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE2 ) // system reset PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_LOW ) // keep pressed while booting PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 ) // stats PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Pay Out") PORT_CODE(KEYCODE_O) // clear coins PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0") PORT_CODE(KEYCODE_0_PAD) // shown in test mode PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("KEY0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("KEY1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("KEY2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("KEY3") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("KEY4") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2) // shown in test mode PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) INPUT_PORTS_END static INPUT_PORTS_START( vbowl ) PORT_START("DSW1") PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_5C ) ) PORT_DIPNAME( 0x08, 0x08, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x08, DEF_STR( On ) ) PORT_DIPNAME( 0x10, 0x10, "Special Picture" ) /* Sexy Interlude pics */ PORT_DIPSETTING( 0x00, DEF_STR( No ) ) PORT_DIPSETTING( 0x10, DEF_STR( Yes ) ) PORT_DIPNAME( 0x20, 0x20, "Open Picture" ) PORT_DIPSETTING( 0x00, DEF_STR( No ) ) PORT_DIPSETTING( 0x20, DEF_STR( Yes ) ) PORT_DIPNAME( 0x40, 0x40, DEF_STR( Controls ) ) PORT_DIPSETTING( 0x40, DEF_STR( Joystick ) ) PORT_DIPSETTING( 0x00, DEF_STR( Trackball ) ) PORT_DIPNAME( 0x80, 0x80, DEF_STR( Free_Play ) ) PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_START("DSW2") PORT_DIPNAME( 0x03, 0x02, DEF_STR( Difficulty ) ) PORT_DIPSETTING( 0x03, DEF_STR( Easy ) ) // 5 PORT_DIPSETTING( 0x02, DEF_STR( Normal ) ) // 7 PORT_DIPSETTING( 0x01, DEF_STR( Medium ) ) // 9 PORT_DIPSETTING( 0x00, DEF_STR( Hard ) ) // 11 PORT_DIPNAME( 0x04, 0x04, "Spares To Win (Frames 1-5)" ) PORT_DIPSETTING( 0x04, "3" ) PORT_DIPSETTING( 0x00, "4" ) PORT_DIPNAME( 0x18, 0x18, "Points To Win (Frames 6-10)" ) PORT_DIPSETTING( 0x18, "160" ) PORT_DIPSETTING( 0x10, "170" ) PORT_DIPSETTING( 0x08, "180" ) PORT_DIPSETTING( 0x00, "190" ) PORT_DIPUNKNOWN( 0x20, 0x20 ) PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_START("DSW3") PORT_DIPNAME( 0x03, 0x03, "Cabinet ID" ) PORT_DIPSETTING( 0x03, "1" ) PORT_DIPSETTING( 0x02, "2" ) PORT_DIPSETTING( 0x01, "3" ) PORT_DIPSETTING( 0x00, "4" ) PORT_DIPNAME( 0x04, 0x04, "Linked Cabinets" ) PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPUNKNOWN( 0x08, 0x08 ) PORT_DIPUNKNOWN( 0x10, 0x10 ) PORT_DIPUNKNOWN( 0x20, 0x20 ) PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_SERVICE( 0x80, IP_ACTIVE_LOW ) PORT_START("DSW4") PORT_DIPUNKNOWN( 0x01, 0x01 ) PORT_DIPUNKNOWN( 0x02, 0x02 ) PORT_DIPUNKNOWN( 0x04, 0x04 ) PORT_DIPUNKNOWN( 0x08, 0x08 ) PORT_DIPUNKNOWN( 0x10, 0x10 ) PORT_DIPUNKNOWN( 0x20, 0x20 ) PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_START("COIN") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_START("IN1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_START("AN0") PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(30) PORT_KEYDELTA(30) PORT_PLAYER(1) PORT_START("AN1") PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(30) PORT_KEYDELTA(30) PORT_PLAYER(1) INPUT_PORTS_END static INPUT_PORTS_START( vbowlj ) PORT_START("DSW1") PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_5C ) ) PORT_DIPNAME( 0x08, 0x08, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x08, DEF_STR( On ) ) PORT_DIPNAME( 0x10, 0x10, "Special Picture" ) /* Sexy Interlude pics */ PORT_DIPSETTING( 0x00, DEF_STR( No ) ) PORT_DIPSETTING( 0x10, DEF_STR( Yes ) ) PORT_DIPNAME( 0x20, 0x20, DEF_STR( Controls ) ) PORT_DIPSETTING( 0x20, DEF_STR( Joystick ) ) PORT_DIPSETTING( 0x00, DEF_STR( Trackball ) ) PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_DIPNAME( 0x80, 0x80, DEF_STR( Free_Play ) ) PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_START("DSW2") PORT_DIPNAME( 0x03, 0x02, DEF_STR( Difficulty ) ) PORT_DIPSETTING( 0x03, DEF_STR( Easy ) ) // 5 PORT_DIPSETTING( 0x02, DEF_STR( Normal ) ) // 7 PORT_DIPSETTING( 0x01, DEF_STR( Medium ) ) // 9 PORT_DIPSETTING( 0x00, DEF_STR( Hard ) ) // 11 PORT_DIPNAME( 0x04, 0x04, "Spares To Win (Frames 1-5)" ) PORT_DIPSETTING( 0x04, "3" ) PORT_DIPSETTING( 0x00, "4" ) PORT_DIPNAME( 0x18, 0x18, "Points To Win (Frames 6-10)" ) PORT_DIPSETTING( 0x18, "160" ) PORT_DIPSETTING( 0x10, "170" ) PORT_DIPSETTING( 0x08, "180" ) PORT_DIPSETTING( 0x00, "190" ) PORT_DIPUNKNOWN( 0x20, 0x20 ) PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_START("DSW3") PORT_DIPNAME( 0x03, 0x03, "Cabinet ID" ) PORT_DIPSETTING( 0x03, "1" ) PORT_DIPSETTING( 0x02, "2" ) PORT_DIPSETTING( 0x01, "3" ) PORT_DIPSETTING( 0x00, "4" ) PORT_DIPNAME( 0x04, 0x04, "Linked Cabinets" ) PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPUNKNOWN( 0x08, 0x08 ) PORT_DIPUNKNOWN( 0x10, 0x10 ) PORT_DIPUNKNOWN( 0x20, 0x20 ) PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_SERVICE( 0x80, IP_ACTIVE_LOW ) PORT_START("DSW4") PORT_DIPUNKNOWN( 0x01, 0x01 ) PORT_DIPUNKNOWN( 0x02, 0x02 ) PORT_DIPUNKNOWN( 0x04, 0x04 ) PORT_DIPUNKNOWN( 0x08, 0x08 ) PORT_DIPUNKNOWN( 0x10, 0x10 ) PORT_DIPUNKNOWN( 0x20, 0x20 ) PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_START("COIN") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_START("IN1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_START("AN0") PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(30) PORT_KEYDELTA(30) PORT_PLAYER(1) PORT_START("AN1") PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(30) PORT_KEYDELTA(30) PORT_PLAYER(1) INPUT_PORTS_END static INPUT_PORTS_START( xymg ) PORT_START("DSW1") PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x00, DEF_STR( 1C_4C ) ) PORT_DIPNAME( 0x0c, 0x0c, "Credits Per Note" ) PORT_DIPSETTING( 0x0c, "10" ) PORT_DIPSETTING( 0x08, "20" ) PORT_DIPSETTING( 0x04, "50" ) PORT_DIPSETTING( 0x00, "100" ) PORT_DIPNAME( 0x10, 0x10, "Max Note Credits" ) PORT_DIPSETTING( 0x10, "500" ) PORT_DIPSETTING( 0x00, "9999" ) PORT_DIPNAME( 0x20, 0x20, "Money Type" ) PORT_DIPSETTING( 0x20, "Coins" ) // use bits 0-1 PORT_DIPSETTING( 0x00, "Notes" ) // use bits 2-3 PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x80, DEF_STR( On ) ) PORT_START("DSW2") PORT_DIPNAME( 0x03, 0x03, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x03, "1000" ) PORT_DIPSETTING( 0x02, "1500" ) PORT_DIPSETTING( 0x01, "2000" ) PORT_DIPSETTING( 0x00, "3000" ) PORT_DIPNAME( 0x0c, 0x0c, "Min Credits To Start" ) PORT_DIPSETTING( 0x0c, "1" ) PORT_DIPSETTING( 0x08, "2" ) PORT_DIPSETTING( 0x04, "3" ) PORT_DIPSETTING( 0x00, "5" ) PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) // shown in test mode PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPUNKNOWN( 0x20, 0x20 ) PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_START("DSW3") PORT_DIPUNKNOWN( 0x01, 0x01 ) PORT_DIPUNKNOWN( 0x02, 0x02 ) PORT_DIPUNKNOWN( 0x04, 0x04 ) PORT_DIPUNKNOWN( 0x08, 0x08 ) PORT_DIPUNKNOWN( 0x10, 0x10 ) PORT_DIPUNKNOWN( 0x20, 0x20 ) PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_START("COIN") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(igs_hopper_r, (void *)0) // hopper switch PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_LOW ) // keep pressed while booting PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 ) // stats PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Pay Out") PORT_CODE(KEYCODE_O) // clear coin PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("KEY0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("KEY1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("KEY2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("KEY3") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("KEY4") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) INPUT_PORTS_END /*************************************************************************** Machine Drivers ***************************************************************************/ // for debugging #if 0 static const gfx_layout layout_8x8x4 = { 8,8, RGN_FRAC(1,1), 4, { STEP4(0,1) }, { 4, 0, 12, 8, 20,16, 28,24 }, { STEP8(0,8*4) }, 8*8*4 }; static const gfx_layout layout_16x16x4 = { 16,16, RGN_FRAC(1,1), 4, { STEP4(0,1) }, { 4, 0, 12, 8, 20,16, 28,24, 36,32, 44,40, 52,48, 60,56 }, { STEP16(0,16*4) }, 16*16*4 }; static const gfx_layout layout_8x8x8 = { 8,8, RGN_FRAC(1,1), 8, { STEP8(0,1) }, { STEP8(0,8) }, { STEP8(0,8*8) }, 8*8*8 }; static const gfx_layout layout_16x16x8 = { 16,16, RGN_FRAC(1,1), 8, { STEP8(0,1) }, { STEP16(0,8) }, { STEP16(0,16*8) }, 16*16*8 }; static const gfx_layout layout_16x16x1 = { 16,16, RGN_FRAC(1,1), 1, { 0 }, { STEP16(15,-1) }, { STEP16(0,16*1) }, 16*16*1 }; static GFXDECODE_START( igs011 ) GFXDECODE_ENTRY( "blitter", 0, layout_8x8x4, 0, 0x80 ) GFXDECODE_ENTRY( "blitter", 0, layout_16x16x4, 0, 0x80 ) GFXDECODE_ENTRY( "blitter", 0, layout_8x8x8, 0, 0x08 ) GFXDECODE_ENTRY( "blitter", 0, layout_16x16x8, 0, 0x08 ) GFXDECODE_END static GFXDECODE_START( igs011_hi ) GFXDECODE_ENTRY( "blitter", 0, layout_8x8x4, 0, 0x80 ) GFXDECODE_ENTRY( "blitter", 0, layout_16x16x4, 0, 0x80 ) GFXDECODE_ENTRY( "blitter", 0, layout_8x8x8, 0, 0x08 ) GFXDECODE_ENTRY( "blitter", 0, layout_16x16x8, 0, 0x08 ) GFXDECODE_ENTRY( "blitter_hi", 0, layout_16x16x1, 0, 0x80 ) GFXDECODE_END #endif static MACHINE_CONFIG_START( igs011_base, igs011_state ) MCFG_CPU_ADD("maincpu",M68000, XTAL_22MHz/3) MCFG_NVRAM_ADD_0FILL("nvram") /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) MCFG_SCREEN_SIZE(512, 256) MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 240-1) MCFG_SCREEN_UPDATE( igs011 ) MCFG_PALETTE_LENGTH(0x800) // MCFG_GFXDECODE(igs011) MCFG_VIDEO_START( igs011 ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_OKIM6295_ADD("oki", XTAL_22MHz/21, OKIM6295_PIN7_HIGH) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END static INTERRUPT_GEN( drgnwrld_interrupt ) { switch (cpu_getiloops(device)) { case 0: device_set_input_line(device, 6, HOLD_LINE); break; default: case 1: device_set_input_line(device, 5, HOLD_LINE); break; } } static MACHINE_CONFIG_DERIVED( drgnwrld, igs011_base ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(drgnwrld) MCFG_CPU_VBLANK_INT_HACK(drgnwrld_interrupt,1+4) // lev5 frequency drives the music tempo MCFG_SOUND_ADD("ymsnd", YM3812, 3579545) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 2.0) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( drgnwrld_igs012, drgnwrld ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(drgnwrld_igs012) MACHINE_CONFIG_END static INTERRUPT_GEN( lhb_interrupt ) { igs011_state *state = device->machine().driver_data(); if (!state->m_lhb_irq_enable) return; switch (cpu_getiloops(device)) { case 0: device_set_input_line(device, 3, HOLD_LINE); break; case 2: device_set_input_line(device, 6, HOLD_LINE); break; default: // It reads the inputs. Must be called more than once for test mode on boot to work device_set_input_line(device, 5, HOLD_LINE); break; } } static MACHINE_CONFIG_DERIVED( lhb, igs011_base ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(lhb) MCFG_CPU_VBLANK_INT_HACK(lhb_interrupt,3+1) MACHINE_CONFIG_END static INTERRUPT_GEN( wlcc_interrupt ) { switch (cpu_getiloops(device)) { case 0: device_set_input_line(device, 3, HOLD_LINE); break; case 1: device_set_input_line(device, 6, HOLD_LINE); break; } } static MACHINE_CONFIG_DERIVED( wlcc, igs011_base ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(wlcc) MCFG_CPU_VBLANK_INT_HACK(wlcc_interrupt,2) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( xymg, igs011_base ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(xymg) MCFG_CPU_VBLANK_INT_HACK(wlcc_interrupt,2) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( lhb2, igs011_base ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(lhb2) MCFG_CPU_VBLANK_INT_HACK(drgnwrld_interrupt,1+4) // lev5 frequency drives the music tempo // MCFG_GFXDECODE(igs011_hi) MCFG_SOUND_ADD("ymsnd", YM2413, 3579545) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 2.0) MACHINE_CONFIG_END static void sound_irq(device_t *device, int state) { // cputag_set_input_line(machine, "maincpu", 3, state); } static INTERRUPT_GEN( vbowl_interrupt ) { switch (cpu_getiloops(device)) { case 0: device_set_input_line(device, 4, HOLD_LINE); break; case 1: device_set_input_line(device, 5, HOLD_LINE); break; case 2: device_set_input_line(device, 6, HOLD_LINE); break; default: case 3: device_set_input_line(device, 3, HOLD_LINE); break; // sound } } static MACHINE_CONFIG_DERIVED( vbowl, igs011_base ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(vbowl) MCFG_CPU_VBLANK_INT_HACK(vbowl_interrupt,3+4) MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_EOF(vbowl) // trackball // MCFG_GFXDECODE(igs011_hi) MCFG_DEVICE_REMOVE("oki") MCFG_ICS2115_ADD("ics", 0, sound_irq) // MCFG_SOUND_ADD("ics", ICS2115, 0) // MCFG_SOUND_CONFIG(vbowl_ics2115_interface) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 5.0) MACHINE_CONFIG_END /*************************************************************************** ROMs Loading ***************************************************************************/ /*************************************************************************** Dragon World (World, V040O) (C) 1997 IGS / ALTA Chips: 1x 68000 (main) 1x AC0A26 (equivalent to OKI M6295)(sound) 1x 6564L (equivalent to YM3812)(sound) 1x custom IGS003c (marked on PCB as 8255) 1x oscillator 22.0000MHz (main) 1x oscillator 3.579545MHz (sound) 1x custom IGS011 (FPGA?) ROMs: 1x MX27C4096 (u3)(main) (dumped) 1x custom IGSD0301 (mask rom) (not dumped yet) 1x NEC D27C2001D (IGSS0302)(sound) (not dumped yet) Notes: 1x JAMMA edge connector 1x trimmer (volume) 3x 8 switches dips PCB serial number is: 0105-5 ***************************************************************************/ ROM_START( drgnwrld ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "chinadr-v0400.u3", 0x00000, 0x80000, CRC(a6daa2b8) SHA1(0cbfd001c1fd82a6385453d1c2a808add67746af) ) ROM_REGION( 0x400000, "blitter", 0 ) ROM_LOAD( "igs-d0301.u39", 0x000000, 0x400000, CRC(78ab45d9) SHA1(c326ee9f150d766edd6886075c94dea3691b606d) ) ROM_REGION( 0x40000, "oki", 0 ) ROM_LOAD( "igs-s0302.u43", 0x00000, 0x40000, CRC(fde63ce1) SHA1(cc32d2cace319fe4d5d0aa96d7addb2d1def62f2) ) ROM_END /*************************************************************************** Dragon World (World, V030O) (C) 1995 IGS Chips: 1x MC68HC000P10 U2 (main) 1x CUSTOM IGS011 U24 1x oscillator 22.000MHz U25 1x oscillator 3.579545MHz X1 ROMs: 1x MX27C4096 U3 (main) Notes: 1x JAMMA edge connector 1x trimmer (volume) 3x 8 switches dips PCB serial number is: 0105-1 ***************************************************************************/ ROM_START( drgnwrldv30 ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "chinadr-v0300.u3", 0x00000, 0x80000, CRC(5ac243e5) SHA1(50cccff0307239187ac2b65331ad2bcc666f8033) ) ROM_REGION( 0x400000, "blitter", 0 ) ROM_LOAD( "igs-d0301.u39", 0x000000, 0x400000, CRC(78ab45d9) SHA1(c326ee9f150d766edd6886075c94dea3691b606d) ) ROM_REGION( 0x40000, "oki", 0 ) ROM_LOAD( "igs-s0302.u43", 0x00000, 0x40000, CRC(fde63ce1) SHA1(cc32d2cace319fe4d5d0aa96d7addb2d1def62f2) ) ROM_END /*************************************************************************** Dragon World (World, V021O) (C) 1995 IGS Chips: 1x MC68HC000P10 u2 16/32-bit Microprocessor - main 1x AR17961-AP0642 u41 4-Channel Mixing ADCPM Voice Synthesis LSI - sound 1x 6564L u40 FM Operator Type-L II (OPL II) - sound 1x LS138S u42 sound 1x LM7805CV u38 sound 1x UPC1242H u46 sound 1x IGS003 u10 Programmable Peripheral Interface 1x oscillator 22.0000MHz u25 1x oscillator 3.579545MHz x1 ROMs: 1x M27C4096 u3 (main) dumped 1x custom IGSD0301 u39 not dumped yet x NEC D27C2001D u43 (sound) dumped RAMs: 2x UM6264 u4,u5 2x CXK5863AP u31,u32 PLDs: 1x custom IGS011 (FPGA?) u24 not dumped 1x custom IGS012 (FPGA?) u1 not dumped 2x PAL16L8A u17,u18 read protected 2x ATF22V10B u15,u45 read protected 1x ATV750 u16 read protected ***************************************************************************/ ROM_START( drgnwrldv21 ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "china-dr-v-0210.u3", 0x00000, 0x80000, CRC(60c2b018) SHA1(58563e3ccb51bd9d8362aa17c23743bb5a593c3b) ) ROM_REGION( 0x400000, "blitter", 0 ) ROM_LOAD( "igs-d0301.u39", 0x000000, 0x400000, CRC(78ab45d9) SHA1(c326ee9f150d766edd6886075c94dea3691b606d) ) ROM_REGION( 0x40000, "oki", 0 ) ROM_LOAD( "china-dr-sp.u43", 0x00000, 0x40000, CRC(fde63ce1) SHA1(cc32d2cace319fe4d5d0aa96d7addb2d1def62f2) ) ROM_END /*************************************************************************** Chuugokuryuu (china dragon jpn ver.) (c)IGS Distributed by ALTA MAIN CPU : 68000 I/O : IGS003 (=8255) SOUND ? : 6564L (=OPL?) , AR17961 (=M6295?) CRTC ? : IGS011 SOUND CPU? : IGSD0301 (DIP 42P) OSC : 22Mhz , 3.579545Mhz DIPSW : 8bitx 3 (SW3 is not used) OTHER : IGS012 MAIN PRG : "CHINA DRAGON U020J" (japan) SOUND PRG? : "CHINA DRAGON SP" SOUND DATA?: "CHINA DRAGON U44" ***************************************************************************/ ROM_START( drgnwrldv20j ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "china_jp.v20", 0x00000, 0x80000, CRC(9e018d1a) SHA1(fe14e6344434cabf43685e50fd49c90f05f565be) ) ROM_REGION( 0x420000, "blitter", 0 ) // igs-d0301.u39 wasn't in this set ROM_LOAD( "igs-d0301.u39", 0x000000, 0x400000, CRC(78ab45d9) SHA1(c326ee9f150d766edd6886075c94dea3691b606d) ) ROM_LOAD( "china.u44", 0x400000, 0x020000, CRC(10549746) SHA1(aebd83796679c85b43ad514b2771897f94e61294) ) // 1xxxxxxxxxxxxxxxx = 0x00 ROM_REGION( 0x40000, "oki", 0 ) ROM_LOAD( "igs-s0302.u43", 0x00000, 0x40000, CRC(fde63ce1) SHA1(cc32d2cace319fe4d5d0aa96d7addb2d1def62f2) ) // original label: "sp" ROM_END ROM_START( drgnwrldv21j ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "v-021j", 0x00000, 0x80000, CRC(2f87f6e4) SHA1(d43065b078fdd9605c121988ad3092dce6cf0bf1) ) ROM_REGION( 0x420000, "blitter", 0 ) ROM_LOAD( "igs-d0301.u39", 0x000000, 0x400000, CRC(78ab45d9) SHA1(c326ee9f150d766edd6886075c94dea3691b606d) ) ROM_LOAD( "cg", 0x400000, 0x020000, CRC(2dda0be3) SHA1(587b7cab747d4336515c98eb3365341bb6c7e5e4) ) ROM_REGION( 0x40000, "oki", 0 ) ROM_LOAD( "igs-s0302.u43", 0x00000, 0x40000, CRC(fde63ce1) SHA1(cc32d2cace319fe4d5d0aa96d7addb2d1def62f2) ) // original label: "sp" ROM_END /*************************************************************************** Dong Fang Zhi Zhu (Hong Kong version of Zhong Guo Long, V011H) ***************************************************************************/ ROM_START( drgnwrldv11h ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "c_drgn_hk.u3", 0x00000, 0x80000, CRC(182037ce) SHA1(141b698777533e57493e588d2526523d4bd3e17d) ) ROM_REGION( 0x400000, "blitter", 0 ) ROM_LOAD( "igs-d0301.u39", 0x000000, 0x400000, CRC(78ab45d9) SHA1(c326ee9f150d766edd6886075c94dea3691b606d) ) ROM_REGION( 0x40000, "oki", 0 ) ROM_LOAD( "igs-s0302.u43", 0x00000, 0x40000, CRC(fde63ce1) SHA1(cc32d2cace319fe4d5d0aa96d7addb2d1def62f2) ) ROM_END /*************************************************************************** Zhong Guo Long (China, V010C) (C) 1995 IGS Chips: CPU 1x MC68HC000P10 (main) 1x AR17961-AP0642 (equivalent to OKI M6295)(sound) 1x 6564L (equivalent to YM3812)(sound) 1x LS138S (sound) 1x LM7805CV (sound) 1x UPC1242H (sound) 1x custom IGS003 (marked on PCB as 8255) 1x oscillator 22.0000MHz (main) 1x oscillator 3.579545MHz (sound) 1x custom IGS011 (FPGA?) ROMs: 1x maskrom 256x16 IGSD0303 (u3)(main) 1x maskrom 2Mx16 UM23V32000 (IGSD0301)(u39)(gfx) 1x empty socket for 27C040 (u44) 1x maskrom NEC D27C2001D (IGSS0302)(u43)(sound) 2x PAL16L8ACN (u17,u18)(read protected) 2x PALATF22V10B (u15,u45) 1x empty space for additional PALATV750 (u16) Notes: 1x JAMMA edge connector 1x trimmer (volume) 3x 8x2 switches DIP The PCB is perfectly working, empty spaces and empty sockets are clearly intended to be empty. 25/07/2007 f205v Corrado Tomaselli Gnoppi ***************************************************************************/ ROM_START( drgnwrldv10c ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "igs-d0303.u3", 0x00000, 0x80000, CRC(3b3c29bb) SHA1(77b7e58104314303985c283cce3aec40bd7b9334) ) ROM_REGION( 0x400000, "blitter", 0 ) //ROM_LOAD( "igs-0301.u39", 0x000000, 0x400000, CRC(655ab941) SHA1(4bbefb27e8971446998508969661042c5111bc72) ) // bad dump ROM_LOAD( "igs-d0301.u39", 0x000000, 0x400000, CRC(78ab45d9) SHA1(c326ee9f150d766edd6886075c94dea3691b606d) ) ROM_REGION( 0x40000, "oki", 0 ) ROM_LOAD( "igs-s0302.u43", 0x00000, 0x40000, CRC(fde63ce1) SHA1(cc32d2cace319fe4d5d0aa96d7addb2d1def62f2) ) ROM_REGION( 0x40000, "plds", 0 ) ROM_LOAD( "ccdu15.u15", 0x000, 0x2e5, CRC(a15fce69) SHA1(3e38d75c7263bfb36aebdbbd55ebbdd7ca601633) ) //ROM_LOAD( "ccdu17.u17.bad.dump", 0x000, 0x104, CRC(e9cd78fb) SHA1(557d3e7ef3b25c1338b24722cac91bca788c02b8) ) //ROM_LOAD( "ccdu18.u18.bad.dump", 0x000, 0x104, CRC(e9cd78fb) SHA1(557d3e7ef3b25c1338b24722cac91bca788c02b8) ) ROM_LOAD( "ccdu45.u45", 0x000, 0x2e5, CRC(a15fce69) SHA1(3e38d75c7263bfb36aebdbbd55ebbdd7ca601633) ) ROM_END /*************************************************************************** Wan Li Chang Cheng (The Great Wall) Other files in the zip: 5.942 16-6126.G16 14.488 U3-9911.G22 14.488 U4-82E6.G22 14.488 U5-6C5E.G22 ***************************************************************************/ ROM_START( wlcc ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "wlcc4096.rom", 0x00000, 0x80000, CRC(3b16729f) SHA1(4ef4e5cbd6ccc65775e36c2c8b459bc1767d6574) ) ROM_CONTINUE ( 0x00000, 0x80000 ) // 1ST+2ND IDENTICAL ROM_REGION( 0x280000, "blitter", ROMREGION_ERASE00 ) ROM_LOAD( "m0201-ig.160", 0x000000, 0x200000, CRC(ec54452c) SHA1(0ee7ffa3d4845af083944e64faf5a1c78247aaa2) ) ROM_LOAD( "wlcc.gfx", 0x200000, 0x080000, CRC(1f7ad299) SHA1(ab0a8fb31906519b9352ba172def48456e8d565c) ) ROM_REGION( 0x80000, "oki", 0 ) ROM_LOAD( "040-c3c2.snd", 0x00000, 0x80000, CRC(220949aa) SHA1(1e0dba168a0687d32aaaed42714ae24358f4a3e7) ) // 2 banks ROM_CONTINUE( 0x00000, 0x80000 ) // 1ST+2ND IDENTICAL ROM_END /*************************************************************************** Long Hu Bang (V035C) Other files in the zip: 5.938 16V8.jed 14.464 LHB-U33.jed 14.488 LHB-U34.jed 14.488 LHB-U35.jed ***************************************************************************/ ROM_START( lhb ) ROM_REGION( 0x80000, "maincpu", 0 ) // identical to LHB-4096 ROM_LOAD16_WORD_SWAP( "v305j-409", 0x00000, 0x80000, CRC(701de8ef) SHA1(4a77160f642f4de02fa6fbacf595b75c0d4a505d) ) ROM_REGION( 0x200000, "blitter", 0 ) ROM_LOAD( "m0201-ig.160", 0x000000, 0x200000, CRC(ec54452c) SHA1(0ee7ffa3d4845af083944e64faf5a1c78247aaa2) ) ROM_REGION( 0x80000, "oki", 0 ) // identical to 040-c3c2.snd ROM_LOAD( "m0202.snd", 0x00000, 0x80000, CRC(220949aa) SHA1(1e0dba168a0687d32aaaed42714ae24358f4a3e7) ) // 2 banks ROM_CONTINUE( 0x00000, 0x80000 ) // 1ST+2ND IDENTICAL ROM_END /*************************************************************************** Long Hu Bang (V033C) PCB Layout ---------- IGS PCB NO-T0093 |---------------------------------------| |uPD1242H VOL DSW5 | | IGS_M0202 | | AR17961 DSW4 | | CY7C185 | | DSW3 | | 8255 DSW2 CY7C185 | | DSW1 | |1 | |8 DIP32 | |W |-------| | |A | | IGS_M0201 | |Y BATTERY |IGS011 | | | | | PAL | | |-------| | | TC524256 | | MAJ_V-033C | | TC524256 | |1 6264 | |0 TC524256 | |W 6264 22.285MHz | |A PAL TC524256 | |Y PAL | | SPDT_SW PAL 68000 | |---------------------------------------| Notes: Uses common 10-way/18-way Mahjong pinout TC524256 - Toshiba TC524256BZ-80 256k x4 Dual Port VRAM (ZIP28) CY7C185 - Cypress CY7C185-20PC 8k x8 SRAM (DIP28) 6264 - UT6264PC-70LL 8k x8 SRAM (DIP28) IGS011 - Custom IGS IC (QFP160) AR17961 - == OkiM6295 (QFP44) DIP32 - Empty socket, maybe a ROM missing, maybe not used? ROMs - MAJ_V-033C - Main Program (27C4096) IGS_M0201 - Graphics (16M maskROM) IGS_M0202 - OKI samples (4M maskROM) ***************************************************************************/ ROM_START( lhbv33c ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "maj_v-033c.u30", 0x00000, 0x80000, CRC(02a0b716) SHA1(cd0ee32ea69f66768196b0e9b4df0fae3af84ed3) ) ROM_REGION( 0x200000, "blitter", 0 ) ROM_LOAD( "igs_m0201.u15", 0x000000, 0x200000, CRC(ec54452c) SHA1(0ee7ffa3d4845af083944e64faf5a1c78247aaa2) ) ROM_REGION( 0x80000, "oki", 0 ) // identical to 040-c3c2.snd ROM_LOAD( "igs_m0202.u39", 0x00000, 0x80000, CRC(106ac5f7) SHA1(5796a880c3424e3d2251b2223a0e594957afecaf) ) // 2 banks ROM_END /*************************************************************************** Da Ban Cheng PCB Layout ---------- IGS PCB NO-T0084-1 |---------------------------------------| |uPD1242H VOL DSW5 | | IGS_M0202 | | AR17961 DSW4 | | CY7C185 | | DSW3 | | 8255 DSW2 CY7C185 | | DSW1 | |1 | |8 MAJ-H_CG | |W PAL |-------| | |A | | IGS_M0201 | |Y PAL |IGS011 | | | | | PAL | | PAL |-------| | | TC524256 | | 6264 | | TC524256 | |1 6264 | |0 22.0994MHz TC524256 | |W MAJ-H_V027H | |A TC524256 | |Y BATTERY | | SPDT_SW 68000 | |---------------------------------------| Notes: Uses common 10-way/18-way Mahjong pinout TC524256 - Toshiba TC524256BZ-80 256k x4 Dual Port VRAM (ZIP28) CY7C185 - Cypress CY7C185-20PC 8k x8 SRAM (DIP28) 6264 - UT6264PC-70LL 8k x8 SRAM (DIP28) IGS011 - Custom IGS IC (QFP160) AR17961 - == OkiM6295 (QFP44) ROMs - MAJ-H_V027H- Main Program (27C4096) IGS_M0201 - Graphics (16M maskROM) IGS_M0202 - OKI samples (4M maskROM) MAJ-H_CG - Graphics (27c4001 EPROM) ***************************************************************************/ ROM_START( dbc ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "maj-h_v027h.u30", 0x00000, 0x80000, CRC(5d5ccd5b) SHA1(7a1223923f9a5825fd919ae9a36912284e705382) ) ROM_REGION( 0x280000, "blitter", 0 ) ROM_LOAD( "igs_m0201.u15", 0x000000, 0x200000, CRC(ec54452c) SHA1(0ee7ffa3d4845af083944e64faf5a1c78247aaa2) ) ROM_LOAD( "maj-h_cg.u8", 0x200000, 0x080000, CRC(ee45cc46) SHA1(ed011f758a02026222994aaea0677a4e9580fbda) ) // 1xxxxxxxxxxxxxxxxxx = 0x00 ROM_REGION( 0x80000, "oki", 0 ) ROM_LOAD( "igs_m0202.u39", 0x00000, 0x80000, CRC(106ac5f7) SHA1(5796a880c3424e3d2251b2223a0e594957afecaf) ) // 2 banks ROM_END /*************************************************************************** Mahjong Ryukobou Alta, 1995 PCB Layout ---------- IGS PCB NO-T0094 |------------------------------------| |UPC1242 VOL LM7805 DSW5 | | MAJ-J_SP DSW4 | | TD62003 M6295 DSW3 CY7C185 | | 8255 DSW2 CY7C185 | |M DSW1 MAJ-J_CG | |A | |H IGS011 IGS_M0201| |J PAL | |O | |N MAJ_V030J 22MHz | |G 6264 TC524256 | | 6264 TC524256 | | PAL TC524256 | | PAL 68000P10 TC524256 | | PAL | |------------------------------------| Notes: 68000 - clock 7.33333MHz [22/3] M6295 - clock 1.04762MHz [22/21] VSync - 60.0078Hz HSync - 15.620kHz ***************************************************************************/ ROM_START( ryukobou ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "maj_v030j.u30", 0x000000, 0x80000, CRC(186f2b4e) SHA1(380a3d94722d9f5fa5ec206ed0af6dbb8dd81715) ) ROM_REGION( 0x280000, "blitter", 0 ) ROM_LOAD( "igs_m0201.u15", 0x000000, 0x200000, CRC(ec54452c) SHA1(0ee7ffa3d4845af083944e64faf5a1c78247aaa2) ) ROM_LOAD( "maj-j_cg.u8", 0x200000, 0x080000, CRC(3c8de5d1) SHA1(51e43bfe7b5157112ded9a34b7032f73b7ffad11) ) ROM_REGION( 0x80000, "oki", 0 ) ROM_LOAD( "maj-j_sp.u39", 0x000000, 0x80000, CRC(82f670f3) SHA1(d10dd67e40aee0e1c4f4b2c1217ce0935cb86406) ) ROM_END /*************************************************************************** Long Hu Bang II IGS, 1996 PCB Layout ---------- IGS PCB NO-0115 |---------------------------------------------| | M6295 IGSS0503.U38 | | UM3567 3.57945MHz | | DSW3 | | DSW2 PAL | | IGSM0502.U5 DSW1 6264 | | IGSM0501.U7 PAL 6264 | | PAL | | PAL IGS011 | | PAL | | PAL | | | | MC68HC000P10 22MHz TC524258AZ-10| | 6264 8255 TC524258AZ-10| | BATT 6264 MAJ2V185H.U29 TC524258AZ-10| | TC524258AZ-10| |---------------------------------------------| Notes: 68k clock: 7.3333MHz (i.e. 22/3) M6295 clock: 1.0476MHz (i.e. 22/21) \ M6295 SS: HIGH / Therefore sampling freq = 7.936363636kHz (i.e. 1047600 / 132) UM3567: Compatible with YM2413, clock = 3.57945MHz HSync: 15.78kHz VSync: 60Hz ***************************************************************************/ ROM_START( lhb2 ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "maj2v185h.u29", 0x00000, 0x80000, CRC(2572d59a) SHA1(1d5362e209dadf8b21c10d1351d4bb038bfcaaef) ) ROM_REGION( 0x200000, "blitter", 0 ) ROM_LOAD( "igsm0501.u7", 0x00000, 0x200000, CRC(1c952bd6) SHA1(a6b6f1cdfb29647e81c032ffe59c94f1a10ceaf8) ) ROM_REGION( 0x80000, "blitter_hi", 0 ) // high order bit of graphics (5th bit) /* these are identical ..seems ok as igs number is same, only ic changed */ ROM_LOAD( "igsm0502.u4", 0x00000, 0x80000, CRC(5d73ae99) SHA1(7283aa3d6b15ceb95db80756892be46eb997ef15) ) ROM_LOAD( "igsm0502.u5", 0x00000, 0x80000, CRC(5d73ae99) SHA1(7283aa3d6b15ceb95db80756892be46eb997ef15) ) ROM_REGION( 0x80000, "oki", 0 ) ROM_LOAD( "igss0503.u38", 0x00000, 0x80000, CRC(c9609c9c) SHA1(f036e682b792033409966e84292a69275eaa05e5) ) // 2 banks ROM_END /*************************************************************************** Mahjong Nenrikishu SP IGS/Alta, 1998 PCB Layout ---------- IGS PCB NO-0115-5 |----------------------------------| |UPC1242H VOL M6295 SP | | U3567 LM7805 | | CG 3.579545MHz DSW3 | | M0502 DSW2 PAL | |M DSW1 6264 | |A M0501 6264 | |H PAL IGS011 | |J PAL | |O PAL | |N PAL | |G | | 22MHz M5M442256| | 68000P16 M5M442256| |RESET 6264 8255 M5M442256| | BATT 6264 V250J M5M442256| |----------------------------------| Notes: 68000 - Clock 7.3333MHz [22/2] U3567 - YM2413, clock 3.579545MHz M6295 - Clock 1.0476 [22/21]. pin 7 high VSync - 60.0052Hz HSync - 15.620kHz ***************************************************************************/ ROM_START( nkishusp ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "v250j.u29", 0x00000, 0x80000, CRC(500cb919) SHA1(76eed80b59c43e8cc1e258056cfe08b33a651852) ) ROM_REGION( 0x200000, "blitter", 0 ) ROM_LOAD( "m0501.u7", 0x00000, 0x200000, CRC(1c952bd6) SHA1(a6b6f1cdfb29647e81c032ffe59c94f1a10ceaf8) ) // Identical to igsm0501.u7 ROM_REGION( 0x80000, "blitter_hi", 0 ) // high order bit of graphics (5th bit) ROM_LOAD( "m0502.u6", 0x000000, 0x80000, CRC(5d73ae99) SHA1(7283aa3d6b15ceb95db80756892be46eb997ef15) ) // Identical to igsm0502.u4, igsm0502.u5 ROM_LOAD( "cg.u4", 0x000000, 0x80000, CRC(fe60f485) SHA1(d75e5f7a187161137a7f7b54d495d1cb3e1802a4) ) ROM_REGION( 0x80000, "oki", 0 ) ROM_LOAD( "sp.u38", 0x00000, 0x80000, CRC(d80e28e2) SHA1(c03441686e770227db6a2a41922fbb4284710571) ) ROM_END /*************************************************************************** Virtua Bowling by IGS PCB # 0101 U45 (27c240) is probably program next to 68000 processor U68,U69 probably images (27c800 - mask) U67, U66 sound and ???? (27c040) ASIC chip used SMD - custom chip IGS 011 F5XD 174 SMD - custom --near sound section - unknown -- i.d. rubbed off SMD - custom -- near inputs and 68000 IGS012 9441EK001 XTL near sound 33.868mhz XTL near 68000 22.0000mhz there are 4 banks of 8 dip switches ***************************************************************************/ ROM_START( vbowl ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "bowlingv101xcm.u45", 0x00000, 0x80000, BAD_DUMP CRC(ab8e3f1f) SHA1(69159e22559d6a26fe2afafd770aa640c192ba4b) ) ROM_REGION( 0x400000 * 2, "blitter", 0) ROM_LOAD( "vrbowlng.u69", 0x000000, 0x400000, CRC(b0d339e8) SHA1(a26a5e0202a78e8cdc562b10d64e14eadfa4e115) ) // extra space to expand every 4 bits to 8 ROM_REGION( 0x100000, "blitter_hi", ROMREGION_INVERT ) ROM_LOAD( "vrbowlng.u68", 0x000000, 0x100000, CRC(b0ce27e7) SHA1(6d3ef97edd606f384b1e05b152fbea12714887b7) ) ROM_REGION( 0x400000, "ics", 0 ) ROM_LOAD( "vrbowlng.u67", 0x00000, 0x80000, CRC(53000936) SHA1(e50c6216f559a9248c095bdfae05c3be4be79ff3) ) // 8 bit signed mono & u-law ROM_LOAD( "vrbowlng.u66", 0x80000, 0x80000, CRC(f62cf8ed) SHA1(c53e47e2c619ed974ad40ee4aaa4a35147ea8311) ) // 8 bit signed mono ROM_COPY( "ics", 0, 0x100000,0x100000) ROM_COPY( "ics", 0, 0x200000,0x100000) ROM_COPY( "ics", 0, 0x300000,0x100000) ROM_END ROM_START( vbowlj ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "vrbowlng.u45", 0x00000, 0x80000, CRC(091c19c1) SHA1(5a7bfbee357122e9061b38dfe988c3853b0984b0) ) // second half all 00 ROM_REGION( 0x400000 * 2, "blitter", 0) ROM_LOAD( "vrbowlng.u69", 0x000000, 0x400000, CRC(b0d339e8) SHA1(a26a5e0202a78e8cdc562b10d64e14eadfa4e115) ) // extra space to expand every 4 bits to 8 ROM_REGION( 0x100000, "blitter_hi", ROMREGION_INVERT ) ROM_LOAD( "vrbowlng.u68", 0x000000, 0x100000, CRC(b0ce27e7) SHA1(6d3ef97edd606f384b1e05b152fbea12714887b7) ) ROM_REGION( 0x400000, "ics", 0 ) ROM_LOAD( "vrbowlng.u67", 0x00000, 0x80000, CRC(53000936) SHA1(e50c6216f559a9248c095bdfae05c3be4be79ff3) ) // 8 bit signed mono & u-law ROM_LOAD( "vrbowlng.u66", 0x80000, 0x80000, CRC(f62cf8ed) SHA1(c53e47e2c619ed974ad40ee4aaa4a35147ea8311) ) // 8 bit signed mono ROM_COPY( "ics", 0, 0x100000,0x100000) ROM_COPY( "ics", 0, 0x200000,0x100000) ROM_COPY( "ics", 0, 0x300000,0x100000) ROM_END /*************************************************************************** Xing Yen Man Guan Other files in the zip: 14.484 U33-82E6.jed 14.484 U34-1.jed 14.484 U35-7068.jed ***************************************************************************/ ROM_START( xymg ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "u30-ebac.rom", 0x00000, 0x80000, CRC(7d272b6f) SHA1(15fd1be23cabdc77b747541f5cd9fed6b08be4ad) ) ROM_REGION( 0x280000, "blitter", 0 ) ROM_LOAD( "m0201-ig.160", 0x000000, 0x200000, CRC(ec54452c) SHA1(0ee7ffa3d4845af083944e64faf5a1c78247aaa2) ) ROM_LOAD( "ygxy-u8.rom", 0x200000, 0x080000, CRC(56a2706f) SHA1(98bf4b3153eef53dd449e2538b4b7ff2cc2fe6fa) ) ROM_REGION( 0x80000, "oki", 0 ) // identical to 040-c3c2.snd ROM_LOAD( "m0202.snd", 0x00000, 0x80000, CRC(220949aa) SHA1(1e0dba168a0687d32aaaed42714ae24358f4a3e7) ) // 2 banks ROM_CONTINUE( 0x00000, 0x80000 ) // 1ST+2ND IDENTICAL ROM_END /*************************************************************************** Game Drivers ***************************************************************************/ GAME( 1997, drgnwrld, 0, drgnwrld, drgnwrld, drgnwrld, ROT0, "IGS", "Dragon World (World, V040O)", 0 ) GAME( 1995, drgnwrldv30, drgnwrld, drgnwrld, drgnwrld, drgnwrldv30, ROT0, "IGS", "Dragon World (World, V030O)", 0 ) GAME( 1995, drgnwrldv21, drgnwrld, drgnwrld_igs012, drgnwrld, drgnwrldv21, ROT0, "IGS", "Dragon World (World, V021O)", 0 ) GAME( 1995, drgnwrldv21j, drgnwrld, drgnwrld_igs012, drgnwrldj, drgnwrldv21j, ROT0, "IGS / Alta", "Zhong Guo Long (Japan, V021J)", 0 ) GAME( 1995, drgnwrldv20j, drgnwrld, drgnwrld_igs012, drgnwrldj, drgnwrldv20j, ROT0, "IGS / Alta", "Zhong Guo Long (Japan, V020J)", 0 ) GAME( 1995, drgnwrldv10c, drgnwrld, drgnwrld, drgnwrldc, drgnwrldv10c, ROT0, "IGS", "Zhong Guo Long (China, V010C)", 0 ) GAME( 1995, drgnwrldv11h, drgnwrld, drgnwrld, drgnwrldc, drgnwrldv11h, ROT0, "IGS", "Dong Fang Zhi Zhu (Hong Kong, V011H)", 0 ) GAME( 1995, lhb, 0, lhb, lhb, lhb, ROT0, "IGS", "Long Hu Bang (China, V035C)", 0 ) GAME( 1995, lhbv33c, lhb, lhb, lhb, lhbv33c, ROT0, "IGS", "Long Hu Bang (China, V033C)", 0 ) GAME( 1995, dbc, lhb, lhb, lhb, dbc, ROT0, "IGS", "Da Ban Cheng (Hong Kong, V027H)", 0 ) GAME( 1995, ryukobou, lhb, lhb, lhb, ryukobou, ROT0, "IGS / Alta", "Mahjong Ryukobou (Japan, V030J)", 0 ) GAME( 1996, lhb2, 0, lhb2, lhb2, lhb2, ROT0, "IGS", "Long Hu Bang II (Hong Kong, V185H)", 0 ) GAME( 1996, xymg, 0, xymg, xymg, xymg, ROT0, "IGS", "Xing Yun Man Guan (China, V651C)", 0 ) GAME( 1996, wlcc, xymg, wlcc, wlcc, wlcc, ROT0, "IGS", "Wan Li Chang Cheng (China, V638C)", 0 ) GAME( 1996, vbowl, 0, vbowl, vbowl, vbowl, ROT0, "IGS", "Virtua Bowling (World, V101XCM)", GAME_IMPERFECT_SOUND ) GAME( 1996, vbowlj, vbowl, vbowl, vbowlj, vbowlj, ROT0, "IGS / Alta", "Virtua Bowling (Japan, V100JCM)", GAME_IMPERFECT_SOUND ) GAME( 1998, nkishusp, lhb2, lhb2, lhb2, nkishusp, ROT0, "IGS / Alta", "Mahjong Nenrikishu SP", GAME_NOT_WORKING )