summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/vamphalf.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/vamphalf.c')
-rw-r--r--src/mame/drivers/vamphalf.c1387
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 )