diff options
Diffstat (limited to 'src/mame/drivers/suprnova.c')
-rw-r--r-- | src/mame/drivers/suprnova.c | 1607 |
1 files changed, 1607 insertions, 0 deletions
diff --git a/src/mame/drivers/suprnova.c b/src/mame/drivers/suprnova.c new file mode 100644 index 00000000000..1b4ce00c8bf --- /dev/null +++ b/src/mame/drivers/suprnova.c @@ -0,0 +1,1607 @@ +/* Super Kaneko Nova System */ +/* Original Driver by Sylvain Glaize */ +/* taken to pieces and attempted reconstruction by David Haywood */ + +/* Credits (in no particular order): + Olivier Galibert for all the assistance and information he's provided + R.Belmont for working on the SH2 timers so sound worked + Nicola Salmoria for hooking up the Roz and improving the dirty tile handling + Paul Priest for a lot of things + Stephh for spotting what was wrong with Puzz Loop's inputs +*/ + +/* +ToDo: + Priorities + Transparency effects (each pen has a transparent flag, there are seperate r,g,b alpha values to be used for these pens) + Idle skipping on other games + bios .. + Fix gaps between zoomed sprites (See Gals Panic 4 continue screen and timer) + Fix broken games + +Alpha pens: + galpanis uses them to white in/out the bg's during attract? Solid white atm. + +Priorities: + Puzzloop appears to use the priorities, the other games might use alpha effects to disable a layer instead .. + *they don't appear to use alpha, so how should it work, senknow intro, galpanis attract, cyvern level 4? + +Ram-Based Tiles: + The front layer in galpanic games + The kaneko logo in galpanis + The Bios + +Sprite Zoom: + Used all over the place in the Gals Panic games, check the bit in galpani4 attract where if you hammer the button the ballon expands until it bursts. + Puzz Loop main logo + +Roz: + Should be used on galpani4 bg's, but for some reason incxx,incxy,incyx,incyy are always 1,0,0,1 resp. Maybe a timer problem, input problem or core problem. Who knows? + Update, rand() was returning a 15-bit number under mingw. Top bit seemed to determine whether it rotated or not. + To zoom the skull in the senknow attract mode + To zoom the girl at the end of a level in galpanis + To zoom the kaneko logo in galpanis + +Linescroll: + Puzzloop intro, the screen covered in 'puzz loop' of varying sizes, the little ones go left and the big ones right. + Puzzloop title screen uses it just to scroll the bg up. + Also used behind the hi-score table on puzzloop... + Galpani4/galpanis use it for 2P mode on both bg A and bg B. + +R,G,B Brightness: + The Electro Design games have this set darker than 0xff for sprites and bg's anyway. + Galpanis uses it to dim the bg's in attract on the stats screens for the characters (bg's hidden by white pen atm). +Lots of games use them to fade, haven't seen r,g,b used independantly yet but you never know. + +etc.etc. + +-pjp/dh + +gutsn Crash Reason +the routine at 401d8c8 calls 40249e0 with r14 as a parameter, which points where the return pr on the stack is +param is 60ffbc0, pr is at 60ffbcc, but 40249e0 writes more than 12 bytes +Gutsn now works in 0.69, timing/sh2 fixes?? + +Motherboard Layout +------------------ + +SUPER-KANEKO-NOVA-SYSTEM +MAIN-BOARD-A +NEP-16 + + + BATT HM514260 + CR2032 SKNSA1 HM514260 SH2 + W24257 LH5168 +YMZ280B-F W24257 BABY004 LATTICE SW1 M62X42 + pLSI1016 + HITACHI 28.636MHz 33.3333MHz + DF1 21.504MHz +J D49307 ALTAIR DENEB + BY006-224 BY007-32F +A (QFP208) (QFP208) + +M W24257 W24257 HM514260 + /- W24257 W24257 /- +M VEGA || W24257 SPCII-B HM514260 || + BY005-197 || W24257 JH-6186 || +A (QFP144) || (QFP208) || + || W24257 || + DSW1(8) || VIEWIII-A SPCII-A W24257 LH540202 || + || BL-001 JH-4181 W24257 || + \- (QFP240) (QFP208) W24257 \- + OKIM6253 + + +Notes: + SKNSA1 is BIOS (Asia) + HM514260, W24257, LH5168, M62X42 all smt SRAM + LH540202 is DIP SRAM + + +Cart Layout +----------- + +SUPER-KANEKO-NOVA-SYSTEM +ROM-BOARD +NEP-16 + + + /- /- + ||SK300-00 * PAL PAL D431000 D431000 * * || + || || + || || + || * SK-200-00 || + || SK01A SK01A || + || U8 U10 * * SK-101 SK-100-00|| + \- \- + + Notes: + *: unpopulated position for surface mounted 16MBit SOP44 MASK ROM + U8 and U10 are socketed 27C040 EPROM + All other ROMs are surface mounted SOP44 MASK ROM + +Cart Layout +----------- + +SUPER KANEKO NOVA SYSTEM +ROM 4 BOARD +NEP-16 + +Top Side: + /- /- + ||SS300-00 SS210-00 SS102-00 SS103-00 SS201-00 || + ||U1 U3 U8 U32 U9 || + || || + || || + || 082* SG01A SG01A # # || + || U4 U6 U29 U30 || + \- \- + +Bottom Side: + /- /- + ||SS200-00 SS000-00 SS101-00 ^ ^ || + ||U17 U21 U20 U24 U26 || + || || + || || + || NEC NEC || + || D431000 D43100 || + \- \- + +* Kaneko (208 pin PQFP) # Empty sockets for 27C4001 / 27C040 + ROM0 ^ Empty sockets for uPD23C32000 + 082 Full NEC ram number: D431000AGW-70LL + 9709PK002 + + +Cart Layout +----------- + +SUPER-KANEKO-NOVA-SYSTEM +ROM-2-BOARD +NEP-16 + + + /- /- + ||PZL-300-00 * PAL PAL * PZL-200-00 PZL-210-00 * || + || || + || D431000 D431000 || + || || + || PZ01U PZ01U # # || + || U8 U10 U43 U44 * * PZL-100-00 || + \- \- + + +*/ + +#include "driver.h" +#include "sound/ymz280b.h" + +#define BIOS_SKIP 1 // Skip Bios as it takes too long and doesn't complete atm. + +// Defined in video +extern void skns_sprite_kludge(int x, int y); + +UINT32 *skns_tilemapA_ram, *skns_tilemapB_ram, *skns_v3slc_ram; +UINT32 *skns_palette_ram, *skns_v3t_ram, *skns_main_ram, *skns_cache_ram; +UINT32 *skns_pal_regs, *skns_v3_regs, *skns_spc_regs; + +UINT32 skns_v3t_dirty[0x4000]; // allocate this elsewhere? +UINT32 skns_v3t_4bppdirty[0x8000]; // allocate this elsewhere? +int skns_v3t_somedirty,skns_v3t_4bpp_somedirty; + +WRITE32_HANDLER ( skns_tilemapA_w ); +WRITE32_HANDLER ( skns_tilemapB_w ); +WRITE32_HANDLER ( skns_v3_regs_w ); +WRITE32_HANDLER ( skns_pal_regs_w ); +WRITE32_HANDLER ( skns_palette_ram_w ); +VIDEO_START(skns); +VIDEO_EOF(skns); +VIDEO_UPDATE(skns); + +/* hit.c */ + +static struct { + UINT16 x1p, y1p, z1p, x1s, y1s, z1s; + UINT16 x2p, y2p, z2p, x2s, y2s, z2s; + UINT16 org; + + UINT16 x1_p1, x1_p2, y1_p1, y1_p2, z1_p1, z1_p2; + UINT16 x2_p1, x2_p2, y2_p1, y2_p2, z2_p1, z2_p2; + UINT16 x1tox2, y1toy2, z1toz2; + INT16 x_in, y_in, z_in; + UINT16 flag; + + UINT8 disconnect; +} hit; + +static void hit_calc_orig(UINT16 p, UINT16 s, UINT16 org, UINT16 *l, UINT16 *r) +{ + switch(org & 3) { + case 0: + *l = p; + *r = p+s; + break; + case 1: + *l = p-s/2; + *r = *l+s; + break; + case 2: + *l = p-s; + *r = p; + break; + case 3: + *l = p-s; + *r = p+s; + break; + } +} + +static void hit_calc_axis(UINT16 x1p, UINT16 x1s, UINT16 x2p, UINT16 x2s, UINT16 org, + UINT16 *x1_p1, UINT16 *x1_p2, UINT16 *x2_p1, UINT16 *x2_p2, + INT16 *x_in, UINT16 *x1tox2) +{ + UINT16 x1l=0, x1r=0, x2l=0, x2r=0; + hit_calc_orig(x1p, x1s, org, &x1l, &x1r); + hit_calc_orig(x2p, x2s, org >> 8, &x2l, &x2r); + + *x1tox2 = x2p-x1p; + *x1_p1 = x1p; + *x2_p1 = x2p; + *x1_p2 = x1r; + *x2_p2 = x2l; + *x_in = x1r-x2l; +} + +static void hit_recalc(void) +{ + hit_calc_axis(hit.x1p, hit.x1s, hit.x2p, hit.x2s, hit.org, + &hit.x1_p1, &hit.x1_p2, &hit.x2_p1, &hit.x2_p2, + &hit.x_in, &hit.x1tox2); + hit_calc_axis(hit.y1p, hit.y1s, hit.y2p, hit.y2s, hit.org, + &hit.y1_p1, &hit.y1_p2, &hit.y2_p1, &hit.y2_p2, + &hit.y_in, &hit.y1toy2); + hit_calc_axis(hit.z1p, hit.z1s, hit.z2p, hit.z2s, hit.org, + &hit.z1_p1, &hit.z1_p2, &hit.z2_p1, &hit.z2_p2, + &hit.z_in, &hit.z1toz2); + + hit.flag = 0; + hit.flag |= hit.y2p > hit.y1p ? 0x8000 : hit.y2p == hit.y1p ? 0x4000 : 0x2000; + hit.flag |= hit.y_in >= 0 ? 0 : 0x1000; + hit.flag |= hit.x2p > hit.x1p ? 0x0800 : hit.x2p == hit.x1p ? 0x0400 : 0x0200; + hit.flag |= hit.x_in >= 0 ? 0 : 0x0100; + hit.flag |= hit.z2p > hit.z1p ? 0x0080 : hit.z2p == hit.z1p ? 0x0040 : 0x0020; + hit.flag |= hit.z_in >= 0 ? 0 : 0x0010; + hit.flag |= hit.x_in >= 0 && hit.y_in >= 0 && hit.z_in >= 0 ? 8 : 0; + hit.flag |= hit.z_in >= 0 && hit.x_in >= 0 ? 4 : 0; + hit.flag |= hit.y_in >= 0 && hit.z_in >= 0 ? 2 : 0; + hit.flag |= hit.x_in >= 0 && hit.y_in >= 0 ? 1 : 0; +/* if(0) + log_event("HIT", "Recalc, (%d,%d)-(%d,%d)-(%d,%d):(%d,%d)-(%d,%d)-(%d,%d):%04x, (%d,%d,%d), %04x", + hit.x1p, hit.x1s, hit.y1p, hit.y1s, hit.z1p, hit.z1s, + hit.x2p, hit.x2s, hit.y2p, hit.y2s, hit.z2p, hit.z2s, + hit.org, + hit.x_in, hit.y_in, hit.z_in, hit.flag); +*/ +} + +static WRITE32_HANDLER ( skns_hit_w ) +//void hit_w(UINT32 adr, UINT32 data, int type) +{ + int adr = offset * 4; + + switch(adr) { + case 0x00: + case 0x28: + hit.x1p = data; + break; + case 0x08: + case 0x30: + hit.y1p = data; + break; + case 0x38: + case 0x50: + hit.z1p = data; + break; + case 0x04: + case 0x2c: + hit.x1s = data; + break; + case 0x0c: + case 0x34: + hit.y1s = data; + break; + case 0x3c: + case 0x54: + hit.z1s = data; + break; + case 0x10: + case 0x58: + hit.x2p = data; + break; + case 0x18: + case 0x60: + hit.y2p = data; + break; + case 0x20: + case 0x68: + hit.z2p = data; + break; + case 0x14: + case 0x5c: + hit.x2s = data; + break; + case 0x1c: + case 0x64: + hit.y2s = data; + break; + case 0x24: + case 0x6c: + hit.z2s = data; + break; + case 0x70: + hit.org = data; + break; + default: +// log_write("HIT", adr, data, type); + break; + } + hit_recalc(); +} + +static WRITE32_HANDLER ( skns_hit2_w ) +{ +// log_event("HIT", "Set disconnect to %02x", data); + hit.disconnect = data; +} + + +static READ32_HANDLER( skns_hit_r ) +//UINT32 hit_r(UINT32 adr, int type) +{ + int adr = offset *4; + +// log_read("HIT", adr, type); + + if(hit.disconnect) + return 0x0000; + switch(adr) { + case 0x28: + case 0x2a: + return (UINT16)mame_rand(Machine); + case 0x00: + case 0x10: + return (UINT16)hit.x_in; + case 0x04: + case 0x14: + return (UINT16)hit.y_in; + case 0x18: + return (UINT16)hit.z_in; + case 0x08: + case 0x1c: + return hit.flag; + case 0x40: + return hit.x1p; + case 0x48: + return hit.y1p; + case 0x50: + return hit.z1p; + case 0x44: + return hit.x1s; + case 0x4c: + return hit.y1s; + case 0x54: + return hit.z1s; + case 0x58: + return hit.x2p; + case 0x60: + return hit.y2p; + case 0x68: + return hit.z2p; + case 0x5c: + return hit.x2s; + case 0x64: + return hit.y2s; + case 0x6c: + return hit.z2s; + case 0x70: + return hit.org; + case 0x80: + return hit.x1tox2; + case 0x84: + return hit.y1toy2; + case 0x88: + return hit.z1toz2; + case 0x90: + return hit.x1_p1; + case 0xa0: + return hit.y1_p1; + case 0xb0: + return hit.z1_p1; + case 0x98: + return hit.x1_p2; + case 0xa8: + return hit.y1_p2; + case 0xb8: + return hit.z1_p2; + case 0x94: + return hit.x2_p1; + case 0xa4: + return hit.y2_p1; + case 0xb4: + return hit.z2_p1; + case 0x9c: + return hit.x2_p2; + case 0xac: + return hit.y2_p2; + case 0xbc: + return hit.z2_p2; + default: +// log_read("HIT", adr, type); + return 0; + } +} + +/* end hit.c */ + + +/* start old driver code */ + + +static TIMER_CALLBACK( interrupt_callback ) +{ + cpunum_set_input_line(0,param,HOLD_LINE); +} + +static MACHINE_RESET(skns) +{ + timer_pulse(ATTOTIME_IN_MSEC(2), 15, interrupt_callback); + timer_pulse(ATTOTIME_IN_MSEC(8), 11, interrupt_callback); + timer_pulse(ATTOTIME_IN_CYCLES(1824, 0), 9, interrupt_callback); + + memory_set_bankptr(1,memory_region(REGION_USER1)); +} + + +static INTERRUPT_GEN(skns_interrupt) +{ + UINT8 interrupt = 5; + switch(cpu_getiloops()) + { + case 0: + interrupt = 5; // VBLANK + break; + case 1: + interrupt = 1; // SPC + break; + } + cpunum_set_input_line(0,interrupt,HOLD_LINE); +} + +/********************************************************************************** + + Input port definitions + + NOTE: The driver reads data from eight input ports, even if they are unused. + So I left them mapped. See for reference the READ32_HANDLERs : + "nova_input_port_0_r", "nova_input_port_3_r", "nova_input_port_dip_r" +**********************************************************************************/ + +static INPUT_PORTS_START( skns ) /* 3 buttons, 2 players */ + + PORT_START_TAG("IN0") /* IN0 */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START_TAG("IN1") /* IN1 */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START_TAG("IN2") /* IN2 */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN3") /* IN3 */ + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START_TAG("Paddle A") /* Paddle A */ + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START_TAG("Paddle B") /* Paddle B */ + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START_TAG("Paddle C") /* Paddle C */ + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START_TAG("DSW") /* DSW */ + PORT_SERVICE( 0x01, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR(Flip_Screen) ) // This port affects 0x040191c8 function + PORT_DIPSETTING( 0x02, DEF_STR(Off) ) + PORT_DIPSETTING( 0x00, DEF_STR(On) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR(Unknown) ) + PORT_DIPSETTING( 0x04, DEF_STR(Off) ) + PORT_DIPSETTING( 0x00, DEF_STR(On) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR(Unknown) ) + PORT_DIPSETTING( 0x08, DEF_STR(Off) ) + PORT_DIPSETTING( 0x00, DEF_STR(On) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR(Unknown) ) + PORT_DIPSETTING( 0x10, DEF_STR(Off) ) + PORT_DIPSETTING( 0x00, DEF_STR(On) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR(Unknown) ) + PORT_DIPSETTING( 0x20, DEF_STR(Off) ) + PORT_DIPSETTING( 0x00, DEF_STR(On) ) + PORT_DIPNAME( 0x40, 0x40, "Use Backup Ram" ) + PORT_DIPSETTING( 0x00, DEF_STR(No) ) + PORT_DIPSETTING( 0x40, DEF_STR(Yes) ) + PORT_DIPNAME( 0x80, 0x80, "Freeze" ) + PORT_DIPSETTING( 0x00, "Freezes the game") + PORT_DIPSETTING( 0x80, "Right value") + + PORT_START_TAG("Paddle D") /* Paddle D */ + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + +INPUT_PORTS_END + +static INPUT_PORTS_START( skns_1p ) /* 2 buttons, 1 player */ + + PORT_START_TAG("IN0") /* IN0 */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + /* jjparads and jjparad2 are 1 player only games + ryouran and teljan have an unemulated feature + that allows to play them in two player mode + via a cable-network connection (untestable) + Service mode test shows only P1 inputs */ + PORT_START_TAG("IN1") /* IN1 */ + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + + /* same as above, coin 2 and start 2 are untestable + in ryouran and teljan. So I left disabled for now */ + PORT_START_TAG("IN2") /* IN2 */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) +//PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) +//PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN3") /* IN3 */ + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START_TAG("Paddle A") /* Paddle A */ + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START_TAG("Paddle B") /* Paddle B */ + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START_TAG("Paddle C") /* Paddle C */ + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START_TAG("DSW") /* DSW */ + PORT_SERVICE( 0x01, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR(Flip_Screen) ) // This port affects 0x040191c8 function + PORT_DIPSETTING( 0x02, DEF_STR(Off) ) + PORT_DIPSETTING( 0x00, DEF_STR(On) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR(Unknown) ) + PORT_DIPSETTING( 0x04, DEF_STR(Off) ) + PORT_DIPSETTING( 0x00, DEF_STR(On) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR(Unknown) ) + PORT_DIPSETTING( 0x08, DEF_STR(Off) ) + PORT_DIPSETTING( 0x00, DEF_STR(On) ) + PORT_DIPNAME( 0x10, 0x10, "Test Mode" ) + PORT_DIPSETTING( 0x10, DEF_STR(Off) ) + PORT_DIPSETTING( 0x00, DEF_STR(On) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR(Unknown) ) + PORT_DIPSETTING( 0x20, DEF_STR(Off) ) + PORT_DIPSETTING( 0x00, DEF_STR(On) ) + PORT_DIPNAME( 0x40, 0x40, "Use Backup Ram" ) + PORT_DIPSETTING( 0x00, DEF_STR(No) ) + PORT_DIPSETTING( 0x40, DEF_STR(Yes) ) + PORT_DIPNAME( 0x80, 0x80, "Freeze" ) + PORT_DIPSETTING( 0x00, "Freezes the game") + PORT_DIPSETTING( 0x80, "Right value") + + PORT_START_TAG("Paddle D") /* Paddle D */ + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + +INPUT_PORTS_END + +static INPUT_PORTS_START( cyvern ) /* 2 buttons, 2 players */ + PORT_INCLUDE( skns ) + + PORT_MODIFY("IN0") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_MODIFY("IN1") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + +INPUT_PORTS_END + +static INPUT_PORTS_START( galpanis ) /* 1 button, 2 players */ + PORT_INCLUDE( skns ) + + PORT_MODIFY("IN0") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_MODIFY("IN1") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + +INPUT_PORTS_END + +static INPUT_PORTS_START( puzzloop ) /* 2 buttons, 2 players, paddle */ + PORT_INCLUDE( skns ) + + PORT_MODIFY("IN0") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_MODIFY("IN1") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_MODIFY("Paddle A") /* Paddle A */ + PORT_BIT( 0xFF, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(15) PORT_REVERSE PORT_PLAYER(1) + + PORT_MODIFY("Paddle B") /* Paddle B */ + PORT_BIT( 0xFF, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(15) PORT_REVERSE PORT_PLAYER(2) + +INPUT_PORTS_END + +static INPUT_PORTS_START( vblokbrk ) /* 3 buttons, 2 players, paddle */ + PORT_INCLUDE( skns ) + + PORT_MODIFY("Paddle A") /* Paddle A */ + PORT_BIT( 0xFF, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(15) PORT_REVERSE PORT_PLAYER(1) + + PORT_MODIFY("Paddle B") /* Paddle B */ + PORT_BIT( 0xFF, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(15) PORT_REVERSE PORT_PLAYER(2) + +INPUT_PORTS_END + + +static READ32_HANDLER( nova_input_port_0_r ) +{ + return readinputport(0)<<24 | readinputport(1)<<16 | readinputport(2)<<8 | readinputport(3); +} + +static READ32_HANDLER( nova_input_port_3_r ) +{ + return readinputport(8) | 0xffffff00; +} + +static READ32_HANDLER( nova_input_port_dip_r ) +{ + return readinputport(4)<<24 | readinputport(5)<<16 | readinputport(6)<<8 | readinputport(7); +} + +static UINT32 timer_0_temp[4]; + +static WRITE32_HANDLER( skns_msm6242_w ) +{ + COMBINE_DATA(&timer_0_temp[offset]); + + if(offset>=4) + { + mame_printf_debug("Timer 0 outbound\n"); + return; + } +} + +static WRITE32_HANDLER( skns_io_w ) +{ + switch(offset) { + case 2: + if(((mem_mask & 0xff000000) == 0)) + { /* Coin Lock/Count */ +// coin_counter_w(0, data & 0x01000000); +// coin_counter_w(1, data & 0x02000000); +// coin_lockout_w(0, ~data & 0x04000000); +// coin_lockout_w(1, ~data & 0x08000000); // Works in puzzloop, others behave strange. + } + if(((mem_mask & 0x00ff0000) == 0)) + { /* Analogue Input Select */ + } + if(((mem_mask & 0x0000ff00) == 0)) + { /* Extended Output - Port A, Mahjong inputs, Comms etc. */ + } + if(((mem_mask & 0x000000ff) == 0)) + { /* Extended Output - Port B */ + } + break; + case 3: + if(((mem_mask & 0x0000ff00) == 0)) + { /* Interrupt Clear, do we need these? */ +/* if(data&0x01) + cpunum_set_input_line(0,1,CLEAR_LINE); + if(data&0x02) + cpunum_set_input_line(0,3,CLEAR_LINE); + if(data&0x04) + cpunum_set_input_line(0,5,CLEAR_LINE); + if(data&0x08) + cpunum_set_input_line(0,7,CLEAR_LINE); + if(data&0x10) + cpunum_set_input_line(0,9,CLEAR_LINE); + if(data&0x20) + cpunum_set_input_line(0,0xb,CLEAR_LINE); + if(data&0x40) + cpunum_set_input_line(0,0xd,CLEAR_LINE); + if(data&0x80) + cpunum_set_input_line(0,0xf,CLEAR_LINE);*/ + + /* idle skip for vblokbrk/sarukani, i can't find a better place to put it :-( but i think it works ok unless its making the game too fast */ + if (activecpu_get_pc()==0x04013B44) + { + if (!strcmp(Machine->gamedrv->name,"vblokbrk") || + !strcmp(Machine->gamedrv->name,"sarukani")) + cpu_spinuntil_int(); + } + + } + else + { + logerror("Unk IO Write memmask:%08x offset:%08x data:%08x\n", mem_mask, offset, data); + } + break; + default: + logerror("Unk IO Write memmask:%08x offset:%08x data:%08x\n", mem_mask, offset, data); + break; + } +} + + +static READ32_HANDLER( skns_msm6242_r ) +{ + mame_system_time systime; + long value; + + mame_get_base_datetime(Machine, &systime); + // The clock is not y2k-compatible, wrap back 10 years, screw the leap years + // tm->tm_year -= 10; + + switch(offset) { + case 0: + value = (systime.local_time.second % 10)<<24; + value |= (systime.local_time.second / 10)<<16; + value |= (systime.local_time.minute % 10)<<8; + value |= (systime.local_time.minute / 10); + break; + case 1: + value = (systime.local_time.hour % 10)<<24; + value |= ((systime.local_time.hour / 10) /*| (tm->tm_hour >= 12 ? 4 : 0)*/)<<16; + value |= (systime.local_time.mday % 10)<<8; + value |= (systime.local_time.mday / 10); + break; + case 2: + value = ((systime.local_time.month + 1) % 10)<<24; + value |= ((systime.local_time.month + 1) / 10)<<16; + value |= (systime.local_time.year % 10)<<8; + value |= ((systime.local_time.year / 10) % 10); + break; + case 3: + default: + value = (systime.local_time.weekday)<<24; + value |= (1)<<16; + value |= (6)<<8; + value |= (4); + break; + } + return value; +} + +/* end old driver code */ + +static WRITE32_HANDLER( skns_v3t_w ) +{ + UINT8 *btiles = memory_region(REGION_GFX3); + + COMBINE_DATA(&skns_v3t_ram[offset]); + + skns_v3t_dirty[offset/0x40] = 1; + skns_v3t_somedirty = 1; + skns_v3t_4bppdirty[offset/0x20] = 1; + skns_v3t_4bpp_somedirty = 1; + + data = skns_v3t_ram[offset]; +// i think we need to swap around to decode .. endian issues? + btiles[offset*4+0] = (data & 0xff000000) >> 24; + btiles[offset*4+1] = (data & 0x00ff0000) >> 16; + btiles[offset*4+2] = (data & 0x0000ff00) >> 8; + btiles[offset*4+3] = (data & 0x000000ff) >> 0; +} + +static WRITE32_HANDLER( skns_ymz280_w ) +{ + if ((mem_mask & 0xff000000) == 0) + YMZ280B_register_0_w(offset,(data >> 24) & 0xff); + if ((mem_mask & 0x00ff0000) == 0) + YMZ280B_data_0_w(offset,(data >> 16) & 0xff); +} + +static ADDRESS_MAP_START( skns_readmem, ADDRESS_SPACE_PROGRAM, 32 ) + AM_RANGE(0x00000000, 0x0007ffff) AM_READ(MRA32_ROM) /* BIOS ROM */ + AM_RANGE(0x00400000, 0x00400003) AM_READ(nova_input_port_0_r) + AM_RANGE(0x00400004, 0x00400007) AM_READ(nova_input_port_dip_r) + AM_RANGE(0x00400008, 0x0040000b) AM_READ(MRA32_RAM) + /* In between is write only */ + AM_RANGE(0x0040000c, 0x0040000f) AM_READ(nova_input_port_3_r) + AM_RANGE(0x00800000, 0x00801fff) AM_READ(MRA32_RAM) /* 'backup' RAM */ +// AM_RANGE(0x00c00000, 0x00c00003) AM_READ(skns_ymz280_r) /* ymz280 (sound) */ + AM_RANGE(0x01000000, 0x0100000f) AM_READ(skns_msm6242_r) + AM_RANGE(0x02000000, 0x02003fff) AM_READ(MRA32_RAM) /* 'spc' RAM */ + AM_RANGE(0x02100000, 0x0210003f) AM_READ(MRA32_RAM) /* 'spc' */ + AM_RANGE(0x02400000, 0x0240007f) AM_READ(MRA32_RAM) /* 'v3' */ + AM_RANGE(0x02500000, 0x02507fff) AM_READ(MRA32_RAM) /* 'v3tbl' RAM */ + AM_RANGE(0x02600000, 0x02607fff) AM_READ(MRA32_RAM) /* 'v3slc' RAM */ + AM_RANGE(0x02a00000, 0x02a0001f) AM_READ(MRA32_RAM) /* skns_pal_regs */ + AM_RANGE(0x02a40000, 0x02a5ffff) AM_READ(MRA32_RAM) /* 'palette' RAM */ + AM_RANGE(0x02f00000, 0x02f000ff) AM_READ(skns_hit_r) /* hit */ + AM_RANGE(0x04000000, 0x041fffff) AM_READ(MRA32_BANK1) /* GAME ROM */ + AM_RANGE(0x04800000, 0x0483ffff) AM_READ(MRA32_RAM) /* 'v3t' RAM */ + AM_RANGE(0x06000000, 0x060fffff) AM_READ(MRA32_RAM) /* 'main' RAM */ + AM_RANGE(0xc0000000, 0xc0000fff) AM_READ(MRA32_RAM) /* 'cache' RAM */ +ADDRESS_MAP_END + +static ADDRESS_MAP_START( skns_writemem, ADDRESS_SPACE_PROGRAM, 32 ) + AM_RANGE(0x00000000, 0x0007ffff) AM_WRITE(MWA32_ROM) /* BIOS ROM */ + AM_RANGE(0x00400000, 0x0040000f) AM_WRITE(skns_io_w) /* I/O Write */ + AM_RANGE(0x00800000, 0x00801fff) AM_WRITE(MWA32_RAM) AM_BASE(&generic_nvram32) AM_SIZE(&generic_nvram_size) /* 'backup' RAM */ + AM_RANGE(0x00c00000, 0x00c00003) AM_WRITE(skns_ymz280_w) /* ymz280_w (sound) */ + AM_RANGE(0x01000000, 0x0100000f) AM_WRITE(skns_msm6242_w) + AM_RANGE(0x01800000, 0x01800003) AM_WRITE(skns_hit2_w) + AM_RANGE(0x02000000, 0x02003fff) AM_WRITE(MWA32_RAM) AM_BASE(&spriteram32) AM_SIZE(&spriteram_size) /* sprite ram */ + AM_RANGE(0x02100000, 0x0210003f) AM_WRITE(MWA32_RAM) AM_BASE(&skns_spc_regs) /* sprite registers */ + AM_RANGE(0x02400000, 0x0240007f) AM_WRITE(skns_v3_regs_w) AM_BASE(&skns_v3_regs) /* tilemap registers */ + AM_RANGE(0x02500000, 0x02503fff) AM_WRITE(skns_tilemapA_w) AM_BASE(&skns_tilemapA_ram) /* tilemap A */ + AM_RANGE(0x02504000, 0x02507fff) AM_WRITE(skns_tilemapB_w) AM_BASE(&skns_tilemapB_ram) /* tilemap B */ + AM_RANGE(0x02600000, 0x02607fff) AM_WRITE(MWA32_RAM) AM_BASE(&skns_v3slc_ram) /* tilemap linescroll */ + AM_RANGE(0x02a00000, 0x02a0001f) AM_WRITE(skns_pal_regs_w) AM_BASE(&skns_pal_regs) + AM_RANGE(0x02a40000, 0x02a5ffff) AM_WRITE(skns_palette_ram_w) AM_BASE(&skns_palette_ram) + AM_RANGE(0x02f00000, 0x02f000ff) AM_WRITE(skns_hit_w) + AM_RANGE(0x04000000, 0x041fffff) AM_WRITE(MWA32_ROM) /* GAME ROM */ + AM_RANGE(0x04800000, 0x0483ffff) AM_WRITE(skns_v3t_w) AM_BASE(&skns_v3t_ram) /* tilemap b ram based tiles */ + AM_RANGE(0x06000000, 0x060fffff) AM_WRITE(MWA32_RAM) AM_BASE(&skns_main_ram) + AM_RANGE(0xc0000000, 0xc0000fff) AM_WRITE(MWA32_RAM) AM_BASE(&skns_cache_ram) /* 'cache' RAM */ +ADDRESS_MAP_END + +/***** GFX DECODE *****/ + +static const gfx_layout skns_tilemap_layout = +{ + 16,16, + RGN_FRAC(1,1), + 8, + { 0, 1, 2, 3, 4, 5, 6, 7 }, + { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, + 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 }, + { 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*16*8 +}; + +static const gfx_layout skns_4bpptilemap_layout = +{ + 16,16, + RGN_FRAC(1,1), + 4, + { 0, 1, 2, 3 }, + { 1*4, 0*4, 3*4, 2*4, 5*4, 4*4, 7*4, 6*4, + 9*4, 8*4, 11*4, 10*4, 13*4, 12*4, 15*4, 14*4 }, + { 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64, + 8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64 }, + 16*16*4 +}; + +static GFXDECODE_START( skns_bg ) + /* REGION_GFX1 is sprites, RLE encoded */ + GFXDECODE_ENTRY( REGION_GFX2, 0, skns_tilemap_layout, 0x000, 128 ) + GFXDECODE_ENTRY( REGION_GFX3, 0, skns_tilemap_layout, 0x000, 128 ) + GFXDECODE_ENTRY( REGION_GFX2, 0, skns_4bpptilemap_layout, 0x000, 128 ) + GFXDECODE_ENTRY( REGION_GFX3, 0, skns_4bpptilemap_layout, 0x000, 128 ) +GFXDECODE_END + +/***** MACHINE DRIVER *****/ + +static struct YMZ280Binterface ymz280b_intf = +{ + REGION_SOUND1, + 0 // irq ? +}; + +static MACHINE_DRIVER_START(skns) + MDRV_CPU_ADD(SH2,28638000) + MDRV_CPU_PROGRAM_MAP(skns_readmem,skns_writemem) + MDRV_CPU_VBLANK_INT(skns_interrupt,2) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + MDRV_MACHINE_RESET(skns) + MDRV_NVRAM_HANDLER(generic_1fill) + + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_BUFFERS_SPRITERAM) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*16,64*16) + MDRV_SCREEN_VISIBLE_AREA(0,319,0,239) + MDRV_PALETTE_LENGTH(32768) + MDRV_GFXDECODE(skns_bg) + + MDRV_VIDEO_START(skns) + MDRV_VIDEO_EOF(skns) + MDRV_VIDEO_UPDATE(skns) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(YMZ280B, 33333333 / 2) + MDRV_SOUND_CONFIG(ymz280b_intf) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) +MACHINE_DRIVER_END + +/***** BIOS SKIPPING *****/ + +static READ32_HANDLER( bios_skip_r ) +{ +#if BIOS_SKIP + if (activecpu_get_pc()==0x6fa) program_write_byte(0x06000029,1); +#endif + return skns_main_ram[0x00028/4]; +} + +/***** IDLE SKIPPING *****/ + +static READ32_HANDLER( gutsn_speedup_r ) +{ +/* + 0402206A: MOV.L @($8C,PC),R5 + 0402206C: MOV.L @($8C,PC),R1 + 0402206E: MOV.L @R1,R2 // R1 == 600C780 + 04022070: MOV.L @R5,R3 // R5 == 6000078 + 04022072: CMP/EQ R2,R3 + 04022074: BT $0402206C +*/ + if (activecpu_get_pc()==0x4022070) + { + if(skns_main_ram[0x00078/4] == skns_main_ram[0x0c780/4]) + cpu_spinuntil_int(); + } + return skns_main_ram[0x0c780/4]; +} + +static READ32_HANDLER( cyvern_speedup_r ) +{ + if (activecpu_get_pc()==0x402ebd4) cpu_spinuntil_int(); + return skns_main_ram[0x4d3c8/4]; +} + +static READ32_HANDLER( puzloopj_speedup_r ) +{ + if (activecpu_get_pc()==0x401dca2) cpu_spinuntil_int(); + return skns_main_ram[0x86714/4]; +} + +static READ32_HANDLER( puzloopu_speedup_r ) +{ + if (activecpu_get_pc()==0x401dab2) cpu_spinuntil_int(); + return skns_main_ram[0x85cec/4]; +} + +static READ32_HANDLER( puzzloop_speedup_r ) +{ +/* + 0401DA12: MOV.L @($80,PC),R1 + 0401DA14: MOV.L @R1,R0 (R1=0x6081d38) + 0401DA16: TST R0,R0 + 0401DA18: BF $0401DA26 + 0401DA26: BRA $0401DA12 +*/ + if (activecpu_get_pc()==0x401da16) cpu_spinuntil_int(); + return skns_main_ram[0x81d38/4]; +} + +static READ32_HANDLER( senknow_speedup_r ) +{ + if (activecpu_get_pc()==0x4017dd0) cpu_spinuntil_int(); + return skns_main_ram[0x0000dc/4]; +} + +static READ32_HANDLER( teljan_speedup_r ) +{ + if (activecpu_get_pc()==0x401ba34) cpu_spinuntil_int(); + return skns_main_ram[0x002fb4/4]; +} + +static READ32_HANDLER( jjparads_speedup_r ) +{ + if (activecpu_get_pc()==0x4015e86) cpu_spinuntil_int(); + return skns_main_ram[0x000994/4]; +} + +static READ32_HANDLER( jjparad2_speedup_r ) +{ + if (activecpu_get_pc()==0x401620c) cpu_spinuntil_int(); + return skns_main_ram[0x000984/4]; +} + +static READ32_HANDLER( ryouran_speedup_r ) +{ + if (activecpu_get_pc()==0x40182d0) cpu_spinuntil_int(); + return skns_main_ram[0x000a14/4]; +} + +static READ32_HANDLER( galpans2_speedup_r ) +{ + if (activecpu_get_pc()==0x4049ae4) cpu_spinuntil_int(); + return skns_main_ram[0x0fb6bc/4]; +} + +static READ32_HANDLER( panicstr_speedup_r ) +{ + if (activecpu_get_pc()==0x404e68c) cpu_spinuntil_int(); + return skns_main_ram[0x0f19e4/4]; +} + +static READ32_HANDLER( sengekis_speedup_r ) // 60006ee 600308e +{ + if (activecpu_get_pc()==0x60006ee) cpu_spinuntil_int(); + return skns_main_ram[0xb74bc/4]; +} + +static READ32_HANDLER( sengekij_speedup_r ) // 60006ee 600308e +{ + if (activecpu_get_pc()==0x60006ee) cpu_spinuntil_int(); + return skns_main_ram[0xb7380/4]; +} + +static void init_skns(running_machine *machine) +{ + memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x6000028, 0x600002b, 0, 0, bios_skip_r ); +} + +static DRIVER_INIT( galpani4 ) { skns_sprite_kludge(-5,-1); init_skns(machine); } // Idle Loop caught by sh-2 core +static DRIVER_INIT( galpanis ) { skns_sprite_kludge(-5,-1); init_skns(machine); } // Idle Loop caught by sh-2 core +static DRIVER_INIT( cyvern ) { skns_sprite_kludge(+0,+2); init_skns(machine); memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x604d3c8, 0x604d3cb, 0, 0, cyvern_speedup_r ); } +static DRIVER_INIT( galpans2 ) { skns_sprite_kludge(-1,-1); init_skns(machine); memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x60fb6bc, 0x60fb6bf, 0, 0, galpans2_speedup_r ); } +static DRIVER_INIT( gutsn ) { skns_sprite_kludge(+0,+0); init_skns(machine); memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x600c780, 0x600c783, 0, 0, gutsn_speedup_r ); } +static DRIVER_INIT( panicstr ) { skns_sprite_kludge(-1,-1); init_skns(machine); memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x60f19e4, 0x60f19e7, 0, 0, panicstr_speedup_r ); } +static DRIVER_INIT( senknow ) { skns_sprite_kludge(+1,+1); init_skns(machine); memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x60000dc, 0x60000df, 0, 0, senknow_speedup_r ); } +static DRIVER_INIT( puzzloop ) { skns_sprite_kludge(-9,-1); init_skns(machine); memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x6081d38, 0x6081d3b, 0, 0, puzzloop_speedup_r ); } +static DRIVER_INIT( puzloopj ) { skns_sprite_kludge(-9,-1); init_skns(machine); memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x6086714, 0x6086717, 0, 0, puzloopj_speedup_r ); } +static DRIVER_INIT( puzloopu ) { skns_sprite_kludge(-9,-1); init_skns(machine); memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x6085cec, 0x6085cef, 0, 0, puzloopu_speedup_r ); } +static DRIVER_INIT( jjparads ) { skns_sprite_kludge(+5,+1); init_skns(machine); memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x6000994, 0x6000997, 0, 0, jjparads_speedup_r ); } +static DRIVER_INIT( jjparad2 ) { skns_sprite_kludge(+5,+1); init_skns(machine); memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x6000984, 0x6000987, 0, 0, jjparad2_speedup_r ); } +static DRIVER_INIT( ryouran ) { skns_sprite_kludge(+5,+1); init_skns(machine); memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x6000a14, 0x6000a17, 0, 0, ryouran_speedup_r ); } +static DRIVER_INIT( teljan ) { skns_sprite_kludge(+5,+1); init_skns(machine); memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x6002fb4, 0x6002fb7, 0, 0, teljan_speedup_r ); } +static DRIVER_INIT( sengekis ) { skns_sprite_kludge(-192,-272); init_skns(machine); memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x60b74bc, 0x60b74bf, 0, 0, sengekis_speedup_r ); } +static DRIVER_INIT( sengekij ) { skns_sprite_kludge(-192,-272); init_skns(machine); memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x60b7380, 0x60b7383, 0, 0, sengekij_speedup_r ); } +static DRIVER_INIT( sarukani ) { skns_sprite_kludge(-1,-1); init_skns(machine); } // Speedup is in skns_io_w() + + + +/***** ROM LOADING *****/ + +ROM_START( skns ) + ROM_REGION( 0x0100000, REGION_CPU1, 0 ) /* SH-2 Code */ + ROM_LOAD ( "sknsj1.u10", 0x000000, 0x080000, CRC(7e2b836c) SHA1(92c5a7a2472496028bff0e5980d41dd294f42144) ) /* Japan BIOS */ + ROM_LOAD ( "sknse1.u10", 0x000000, 0x080000, CRC(e2b9d7d1) SHA1(b530a3bb9dedc8cfafcba9f1f10277590be04a15) ) /* Europ BIOS */ + ROM_LOAD ( "sknsa1.u10", 0x000000, 0x080000, CRC(745e5212) SHA1(caba649ab2d83b2d7e007eecee0fc582c019df38) ) /* Asia BIOS */ + ROM_LOAD ( "sknsu1.u10", 0x000000, 0x080000, CRC(384d21ec) SHA1(a27e8a18099d9cea64fa32db28d01101c2a78815) ) /* USA BIOS */ + ROM_LOAD ( "sknsk1.u10", 0x000000, 0x080000, CRC(ff1c9f79) SHA1(a51e598d43e76d37da69b1f094c111273bdfc94a) ) /* Korea BIOS */ +ROM_END + +ROM_START( cyvern ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* SH-2 Code */ + ROM_LOAD ( "sknsj1.u10", 0x000000, 0x080000, CRC(7e2b836c) SHA1(92c5a7a2472496028bff0e5980d41dd294f42144) ) /* Japan BIOS */ + + ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_LOAD16_BYTE( "cvj-even.u10", 0x000000, 0x100000, CRC(802fadb4) SHA1(cbfac3a87a4863466117c61f2ecaf63d506352f6) ) + ROM_LOAD16_BYTE( "cvj-odd.u8", 0x000001, 0x100000, CRC(f8a0fbdd) SHA1(5cc8c12c13b5eb3456083e70100450ba041de76e) ) + + ROM_REGION( 0x800000, REGION_GFX1, 0 ) /* Sprites */ + ROM_LOAD( "cv100-00.u24", 0x000000, 0x400000, CRC(cd4ae88a) SHA1(925f4ae01a6ad3633be2a61be69e163f05401cf6) ) + ROM_LOAD( "cv101-00.u20", 0x400000, 0x400000, CRC(a6cb3f0b) SHA1(8d83f44a096ca0a70962ca4c602c4331874c8560) ) + + ROM_REGION( 0x800000, REGION_GFX2, ROMREGION_DISPOSE ) /* Tiles Plane A */ + ROM_LOAD( "cv200-00.u16", 0x000000, 0x400000, CRC(ddc8c67e) SHA1(9b99e87e69e88011e6d693d19ac5e115b4fa50b0) ) + ROM_LOAD( "cv201-00.u13", 0x400000, 0x400000, CRC(65863321) SHA1(b8b75f50406068ffc3fca3887d2f0a653ca491c9) ) + + ROM_REGION( 0x800000, REGION_GFX3, ROMREGION_ERASE00 ) /* Tiles Plane B */ + /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ + /* 0x040000 - 0x3fffff empty? */ + ROM_LOAD( "cv210-00.u18", 0x400000, 0x400000, CRC(7486bf3a) SHA1(3b4285ca570e9c5ad396c615bfc054372d1b0162) ) + + ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "cv300-00.u4", 0x000000, 0x400000, CRC(fbeda465) SHA1(4d5066a22f4589b6b7f85b3e77c348d900ac4bdd) ) +ROM_END + +ROM_START( galpani4 ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* SH-2 Code */ + ROM_LOAD ( "sknsj1.u10", 0x000000, 0x080000, CRC(7e2b836c) SHA1(92c5a7a2472496028bff0e5980d41dd294f42144) ) /* Japan BIOS */ + + ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_LOAD16_BYTE( "gp4j1.u10", 0x000000, 0x080000, CRC(919a3893) SHA1(83b89a9e628a1f46f8a56ea512fc8ad641d5e239) ) + ROM_LOAD16_BYTE( "gp4j1.u08", 0x000001, 0x080000, CRC(94cb1fb7) SHA1(ac90103dd43cdce6a287ffc13631c1de477a9a71) ) + + ROM_REGION( 0x400000, REGION_GFX1, 0 ) + ROM_LOAD( "gp410000.u24", 0x000000, 0x200000, CRC(1df61f01) SHA1(a9e95bbb3013e8f2fd01243b1b392ff07b4f7d02) ) + ROM_LOAD( "gp410100.u20", 0x200000, 0x100000, CRC(8e2c9349) SHA1(a58fa9bcc9684ed4558e3395d592b64a1978a902) ) + + ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "gp420000.u16", 0x000000, 0x200000, CRC(f0781376) SHA1(aeab9553a9af922524e528eb2d019cf36b6e2094) ) + ROM_LOAD( "gp420100.u18", 0x200000, 0x200000, CRC(10c4b183) SHA1(80e05f3932495ad4fc9bf928fa66e6d2931bbb06) ) + + ROM_REGION( 0x800000, REGION_GFX3, ROMREGION_ERASE00 ) /* Tiles Plane B */ + /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ + /* 0x040000 - 0x3fffff empty? */ + + ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "gp430000.u4", 0x000000, 0x200000, CRC(8374663a) SHA1(095512564f4de25dc3752d9fbd254b9dabd16d1b) ) +ROM_END + +ROM_START( galpanis ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* SH-2 Code */ + ROM_LOAD ( "sknsj1.u10", 0x000000, 0x080000, CRC(7e2b836c) SHA1(92c5a7a2472496028bff0e5980d41dd294f42144) ) /* Japan BIOS */ + + ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_LOAD16_BYTE( "gps-e.u10", 0x000000, 0x100000, CRC(c6938c3f) SHA1(05853ee6a44a55702788a75580b04a4be45e9bcb) ) + ROM_LOAD16_BYTE( "gps-o.u8", 0x000001, 0x100000, CRC(e764177a) SHA1(3a1333eb1022ed1a275b9c3d44b5f4ab81618fb6) ) + + ROM_REGION( 0x1000000, REGION_GFX1, 0 ) + ROM_LOAD( "gps10000.u24", 0x000000, 0x400000, CRC(a1a7acf2) SHA1(52c86ae907f0c0236808c19f652955b09e90ec5a) ) + ROM_LOAD( "gps10100.u20", 0x400000, 0x400000, CRC(49f764b6) SHA1(9f4289858c3dac625ef623cc381a47b45aa5d8e2) ) + ROM_LOAD( "gps10200.u17", 0x800000, 0x400000, CRC(51980272) SHA1(6c0706d913b33995579aaf0688c4bf26d6d35a78) ) + + ROM_REGION( 0x800000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "gps20000.u16", 0x000000, 0x400000, CRC(c146a09e) SHA1(5af5a7b9d9a55ec7aba3fd85a3a0211b92b1b84f) ) + ROM_LOAD( "gps20100.u13", 0x400000, 0x400000, CRC(9dfa2dc6) SHA1(a058c42fd76c23c0e5c8c11f5617fd29e056be7d) ) + + ROM_REGION( 0x800000, REGION_GFX3, ROMREGION_ERASE00 ) /* Tiles Plane B */ + /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ + /* 0x040000 - 0x3fffff empty? */ + + ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "gps30000.u4", 0x000000, 0x400000, CRC(9e4da8e3) SHA1(6506d9300a442883357003a05fd2c78d364c35bb) ) +ROM_END + +ROM_START( galpans2 ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* SH-2 Code */ + ROM_LOAD ( "sknsj1.u10", 0x000000, 0x080000, CRC(7e2b836c) SHA1(92c5a7a2472496028bff0e5980d41dd294f42144) ) /* Japan BIOS */ + + ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_LOAD16_BYTE( "gps2j.u6", 0x000000, 0x100000, CRC(6e74005b) SHA1(a57e8307062e262c2e7a84e2c58f7dfe03fc0f78) ) + ROM_LOAD16_BYTE( "gps2j.u4", 0x000001, 0x100000, CRC(9b4b2304) SHA1(0b481f4d71d92bf23f38ed22979efd4409004857) ) + + ROM_REGION( 0x1000000, REGION_GFX1, 0 ) + ROM_LOAD( "gs210000.u21", 0x000000, 0x400000, CRC(294b2f14) SHA1(90cbd0acdaa2d89d208c28aae33ab57c03624089) ) + ROM_LOAD( "gs210100.u20", 0x400000, 0x400000, CRC(f75c5a9a) SHA1(3919643cee6c88185a1aa3c58c5bc80599bf734e) ) + ROM_LOAD( "gs210200.u8", 0x800000, 0x400000, CRC(25b4f56b) SHA1(f9a33d5ed54a04ecece3035e75508d191bbe74b1) ) + ROM_LOAD( "gs210300.u32", 0xc00000, 0x400000, CRC(db6d4424) SHA1(0a88dafd0ee2490ff2ef39ce8eb1931c41bdda42) ) + + ROM_REGION( 0x800000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "gs220000.u17", 0x000000, 0x400000, CRC(5caae1c0) SHA1(8f77e4cf018d7290b2d804cbff9fccf0bf4d2404) ) + ROM_LOAD( "gs220100.u9", 0x400000, 0x400000, CRC(8d51f197) SHA1(19d2afab823ea179918e7bcbf4df2283e77570f0) ) + + ROM_REGION( 0x800000, REGION_GFX3, ROMREGION_ERASE00 ) /* Tiles Plane B */ + /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ + /* 0x040000 - 0x3fffff empty? */ + ROM_LOAD( "gs221000.u3", 0x400000, 0x400000, CRC(58800a18) SHA1(5e6d55ecd12275662d6f59559e137b759f23fff6) ) + + ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "gs230000.u1", 0x000000, 0x400000, CRC(0348e8e1) SHA1(8a21c7e5cea0bc08a2595213d689c58c0251fdb5) ) +ROM_END + +ROM_START( gutsn ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* SH-2 Code */ + ROM_LOAD ( "sknsj1.u10", 0x000000, 0x080000, CRC(7e2b836c) SHA1(92c5a7a2472496028bff0e5980d41dd294f42144) ) /* Japan BIOS */ + + ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_LOAD16_BYTE( "gts000j0.u6" ,0x000000, 0x080000, CRC(8ee91310) SHA1(8dd918189fe445d79c7f028168862b852f70a6f2) ) + ROM_LOAD16_BYTE( "gts001j0.u4", 0x000001, 0x080000, CRC(80b8ee66) SHA1(4faf5f358ceee866f09bd81e63ba3ebd21bde835) ) + + ROM_REGION( 0x400000, REGION_GFX1, 0 ) + ROM_LOAD( "gts10000.u24", 0x000000, 0x400000, CRC(1959979e) SHA1(92a68784664dd833ca6fcca1b15cd46b9365d081) ) + + ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "gts20000.u16", 0x000000, 0x400000, CRC(c443aac3) SHA1(b0416a09ead26077e9276bae98d94eeb1cf86877) ) + + ROM_REGION( 0x400000, REGION_GFX3, ROMREGION_ERASE00 ) /* Tiles Plane B */ + /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ + /* 0x040000 - 0x3fffff empty? */ + + ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "gts30000.u4", 0x000000, 0x400000, CRC(8c169141) SHA1(41caea6fa644515f7417c84bdac599b13ad07e8c) ) +ROM_END + +ROM_START( panicstr ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* SH-2 Code */ + ROM_LOAD ( "sknsj1.u10", 0x000000, 0x080000, CRC(7e2b836c) SHA1(92c5a7a2472496028bff0e5980d41dd294f42144) ) /* Japan BIOS */ + + ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_LOAD16_BYTE( "ps1000j0.u10", 0x000000, 0x100000, CRC(59645f89) SHA1(8da205c6e38899d6c637941700dd7eea56011c10) ) + ROM_LOAD16_BYTE( "ps1001j0.u8", 0x000001, 0x100000, CRC(c4722be9) SHA1(7009d320a80cfa7d80efc5fc915081914bc3c827) ) + + ROM_REGION( 0x800000, REGION_GFX1, 0 ) + ROM_LOAD( "ps-10000.u24", 0x000000, 0x400000, CRC(294b2f14) SHA1(90cbd0acdaa2d89d208c28aae33ab57c03624089) ) + ROM_LOAD( "ps110100.u20", 0x400000, 0x400000, CRC(e292f393) SHA1(b0914f7f0abf9f821f2592c289ea4e3b3e7f819a) ) + + ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "ps120000.u16", 0x000000, 0x400000, CRC(d772ac15) SHA1(6bf7b9bfccdcb7481b21fa2ab9b683d79033a192) ) + + ROM_REGION( 0x400000, REGION_GFX3, ROMREGION_ERASE00 ) /* Tiles Plane B */ + /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ + /* 0x040000 - 0x3fffff empty? */ + + ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "ps-30000.u4", 0x000000, 0x400000, CRC(2262e263) SHA1(73443e5f40f5c5c9bd41c6207fa6376072f0f65e) ) +ROM_END + +ROM_START( puzzloop ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* SH-2 Code */ + ROM_LOAD ( "sknse1.u10", 0x000000, 0x080000, CRC(e2b9d7d1) SHA1(b530a3bb9dedc8cfafcba9f1f10277590be04a15) ) /* Europe BIOS */ + + ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_LOAD16_BYTE( "pl00e1.u6", 0x000000, 0x080000, CRC(273adc38) SHA1(37ca873342ba9fb9951114048a9cd255f73fe19c) ) + ROM_LOAD16_BYTE( "pl00e1.u4", 0x000001, 0x080000, CRC(14ac2870) SHA1(d1abcfd64d7c0ead67e879c40e1010453fd4da13) ) + + ROM_REGION( 0x800000, REGION_GFX1, 0 ) + ROM_LOAD( "pzl10000.u24", 0x000000, 0x400000, CRC(35bf6897) SHA1(8a1f1f5234a61971a62401633de1dec1920fc4da) ) + + ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "pzl20000.u16", 0x000000, 0x400000, CRC(ff558e68) SHA1(69a50c8100edbf2d5d92ce14b3f079f76c544bdd) ) + + ROM_REGION( 0x800000, REGION_GFX3, ROMREGION_ERASE00 ) /* Tiles Plane B */ + /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ + /* 0x040000 - 0x3fffff empty? */ + ROM_LOAD( "pzl21000.u18", 0x400000, 0x400000, CRC(c8b3be64) SHA1(6da9ca8b963ebf10df6bc02bd1bdc66392e2fa60) ) + + ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "pzl30000.u4", 0x000000, 0x400000, CRC(38604b8d) SHA1(1191cf48a6a7baa58e51509442b40ea67f5252d2) ) +ROM_END + +ROM_START( puzloopj ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* SH-2 Code */ + ROM_LOAD ( "sknsj1.u10", 0x000000, 0x080000, CRC(7e2b836c) SHA1(92c5a7a2472496028bff0e5980d41dd294f42144) ) /* Japan BIOS */ + + ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_LOAD16_BYTE( "pl0j2u6.u10", 0x000000, 0x080000, CRC(23c3bf97) SHA1(77ea1f32bed5709a6ad5b250370f08cfe8036867) ) + ROM_LOAD16_BYTE( "pl0j2u4.u8", 0x000001, 0x080000, CRC(55b2a3cb) SHA1(d4cbe143fe2ad622af808cbd9eedffeff3b77e0d) ) + + ROM_REGION( 0x800000, REGION_GFX1, 0 ) + ROM_LOAD( "pzl10000.u24", 0x000000, 0x400000, CRC(35bf6897) SHA1(8a1f1f5234a61971a62401633de1dec1920fc4da) ) + + ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "pzl20000.u16", 0x000000, 0x400000, CRC(ff558e68) SHA1(69a50c8100edbf2d5d92ce14b3f079f76c544bdd) ) + + ROM_REGION( 0x800000, REGION_GFX3, ROMREGION_ERASE00 ) /* Tiles Plane B */ + /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ + /* 0x040000 - 0x3fffff empty? */ + ROM_LOAD( "pzl21000.u18", 0x400000, 0x400000, CRC(c8b3be64) SHA1(6da9ca8b963ebf10df6bc02bd1bdc66392e2fa60) ) + + ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "pzl30000.u4", 0x000000, 0x400000, CRC(38604b8d) SHA1(1191cf48a6a7baa58e51509442b40ea67f5252d2) ) +ROM_END + +ROM_START( puzloopu ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* SH-2 Code */ + ROM_LOAD ( "sknsu1.u10", 0x000000, 0x080000, CRC(384d21ec) SHA1(a27e8a18099d9cea64fa32db28d01101c2a78815) ) /* US BIOS */ + + ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_LOAD16_BYTE( "puzloopu.u10", 0x000000, 0x080000, CRC(e6f3f82f) SHA1(ac61dc22fa3c1b1c2f3a41d3a8fb43938b77ca68) ) + ROM_LOAD16_BYTE( "puzloopu.u8", 0x000001, 0x080000, CRC(0d081d30) SHA1(ec0cdf120126104b9bb706f68c9ba9c3777dd69c) ) + + ROM_REGION( 0x800000, REGION_GFX1, 0 ) + ROM_LOAD( "pzl10000.u24", 0x000000, 0x400000, CRC(35bf6897) SHA1(8a1f1f5234a61971a62401633de1dec1920fc4da) ) + + ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "pzl20000.u16", 0x000000, 0x400000, CRC(ff558e68) SHA1(69a50c8100edbf2d5d92ce14b3f079f76c544bdd) ) + + ROM_REGION( 0x800000, REGION_GFX3, ROMREGION_ERASE00 ) /* Tiles Plane B */ + /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ + /* 0x040000 - 0x3fffff empty? */ + ROM_LOAD( "pzl21000.u18", 0x400000, 0x400000, CRC(c8b3be64) SHA1(6da9ca8b963ebf10df6bc02bd1bdc66392e2fa60) ) + + ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "pzl30000.u4", 0x000000, 0x400000, CRC(38604b8d) SHA1(1191cf48a6a7baa58e51509442b40ea67f5252d2) ) +ROM_END + +ROM_START( puzloopk ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* SH-2 Code */ + ROM_LOAD ( "sknsk1.u10", 0x000000, 0x080000, CRC(ff1c9f79) SHA1(a51e598d43e76d37da69b1f094c111273bdfc94a) ) /* Korean BIOS */ + + ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_LOAD16_BYTE( "pl0k4.u6", 0x000000, 0x080000, CRC(8d81f20c) SHA1(c32a525e8f92a625e3fecb7c43dd04b13e0a75e4) ) + ROM_LOAD16_BYTE( "pl0k4.u4", 0x000001, 0x080000, CRC(17c78e41) SHA1(4a4b612ae00d521d2947ab32554ebb615be72471) ) + + ROM_REGION( 0x800000, REGION_GFX1, 0 ) + ROM_LOAD( "pzl10000.u24", 0x000000, 0x400000, CRC(35bf6897) SHA1(8a1f1f5234a61971a62401633de1dec1920fc4da) ) + + ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "pzl20000.u16", 0x000000, 0x400000, CRC(ff558e68) SHA1(69a50c8100edbf2d5d92ce14b3f079f76c544bdd) ) + + ROM_REGION( 0x800000, REGION_GFX3, ROMREGION_ERASE00 ) /* Tiles Plane B */ + /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ + /* 0x040000 - 0x3fffff empty? */ + ROM_LOAD( "pzl21000.u18", 0x400000, 0x400000, CRC(c8b3be64) SHA1(6da9ca8b963ebf10df6bc02bd1bdc66392e2fa60) ) + + ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "pzl30000.u4", 0x000000, 0x400000, CRC(38604b8d) SHA1(1191cf48a6a7baa58e51509442b40ea67f5252d2) ) +ROM_END + +/* haven't even tried to run the ones below yet */ + +ROM_START( jjparads ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* SH-2 Code */ + ROM_LOAD ( "sknsj1.u10", 0x000000, 0x080000, CRC(7e2b836c) SHA1(92c5a7a2472496028bff0e5980d41dd294f42144) ) /* Japan BIOS */ + + ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_LOAD16_BYTE( "jp1j1.u10", 0x000000, 0x080000, CRC(de2fb669) SHA1(229ff1ae0ec5bc77fc17642964e0bb0146594e86) ) + ROM_LOAD16_BYTE( "jp1j1.u8", 0x000001, 0x080000, CRC(7276efb1) SHA1(3edc265b5c02da7d21a2494a6dc2878fbad93f87) ) + + ROM_REGION( 0x1000000, REGION_GFX1, 0 ) + ROM_LOAD( "jp100-00.u24", 0x000000, 0x400000, CRC(f31b2e95) SHA1(7e5bb518d4f6423785d3f9f2752a624a66b42469) ) + ROM_LOAD( "jp101-00.u20", 0x400000, 0x400000, CRC(70cc8c24) SHA1(a4805ce19f512b047829548b635e68690d714175) ) + ROM_LOAD( "jp102-00.u17", 0x800000, 0x400000, CRC(35401c1e) SHA1(38fe86a08555bb823b8d64ac043330aaaa6b8892) ) + + ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "jp200-00.u16", 0x000000, 0x200000, CRC(493d63db) SHA1(4b8fe7ff1ae14a914a675ce4072a4d9e5cfc08b0) ) + + ROM_REGION( 0x400000, REGION_GFX3, ROMREGION_ERASE00 ) /* Tiles Plane B */ + /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ + /* 0x040000 - 0x3fffff empty? */ + + ROM_REGION( 0x200000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "jp300-00.u4", 0x000000, 0x200000, CRC(7023fe46) SHA1(24a92133bc664d63b3be67c2ef11cd7b605ee7e8) ) +ROM_END + +ROM_START( jjparad2 ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* SH-2 Code */ + ROM_LOAD ( "sknsj1.u10", 0x000000, 0x080000, CRC(7e2b836c) SHA1(92c5a7a2472496028bff0e5980d41dd294f42144) ) /* Japan BIOS */ + + ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_LOAD16_BYTE( "jp2000j1.u6", 0x000000, 0x080000, CRC(5d75e765) SHA1(33bcd8f929f6025b00df2ea783b13a391a28a5c3) ) + ROM_LOAD16_BYTE( "jp2001j1.u4", 0x000001, 0x080000, CRC(1771910a) SHA1(7ca9584d379d7b41f303a3ba861f943c570ad97c) ) + + ROM_REGION( 0x1000000, REGION_GFX1, 0 ) + ROM_LOAD( "jp210000.u21", 0x000000, 0x400000, CRC(79a7e3d7) SHA1(bd0f8d01971e5895395f97f2520bcd03ab19d229) ) + ROM_LOAD( "jp210100.u20", 0x400000, 0x400000, CRC(42415e0c) SHA1(f7bff86d55fa9002fbd14e4c62f9d3df8faaf7d0) ) + ROM_LOAD( "jp210200.u8", 0x800000, 0x400000, CRC(26731745) SHA1(8939d36b82b10b1010e4b924e6b9fdd4742efe48) ) + + ROM_REGION( 0x800000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "jp220000.u17", 0x000000, 0x400000, CRC(d0e71873) SHA1(c6ffba3624e6d4c2d4e12ef7d88a02cbc3867b18) ) + ROM_LOAD( "jp220100.u9", 0x400000, 0x400000, CRC(4c7d964d) SHA1(3352cd866a64466f4f5a990c2c5e3e28e7028a99) ) + + ROM_REGION( 0x400000, REGION_GFX3, ROMREGION_ERASE00 ) /* Tiles Plane B */ + /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ + /* 0x040000 - 0x3fffff empty? */ + + ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "jp230000.u1", 0x000000, 0x400000, CRC(73e30d7f) SHA1(af5b16cec722dbbf0e03d73edfa133dbf10ac4f3) ) +ROM_END + +ROM_START( sengekis ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* SH-2 Code */ + ROM_LOAD ( "sknsa1.u10", 0x000000, 0x080000, CRC(745e5212) SHA1(caba649ab2d83b2d7e007eecee0fc582c019df38) ) /* Asia BIOS */ + + ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_LOAD16_BYTE( "ss01a.u6", 0x000000, 0x080000, CRC(962fe857) SHA1(3df74c5efff11333dea9316a063129dcec0d7bdd) ) + ROM_LOAD16_BYTE( "ss01a.u4", 0x000001, 0x080000, CRC(ee853c23) SHA1(ddbf7f7cf509788ee3daf7b4d8ae1482e6e31a03) ) + + ROM_REGION( 0x1000000, REGION_GFX1, 0 ) + ROM_LOAD( "ss100-00.u21", 0x000000, 0x400000, CRC(bc7b3dfa) SHA1(dff10a7aef548abda48470293382057a2ca9557e) ) + ROM_LOAD( "ss101-00.u20", 0x400000, 0x400000, CRC(ab2df280) SHA1(e456c578a36f585b24379d74def1bcab276c2b1b) ) + ROM_LOAD( "ss102-00.u8", 0x800000, 0x400000, CRC(0845eafe) SHA1(663b163bf4e87c7df0030e791f95b1a5827de315) ) + ROM_LOAD( "ss103-00.u32", 0xc00000, 0x400000, CRC(ee451ac9) SHA1(01cc6b6f371c0090a6a7f4c33d05f4b9a6c59fee) ) + + ROM_REGION( 0x800000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "ss200-00.u17", 0x000000, 0x400000, CRC(cd773976) SHA1(38b8df5e685be65c3fde09f9e585591f678632d4) ) + ROM_LOAD( "ss201-00.u9", 0x400000, 0x400000, CRC(301fad4c) SHA1(15faf37eeec5cc46afcb4bd236345b5c3dd647ac) ) + + ROM_REGION( 0x600000, REGION_GFX3, ROMREGION_ERASE00 ) /* Tiles Plane B */ + /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ + /* 0x040000 - 0x3fffff empty? */ + ROM_LOAD( "ss210-00.u3", 0x400000, 0x200000, CRC(c3697805) SHA1(bd41064e3527cdc4b9a4ab9c423c916309b3f057) ) + + ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "ss300-00.u1", 0x000000, 0x400000, CRC(35b04b18) SHA1(b69f33fc6a50ec20382329317d20b3c1e7f01b87) ) +ROM_END + +ROM_START( sengekij ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* SH-2 Code */ + ROM_LOAD ( "sknsj1.u10", 0x000000, 0x080000, CRC(7e2b836c) SHA1(92c5a7a2472496028bff0e5980d41dd294f42144) ) /* Japan BIOS */ + + ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_LOAD16_BYTE( "ss01j.u6", 0x000000, 0x080000, CRC(9efdcd5a) SHA1(66cca04d07999dc8ca0bcf19db925996b34d0390) ) + ROM_LOAD16_BYTE( "ss01j.u4", 0x000001, 0x080000, CRC(92c3f45e) SHA1(60c647e66b0126fb7749874be39938972481b957) ) + + ROM_REGION( 0x1000000, REGION_GFX1, 0 ) + ROM_LOAD( "ss100-00.u21", 0x000000, 0x400000, CRC(bc7b3dfa) SHA1(dff10a7aef548abda48470293382057a2ca9557e) ) + ROM_LOAD( "ss101-00.u20", 0x400000, 0x400000, CRC(ab2df280) SHA1(e456c578a36f585b24379d74def1bcab276c2b1b) ) + ROM_LOAD( "ss102-00.u8", 0x800000, 0x400000, CRC(0845eafe) SHA1(663b163bf4e87c7df0030e791f95b1a5827de315) ) + ROM_LOAD( "ss103-00.u32", 0xc00000, 0x400000, CRC(ee451ac9) SHA1(01cc6b6f371c0090a6a7f4c33d05f4b9a6c59fee) ) + + ROM_REGION( 0x800000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "ss200-00.u17", 0x000000, 0x400000, CRC(cd773976) SHA1(38b8df5e685be65c3fde09f9e585591f678632d4) ) + ROM_LOAD( "ss201-00.u9", 0x400000, 0x400000, CRC(301fad4c) SHA1(15faf37eeec5cc46afcb4bd236345b5c3dd647ac) ) + + ROM_REGION( 0x600000, REGION_GFX3, ROMREGION_ERASE00 ) /* Tiles Plane B */ + /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ + /* 0x040000 - 0x3fffff empty? */ + ROM_LOAD( "ss210-00.u3", 0x400000, 0x200000, CRC(c3697805) SHA1(bd41064e3527cdc4b9a4ab9c423c916309b3f057) ) + + ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "ss300-00.u1", 0x000000, 0x400000, CRC(35b04b18) SHA1(b69f33fc6a50ec20382329317d20b3c1e7f01b87) ) +ROM_END + +ROM_START( senknow ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* SH-2 Code */ + ROM_LOAD ( "sknsj1.u10", 0x000000, 0x080000, CRC(7e2b836c) SHA1(92c5a7a2472496028bff0e5980d41dd294f42144) ) /* Japan BIOS */ + + ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_LOAD16_BYTE( "snw000j1.u6", 0x000000, 0x080000, CRC(0d6136f6) SHA1(eedd011cfe03577bfaf386723502d03f6e5dbd8c) ) + ROM_LOAD16_BYTE( "snw001j1.u4", 0x000001, 0x080000, CRC(4a10ec3d) SHA1(bbec4fc53bd61d06ffe5a53debada5785b124fdd) ) + + ROM_REGION( 0x0800000, REGION_GFX1, 0 ) + ROM_LOAD( "snw10000.u21", 0x000000, 0x400000, CRC(5133c69c) SHA1(d279df3ffd005dbf0930a8e40eaf2467f8653284) ) + ROM_LOAD( "snw10100.u20", 0x400000, 0x400000, CRC(9dafe03f) SHA1(978b4597ff2a54ac5049fd64798e8173b29dd363) ) + + ROM_REGION( 0x800000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "snw20000.u17", 0x000000, 0x400000, CRC(d5fe5f8c) SHA1(817d8d0a5fbc0c50dc3c592f938150f82df97cec) ) + ROM_LOAD( "snw20100.u9", 0x400000, 0x400000, CRC(c0037846) SHA1(3267b142ebce47e1717250239d98fdb4af7964f8) ) + + ROM_REGION( 0x800000, REGION_GFX3, ROMREGION_ERASE00 ) /* Tiles Plane B */ + /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ + /* 0x040000 - 0x3fffff empty? */ + ROM_LOAD( "snw21000.u3", 0x400000, 0x400000, CRC(f5c23e79) SHA1(b509680001c3205b289f43d4f44aaaa7f896419b) ) + + ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "snw30000.u1", 0x000000, 0x400000, CRC(ec9eef40) SHA1(8f74ec9cb6054a77227c0505094f0ef8bc371429) ) +ROM_END + +ROM_START( teljan ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* SH-2 Code */ + ROM_LOAD ( "sknsj1.u10", 0x000000, 0x080000, CRC(7e2b836c) SHA1(92c5a7a2472496028bff0e5980d41dd294f42144) ) /* Japan BIOS */ + + ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_LOAD16_BYTE( "tel1j.u10", 0x000000, 0x080000, CRC(09b552fe) SHA1(2f315fd09eb22fa8c81faa1e926038f20daa845f) ) + ROM_LOAD16_BYTE( "tel1j.u8", 0x000001, 0x080000, CRC(070b4345) SHA1(5743f12a351b89593c6adfaeb8a5a2ab7bc8b424) ) + + ROM_REGION( 0x1000000, REGION_GFX1, 0 ) + ROM_LOAD( "tj100-00.u24", 0x000000, 0x400000, CRC(810144f1) SHA1(1c90e71e5f34ee05771ab4a673329f78f17791df) ) + ROM_LOAD( "tj101-00.u20", 0x400000, 0x400000, CRC(82f570e1) SHA1(3ba9d1775f897052aca5cff2edbf575399101c5c) ) + ROM_LOAD( "tj102-00.u17", 0x800000, 0x400000, CRC(ace875dc) SHA1(be97c895beeac979c5704986e818d4f3cfa00e49) ) + + ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "tj200-00.u16", 0x000000, 0x400000, CRC(be0f90b2) SHA1(1848a65f244e1e8a3ff7ab38e76f86cabca8b47e) ) + + ROM_REGION( 0x400000, REGION_GFX3, ROMREGION_ERASE00 ) /* Tiles Plane B */ + /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ + /* 0x040000 - 0x3fffff empty? */ + + ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "tj300-00.u4", 0x000000, 0x400000, CRC(685495c4) SHA1(3853c0583b84ed3163370ae48e4b3912cbeb986e) ) +ROM_END + +ROM_START( ryouran ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* SH-2 Code */ + ROM_LOAD ( "sknsj1.u10", 0x000000, 0x080000, CRC(7e2b836c) SHA1(92c5a7a2472496028bff0e5980d41dd294f42144) ) /* Japan BIOS */ + + ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_LOAD16_BYTE( "or000j1.u10", 0x000000, 0x080000, CRC(d93aa491) SHA1(dc01707f1e80d81f28d6b685d08fc6c0d2bf7330) ) + ROM_LOAD16_BYTE( "or001j1.u8", 0x000001, 0x080000, CRC(f466e5e9) SHA1(65d699f6f9e299333e51a6a52cb13a0f1a902fe1) ) + + ROM_REGION( 0x1000000, REGION_GFX1, 0 ) + ROM_LOAD( "or100-00.u24", 0x000000, 0x400000, CRC(e9c7695b) SHA1(0a104d4e4e0c933d2eaaf410a8c243db6673786a) ) + ROM_LOAD( "or101-00.u20", 0x400000, 0x400000, CRC(fe06bf12) SHA1(f3a2f88aed65bcc1c16f37fd4c0011e3538128f7) ) + ROM_LOAD( "or102-00.u17", 0x800000, 0x400000, CRC(f2a5237b) SHA1(b8871f9c0f3864c334ec9a8146cf7dd1961ecb94) ) + + ROM_REGION( 0x800000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "or200-00.u16", 0x000000, 0x400000, CRC(4c4701a8) SHA1(7b397b553ba86bba2ee82228cabdf2179e878d69) ) + ROM_LOAD( "or201-00.u13", 0x400000, 0x400000, CRC(a94064aa) SHA1(5d736f810ffdbb6ada5c5efcb5fb29eedafc3e2f) ) + + ROM_REGION( 0x400000, REGION_GFX3, ROMREGION_ERASE00 ) /* Tiles Plane B */ + /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ + /* 0x040000 - 0x3fffff empty? */ + + ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "or300-00.u4", 0x000000, 0x400000, CRC(a3f64b79) SHA1(6ecb2b4c0d213fe5384b19d6bfdb86871f21fd9f) ) +ROM_END + +ROM_START( vblokbrk ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* SH-2 Code */ + ROM_LOAD ( "sknsa1.u10", 0x000000, 0x080000, CRC(745e5212) SHA1(caba649ab2d83b2d7e007eecee0fc582c019df38) ) /* Asia BIOS */ + + ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_LOAD16_BYTE( "sk01a.u10", 0x000000, 0x080000, CRC(4d1be53e) SHA1(3d28b73a67530147962b8df6244af8bea2ab080f) ) + ROM_LOAD16_BYTE( "sk01a.u8", 0x000001, 0x080000, CRC(461e0197) SHA1(003573a4abdbecc6dd234a13c61ef07a25d980e2) ) + + ROM_REGION( 0x0400000, REGION_GFX1, 0 ) + ROM_LOAD( "sk100-00.u24", 0x000000, 0x200000, CRC(151dd88a) SHA1(87bb1039a9883f721a315760eb2c4abe4a94046f) ) + ROM_LOAD( "sk-101.u20", 0x200000, 0x100000, CRC(779cce23) SHA1(70147b36d982524ba9921823e481ce8fbb5daa26) ) + + ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "sk200-00.u16", 0x000000, 0x200000, CRC(2e297c61) SHA1(4071b945a1294fbc3d18fab1f144bf09af4349e8) ) + + ROM_REGION( 0x400000, REGION_GFX3, ROMREGION_ERASE00 ) /* Tiles Plane B */ + /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ + /* 0x040000 - 0x3fffff empty? */ + + ROM_REGION( 0x200000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "sk300-00.u4", 0x000000, 0x200000, CRC(e6535c05) SHA1(8895b7c326e0261691cb184887ac1ca637302460) ) +ROM_END + +ROM_START( sarukani ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* SH-2 Code */ + ROM_LOAD ( "sknsj1.u10", 0x000000, 0x080000, CRC(7e2b836c) SHA1(92c5a7a2472496028bff0e5980d41dd294f42144) ) /* Japan BIOS */ + + ROM_REGION32_BE( 0x200000, REGION_USER1, 0 ) /* SH-2 Code mapped at 0x04000000 */ + ROM_LOAD16_BYTE( "sk1j1.u10", 0x000000, 0x080000, CRC(fcc131b6) SHA1(5e3e71ee1f736b6098e671e6f57b1fb313c81adb) ) + ROM_LOAD16_BYTE( "sk1j1.u8", 0x000001, 0x080000, CRC(3b6aa343) SHA1(a969b20b1170d82351024cab9e37f2fbfd01ddeb) ) + + ROM_REGION( 0x0400000, REGION_GFX1, 0 ) + ROM_LOAD( "sk100-00.u24", 0x000000, 0x200000, CRC(151dd88a) SHA1(87bb1039a9883f721a315760eb2c4abe4a94046f) ) + ROM_LOAD( "sk-101.u20", 0x200000, 0x100000, CRC(779cce23) SHA1(70147b36d982524ba9921823e481ce8fbb5daa26) ) + + ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "sk200-00.u16", 0x000000, 0x200000, CRC(2e297c61) SHA1(4071b945a1294fbc3d18fab1f144bf09af4349e8) ) + + ROM_REGION( 0x400000, REGION_GFX3, ROMREGION_ERASE00 ) /* Tiles Plane B */ + /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */ + /* 0x040000 - 0x3fffff empty? */ + + ROM_REGION( 0x200000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "sk300-00.u4", 0x000000, 0x200000, CRC(e6535c05) SHA1(8895b7c326e0261691cb184887ac1ca637302460) ) +ROM_END + + +/***** GAME DRIVERS *****/ + +GAME( 1996, skns, 0, skns, skns, 0, ROT0, "Kaneko", "Super Kaneko Nova System BIOS", GAME_IS_BIOS_ROOT ) + +GAME( 1996, galpani4, skns, skns, cyvern, galpani4, ROT0, "Kaneko", "Gals Panic 4 (Japan)", GAME_IMPERFECT_GRAPHICS ) +GAME( 1997, galpanis, skns, skns, galpanis, galpanis, ROT0, "Kaneko", "Gals Panic S - Extra Edition (Japan)", GAME_IMPERFECT_GRAPHICS ) +GAME( 1998, cyvern, skns, skns, cyvern, cyvern, ROT90, "Kaneko", "Cyvern (Japan)", GAME_IMPERFECT_GRAPHICS ) +GAME( 1999, galpans2, skns, skns, galpanis, galpans2, ROT0, "Kaneko", "Gals Panic S2 (Japan)", GAME_IMPERFECT_GRAPHICS ) +GAME( 1999, panicstr, skns, skns, galpanis, panicstr, ROT0, "Kaneko", "Panic Street (Japan)", GAME_IMPERFECT_GRAPHICS ) +GAME( 1999, senknow , skns, skns, skns, senknow, ROT0, "Kaneko / Kouyousha", "Sen-Know (Japan)", GAME_IMPERFECT_GRAPHICS ) +GAME( 2000, gutsn, skns, skns, skns, gutsn, ROT0, "Kaneko / Kouyousha", "Guts'n (Japan)", GAME_IMPERFECT_GRAPHICS ) // quite fragile, started working of it's own accord in 0.69 :) +GAME( 1998, puzzloop, skns, skns, puzzloop, puzzloop, ROT0, "Mitchell", "Puzz Loop (Europe)", GAME_IMPERFECT_GRAPHICS ) +GAME( 1998, puzloopj, puzzloop,skns, puzzloop, puzloopj, ROT0, "Mitchell", "Puzz Loop (Japan)", GAME_IMPERFECT_GRAPHICS ) +GAME( 1998, puzloopu, puzzloop,skns, puzzloop, puzloopu, ROT0, "Mitchell", "Puzz Loop (USA)", GAME_IMPERFECT_GRAPHICS ) +GAME( 1998, puzloopk, puzzloop,skns, puzzloop, puzloopu, ROT0, "Mitchell", "Puzz Loop (Korea)", GAME_IMPERFECT_GRAPHICS ) // Same speed up as US version +GAME( 1996, jjparads, skns, skns, skns_1p, jjparads, ROT0, "Electro Design", "Jan Jan Paradise", GAME_IMPERFECT_GRAPHICS ) +GAME( 1997, jjparad2, skns, skns, skns_1p, jjparad2, ROT0, "Electro Design", "Jan Jan Paradise 2", GAME_IMPERFECT_GRAPHICS ) +GAME( 1998, ryouran , skns, skns, skns_1p, ryouran, ROT0, "Electro Design", "VS Mahjong Otome Ryouran", GAME_IMPERFECT_GRAPHICS ) +GAME( 1999, teljan , skns, skns, skns_1p, teljan, ROT0, "Electro Design", "Tel Jan", GAME_IMPERFECT_GRAPHICS ) +GAME( 1997, sengekis, skns, skns, skns, sengekis, ROT90, "Kaneko / Warashi", "Sengeki Striker (Asia)", GAME_IMPERFECT_GRAPHICS ) +GAME( 1997, sengekij, sengekis,skns, skns, sengekij, ROT90, "Kaneko / Warashi", "Sengeki Striker (Japan)", GAME_IMPERFECT_GRAPHICS ) +GAME( 1997, vblokbrk, skns, skns, vblokbrk, sarukani, ROT0, "Kaneko / Mediaworks", "VS Block Breaker (Asia)", GAME_IMPERFECT_GRAPHICS ) +GAME( 1997, sarukani, vblokbrk,skns, vblokbrk, sarukani, ROT0, "Kaneko / Mediaworks", "Saru-Kani-Hamu-Zou (Japan)", GAME_IMPERFECT_GRAPHICS ) + |