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