diff options
Diffstat (limited to 'src/mame/drivers/vamphalf.c')
-rw-r--r-- | src/mame/drivers/vamphalf.c | 1387 |
1 files changed, 1387 insertions, 0 deletions
diff --git a/src/mame/drivers/vamphalf.c b/src/mame/drivers/vamphalf.c new file mode 100644 index 00000000000..50bac977ec8 --- /dev/null +++ b/src/mame/drivers/vamphalf.c @@ -0,0 +1,1387 @@ +/******************************************************************** + + Driver for common Hyperstone based games + + by bits from Angelo Salese, David Haywood, + Pierpaolo Prazzoli and Tomasz Slanina + + Games Supported: + + + Minigame Cool Collection (c) 1999 SemiCom + Lup Lup Puzzle (c) 1999 Omega System (version 3.0 and 2.9) + Puzzle Bang Bang (c) 1999 Omega System (version 2.8) + Super Lup Lup Puzzle (c) 1999 Omega System (version 4.0) + Vamp 1/2 (c) 1999 Danbi & F2 System (Korea version) + Date Quiz Go Go Episode 2 (c) 2000 SemiCom + Mission Craft (c) 2000 Sun (version 2.4) + Final Godori (c) 2001 SemiCom (version 2.20.5915) + Wyvern Wings (c) 2001 SemiCom + + Games Needed: + + Vamp 1/2 (World version) + + Real games bugs: + - dquizgo2: bugged video test + +*********************************************************************/ + +#include "driver.h" +#include "machine/eeprom.h" +#include "sound/2151intf.h" +#include "sound/okim6295.h" + +static UINT16 *tiles = NULL, *wram; +static UINT32 *tiles32 = NULL, *wram32; +static int flip_bit, flipscreen = 0; +static int palshift; + +static int semicom_prot_idx = 8; +static int semicom_prot_which = 0; +static UINT16 semicom_prot_data[2]; + +static UINT16 finalgdr_backupram_bank = 1; +static UINT8 *finalgdr_backupram; + +static READ16_HANDLER( oki_r ) +{ + if(offset) + return OKIM6295_status_0_r(0); + else + return 0; +} + +static WRITE16_HANDLER( oki_w ) +{ + if(offset) + OKIM6295_data_0_w(0, data); +} + +static READ32_HANDLER( oki32_r ) +{ + return OKIM6295_status_0_r(0) << 8; +} + +static WRITE32_HANDLER( oki32_w ) +{ + OKIM6295_data_0_w(0, (data >> 8) & 0xff); +} + +static READ16_HANDLER( ym2151_status_r ) +{ + if(offset) + return YM2151_status_port_0_r(0); + else + return 0; +} + +static WRITE16_HANDLER( ym2151_data_w ) +{ + if(offset) + YM2151_data_port_0_w(0, data); +} + +static WRITE16_HANDLER( ym2151_register_w ) +{ + if(offset) + YM2151_register_port_0_w(0, data); +} + +static READ32_HANDLER( ym2151_status32_r ) +{ + return YM2151_status_port_0_r(0) << 8; +} + +static WRITE32_HANDLER( ym2151_data32_w ) +{ + YM2151_data_port_0_w(0, (data >> 8) & 0xff); +} + +static WRITE32_HANDLER( ym2151_register32_w ) +{ + YM2151_register_port_0_w(0, (data >> 8) & 0xff); +} + +static READ16_HANDLER( eeprom_r ) +{ + if(offset) + return EEPROM_read_bit(); + else + return 0; +} + +static READ32_HANDLER( eeprom32_r ) +{ + return EEPROM_read_bit(); +} + +static WRITE16_HANDLER( eeprom_w ) +{ + if(offset) + { + EEPROM_write_bit(data & 0x01); + EEPROM_set_cs_line((data & 0x04) ? CLEAR_LINE : ASSERT_LINE ); + EEPROM_set_clock_line((data & 0x02) ? ASSERT_LINE : CLEAR_LINE ); + } +} + +static WRITE32_HANDLER( eeprom32_w ) +{ + EEPROM_write_bit(data & 0x01); + EEPROM_set_cs_line((data & 0x04) ? CLEAR_LINE : ASSERT_LINE ); + EEPROM_set_clock_line((data & 0x02) ? ASSERT_LINE : CLEAR_LINE ); +} + +static WRITE32_HANDLER( finalgdr_eeprom_w ) +{ + EEPROM_write_bit(data & 0x4000); + EEPROM_set_cs_line((data & 0x1000) ? CLEAR_LINE : ASSERT_LINE ); + EEPROM_set_clock_line((data & 0x2000) ? ASSERT_LINE : CLEAR_LINE ); +} + +static WRITE16_HANDLER( flipscreen_w ) +{ + if(offset) + { + flipscreen = data & flip_bit; + } +} + +static WRITE32_HANDLER( flipscreen32_w ) +{ + flipscreen = data & flip_bit; +} + +static WRITE32_HANDLER( paletteram32_w ) +{ + UINT16 paldata; + + COMBINE_DATA(&paletteram32[offset]); + + paldata = paletteram32[offset] & 0xffff; + palette_set_color_rgb(Machine, offset*2 + 1, pal5bit(paldata >> 10), pal5bit(paldata >> 5), pal5bit(paldata >> 0)); + + paldata = (paletteram32[offset] >> 16) & 0xffff; + palette_set_color_rgb(Machine, offset*2 + 0, pal5bit(paldata >> 10), pal5bit(paldata >> 5), pal5bit(paldata >> 0)); +} + +static READ32_HANDLER( wyvernwg_prot_r ) +{ + semicom_prot_idx--; + return (semicom_prot_data[semicom_prot_which] & (1 << semicom_prot_idx)) >> semicom_prot_idx; +} + +static WRITE32_HANDLER( wyvernwg_prot_w ) +{ + semicom_prot_which = data & 1; + semicom_prot_idx = 8; +} + +static READ32_HANDLER( finalgdr_prot_r ) +{ + semicom_prot_idx--; + return (semicom_prot_data[semicom_prot_which] & (1 << semicom_prot_idx)) ? 0x8000 : 0; +} + +static WRITE32_HANDLER( finalgdr_prot_w ) +{ +/* +41C6 +967E +446B +F94B +*/ + if(data == 0x41c6 || data == 0x446b) + semicom_prot_which = 0; + else + semicom_prot_which = 1; + + semicom_prot_idx = 8; +} + +static READ32_HANDLER( finalgdr_input0_r ) +{ + return readinputport(0) << 16; +} + +static READ32_HANDLER( finalgdr_input1_r ) +{ + return readinputport(1) << 16; +} + +static WRITE32_HANDLER( finalgdr_oki_bank_w ) +{ + OKIM6295_set_bank_base(0, 0x40000 * ((data & 0x300) >> 8)); +} + +static WRITE32_HANDLER( finalgdr_backupram_bank_w ) +{ + finalgdr_backupram_bank = (data & 0xff000000) >> 24; +} + +static READ32_HANDLER( finalgdr_backupram_r ) +{ + return finalgdr_backupram[offset + finalgdr_backupram_bank * 0x80] << 24; +} + +static WRITE32_HANDLER( finalgdr_backupram_w ) +{ + finalgdr_backupram[offset + finalgdr_backupram_bank * 0x80] = data >> 24; +} + +static WRITE32_HANDLER( finalgdr_prize_w ) +{ + if(data & 0x1000000) + { + // prize 1 + } + + if(data & 0x2000000) + { + // prize 2 + } + + if(data & 0x4000000) + { + // prize 3 + } +} + +static ADDRESS_MAP_START( common_map, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x00000000, 0x001fffff) AM_RAM AM_BASE(&wram) + AM_RANGE(0x40000000, 0x4003ffff) AM_RAM AM_BASE(&tiles) + AM_RANGE(0x80000000, 0x8000ffff) AM_RAM AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16) + AM_RANGE(0xfff00000, 0xffffffff) AM_ROM AM_REGION(REGION_USER1,0) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( common_32bit_map, ADDRESS_SPACE_PROGRAM, 32 ) + AM_RANGE(0x00000000, 0x001fffff) AM_RAM AM_BASE(&wram32) + AM_RANGE(0x40000000, 0x4003ffff) AM_RAM AM_BASE(&tiles32) + AM_RANGE(0x80000000, 0x8000ffff) AM_RAM AM_WRITE(paletteram32_w) AM_BASE(&paletteram32) + AM_RANGE(0xfff00000, 0xffffffff) AM_ROM AM_REGION(REGION_USER1,0) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( vamphalf_io, ADDRESS_SPACE_IO, 16 ) + AM_RANGE(0x0c0, 0x0c3) AM_READWRITE(oki_r, oki_w) + AM_RANGE(0x140, 0x143) AM_WRITE(ym2151_register_w) + AM_RANGE(0x144, 0x147) AM_READWRITE(ym2151_status_r, ym2151_data_w) + AM_RANGE(0x1c0, 0x1c3) AM_READ(eeprom_r) + AM_RANGE(0x240, 0x243) AM_WRITE(flipscreen_w) + AM_RANGE(0x600, 0x603) AM_READ(input_port_1_word_r) + AM_RANGE(0x604, 0x607) AM_READ(input_port_0_word_r) + AM_RANGE(0x608, 0x60b) AM_WRITE(eeprom_w) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( misncrft_io, ADDRESS_SPACE_IO, 16 ) + AM_RANGE(0x100, 0x103) AM_WRITE(flipscreen_w) + AM_RANGE(0x200, 0x203) AM_READ(input_port_0_word_r) + AM_RANGE(0x240, 0x243) AM_READ(input_port_1_word_r) + AM_RANGE(0x3c0, 0x3c3) AM_WRITE(eeprom_w) + AM_RANGE(0x580, 0x583) AM_READ(eeprom_r) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( coolmini_io, ADDRESS_SPACE_IO, 16 ) + AM_RANGE(0x200, 0x203) AM_WRITE(flipscreen_w) + AM_RANGE(0x300, 0x303) AM_READ(input_port_1_word_r) + AM_RANGE(0x304, 0x307) AM_READ(input_port_0_word_r) + AM_RANGE(0x308, 0x30b) AM_WRITE(eeprom_w) + AM_RANGE(0x4c0, 0x4c3) AM_READWRITE(oki_r, oki_w) + AM_RANGE(0x540, 0x543) AM_WRITE(ym2151_register_w) + AM_RANGE(0x544, 0x547) AM_READWRITE(ym2151_status_r, ym2151_data_w) + AM_RANGE(0x7c0, 0x7c3) AM_READ(eeprom_r) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( suplup_io, ADDRESS_SPACE_IO, 16 ) + AM_RANGE(0x020, 0x023) AM_WRITE(eeprom_w) + AM_RANGE(0x040, 0x043) AM_READ(input_port_0_word_r) + AM_RANGE(0x060, 0x063) AM_READ(input_port_1_word_r) + AM_RANGE(0x080, 0x083) AM_READWRITE(oki_r, oki_w) + AM_RANGE(0x0c0, 0x0c3) AM_WRITE(ym2151_register_w) + AM_RANGE(0x0c4, 0x0c7) AM_READWRITE(ym2151_status_r, ym2151_data_w) + AM_RANGE(0x100, 0x103) AM_READ(eeprom_r) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( wyvernwg_io, ADDRESS_SPACE_IO, 32 ) + AM_RANGE(0x1800, 0x1803) AM_READWRITE(wyvernwg_prot_r, wyvernwg_prot_w) + AM_RANGE(0x2000, 0x2003) AM_WRITE(flipscreen32_w) + AM_RANGE(0x2800, 0x2803) AM_READ(input_port_0_dword_r) + AM_RANGE(0x3000, 0x3003) AM_READ(input_port_1_dword_r) + AM_RANGE(0x5400, 0x5403) AM_WRITENOP // soundlatch + AM_RANGE(0x7000, 0x7003) AM_WRITE(eeprom32_w) + AM_RANGE(0x7c00, 0x7c03) AM_READ(eeprom32_r) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( finalgdr_io, ADDRESS_SPACE_IO, 32 ) + AM_RANGE(0x2400, 0x2403) AM_READ(finalgdr_prot_r) + AM_RANGE(0x2800, 0x2803) AM_WRITE(finalgdr_backupram_bank_w) + AM_RANGE(0x2c00, 0x2dff) AM_READWRITE(finalgdr_backupram_r, finalgdr_backupram_w) + AM_RANGE(0x3000, 0x3003) AM_WRITE(ym2151_register32_w) + AM_RANGE(0x3004, 0x3007) AM_READWRITE(ym2151_status32_r, ym2151_data32_w) + AM_RANGE(0x3800, 0x3803) AM_READ(finalgdr_input0_r) + AM_RANGE(0x3400, 0x3403) AM_READWRITE(oki32_r, oki32_w) + AM_RANGE(0x3c00, 0x3c03) AM_READ(finalgdr_input1_r) + AM_RANGE(0x4400, 0x4403) AM_READ(eeprom32_r) + AM_RANGE(0x6000, 0x6003) AM_READNOP //? + AM_RANGE(0x6000, 0x6003) AM_WRITE(finalgdr_eeprom_w) + AM_RANGE(0x6040, 0x6043) AM_WRITE(finalgdr_prot_w) + //AM_RANGE(0x6080, 0x6083) AM_WRITE(flipscreen32_w) //? + AM_RANGE(0x6060, 0x6063) AM_WRITE(finalgdr_prize_w) + AM_RANGE(0x60a0, 0x60a3) AM_WRITE(finalgdr_oki_bank_w) +ADDRESS_MAP_END + +/* +Sprite list: + +Offset+0 +-------- xxxxxxxx Y offs +-------x -------- Don't draw the sprite +x------- -------- Flip X +-x------ -------- Flip Y + +Offset+1 +xxxxxxxx xxxxxxxx Sprite number + +Offset+2 +-------- -xxxxxxx Color +or +-xxxxxxx -------- Color + +Offset+3 +-------x xxxxxxxx X offs +*/ + +static void draw_sprites(running_machine *machine, mame_bitmap *bitmap, int scrnum) +{ + const gfx_element *gfx = machine->gfx[0]; + UINT32 cnt; + int block, offs; + int code,color,x,y,fx,fy; + rectangle clip; + + clip.min_x = machine->screen[scrnum].visarea.min_x; + clip.max_x = machine->screen[scrnum].visarea.max_x; + + for (block=0; block<0x8000; block+=0x800) + { + if(flipscreen) + { + clip.min_y = 256 - (16-(block/0x800))*16; + clip.max_y = 256 - ((16-(block/0x800))*16)+15; + } + else + { + clip.min_y = (16-(block/0x800))*16; + clip.max_y = ((16-(block/0x800))*16)+15; + } + + for (cnt=0; cnt<0x800; cnt+=8) + { + offs = (block + cnt) / 2; + + // 16bit version + if(tiles != NULL) + { + if(tiles[offs] & 0x0100) continue; + + code = tiles[offs+1]; + color = (tiles[offs+2] >> palshift) & 0x7f; + + x = tiles[offs+3] & 0x01ff; + y = 256 - (tiles[offs] & 0x00ff); + + fx = tiles[offs] & 0x8000; + fy = tiles[offs] & 0x4000; + + } + // 32bit version + else + { + offs /= 2; + + if(tiles32[offs] & 0x01000000) continue; + + code = tiles32[offs] & 0xffff; + color = ((tiles32[offs+1] >> palshift) & 0x7f0000) >> 16; + + x = tiles32[offs+1] & 0x01ff; + y = 256 - ((tiles32[offs] & 0x00ff0000) >> 16); + + fx = tiles32[offs] & 0x80000000; + fy = tiles32[offs] & 0x40000000; + } + + if(flipscreen) + { + fx = !fx; + fy = !fy; + + x = 366 - x; + y = 256 - y; + } + + drawgfx(bitmap,gfx,code,color,fx,fy,x,y,&clip,TRANSPARENCY_PEN,0); + } + } +} + + +static VIDEO_UPDATE( common ) +{ + fillbitmap(bitmap,machine->pens[0],cliprect); + draw_sprites(machine, bitmap, screen); + return 0; +} + + +static INPUT_PORTS_START( common ) + PORT_START + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) + + PORT_START + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SERVICE ) + PORT_SERVICE_NO_TOGGLE( 0x0010, IP_ACTIVE_LOW ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) +INPUT_PORTS_END + +static INPUT_PORTS_START( finalgdr ) + PORT_START + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START2 ) + + PORT_START + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_SERVICE_NO_TOGGLE( 0x0080, IP_ACTIVE_LOW ) + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN ) +INPUT_PORTS_END + + +static const gfx_layout sprites_layout = +{ + 16,16, + RGN_FRAC(1,1), + 8, + { 0,1,2,3,4,5,6,7 }, + { 0,8,16,24, 32,40,48,56, 64,72,80,88 ,96,104,112,120 }, + { 0*128, 1*128, 2*128, 3*128, 4*128, 5*128, 6*128, 7*128, 8*128,9*128,10*128,11*128,12*128,13*128,14*128,15*128 }, + 16*128, +}; + +static GFXDECODE_START( vamphalf ) + GFXDECODE_ENTRY( REGION_GFX1, 0, sprites_layout, 0, 0x80 ) +GFXDECODE_END + + +static UINT8 suplup_default_nvram[128] = { + 0xE8, 0xFE, 0xFF, 0xFF, 0x10, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x96, 0x2D, 0xB4, 0x80, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA +}; + +static UINT8 misncrft_default_nvram[128] = { + 0x67, 0xBE, 0x00, 0x01, 0x80, 0xFE, 0x04, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA +}; + +static NVRAM_HANDLER( 93C46_vamphalf ) +{ + if (read_or_write) + EEPROM_save(file); + else + { + EEPROM_init(&eeprom_interface_93C46); + if (file) + { + EEPROM_load(file); + } + else + { + if (!strcmp(machine->gamedrv->name,"suplup")) EEPROM_set_data(suplup_default_nvram,128); + if (!strcmp(machine->gamedrv->name,"misncrft")) EEPROM_set_data(misncrft_default_nvram,128); + } + } +} + +static NVRAM_HANDLER( finalgdr ) +{ + if (read_or_write) + { + EEPROM_save(file); + mame_fwrite(file, finalgdr_backupram, 0x80*0x100); + } + else + { + EEPROM_init(&eeprom_interface_93C46); + if (file) + { + EEPROM_load(file); + mame_fread(file, finalgdr_backupram, 0x80*0x100); + } + } +} + +static ADDRESS_MAP_START( qs1000_prg_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE( 0x0000, 0xffff) AM_ROM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( qs1000_data_map, ADDRESS_SPACE_DATA, 8 ) + AM_RANGE( 0x0000, 0x007f) AM_RAM // RAM? wavetable registers? not sure. +ADDRESS_MAP_END + +static MACHINE_DRIVER_START( common ) + MDRV_CPU_ADD_TAG("main", E116T, 50000000) /* 50 MHz */ + MDRV_CPU_PROGRAM_MAP(common_map,0) + MDRV_CPU_VBLANK_INT(irq4_line_pulse, 1) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + MDRV_NVRAM_HANDLER(93C46_vamphalf) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(512, 512) + MDRV_SCREEN_VISIBLE_AREA(31, 350, 16, 255) + + MDRV_PALETTE_LENGTH(0x8000) + MDRV_GFXDECODE(vamphalf) + + MDRV_VIDEO_UPDATE(common) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( sound_ym_oki ) + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(YM2151, 14318180/4) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) + + MDRV_SOUND_ADD(OKIM6295, 1789772.5 ) + MDRV_SOUND_CONFIG(okim6295_interface_region_1_pin7high) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 1.0) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 1.0) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( sound_qs1000 ) + MDRV_CPU_ADD(I8052, 24000000/4) /* 6 MHz? */ + MDRV_CPU_PROGRAM_MAP( qs1000_prg_map, 0 ) + MDRV_CPU_DATA_MAP( qs1000_data_map, 0 ) + +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( vamphalf ) + MDRV_IMPORT_FROM(common) + MDRV_CPU_MODIFY("main") + MDRV_CPU_IO_MAP(vamphalf_io,0) + + MDRV_IMPORT_FROM(sound_ym_oki) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( misncrft ) + MDRV_IMPORT_FROM(common) + MDRV_CPU_REPLACE("main", GMS30C2116, 50000000) /* 50 MHz */ + MDRV_CPU_IO_MAP(misncrft_io,0) + + MDRV_IMPORT_FROM(sound_qs1000) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( coolmini ) + MDRV_IMPORT_FROM(common) + MDRV_CPU_MODIFY("main") + MDRV_CPU_IO_MAP(coolmini_io,0) + + MDRV_IMPORT_FROM(sound_ym_oki) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( suplup ) + MDRV_IMPORT_FROM(common) + MDRV_CPU_MODIFY("main") + MDRV_CPU_IO_MAP(suplup_io,0) + + MDRV_IMPORT_FROM(sound_ym_oki) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( wyvernwg ) + MDRV_IMPORT_FROM(common) + MDRV_CPU_REPLACE("main", E132XT, 50000000) /* 50 MHz */ + MDRV_CPU_PROGRAM_MAP(common_32bit_map,0) + MDRV_CPU_IO_MAP(wyvernwg_io,0) + + MDRV_IMPORT_FROM(sound_qs1000) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( finalgdr ) + MDRV_IMPORT_FROM(common) + MDRV_CPU_REPLACE("main", E132XT, 50000000) /* 50 MHz */ + MDRV_CPU_PROGRAM_MAP(common_32bit_map,0) + MDRV_CPU_IO_MAP(finalgdr_io,0) + + MDRV_NVRAM_HANDLER(finalgdr) + + MDRV_IMPORT_FROM(sound_ym_oki) +MACHINE_DRIVER_END + +/* + +Vamp 1/2 (Semi Vamp) +Danbi, 1999 + +Official page here... +http://f2.co.kr/eng/product/intro1-17.asp + + +PCB Layout +---------- + KA12 VROM1. + + BS901 AD-65 ROML01. ROMU01. + ROML00. ROMU00. + 62256 + 62256 + +T2316162A E1-16T PROM1. QL2003-XPL84C + + 62256 + 62256 62256 + 62256 + 93C46.IC3 62256 + 62256 + 50.000MHz QL2003-XPL84C +B1 B2 B3 28.000MHz + + + +Notes +----- +B1 B2 B3: Push buttons for SERV, RESET, TEST +T2316162A: Main program RAM +E1-16T: Hyperstone E1-16T CPU +QL2003-XPL84C: QuickLogic PLCC84 PLD +AD-65: Compatible to OKI M6295 +KA12: Compatible to Y3012 or Y3014 +BS901 Compatible to YM2151 +PROM1: Main program +VROM1: OKI samples +ROML* / U*: Graphics, device is MX29F1610ML (surface mounted SOP44 MASK ROM) + +*/ + +ROM_START( vamphalf ) + ROM_REGION16_BE( 0x100000, REGION_USER1, ROMREGION_ERASE00 ) /* Hyperstone CPU Code */ + /* 0 - 0x80000 empty */ + ROM_LOAD( "prom1", 0x80000, 0x80000, CRC(f05e8e96) SHA1(c860e65c811cbda2dc70300437430fb4239d3e2d) ) + + ROM_REGION( 0x800000, REGION_GFX1, ROMREGION_DISPOSE ) /* 16x16x8 Sprites */ + ROM_LOAD32_WORD( "roml00", 0x000000, 0x200000, CRC(cc075484) SHA1(6496d94740457cbfdac3d918dce2e52957341616) ) + ROM_LOAD32_WORD( "romu00", 0x000002, 0x200000, CRC(711c8e20) SHA1(1ef7f500d6f5790f5ae4a8b58f96ee9343ef8d92) ) + ROM_LOAD32_WORD( "roml01", 0x400000, 0x200000, CRC(626c9925) SHA1(c90c72372d145165a8d3588def12e15544c6223b) ) + ROM_LOAD32_WORD( "romu01", 0x400002, 0x200000, CRC(d5be3363) SHA1(dbdd0586909064e015f190087f338f37bbf205d2) ) + + ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Oki Samples */ + ROM_LOAD( "vrom1", 0x00000, 0x40000, CRC(ee9e371e) SHA1(3ead5333121a77d76e4e40a0e0bf0dbc75f261eb) ) +ROM_END + +/* + +Mission Craft +Sun, 2000 + +PCB Layout +---------- + +SUN2000 +|---------------------------------------------| +| |------| SND-ROM1 ROMH00 ROMH01 | +| |QDSP | | +| |QS1001| | +|DA1311A|------| SND-ROM2 | +| /------\ | +| |QDSP | ROML00 ROML01 | +| |QS1000| | +| 24MHz\------/ | +| |---------| | +| | ACTEL | | +|J 62256 |A40MX04-F| | +|A * PRG-ROM2 62256 |PL84 | | +|M PAL | | | +|M 62256 62256 |---------| | +|A 62256 62256 | +| |-------| |---------| | +| |GMS | | ACTEL | | +| 93C46 |30C2116| |A40MX04-F| | +| | | 62256 |PL84 | | +| HY5118164C |-------| 62256 | | | +| |---------| | +|SW2 | +|SW1 | +| 50MHz 28MHz | +|---------------------------------------------| +Notes: + GMS30C2116 - based on Hyperstone technology, clock running at 50.000MHz + QS1001A - Wavetable audio chip, 1M ROM, manufactured by AdMOS (Now LG Semi.), SOP32 + QS1000 - Wavetable audio chip manufactured by AdMOS (Now LG Semi.), QFP100 + provides Creative Waveblaster functionality and General Midi functions + SW1 - Used to enter test mode + SW2 - PCB Reset + * - Empty socket for additional program ROM + +*/ + +ROM_START( misncrft ) + ROM_REGION16_BE( 0x100000, REGION_USER1, ROMREGION_ERASE00 ) /* Hyperstone CPU Code */ + /* 0 - 0x80000 empty */ + ROM_LOAD( "prg-rom2.bin", 0x80000, 0x80000, CRC(059ae8c1) SHA1(2c72fcf560166cb17cd8ad665beae302832d551c) ) + + ROM_REGION( 0x400000, REGION_CPU2, 0 ) /* i8052 code */ + ROM_LOAD( "snd-rom2.us1", 0x00000, 0x20000, CRC(8821e5b9) SHA1(4b8df97bc61b48aa16ed411614fcd7ed939cac33) ) + + ROM_REGION( 0x800000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD32_WORD( "roml00", 0x000000, 0x200000, CRC(748c5ae5) SHA1(28005f655920e18c82eccf05c0c449dac16ee36e) ) + ROM_LOAD32_WORD( "romh00", 0x000002, 0x200000, CRC(f34ae697) SHA1(2282e3ef2d100f3eea0167b25b66b35a64ddb0f8) ) + ROM_LOAD32_WORD( "roml01", 0x400000, 0x200000, CRC(e37ece7b) SHA1(744361bb73905bc0184e6938be640d3eda4b758d) ) + ROM_LOAD32_WORD( "romh01", 0x400002, 0x200000, CRC(71fe4bc3) SHA1(08110b02707e835bf428d343d5112b153441e255) ) + + ROM_REGION( 0x80000, REGION_SOUND1, 0 ) + ROM_LOAD( "snd-rom1.u15", 0x00000, 0x80000, CRC(fb381da9) SHA1(2b1a5447ed856ab92e44d000f27a04d981e3ac52) ) + + ROM_REGION( 0x80000, REGION_SOUND2, 0 ) + ROM_LOAD( "qs1001a.u17", 0x00000, 0x80000, CRC(d13c6407) SHA1(57b14f97c7d4f9b5d9745d3571a0b7115fbe3176) ) +ROM_END + +/* + +Cool Minigame Collection +SemiCom, 1999 + +PCB Layout +---------- + +F-E1-16-008 +|-------------------------------------------------------| +|UPC1241 YM3012 VROM1 | +| LM324 LM324 YM2151 | +| MCM6206 M6295 ROML00 ROMU00 | +| | +| MCM6206 ROML01 ROMU01 | +| | +|J MCM6206 ROML02 ROMU02 | +|A | +|M MCM6206 ROML03 ROMU03 | +|M | +|A MCM6206 | +| | +| MCM6206 QL2003 QL2003 | +| 28MHz | +| MCM6206 | +| | +| MCM6206 E1-16T GM71C1816 ROM1 | +| | +| 93C46 ROM2 | +|RESET TEST 50MHz PAL | +|-------------------------------------------------------| + +*/ + +ROM_START( coolmini ) + ROM_REGION16_BE( 0x100000, REGION_USER1, ROMREGION_ERASE00 ) /* Hyperstone CPU Code */ + ROM_LOAD( "cm-rom1.040", 0x00000, 0x80000, CRC(9688fa98) SHA1(d5ebeb1407980072f689c3b3a5161263c7082e9a) ) + ROM_LOAD( "cm-rom2.040", 0x80000, 0x80000, CRC(9d588fef) SHA1(7b6b0ba074c7fa0aecda2b55f411557b015522b6) ) + + ROM_REGION( 0x1000000, REGION_GFX1, ROMREGION_DISPOSE ) /* 16x16x8 Sprites */ + ROM_LOAD32_WORD( "roml00", 0x000000, 0x200000, CRC(4b141f31) SHA1(cf4885789b0df67d00f9f3659c445248c4e72446) ) + ROM_LOAD32_WORD( "romu00", 0x000002, 0x200000, CRC(9b2fb12a) SHA1(8dce367c4c2cab6e84f586bd8dfea3ea0b6d7225) ) + ROM_LOAD32_WORD( "roml01", 0x400000, 0x200000, CRC(1e3a04bb) SHA1(9eb84b6a0172a8868f440065c30b4519e0c3fe33) ) + ROM_LOAD32_WORD( "romu01", 0x400002, 0x200000, CRC(06dd1a6c) SHA1(8c707d388848bc5826fbfc48c3035fdaf5018515) ) + ROM_LOAD32_WORD( "roml02", 0x800000, 0x200000, CRC(1e8c12cb) SHA1(f57489e81eb1e476939148cfc8d03f3df03b2a84) ) + ROM_LOAD32_WORD( "romu02", 0x800002, 0x200000, CRC(4551d4fc) SHA1(4ec102120ab99e324d9574bfce93837d8334da06) ) + ROM_LOAD32_WORD( "roml03", 0xc00000, 0x200000, CRC(231650bf) SHA1(065f742a37d5476ec6f72f0bd8ba2cfbe626b872) ) + ROM_LOAD32_WORD( "romu03", 0xc00002, 0x200000, CRC(273d5654) SHA1(0ae3d1c4c4862a8642dbebd7c955b29df29c4938) ) + + ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Oki Samples */ + ROM_LOAD( "cm-vrom1.020", 0x00000, 0x40000, CRC(fcc28081) SHA1(44031df0ee28ca49df12bcb73c83299fac205e21) ) +ROM_END + +/* + +Super Lup Lup Puzzle / Lup Lup Puzzle +Omega System, 1999 + +PCB Layout +---------- + +F-E1-16-001 +|----------------------------------------------| +| M6295 VROM1 N341256 | +| YM3012 | +| YM2151 |---------|N341256 | +| |Quicklogi| | +| |c |N341256 | +|J |QL2003- | | +|A N341256 |XPL84C |N341256 | +|M |---------| | +|M N341256 |---------|N341256 | +|A |Quicklogi| | +| N341256 |c |N341256 | +| |QL2003- | | +| N341256 |XPL84C |N341256 | +| |---------| ROML00 ROMU00| +|93C46 GM71C18163 N341256 | +|PAL E1-16T ROML01 ROMU01| +|TEST ROM1 | +|SERV | +|RESET ROM2 50MHz 14.31818MHz| +|----------------------------------------------| +Notes: + E1-16T clock : 50.000MHz + M6295 clock : 1.7897725MHz (14.31818/8). Sample Rate = 1789772.5 / 132 + YM2151 clock : 3.579545MHz (14.31818/4). Chip stamped 'KA51' on one PCB, BS901 on another + VSync : 60Hz + N341256 : NKK N341256SJ-15 32K x8 SRAM (SOJ28) + GM71C18163 : LG Semi GM71C18163 1M x16 EDO DRAM (SOJ44) + + ROMs: + ROML00/01, ROMU00/01 - Macronix MX29F1610MC-12 SOP44 16MBit FlashROM + VROM1 - Macronix MX27C2000 2MBit DIP32 EPROM + ROM1/2 - ST M27C4001 4MBit DIP32 EPROM +*/ + +ROM_START( suplup ) /* version 4.0 / 990518 - also has 'Puzzle Bang Bang' title but it can't be selected */ + ROM_REGION16_BE( 0x100000, REGION_USER1, ROMREGION_ERASE00 ) /* Hyperstone CPU Code */ + ROM_LOAD( "suplup-rom1.bin", 0x00000, 0x80000, CRC(61fb2dbe) SHA1(21cb8f571b2479de6779b877b656d1ffe5b3516f) ) + ROM_LOAD( "suplup-rom2.bin", 0x80000, 0x80000, CRC(0c176c57) SHA1(f103a1afc528c01cbc18639273ab797fb9afacb1) ) + + ROM_REGION( 0x800000, REGION_GFX1, ROMREGION_DISPOSE ) /* 16x16x8 Sprites */ + ROM_LOAD32_WORD( "suplup-roml00.bin", 0x000000, 0x200000, CRC(7848e183) SHA1(1db8f0ea8f73f42824423d382b37b4d75fa3e54c) ) + ROM_LOAD32_WORD( "suplup-romu00.bin", 0x000002, 0x200000, CRC(13e3ab7f) SHA1(d5b6b15ca5aef2e2788d2b81e0418062f42bf2f2) ) + ROM_LOAD32_WORD( "suplup-roml01.bin", 0x400000, 0x200000, CRC(15769f55) SHA1(2c13e8da2682ccc7878218aaebe3c3c67d163fd2) ) + ROM_LOAD32_WORD( "suplup-romu01.bin", 0x400002, 0x200000, CRC(6687bc6f) SHA1(cf842dfb2bcdfda0acc0859985bdba91d4a80434) ) + + ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Oki Samples */ + ROM_LOAD( "vrom1.bin", 0x00000, 0x40000, CRC(34a56987) SHA1(4d8983648a7f0acf43ff4c9c8aa6c8640ee2bbfe) ) +ROM_END + +ROM_START( luplup ) /* version 3.0 / 990128 */ + ROM_REGION16_BE( 0x100000, REGION_USER1, ROMREGION_ERASE00 ) /* Hyperstone CPU Code */ + ROM_LOAD( "luplup-rom1.v30", 0x00000, 0x80000, CRC(9ea67f87) SHA1(73d16c056a8d64743181069a01559a43fee529a3) ) + ROM_LOAD( "luplup-rom2.v30", 0x80000, 0x80000, CRC(99840155) SHA1(e208f8731c06b634e84fb73e04f6cdbb8b504b94) ) + + ROM_REGION( 0x800000, REGION_GFX1, ROMREGION_DISPOSE ) /* 16x16x8 Sprites */ + ROM_LOAD32_WORD( "luplup-roml00", 0x000000, 0x200000, CRC(8e2c4453) SHA1(fbf7d72263beda2ef90bccf0369d6e93e76d45b2) ) + ROM_LOAD32_WORD( "luplup-romu00", 0x000002, 0x200000, CRC(b57f4ca5) SHA1(b968c44a0ceb3274e066fa1d057fb6b017bb3fd3) ) + ROM_LOAD32_WORD( "luplup-roml01", 0x400000, 0x200000, CRC(40e85f94) SHA1(531e67eb4eedf47b0dded52ba2f4942b12cbbe2f) ) + ROM_LOAD32_WORD( "luplup-romu01", 0x400002, 0x200000, CRC(f2645b78) SHA1(b54c3047346c0f40dba0ba23b0d607cc53384edb) ) + + ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Oki Samples */ + ROM_LOAD( "vrom1.bin", 0x00000, 0x40000, CRC(34a56987) SHA1(4d8983648a7f0acf43ff4c9c8aa6c8640ee2bbfe) ) + + ROM_REGION( 0x0400, REGION_PLDS, 0 ) + ROM_LOAD( "gal22v10b.gal1", 0x0000, 0x02e5, NO_DUMP ) /* GAL is read protected */ +ROM_END + + +ROM_START( luplup29 ) /* version 2.9 / 990108 */ + ROM_REGION16_BE( 0x100000, REGION_USER1, ROMREGION_ERASE00 ) /* Hyperstone CPU Code */ + ROM_LOAD( "luplup-rom1.v29", 0x00000, 0x80000, CRC(36a8b8c1) SHA1(fed3eb2d83adc1b071a12ce5d49d4cab0ca20cc7) ) + ROM_LOAD( "luplup-rom2.v29", 0x80000, 0x80000, CRC(50dac70f) SHA1(0e313114a988cb633a89508fda17eb09023827a2) ) + + ROM_REGION( 0x800000, REGION_GFX1, ROMREGION_DISPOSE ) /* 16x16x8 Sprites */ + ROM_LOAD32_WORD( "luplup29-roml00", 0x000000, 0x200000, CRC(08b2aa75) SHA1(7577b3ab79c54980307a83186dd1500f044c1bc8) ) + ROM_LOAD32_WORD( "luplup29-romu00", 0x000002, 0x200000, CRC(b57f4ca5) SHA1(b968c44a0ceb3274e066fa1d057fb6b017bb3fd3) ) + ROM_LOAD32_WORD( "luplup29-roml01", 0x400000, 0x200000, CRC(41c7ca8c) SHA1(55704f9d54f31bbaa044cd9d10ac2d9cb5e8fb70) ) + ROM_LOAD32_WORD( "luplup29-romu01", 0x400002, 0x200000, CRC(16746158) SHA1(a5036a7aaa717fde89d62b7ff7a3fded8b7f5cda) ) + + ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Oki Samples */ + ROM_LOAD( "vrom1.bin", 0x00000, 0x40000, CRC(34a56987) SHA1(4d8983648a7f0acf43ff4c9c8aa6c8640ee2bbfe) ) +ROM_END + + +ROM_START( puzlbang ) /* version 2.8 / 990106 - Korea only, cannot select title or language */ + ROM_REGION16_BE( 0x100000, REGION_USER1, ROMREGION_ERASE00 ) /* Hyperstone CPU Code */ + ROM_LOAD( "pbb-rom1.v28", 0x00000, 0x80000, CRC(fd21c5ff) SHA1(bc6314bbb2495c140788025153c893d5fd00bdc1) ) + ROM_LOAD( "pbb-rom2.v28", 0x80000, 0x80000, CRC(490ecaeb) SHA1(2b0f25e3d681ddf95b3c65754900c046b5b50b09) ) + + ROM_REGION( 0x800000, REGION_GFX1, ROMREGION_DISPOSE ) /* 16x16x8 Sprites */ + ROM_LOAD32_WORD( "pbbang28-roml00", 0x000000, 0x200000, CRC(08b2aa75) SHA1(7577b3ab79c54980307a83186dd1500f044c1bc8) ) + ROM_LOAD32_WORD( "pbbang28-romu00", 0x000002, 0x200000, CRC(b57f4ca5) SHA1(b968c44a0ceb3274e066fa1d057fb6b017bb3fd3) ) + ROM_LOAD32_WORD( "pbbang28-roml01", 0x400000, 0x200000, CRC(41c7ca8c) SHA1(55704f9d54f31bbaa044cd9d10ac2d9cb5e8fb70) ) + ROM_LOAD32_WORD( "pbbang28-romu01", 0x400002, 0x200000, CRC(16746158) SHA1(a5036a7aaa717fde89d62b7ff7a3fded8b7f5cda) ) + + ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Oki Samples */ + ROM_LOAD( "vrom1.bin", 0x00000, 0x40000, CRC(34a56987) SHA1(4d8983648a7f0acf43ff4c9c8aa6c8640ee2bbfe) ) +ROM_END + + +/* + +Wyvern Wings (c) 2001 SemiCom, Game Vision License + + CPU: Hyperstone E1-32T + Video: 2 QuickLogic QL12x16B-XPL84 FPGA + Sound: AdMOS QDSP1000 with QDSP QS1001A sample rom + OSC: 50MHz, 28MHz & 24MHz +EEPROM: 93C46 + +F-E1-32-010-D ++------------------------------------------------------------------+ +| VOL +-------+ +---------+ | ++-+ | QPSD | | U15A | +---------+ +---------+ | + | |QS1001A| | | | ROMH00 | | ROML00 | | ++-+ +-------+ +---------+ | | | | | +| +-------+ +---------+ +---------+ | +| |QPSD | +----------+ +---------+ +---------+ | +| |QS1000 | | U7 | | ROMH01 | | ROML01 | | +|J 24MHz +-------+ +----------+ | | | | | +|A +---------+ +---------+ | +|M 50MHz +-----+ +---------+ +---------+ | +|M |DRAM2| | ROMH02 | | ROML02 | | +|A +----------+ +-----+ +-----+ | | | | | +| | | +-----+ |93C46| +---------+ +---------+ | +|C |HyperStone| |DRAM1| +-----+ +---------+ +---------+ | +|O | E1-32T | +-----+ | ROMH03 | | ROML03 | | +|N | | 28MHz | | | | | +|N +----------+ +---------+ +---------+ | +|E | +|C +----------+ +------------+ +------------+ | +|T | GAL1 | | QuickLogic | | QuickLogic | | +|O +----------+ | 0048 BH | | 0048 BH | | +|R +----------+ | QL12X16B | | QL12X16B | | +| | ROM2 | | -XPL84C | | -XPL84C | | +| +----------+ +------------+ +------------+ | +| +----------+ +----+ | +| | ROM1 | |MEM3| | ++-++--+ +----------+ +----+ | + ||S1| +-----+ |MEM2| | ++-++--+ |CRAM2| +----+ | +| +--+ +-----+ |MEM7| | +| |S2| |CRAM1| +----+ | +| +--+ +-----+ |MEM6| | ++------------------------------------+----+------------------------+ + +S1 is the setup button +S2 is the reset button + +ROMH & ROML are all MX 29F1610MC-16 flash roms +u15A is a MX 29F1610MC-16 flash rom +u7 is a ST 27c1001 +ROM1 & ROM2 are both ST 27c4000D + +*/ + +ROM_START( wyvernwg ) + ROM_REGION32_BE( 0x100000, REGION_USER1, 0 ) /* Hyperstone CPU Code */ + ROM_LOAD( "rom1.bin", 0x000000, 0x080000, CRC(66bf3a5c) SHA1(037d5e7a6ef6f5b4ac08a9c811498c668a9d2522) ) + ROM_LOAD( "rom2.bin", 0x080000, 0x080000, CRC(fd9b5911) SHA1(a01e8c6e5a9009024af385268ba3ba90e1ebec50) ) + + ROM_REGION( 0x020000, REGION_CPU2, 0 ) /* QDSP ('51) Code */ + ROM_LOAD( "u7", 0x0000, 0x20000, CRC(00a3f705) SHA1(f0a6bafd16bea53d4c05c8cc108983cbd41e5757) ) + + ROM_REGION( 0x1000000, REGION_GFX1, ROMREGION_DISPOSE ) /* gfx data */ + ROM_LOAD32_WORD( "roml00", 0x000000, 0x200000, CRC(fb3541b6) SHA1(4f569ac7bde92c5febf005ab73f76552421ec223) ) + ROM_LOAD32_WORD( "romh00", 0x000002, 0x200000, CRC(516aca48) SHA1(42cf5678eb4c0ee7da2ab0bd66e4e34b2735c75a) ) + ROM_LOAD32_WORD( "roml01", 0x400000, 0x200000, CRC(1c764f95) SHA1(ba6ac1376e837b491bc0269f2a1d10577a3d40cb) ) + ROM_LOAD32_WORD( "romh01", 0x400002, 0x200000, CRC(fee42c63) SHA1(a27b5cbca0defa9be85fee91dde1273f445d3372) ) + ROM_LOAD32_WORD( "roml02", 0x800000, 0x200000, CRC(fc846707) SHA1(deaee15ab71927f644dcf576959e2ceaa55bfd44) ) + ROM_LOAD32_WORD( "romh02", 0x800002, 0x200000, CRC(86141c7d) SHA1(22a82cc7d44d655b03867503a83e81f7c82d6c91) ) + ROM_LOAD32_WORD( "roml03", 0xc00000, 0x200000, CRC(b10bf37c) SHA1(6af835b1e2573f0bb2c17057e016a7aecc8fcde8) ) + ROM_LOAD32_WORD( "romh03", 0xc00002, 0x200000, CRC(e01c2a92) SHA1(f53c2db92d62f595d473b1835c46d426f0dbe6b3) ) + + ROM_REGION( 0x200000, REGION_SOUND1, 0 ) /* Music data / QDSP samples (SFX) */ + ROM_LOAD( "romsnd.u15a", 0x000000, 0x200000, CRC(fc89eedc) SHA1(2ce28bdb773cfa5b5660e4c0a9ef454cb658f2da) ) + + ROM_REGION( 0x080000, REGION_SOUND2, 0 ) /* QDSP wavetable rom */ + ROM_LOAD( "qs1001a", 0x000000, 0x80000, CRC(d13c6407) SHA1(57b14f97c7d4f9b5d9745d3571a0b7115fbe3176) ) +ROM_END + + +/* + +Final Godori (c) SemiCom + +SEMICOM-003a + ++---------------------------------------------+ +| +------+ | +| YM3012 | U7 | | +| +------+ | +| YM2151 M6295 | +| | +| +-----+ MEM1l +----------+ | +| |CRAM2| |QuickLogic| | +| +-----+ | QL12X16B | | +| +-----+ | XPL84C | | +| +-------+ |CRAM2| MEM1U | | | +|J | DRAM1 | +-----+ +----------+ | +|A +-------+ +----------+ MEM3 | +|M +-------+ | | +----------+ | +|M | DRAM2 | |HyperStone| MEM7 |QuickLogic| | +|A +-------+ | E1-32T | | QL12X16B | | +| | | MEM6 | XPL84C | | +| PAL +----------+ | | | +| MEM2 +----------+ | +|SW1 SW2 61L256S | +| ROM0* +--------+ +--------+ 28MHz | +| ROM1 | ROML00 | | ROMH00 | +-----+| +| +--------+ +--------+ |93C46|| +| 50MHz ROML01* ROMH01* +-----+| +| | ++---------------------------------------------+ + +ROM1 & U7 are 27C040 +ROML00 & ROMH00 are MX 29F1610MC flashroms +ROM0, ROML01 & ROMH01 are unpopulated +YM2151, YM3012 & M6295 badged as BS901, BS902 U6295 +CRAM are MCM6206BAEJ15 +DRAM are KM416C1204AJ-6 +MEM are MCM6206BAEJ15 +61L256S - 32K x 8 bit High Speed CMOS SRAM (game's so called "Backup Data") + +SW1 is the reset button +SW2 is the setup button + +*/ + +ROM_START( finalgdr ) /* version 2.20.5915, Korea only */ + ROM_REGION32_BE( 0x100000, REGION_USER1, 0 ) /* Hyperstone CPU Code */ + /* rom0 empty */ + ROM_LOAD( "rom1", 0x080000, 0x080000, CRC(45815931) SHA1(80ba7a366994e40a1f520ea18fad82e6b068b279) ) + + ROM_REGION( 0x800000, REGION_GFX1, ROMREGION_DISPOSE ) /* gfx data */ + ROM_LOAD32_WORD( "roml00", 0x000000, 0x200000, CRC(8334459d) SHA1(70ad560dada8aa8ce192e5307bd805744b82fcfe) ) + ROM_LOAD32_WORD( "romh00", 0x000002, 0x200000, CRC(f28578a5) SHA1(a5c7b17aff101f1f4f52657d0567a6c9d12a178d) ) + /* roml01 empty */ + /* romh01 empty */ + + ROM_REGION( 0x080000, REGION_USER2, 0 ) /* Oki Samples */ + ROM_LOAD( "u7", 0x000000, 0x080000, CRC(080f61f8) SHA1(df3764b1b07f9fc38685e3706b0f834f62088727) ) + + /* $00000-$20000 stays the same in all sound banks, */ + /* the second half of the bank is what gets switched */ + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_COPY( REGION_USER2, 0x000000, 0x000000, 0x020000) + ROM_COPY( REGION_USER2, 0x000000, 0x020000, 0x020000) + ROM_COPY( REGION_USER2, 0x000000, 0x040000, 0x020000) + ROM_COPY( REGION_USER2, 0x020000, 0x060000, 0x020000) + ROM_COPY( REGION_USER2, 0x000000, 0x080000, 0x020000) + ROM_COPY( REGION_USER2, 0x040000, 0x0a0000, 0x020000) + ROM_COPY( REGION_USER2, 0x000000, 0x0c0000, 0x020000) + ROM_COPY( REGION_USER2, 0x060000, 0x0e0000, 0x020000) +ROM_END + +/* + +Date Quiz Go Go Episode 2 +SemiCom, 2000 + +F-E1-16-010 + +*/ + +ROM_START( dquizgo2 ) + ROM_REGION16_BE( 0x100000, REGION_USER1, ROMREGION_ERASE00 ) /* Hyperstone CPU Code */ + ROM_LOAD( "rom1", 0x00000, 0x080000, CRC(81eef038) SHA1(9c925d1ef261ea85069925ccd1a5aeb939f55d5a) ) + ROM_LOAD( "rom2", 0x80000, 0x080000, CRC(e8789d8a) SHA1(1ee26c26cc7024c5df9d0da630b326021ece9f41) ) + + ROM_REGION( 0xc00000, REGION_GFX1, ROMREGION_DISPOSE ) /* 16x16x8 Sprites */ + ROM_LOAD32_WORD( "roml00", 0x000000, 0x200000, CRC(de811dd7) SHA1(bf31e165440ed2e3cdddd2174521b15afd8b2e69) ) + ROM_LOAD32_WORD( "romu00", 0x000002, 0x200000, CRC(2bdbfc6b) SHA1(8e755574e3c9692bd8f82c7351fe3623a31ec136) ) + ROM_LOAD32_WORD( "roml01", 0x400000, 0x200000, CRC(f574a2a3) SHA1(c6a8aca75bd3a4e4109db5095f3a3edb9b1e6657) ) + ROM_LOAD32_WORD( "romu01", 0x400002, 0x200000, CRC(d05cf02f) SHA1(624316d4ee42c6257bc64747e4260a0d3950f9cd) ) + ROM_LOAD32_WORD( "roml02", 0x800000, 0x200000, CRC(43ca2cff) SHA1(02ad7cce42d917dbefdba2e4e8886fc883b1dc60) ) + ROM_LOAD32_WORD( "romu02", 0x800002, 0x200000, CRC(b8218222) SHA1(1e1aa60e0de9c02b841896512a1163dda280c845) ) + /* roml03 empty */ + /* romu03 empty */ + + ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Oki Samples */ + ROM_LOAD( "vrom1", 0x00000, 0x40000, CRC(24d5b55f) SHA1(cb4d3a22440831e37df0a7fe5433bea708d60f31) ) +ROM_END + +static int irq_active(void) +{ + UINT32 FCR = activecpu_get_reg(27); + if( !(FCR&(1<<29)) ) // int 2 (irq 4) + return 1; + else + return 0; +} + +static READ16_HANDLER( vamphalf_speedup_r ) +{ + if(activecpu_get_pc() == 0x82de) + { + if(irq_active()) + cpu_spinuntil_int(); + else + activecpu_eat_cycles(50); + } + + return wram[(0x4a6d0/2)+offset]; +} + +static READ16_HANDLER( misncrft_speedup_r ) +{ + if(activecpu_get_pc() == 0xecc8) + { + if(irq_active()) + cpu_spinuntil_int(); + else + activecpu_eat_cycles(50); + } + + return wram[(0x72eb4/2)+offset]; +} + +static READ16_HANDLER( coolmini_speedup_r ) +{ + if(activecpu_get_pc() == 0x75f7a) + { + if(irq_active()) + cpu_spinuntil_int(); + else + activecpu_eat_cycles(50); + } + + return wram[(0xd2e80/2)+offset]; +} + +static READ16_HANDLER( suplup_speedup_r ) +{ + if(activecpu_get_pc() == 0xaf18a ) + { + if(irq_active()) + cpu_spinuntil_int(); + else + activecpu_eat_cycles(50); + } + + return wram[(0x11605c/2)+offset]; +} + +static READ16_HANDLER( luplup_speedup_r ) +{ + if(activecpu_get_pc() == 0xaefac ) + { + if(irq_active()) + cpu_spinuntil_int(); + else + activecpu_eat_cycles(50); + } + + return wram[(0x115e84/2)+offset]; +} + +static READ16_HANDLER( luplup29_speedup_r ) +{ + if(activecpu_get_pc() == 0xae6c0 ) + { + if(irq_active()) + cpu_spinuntil_int(); + else + activecpu_eat_cycles(50); + } + + return wram[(0x113f08/2)+offset]; +} + +static READ16_HANDLER( puzlbang_speedup_r ) +{ + if(activecpu_get_pc() == 0xae6d2 ) + { + if(irq_active()) + cpu_spinuntil_int(); + else + activecpu_eat_cycles(50); + } + + return wram[(0x113ecc/2)+offset]; +} + +static READ32_HANDLER( wyvernwg_speedup_r ) +{ + if(activecpu_get_pc() == 0x10758 ) + { + if(irq_active()) + cpu_spinuntil_int(); + else + activecpu_eat_cycles(50); + } + + return wram32[0x00b56fc/4]; +} + +static READ32_HANDLER( finalgdr_speedup_r ) +{ + if(activecpu_get_pc() == 0x1c212 ) + { + if(irq_active()) + cpu_spinuntil_int(); + else + activecpu_eat_cycles(50); + } + + return wram32[0x005e874/4]; +} + +static READ16_HANDLER( dquizgo2_speedup_r ) +{ + if(activecpu_get_pc() == 0xaa622) + { + if(irq_active()) + cpu_spinuntil_int(); + else + activecpu_eat_cycles(50); + } + + return wram[(0xcde70/2)+offset]; +} + + +static DRIVER_INIT( vamphalf ) +{ + memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x0004a6d0, 0x0004a6d3, 0, 0, vamphalf_speedup_r ); + + palshift = 0; + flip_bit = 0x80; +} + +static DRIVER_INIT( misncrft ) +{ + memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x00072eb4, 0x00072eb7, 0, 0, misncrft_speedup_r ); + + palshift = 0; + flip_bit = 1; +} + +static DRIVER_INIT( coolmini ) +{ + memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x000d2e80, 0x000d2e83, 0, 0, coolmini_speedup_r ); + + palshift = 0; + flip_bit = 1; +} + +static DRIVER_INIT( suplup ) +{ + memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x0011605c, 0x0011605f, 0, 0, suplup_speedup_r ); + + palshift = 8; + /* no flipscreen */ +} + +static DRIVER_INIT( luplup ) +{ + memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x00115e84, 0x00115e87, 0, 0, luplup_speedup_r ); + + palshift = 8; + /* no flipscreen */ +} + +static DRIVER_INIT( luplup29 ) +{ + memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x00113f08, 0x00113f0b, 0, 0, luplup29_speedup_r ); + + palshift = 8; + /* no flipscreen */ +} + +static DRIVER_INIT( puzlbang ) +{ + memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x00113ecc, 0x00113ecf, 0, 0, puzlbang_speedup_r ); + + palshift = 8; + /* no flipscreen */ +} + +static DRIVER_INIT( wyvernwg ) +{ + memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x00b56fc, 0x00b56ff, 0, 0, wyvernwg_speedup_r ); + + palshift = 0; + flip_bit = 1; + + semicom_prot_data[0] = 2; + semicom_prot_data[1] = 1; +} + +static DRIVER_INIT( finalgdr ) +{ + finalgdr_backupram = auto_malloc(0x80*0x100); + memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x005e874, 0x005e877, 0, 0, finalgdr_speedup_r ); + + palshift = 0; + flip_bit = 1; //? + + semicom_prot_data[0] = 2; + semicom_prot_data[1] = 3; +} + +static DRIVER_INIT( dquizgo2 ) +{ + memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x00cde70, 0x00cde73, 0, 0, dquizgo2_speedup_r ); + + palshift = 0; + flip_bit = 1; +} + +GAME( 1999, coolmini, 0, coolmini, common, coolmini, ROT0, "SemiCom", "Cool Minigame Collection", 0 ) +GAME( 1999, suplup, 0, suplup, common, suplup, ROT0, "Omega System", "Super Lup Lup Puzzle / Zhuan Zhuan Puzzle (version 4.0 / 990518)" , 0) +GAME( 1999, luplup, suplup, suplup, common, luplup, ROT0, "Omega System", "Lup Lup Puzzle / Zhuan Zhuan Puzzle (version 3.0 / 990128)", 0 ) +GAME( 1999, luplup29, suplup, suplup, common, luplup29, ROT0, "Omega System", "Lup Lup Puzzle / Zhuan Zhuan Puzzle (version 2.9 / 990108)", 0 ) +GAME( 1999, puzlbang, suplup, suplup, common, puzlbang, ROT0, "Omega System", "Puzzle Bang Bang (version 2.8 / 990106)", 0 ) +GAME( 1999, vamphalf, 0, vamphalf, common, vamphalf, ROT0, "Danbi & F2 System", "Vamp 1/2 (Korea version)", 0 ) +GAME( 2000, dquizgo2, 0, coolmini, common, dquizgo2, ROT0, "SemiCom", "Date Quiz Go Go Episode 2" , 0) +GAME( 2000, misncrft, 0, misncrft, common, misncrft, ROT90, "Sun", "Mission Craft (version 2.4)", GAME_NO_SOUND ) +GAME( 2001, finalgdr, 0, finalgdr, finalgdr, finalgdr, ROT0, "SemiCom", "Final Godori (Korea, version 2.20.5915)", 0 ) +GAME( 2001, wyvernwg, 0, wyvernwg, common, wyvernwg, ROT270, "SemiCom (Game Vision License)", "Wyvern Wings", GAME_NO_SOUND ) |