summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/pgm.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/pgm.c')
-rw-r--r--src/mame/drivers/pgm.c4070
1 files changed, 4070 insertions, 0 deletions
diff --git a/src/mame/drivers/pgm.c b/src/mame/drivers/pgm.c
new file mode 100644
index 00000000000..1846e5c83b9
--- /dev/null
+++ b/src/mame/drivers/pgm.c
@@ -0,0 +1,4070 @@
+
+/* PGM System (c)1997 IGS
+
+Based on Information from ElSemi
+
+A flexible cartridge based platform some would say was designed to compete with
+SNK's NeoGeo and Capcom's CPS Hardware systems, despite its age it only uses a
+68000 for the main processor and a Z80 to drive the sound, just like the two
+previously mentioned systems in that respect..
+
+Resolution is 448x224, 15 bit colour
+
+Sound system is ICS WaveFront 2115 Wavetable midi synthesizer, used in some
+actual sound cards (Turtle Beach)
+
+Later games are encrypted. Latest games (kov2, ddp2) include an arm7
+coprocessor with an internal rom and an encrypted external rom.
+
+Roms Contain the Following Data
+
+Pxxxx - 68k Program
+Txxxx - TX & BG Graphics (2 formats within the same rom)
+Mxxxx - Music samples (8 bit mono 11025Hz)
+Axxxx - Colour Data (for sprites)
+Bxxxx - Masks & A Rom Colour Indexes (for sprites)
+
+There is no rom for the Z80, the program is uploaded by the 68k
+
+Known Games on this Platform
+----------------------------
+
+
+010x - 1997 - Oriental Legend
+020x - 1997 - Dragon World 2
+030x - 1998 - The Killing Blade
+040x - 1998 - Dragon World 3
+050x - 1999? - Oriental Legend Super
+060x - 1999 - Knights of Valor, Knights of Valor Plus, Knights of Valor Superheroes
+070x - 1999 - Photo Y2k
+080x - 1999 - Puzzle Star
+090x - 2001 - Puzzli II
+100x - 2001 - Martial Masters
+
+120x - 2001 - Knights of Valor 2 Plus (9 Dragons?)
+130x - 2001 - DoDonpachi II
+
+0450x - 2002 - Demon Front
+
+---
+
+unknown codes:
+Dragon World 2001
+Photo Y2k2
+The Gladiator
+
+---
+
+
+Oriental Legend
+Oriental Legend Super
+Sengoku Senki / Knights of Valour Series
+-
+Sangoku Senki (c)1999 IGS
+Sangoku Senki Super Heroes (c)1999 IGS
+Sangoku Senki 2 Knights of Valour (c)2000 IGS
+Sangoku Senki Busyou Souha (c)2001 IGS
+-
+DoDonPachi II (Bee Storm)
+Photo Y2K
+Photo Y2K II
+Martial Masters
+The Killing Blade
+Dragon World 2
+Dragon World 3
+Dragon World 2001
+Demon Front
+The Gladiator
+Puzzli II
+
+There is also a single board version of the PGM system used by
+
+Demon Front
+Some Later (2002/2003) Cave shooters (Uses a Custom CAVE BIOS)
+
+To Do / Notes: (Revised December 2005)
+
+Missing Sprite Features
+ Zooming (table is uploaded to Video Ram)
+ It is possible sprites should be transfered out of RAM with a DMA device.
+ Priority?
+
+Protection in Mnny Games
+ It is possible to read the Internal Rom of the ASIC27A games with external data
+ rom, but not the ones with no External Rom.
+ Some of the other protection devices aren't understood at all yet, for example
+ the ones on Dragon World 3, Oriental Legend Super and The Killing Blade.
+ an ARM core with thumbs support is required to emulate the ASIC27A based games
+ even with the internal rom. At the current time the MAME core does not support
+ this, Nebula does.
+
+fix sound comms, several games fail prior to their protection checks due to the
+current sound implementation.
+
+Fix IRQs, maybe the protection device generates one of them on DW2 as I believe
+it's the only game that needs IRQ4 and Puzzli2 explicitly doesn't want IRQ4 to be
+active.
+
+Some dumps are suspicious (orlegend super clones are missing roms, drgw3k sets
+might not have the right protection rom) In many cases the external protection
+data roms change with each revision of the game.
+
+
+General Notes:
+--------------
+
+Tit makes more sense to name them kov since the roms are probably the same on the various
+boards. The current sets were taken from taiwan boards incase somebody finds
+it not to be the case however due to the previous note.
+
+As we can't dump the internal rom of rhte protection devices (which contain the region
+information the only way we can support multiple regions is with a fake dipswitch, this
+isn't idea as it gives the false impression that the board contain a region dipswitch)
+
+Dragon World 2 still has strange protection issues, we have to patch the code for now, what
+should really happen, it jumps to invalid code, should the protection device cause the 68k
+to see valid code there or something? The English version of Dragon World 2 still appears
+to have some problems which the current patching doesn't cover.
+
+kov superheroes uses a different protection chip / different protection commands and doesn't
+work, some of the gfx also need redumping to check they're the same as kov, its using invalid
+codes for the ones we have (could just be protection tho)
+
+
+Protection Devices / Co-processors
+----------------------------------
+
+IGS used a variety of additional ASIC chips on the game boards, these act as protection and
+also give additional power to the board to make up for the limited power of the 68000
+processor. Some protection devices use external data roms, others have internal code only.
+Most of these are not emulated correctly. In most cases the protection device supplies the
+game region code..
+
+ASIC 3:
+ used by:
+ different per region, supplies region code
+ used by:
+ Oriental Legend
+ function:
+
+ASIC 12 + ASIC 25
+ these seem to be used together
+ ASIC 25 appears to perform some kind of bitswap operations
+ used by:
+ Dragon World 2
+
+ASIC 22 + ASIC 25
+ these seem to be used together, ASIC25 has an external software decrypted? data rom
+ ASIC 22 might be an updated version of ASIC12 ?
+ used by:
+ Dragon World 3
+ The Killing Blade
+
+ASIC 25 + ASIC 28
+ Oriental Legend Super
+
+ASIC 28:
+ performs a variety of calculations, quite complex, different per region, supplies region code
+ used by:
+ Knights of Valour 1 / Plus / Superheroes (plus & superheroes seems to use extra functions, emulation issues reported in places in plus)
+ Photo Y2k / Real and Fake (maybe..)
+ This could be an ARM chip like the 27A below, but without the support for an external ROM (or nothing uses it..)
+
+ASIC 27A:
+ arm9? cpu with (max?) 64kb internal rom (different per game / revision) + optional external data rom
+ probably used to give extra power to the system, lots of calculations are offloaded to it
+ used by:
+ DoDonPachi II
+ Knights of Valor 2 / 2 Plus
+ Martial Masters
+ Demon Front
+ Puzzli II
+ The Gladiator
+
+there are probably more...
+
+PCB Layout
+----------
+
+IGS PCB NO-0133-2 (Main Board)
+|-------------------------------------------------------------------------------------|
+| |----------------------------| |----------| |----------------------------| |
+| |----------------------------| |----------| |----------------------------| |
+| PGM_T01S.U29 UM61256 SRM2B61256 SRM2B61256|
+| |---------| 33.8688MHz |----------| SRM2B61256 SRM2B61256|
+| |WAVEFRONT| |L8A0290 | UM6164 UM6164 |
+| |ICS2115V | |IGS023 | PGM_P01S.U20 SW2|
+| |(PLCC84) | |(QFP256) | |
+| | | | | |
+| |---------| 50MHz |----------| |
+| UPD6379 PGM_M01S.U18 |----------| |
+|VOL |MC68HC000 | 74HC132 |
+| |FN20 | 20MHz 74HC132 |
+| UPC844C |------| |(PLCC68) | |
+| |Z80 | | | V3021 |
+| |PLCC44| PAL |----------| |
+| |------| |--------| 32.768kHz |-|
+| |IGS026 | |
+| |(QFP144)| |--------| I|
+| | | |IGS026 | D|
+| |--------| |(QFP144)| C|
+|TDA1519A UM61256 UM61256 | | 3|
+| TD62064 |--------| 4|
+| 3.6V_BATT |
+| |-|
+| |----| |-----| SW3 |
+| | | J A M M A | | SW1 |
+|--------------| |-------------------------------------------| |---------------|
+
+
+IGS PCB NO-0136 (Riser)
+|-------------------------------------------------------------------------------------|
+| |---------------------------------| |---------------------------------| |
+| |---------------------------------| |---------------------------------| |
+| |
+| |---------------------------------| |---------------------------------| |
+| |---------------------------------| |---------------------------------| |
+| |
+| |----------------------------| |----------| |----------------------------| |
+|---| |---| |---| |----|
+ |----------------------------| |----------| |----------------------------|
+
+Notes:
+ All IC's are shown.
+
+ CPU's
+ -----
+ 68HC000FN20 - Motorola 68000 processor, clocked at 20.000MHz (PLCC68)
+ Z80 - Zilog Z0840008VSC Z80 processor, clocked at 8.468MHz (PLCC44)
+
+ SOUND
+ -----
+ ICS2115 - ICS WaveFront ICS2115V Wavetable Midi Synthesizer, clocked at 33.8688MHz (PLCC84)
+
+ RAM
+ ---
+ SRM2B256 - Epson SRM2B256SLMX55 8K x8 SRAM (x4, SOP28)
+ UM6164 - Unicorn Microelectronics UM6164DS-12 8K x8 SRAM (x2, SOJ28)
+ UM61256 - Unicorn Microelectronics UM61256FS-15 32K x8 SRAM (x3, SOJ28)
+
+ ROMs
+ ----
+ PGM_M01S.U18 - 16MBit MASKROM (TSOP48)
+ PGM_P01S.U20 - 1MBit MASKROM (DIP40, socketed, equivalent to 27C1024 EPROM)
+ PGM_T01S.U29 - 16MBit MASKROM (SOP44)
+
+ CUSTOM IC's
+ -----------
+ IGS023 (QFP256)
+ IGS026 (x2, QFP144)
+
+ OTHER
+ -----
+ 3.6V_BATT - 3.6V NICad battery, connected to the V3021 RTC
+ IDC34 - IDC34 way flat cable plug, doesn't appear to be used for any games. Might be for
+ re-programming some of the custom IC's or on-board surface mounted ROMs?
+ PAL - Atmel ATF16V8B PAL (DIP20)
+ SW1 - Push button switch to enter Test Mode
+ SW2 - 8 position DIP Switch (for configuration of PCB/game options)
+ SW3 - SPDT switch (purpose unknown)
+ TD62064 - Toshiba NPN 50V 1.5A Quad Darlinton Switch; for driving coin meters (DIP16)
+ TDA1519A - Philips 2x 6W Stereo Power AMP (SIL9)
+ uPD6379 - NEC 2-channel 16-bit D/A converter 10mW typ. (SOIC8)
+ uPC844C - NEC Quad High Speed Wide Band Operational Amplifier (DIP14)
+ V3021 - EM Microelectronic-Marin SA Ultra Low Power 32kHz CMOS Real Time Clock (DIP8)
+ VOL - Volume potentiometer
+
+*/
+
+#define PGMLOGERROR 0
+#define PGMARM7LOGERROR 1
+#define PGMARM7SPEEDHACK 1
+
+#include "driver.h"
+#include "sound/ics2115.h"
+#include "cpu/arm7/arm7core.h"
+
+
+UINT16 *pgm_mainram, *pgm_bg_videoram, *pgm_tx_videoram, *pgm_videoregs, *pgm_rowscrollram;
+static UINT8 *z80_mainram;
+static UINT32 *arm7_shareram;
+static UINT32 arm7_latch;
+WRITE16_HANDLER( pgm_tx_videoram_w );
+WRITE16_HANDLER( pgm_bg_videoram_w );
+VIDEO_START( pgm );
+VIDEO_EOF( pgm );
+VIDEO_UPDATE( pgm );
+void pgm_kov_decrypt(void);
+void pgm_kovsh_decrypt(void);
+void pgm_kov2_decrypt(void);
+void pgm_mm_decrypt(void);
+void pgm_dw2_decrypt(void);
+void pgm_djlzz_decrypt(void);
+void pgm_dw3_decrypt(void);
+void pgm_killbld_decrypt(void);
+void pgm_pstar_decrypt(void);
+void pgm_puzzli2_decrypt(void);
+
+READ16_HANDLER( pgm_asic3_r );
+WRITE16_HANDLER( pgm_asic3_w );
+WRITE16_HANDLER( pgm_asic3_reg_w );
+
+READ16_HANDLER (sango_protram_r);
+READ16_HANDLER (ASIC28_r16);
+WRITE16_HANDLER (ASIC28_w16);
+
+READ16_HANDLER (dw2_d80000_r );
+
+
+static READ16_HANDLER ( z80_ram_r )
+{
+ return (z80_mainram[offset*2] << 8)|z80_mainram[offset*2+1];
+}
+
+static READ32_HANDLER( arm7_latch_arm_r )
+{
+ if (PGMARM7LOGERROR) logerror("ARM7: Latch read: %08x (%08x) (%06x)\n", arm7_latch, mem_mask, activecpu_get_pc() );
+ return arm7_latch;
+}
+
+
+#ifdef PGMARM7SPEEDHACK
+static TIMER_CALLBACK( arm_irq )
+{
+ cpunum_set_input_line(2, ARM7_FIRQ_LINE, PULSE_LINE);
+}
+#endif
+
+//static emu_timer * arm_comms_timer;
+static WRITE32_HANDLER( arm7_latch_arm_w )
+{
+ if (PGMARM7LOGERROR) logerror("ARM7: Latch write: %08x (%08x) (%06x)\n", data, mem_mask, activecpu_get_pc() );
+ COMBINE_DATA(&arm7_latch);
+
+#ifdef PGMARM7SPEEDHACK
+// cpu_boost_interleave(attotime_zero, ATTOTIME_IN_USEC(100));
+ if (data!=0xaa) cpu_spinuntil_trigger(1000);
+ cpu_trigger(1002);
+#else
+ cpu_boost_interleave(attotime_zero, ATTOTIME_IN_USEC(100));
+ cpu_spinuntil_time(ATTOTIME_IN_CYCLES(100, 0));
+#endif
+}
+
+static READ32_HANDLER( arm7_shareram_r )
+{
+ if (PGMARM7LOGERROR) logerror("ARM7: ARM7 Shared RAM Read: %04x = %08x (%08x) (%06x)\n", offset << 2, arm7_shareram[offset], mem_mask, activecpu_get_pc() );
+ return arm7_shareram[offset];
+}
+
+static WRITE32_HANDLER( arm7_shareram_w )
+{
+ if (PGMARM7LOGERROR) logerror("ARM7: ARM7 Shared RAM Write: %04x = %08x (%08x) (%06x)\n", offset << 2, data, mem_mask, activecpu_get_pc() );
+ COMBINE_DATA(&arm7_shareram[offset]);
+}
+
+static READ16_HANDLER( arm7_latch_68k_r )
+{
+ if (PGMARM7LOGERROR) logerror("M68K: Latch read: %04x (%04x) (%06x)\n", arm7_latch & 0x0000ffff, mem_mask, activecpu_get_pc() );
+ return arm7_latch;
+}
+
+static WRITE16_HANDLER( arm7_latch_68k_w )
+{
+ if (PGMARM7LOGERROR) logerror("M68K: Latch write: %04x (%04x) (%06x)\n", data & 0x0000ffff, mem_mask, activecpu_get_pc() );
+ COMBINE_DATA(&arm7_latch);
+
+#ifdef PGMARM7SPEEDHACK
+ cpu_trigger(1000);
+ timer_set(ATTOTIME_IN_USEC(50), 0, arm_irq); // i don't know how long..
+ cpu_spinuntil_trigger(1002);
+#else
+ cpunum_set_input_line(2, ARM7_FIRQ_LINE, PULSE_LINE);
+ cpu_boost_interleave(attotime_zero, ATTOTIME_IN_USEC(200));
+ cpu_spinuntil_time(ATTOTIME_IN_CYCLES(200, 2)); // give the arm time to respond (just boosting the interleave doesn't help
+#endif
+}
+
+static READ16_HANDLER( arm7_ram_r )
+{
+ UINT16 *share16 = (UINT16 *)arm7_shareram;
+ if (PGMARM7LOGERROR) logerror("M68K: ARM7 Shared RAM Read: %04x = %04x (%08x) (%06x)\n", BYTE_XOR_LE(offset), share16[BYTE_XOR_LE(offset)], mem_mask, activecpu_get_pc() );
+ return share16[BYTE_XOR_LE(offset)];
+}
+
+static WRITE16_HANDLER( arm7_ram_w )
+{
+ UINT16 *share16 = (UINT16 *)arm7_shareram;
+ if (PGMARM7LOGERROR) logerror("M68K: ARM7 Shared RAM Write: %04x = %04x (%04x) (%06x)\n", BYTE_XOR_LE(offset), data, mem_mask, activecpu_get_pc() );
+
+ COMBINE_DATA(&share16[BYTE_XOR_LE(offset)]);
+}
+
+static WRITE16_HANDLER ( z80_ram_w )
+{
+ int pc = activecpu_get_pc();
+ if(ACCESSING_MSB)
+ z80_mainram[offset*2] = data >> 8;
+ if(ACCESSING_LSB)
+ z80_mainram[offset*2+1] = data;
+
+ if(pc != 0xf12 && pc != 0xde2 && pc != 0x100c50 && pc != 0x100b20)
+ if (PGMLOGERROR) logerror("Z80: write %04x, %04x @ %04x (%06x)\n", offset*2, data, mem_mask, activecpu_get_pc());
+}
+
+static WRITE16_HANDLER ( z80_reset_w )
+{
+ if (PGMLOGERROR) logerror("Z80: reset %04x @ %04x (%06x)\n", data, mem_mask, activecpu_get_pc());
+
+ if(data == 0x5050) {
+ sndti_reset(SOUND_ICS2115, 0);
+ cpunum_set_input_line(1, INPUT_LINE_HALT, CLEAR_LINE);
+ cpunum_set_input_line(1, INPUT_LINE_RESET, PULSE_LINE);
+ if(0) {
+ FILE *out;
+ out = fopen("z80ram.bin", "wb");
+ fwrite(z80_mainram, 1, 65536, out);
+ fclose(out);
+ }
+ }
+ else
+ {
+ /* this might not be 100% correct, but several of the games (ddp2, puzzli2 etc. expect the z80 to be turned
+ off during data uploads, they write here before the upload */
+ cpunum_set_input_line(1, INPUT_LINE_HALT, ASSERT_LINE);
+ }
+}
+
+static WRITE16_HANDLER ( z80_ctrl_w )
+{
+ if (PGMLOGERROR) logerror("Z80: ctrl %04x @ %04x (%06x)\n", data, mem_mask, activecpu_get_pc());
+}
+
+static WRITE16_HANDLER ( m68k_l1_w )
+{
+ if(ACCESSING_LSB) {
+ if (PGMLOGERROR) logerror("SL 1 m68.w %02x (%06x) IRQ\n", data & 0xff, activecpu_get_pc());
+ soundlatch_w(0, data);
+ cpunum_set_input_line(1, INPUT_LINE_NMI, PULSE_LINE );
+ }
+}
+
+static WRITE8_HANDLER( z80_l3_w )
+{
+ if (PGMLOGERROR) logerror("SL 3 z80.w %02x (%04x)\n", data, activecpu_get_pc());
+ soundlatch3_w(0, data);
+}
+
+static void sound_irq(int level)
+{
+ cpunum_set_input_line(1, 0, level);
+}
+
+static struct ics2115_interface pgm_ics2115_interface = {
+ REGION_SOUND1,
+ sound_irq
+};
+
+/* Calendar Emulation */
+
+static UINT8 CalVal, CalMask, CalCom=0, CalCnt=0;
+
+static UINT8 bcd(UINT8 data)
+{
+ return ((data / 10) << 4) | (data % 10);
+}
+
+static READ16_HANDLER( pgm_calendar_r )
+{
+ UINT8 calr;
+ calr = (CalVal & CalMask) ? 1 : 0;
+ CalMask <<= 1;
+ return calr;
+}
+
+static WRITE16_HANDLER( pgm_calendar_w )
+{
+ static mame_system_time systime;
+
+ mame_get_base_datetime(Machine, &systime);
+
+ // initialize the time, otherwise it crashes
+ if( !systime.time )
+ mame_get_base_datetime(Machine, &systime);
+
+ CalCom <<= 1;
+ CalCom |= data & 1;
+ ++CalCnt;
+ if(CalCnt==4)
+ {
+ CalMask = 1;
+ CalVal = 1;
+ CalCnt = 0;
+ switch(CalCom & 0xf)
+ {
+ case 1: case 3: case 5: case 7: case 9: case 0xb: case 0xd:
+ CalVal++;
+ break;
+
+ case 0:
+ CalVal=bcd(systime.local_time.weekday); //??
+ break;
+
+ case 2: //Hours
+ CalVal=bcd(systime.local_time.hour);
+ break;
+
+ case 4: //Seconds
+ CalVal=bcd(systime.local_time.second);
+ break;
+
+ case 6: //Month
+ CalVal=bcd(systime.local_time.month + 1); //?? not bcd in MVS
+ break;
+
+ case 8:
+ CalVal=0; //Controls blinking speed, maybe milliseconds
+ break;
+
+ case 0xa: //Day
+ CalVal=bcd(systime.local_time.mday);
+ break;
+
+ case 0xc: //Minute
+ CalVal=bcd(systime.local_time.minute);
+ break;
+
+ case 0xe: //Year
+ CalVal=bcd(systime.local_time.year % 100);
+ break;
+
+ case 0xf: //Load Date
+ mame_get_base_datetime(Machine, &systime);
+ break;
+ }
+ }
+}
+
+/*** Memory Maps *************************************************************/
+
+static ADDRESS_MAP_START( pgm_mem, ADDRESS_SPACE_PROGRAM, 16)
+ AM_RANGE(0x000000, 0x01ffff) AM_ROM /* BIOS ROM */
+ AM_RANGE(0x100000, 0x5fffff) AM_ROMBANK(1) /* Game ROM */
+
+ AM_RANGE(0x700006, 0x700007) AM_WRITENOP // Watchdog?
+
+ AM_RANGE(0x800000, 0x81ffff) AM_RAM AM_MIRROR(0x0e0000) AM_BASE(&pgm_mainram) /* Main Ram */
+
+ AM_RANGE(0x900000, 0x903fff) AM_READWRITE(MRA16_RAM, pgm_bg_videoram_w) AM_BASE(&pgm_bg_videoram) /* Backgrounds */
+ AM_RANGE(0x904000, 0x905fff) AM_READWRITE(MRA16_RAM, pgm_tx_videoram_w) AM_BASE(&pgm_tx_videoram) /* Text Layer */
+ AM_RANGE(0x907000, 0x9077ff) AM_RAM AM_BASE(&pgm_rowscrollram)
+ AM_RANGE(0xa00000, 0xa011ff) AM_READWRITE(MRA16_RAM, paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16)
+ AM_RANGE(0xb00000, 0xb0ffff) AM_RAM AM_BASE(&pgm_videoregs) /* Video Regs inc. Zoom Table */
+
+ AM_RANGE(0xc00002, 0xc00003) AM_READWRITE(soundlatch_word_r, m68k_l1_w)
+ AM_RANGE(0xc00004, 0xc00005) AM_READWRITE(soundlatch2_word_r, soundlatch2_word_w)
+ AM_RANGE(0xc00006, 0xc00007) AM_READWRITE(pgm_calendar_r, pgm_calendar_w)
+ AM_RANGE(0xc00008, 0xc00009) AM_WRITE(z80_reset_w)
+ AM_RANGE(0xc0000a, 0xc0000b) AM_WRITE(z80_ctrl_w)
+ AM_RANGE(0xc0000c, 0xc0000d) AM_READWRITE(soundlatch3_word_r, soundlatch3_word_w)
+
+ AM_RANGE(0xc08000, 0xc08001) AM_READ(input_port_0_word_r) // p1+p2 controls
+ AM_RANGE(0xc08002, 0xc08003) AM_READ(input_port_1_word_r) // p3+p4 controls
+ AM_RANGE(0xc08004, 0xc08005) AM_READ(input_port_2_word_r) // extra controls
+ AM_RANGE(0xc08006, 0xc08007) AM_READ(input_port_3_word_r) // dipswitches
+
+ AM_RANGE(0xc10000, 0xc1ffff) AM_READWRITE(z80_ram_r, z80_ram_w) /* Z80 Program */
+ADDRESS_MAP_END
+
+static UINT16 *killbld_sharedprotram;
+
+static ADDRESS_MAP_START( killbld_mem, ADDRESS_SPACE_PROGRAM, 16)
+ AM_RANGE(0x000000, 0x01ffff) AM_ROM /* BIOS ROM */
+ AM_RANGE(0x100000, 0x2fffff) AM_ROMBANK(1) /* Game ROM */
+ AM_RANGE(0x300000, 0x303fff) AM_RAM AM_BASE(&killbld_sharedprotram) // Shared with protection device
+
+ AM_RANGE(0x700006, 0x700007) AM_WRITENOP // Watchdog?
+
+ AM_RANGE(0x800000, 0x81ffff) AM_RAM AM_MIRROR(0x0e0000) AM_BASE(&pgm_mainram) /* Main Ram */
+
+ AM_RANGE(0x900000, 0x903fff) AM_READWRITE(MRA16_RAM, pgm_bg_videoram_w) AM_BASE(&pgm_bg_videoram) /* Backgrounds */
+ AM_RANGE(0x904000, 0x905fff) AM_READWRITE(MRA16_RAM, pgm_tx_videoram_w) AM_BASE(&pgm_tx_videoram) /* Text Layer */
+ AM_RANGE(0x907000, 0x9077ff) AM_RAM AM_BASE(&pgm_rowscrollram)
+ AM_RANGE(0xa00000, 0xa011ff) AM_READWRITE(MRA16_RAM, paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16)
+ AM_RANGE(0xb00000, 0xb0ffff) AM_RAM AM_BASE(&pgm_videoregs) /* Video Regs inc. Zoom Table */
+
+ AM_RANGE(0xc00002, 0xc00003) AM_READWRITE(soundlatch_word_r, m68k_l1_w)
+ AM_RANGE(0xc00004, 0xc00005) AM_READWRITE(soundlatch2_word_r, soundlatch2_word_w)
+ AM_RANGE(0xc00006, 0xc00007) AM_READWRITE(pgm_calendar_r, pgm_calendar_w)
+ AM_RANGE(0xc00008, 0xc00009) AM_WRITE(z80_reset_w)
+ AM_RANGE(0xc0000a, 0xc0000b) AM_WRITE(z80_ctrl_w)
+ AM_RANGE(0xc0000c, 0xc0000d) AM_READWRITE(soundlatch3_word_r, soundlatch3_word_w)
+
+ AM_RANGE(0xc08000, 0xc08001) AM_READ(input_port_0_word_r) // p1+p2 controls
+ AM_RANGE(0xc08002, 0xc08003) AM_READ(input_port_1_word_r) // p3+p4 controls
+ AM_RANGE(0xc08004, 0xc08005) AM_READ(input_port_2_word_r) // extra controls
+ AM_RANGE(0xc08006, 0xc08007) AM_READ(input_port_3_word_r) // dipswitches
+
+ AM_RANGE(0xc10000, 0xc1ffff) AM_READWRITE(z80_ram_r, z80_ram_w) /* Z80 Program */
+ADDRESS_MAP_END
+
+static UINT16 *olds_sharedprotram;
+
+static ADDRESS_MAP_START( olds_mem, ADDRESS_SPACE_PROGRAM, 16)
+ AM_RANGE(0x000000, 0x01ffff) AM_ROM /* BIOS ROM */
+ AM_RANGE(0x100000, 0x3fffff) AM_ROMBANK(1) /* Game ROM */
+ AM_RANGE(0x400000, 0x4fffff) AM_RAM AM_BASE(&olds_sharedprotram) // Shared with protection device
+
+ AM_RANGE(0x700006, 0x700007) AM_WRITENOP // Watchdog?
+
+ AM_RANGE(0x800000, 0x81ffff) AM_RAM AM_MIRROR(0x0e0000) AM_BASE(&pgm_mainram) /* Main Ram */
+
+ AM_RANGE(0x900000, 0x903fff) AM_READWRITE(MRA16_RAM, pgm_bg_videoram_w) AM_BASE(&pgm_bg_videoram) /* Backgrounds */
+ AM_RANGE(0x904000, 0x905fff) AM_READWRITE(MRA16_RAM, pgm_tx_videoram_w) AM_BASE(&pgm_tx_videoram) /* Text Layer */
+ AM_RANGE(0x907000, 0x9077ff) AM_RAM AM_BASE(&pgm_rowscrollram)
+ AM_RANGE(0xa00000, 0xa011ff) AM_READWRITE(MRA16_RAM, paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16)
+ AM_RANGE(0xb00000, 0xb0ffff) AM_RAM AM_BASE(&pgm_videoregs) /* Video Regs inc. Zoom Table */
+
+ AM_RANGE(0xc00002, 0xc00003) AM_READWRITE(soundlatch_word_r, m68k_l1_w)
+ AM_RANGE(0xc00004, 0xc00005) AM_READWRITE(soundlatch2_word_r, soundlatch2_word_w)
+ AM_RANGE(0xc00006, 0xc00007) AM_READWRITE(pgm_calendar_r, pgm_calendar_w)
+ AM_RANGE(0xc00008, 0xc00009) AM_WRITE(z80_reset_w)
+ AM_RANGE(0xc0000a, 0xc0000b) AM_WRITE(z80_ctrl_w)
+ AM_RANGE(0xc0000c, 0xc0000d) AM_READWRITE(soundlatch3_word_r, soundlatch3_word_w)
+
+ AM_RANGE(0xc08000, 0xc08001) AM_READ(input_port_0_word_r) // p1+p2 controls
+ AM_RANGE(0xc08002, 0xc08003) AM_READ(input_port_1_word_r) // p3+p4 controls
+ AM_RANGE(0xc08004, 0xc08005) AM_READ(input_port_2_word_r) // extra controls
+ AM_RANGE(0xc08006, 0xc08007) AM_READ(input_port_3_word_r) // dipswitches
+
+ AM_RANGE(0xc10000, 0xc1ffff) AM_READWRITE(z80_ram_r, z80_ram_w) /* Z80 Program */
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( kov2_mem, ADDRESS_SPACE_PROGRAM, 16)
+ AM_RANGE(0x000000, 0x01ffff) AM_ROM /* BIOS ROM */
+ AM_RANGE(0x100000, 0x5fffff) AM_ROMBANK(1) /* Game ROM */
+
+ AM_RANGE(0x700006, 0x700007) AM_WRITENOP // Watchdog?
+
+ AM_RANGE(0x800000, 0x81ffff) AM_RAM AM_MIRROR(0x0e0000) AM_BASE(&pgm_mainram) /* Main Ram */
+
+ AM_RANGE(0x900000, 0x903fff) AM_READWRITE(MRA16_RAM, pgm_bg_videoram_w) AM_BASE(&pgm_bg_videoram) /* Backgrounds */
+ AM_RANGE(0x904000, 0x905fff) AM_READWRITE(MRA16_RAM, pgm_tx_videoram_w) AM_BASE(&pgm_tx_videoram) /* Text Layer */
+ AM_RANGE(0x907000, 0x9077ff) AM_RAM AM_BASE(&pgm_rowscrollram)
+ AM_RANGE(0xa00000, 0xa011ff) AM_READWRITE(MRA16_RAM, paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16)
+ AM_RANGE(0xb00000, 0xb0ffff) AM_RAM AM_BASE(&pgm_videoregs) /* Video Regs inc. Zoom Table */
+
+ AM_RANGE(0xc00002, 0xc00003) AM_READWRITE(soundlatch_word_r, m68k_l1_w)
+ AM_RANGE(0xc00004, 0xc00005) AM_READWRITE(soundlatch2_word_r, soundlatch2_word_w)
+ AM_RANGE(0xc00006, 0xc00007) AM_READWRITE(pgm_calendar_r, pgm_calendar_w)
+ AM_RANGE(0xc00008, 0xc00009) AM_WRITE(z80_reset_w)
+ AM_RANGE(0xc0000a, 0xc0000b) AM_WRITE(z80_ctrl_w)
+ AM_RANGE(0xc0000c, 0xc0000d) AM_READWRITE(soundlatch3_word_r, soundlatch3_word_w)
+
+ AM_RANGE(0xc08000, 0xc08001) AM_READ(input_port_0_word_r) // p1+p2 controls
+ AM_RANGE(0xc08002, 0xc08003) AM_READ(input_port_1_word_r) // p3+p4 controls
+ AM_RANGE(0xc08004, 0xc08005) AM_READ(input_port_2_word_r) // extra controls
+ AM_RANGE(0xc08006, 0xc08007) AM_READ(input_port_3_word_r) // dipswitches
+
+ AM_RANGE(0xc10000, 0xc1ffff) AM_READWRITE(z80_ram_r, z80_ram_w) /* Z80 Program */
+ AM_RANGE(0xd00000, 0xd0ffff) AM_READWRITE(arm7_ram_r, arm7_ram_w) /* ARM7 Shared RAM */
+ AM_RANGE(0xd10000, 0xd10001) AM_READWRITE(arm7_latch_68k_r, arm7_latch_68k_w) /* ARM7 Latch */
+ADDRESS_MAP_END
+
+#if 0
+static ADDRESS_MAP_START( cavepgm_mem, ADDRESS_SPACE_PROGRAM, 16)
+ AM_RANGE(0x000000, 0x07ffff) AM_ROM /* larger BIOS ROM */
+ AM_RANGE(0xfffffe, 0xffffff) AM_ROMBANK(1) /* Game ROM (unmapped for now, might not even have it) */
+ AM_RANGE(0x400000, 0x4fffff) AM_RAM AM_BASE(&olds_sharedprotram) // Shared with protection device
+
+ AM_RANGE(0x700006, 0x700007) AM_WRITENOP // Watchdog?
+
+ AM_RANGE(0x800000, 0x81ffff) AM_RAM AM_MIRROR(0x0e0000) AM_BASE(&pgm_mainram) /* Main Ram */
+
+ AM_RANGE(0x900000, 0x903fff) AM_READWRITE(MRA16_RAM, pgm_bg_videoram_w) AM_BASE(&pgm_bg_videoram) /* Backgrounds */
+ AM_RANGE(0x904000, 0x905fff) AM_READWRITE(MRA16_RAM, pgm_tx_videoram_w) AM_BASE(&pgm_tx_videoram) /* Text Layer */
+ AM_RANGE(0x907000, 0x9077ff) AM_RAM AM_BASE(&pgm_rowscrollram)
+ AM_RANGE(0xa00000, 0xa011ff) AM_READWRITE(MRA16_RAM, paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16)
+ AM_RANGE(0xb00000, 0xb0ffff) AM_RAM AM_BASE(&pgm_videoregs) /* Video Regs inc. Zoom Table */
+
+ AM_RANGE(0xc00002, 0xc00003) AM_READWRITE(soundlatch_word_r, m68k_l1_w)
+ AM_RANGE(0xc00004, 0xc00005) AM_READWRITE(soundlatch2_word_r, soundlatch2_word_w)
+ AM_RANGE(0xc00006, 0xc00007) AM_READWRITE(pgm_calendar_r, pgm_calendar_w)
+ AM_RANGE(0xc00008, 0xc00009) AM_WRITE(z80_reset_w)
+ AM_RANGE(0xc0000a, 0xc0000b) AM_WRITE(z80_ctrl_w)
+ AM_RANGE(0xc0000c, 0xc0000d) AM_READWRITE(soundlatch3_word_r, soundlatch3_word_w)
+
+ AM_RANGE(0xc08000, 0xc08001) AM_READ(input_port_0_word_r) // p1+p2 controls
+ AM_RANGE(0xc08002, 0xc08003) AM_READ(input_port_1_word_r) // p3+p4 controls
+ AM_RANGE(0xc08004, 0xc08005) AM_READ(input_port_2_word_r) // extra controls
+ AM_RANGE(0xc08006, 0xc08007) AM_READ(input_port_3_word_r) // dipswitches
+
+ AM_RANGE(0xc10000, 0xc1ffff) AM_READWRITE(z80_ram_r, z80_ram_w) /* Z80 Program */
+ADDRESS_MAP_END
+#endif
+
+static ADDRESS_MAP_START( z80_mem, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0xffff) AM_RAM AM_BASE(&z80_mainram)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( z80_io, ADDRESS_SPACE_IO, 8 )
+ AM_RANGE(0x8000, 0x8003) AM_READWRITE(ics2115_r, ics2115_w)
+ AM_RANGE(0x8100, 0x81ff) AM_READWRITE(soundlatch3_r, z80_l3_w)
+ AM_RANGE(0x8200, 0x82ff) AM_READWRITE(soundlatch_r, soundlatch_w)
+ AM_RANGE(0x8400, 0x84ff) AM_READWRITE(soundlatch2_r, soundlatch2_w)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( arm7_map, ADDRESS_SPACE_PROGRAM, 32 )
+ AM_RANGE(0x00000000, 0x00003fff) AM_ROM
+ AM_RANGE(0x08000000, 0x083fffff) AM_ROM AM_REGION(REGION_USER1, 0)
+ AM_RANGE(0x10000000, 0x100003ff) AM_RAM
+ AM_RANGE(0x18000000, 0x1800ffff) AM_RAM
+ AM_RANGE(0x38000000, 0x38000003) AM_READWRITE(arm7_latch_arm_r, arm7_latch_arm_w) /* 68k Latch */
+ AM_RANGE(0x48000000, 0x4800ffff) AM_READWRITE(arm7_shareram_r, arm7_shareram_w) AM_BASE(&arm7_shareram)
+ AM_RANGE(0x50000000, 0x500003ff) AM_RAM
+ADDRESS_MAP_END
+
+
+/* Kov Superheroes */
+
+static UINT16 kovsh_highlatch, kovsh_lowlatch;
+
+static READ32_HANDLER( kovsh_arm7_protlatch_r )
+{
+// return 0x00880000;
+// return 0x0088ff66;
+
+ return (kovsh_highlatch << 16) | (kovsh_lowlatch);
+}
+
+static WRITE32_HANDLER( kovsh_arm7_protlatch_w )
+{
+ if (!(mem_mask & 0xffff0000))
+ {
+ kovsh_highlatch = data>>16;
+ }
+ if (!(mem_mask & 0x0000ffff))
+ {
+ kovsh_lowlatch = data;
+ }
+
+// cpu_boost_interleave(attotime_zero, ATTOTIME_IN_USEC(100));
+// cpu_spinuntil_time(ATTOTIME_IN_CYCLES(100, 0));
+}
+
+static READ16_HANDLER( kovsh_68k_protlatch_r )
+{
+ //cpu_boost_interleave(attotime_zero, ATTOTIME_IN_USEC(200));
+ cpu_spinuntil_time(ATTOTIME_IN_CYCLES(600, 0));
+
+ switch (offset)
+ {
+ case 1: return kovsh_highlatch;
+ case 0: return kovsh_lowlatch;
+ }
+ return -1;
+}
+
+static WRITE16_HANDLER( kovsh_68k_protlatch_w )
+{
+ switch (offset)
+ {
+ case 1: kovsh_highlatch = data; break;
+ case 0: kovsh_lowlatch = data; break;
+ }
+}
+
+static ADDRESS_MAP_START( kovsh_mem, ADDRESS_SPACE_PROGRAM, 16)
+ AM_RANGE(0x000000, 0x01ffff) AM_ROM /* BIOS ROM */
+ AM_RANGE(0x100000, 0x37ffff) AM_ROMBANK(1) /* Game ROM */
+
+ AM_RANGE(0x700006, 0x700007) AM_WRITENOP // Watchdog?
+
+ AM_RANGE(0x800000, 0x81ffff) AM_RAM AM_MIRROR(0x0e0000) AM_BASE(&pgm_mainram) /* Main Ram */
+
+ AM_RANGE(0x900000, 0x903fff) AM_READWRITE(MRA16_RAM, pgm_bg_videoram_w) AM_BASE(&pgm_bg_videoram) /* Backgrounds */
+ AM_RANGE(0x904000, 0x905fff) AM_READWRITE(MRA16_RAM, pgm_tx_videoram_w) AM_BASE(&pgm_tx_videoram) /* Text Layer */
+ AM_RANGE(0x907000, 0x9077ff) AM_RAM AM_BASE(&pgm_rowscrollram)
+ AM_RANGE(0xa00000, 0xa011ff) AM_READWRITE(MRA16_RAM, paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16)
+ AM_RANGE(0xb00000, 0xb0ffff) AM_RAM AM_BASE(&pgm_videoregs) /* Video Regs inc. Zoom Table */
+
+ AM_RANGE(0xc00002, 0xc00003) AM_READWRITE(soundlatch_word_r, m68k_l1_w)
+ AM_RANGE(0xc00004, 0xc00005) AM_READWRITE(soundlatch2_word_r, soundlatch2_word_w)
+ AM_RANGE(0xc00006, 0xc00007) AM_READWRITE(pgm_calendar_r, pgm_calendar_w)
+ AM_RANGE(0xc00008, 0xc00009) AM_WRITE(z80_reset_w)
+ AM_RANGE(0xc0000a, 0xc0000b) AM_WRITE(z80_ctrl_w)
+ AM_RANGE(0xc0000c, 0xc0000d) AM_READWRITE(soundlatch3_word_r, soundlatch3_word_w)
+
+ AM_RANGE(0xc08000, 0xc08001) AM_READ(input_port_0_word_r) // p1+p2 controls
+ AM_RANGE(0xc08002, 0xc08003) AM_READ(input_port_1_word_r) // p3+p4 controls
+ AM_RANGE(0xc08004, 0xc08005) AM_READ(input_port_2_word_r) // extra controls
+ AM_RANGE(0xc08006, 0xc08007) AM_READ(input_port_3_word_r) // dipswitches
+
+ AM_RANGE(0xc10000, 0xc1ffff) AM_READWRITE(z80_ram_r, z80_ram_w) /* Z80 Program */
+ AM_RANGE(0x4f0000, 0x4f003f) AM_READWRITE(arm7_ram_r, arm7_ram_w) /* ARM7 Shared RAM */
+ AM_RANGE(0x500000, 0x500003) AM_READWRITE(kovsh_68k_protlatch_r, kovsh_68k_protlatch_w) /* ARM7 Latch */
+ADDRESS_MAP_END
+
+static READ32_HANDLER( kovsh_arm7_unk_r )
+{
+ return 0x00000000;
+}
+
+static ADDRESS_MAP_START( kovsh_arm7_map, ADDRESS_SPACE_PROGRAM, 32 )
+ AM_RANGE(0x00000000, 0x00003fff) AM_ROM
+ AM_RANGE(0x08100000, 0x081fffff) AM_ROM AM_REGION(REGION_USER1, 0) // unpopulated, returns 0 to keep checksum happy
+ AM_RANGE(0x10000000, 0x100003ff) AM_RAM // main ram for asic?
+
+ AM_RANGE(0x40000000, 0x40000003) AM_READ(kovsh_arm7_protlatch_r) AM_WRITE(kovsh_arm7_protlatch_w)
+ AM_RANGE(0x40000008, 0x4000000b) AM_WRITE(MWA32_NOP) // ?
+ AM_RANGE(0x4000000c, 0x4000000f) AM_READ(kovsh_arm7_unk_r)
+ AM_RANGE(0x50800000, 0x5080003f) AM_READWRITE(arm7_shareram_r, arm7_shareram_w) AM_BASE(&arm7_shareram)
+ AM_RANGE(0x50000000, 0x500003ff) AM_RAM // uploads xor table to decrypt 68k rom here
+ADDRESS_MAP_END
+
+/*** Input Ports *************************************************************/
+
+/* enough for 4 players, the basic dips mapped are listed in the test mode */
+
+static INPUT_PORTS_START( pgm )
+ PORT_START_TAG("P1P2") /* P1P2 */
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
+
+ PORT_START_TAG("P3P4") /* P3P4 */
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START3 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(3)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(3)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START4 )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(4)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(4)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(4)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(4)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4)
+
+ PORT_START_TAG("Service") /* Service */
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN3 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN4 )
+// PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON5 ) // test 1p+2p
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // what should i use?
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE1 ) // service 1p+2p
+// PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON6 ) // test 3p+4p
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) // what should i use?
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SERVICE2 ) // service 3p+4p
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(4)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // unused?
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // unused?
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // unused?
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // unused?
+
+ PORT_START_TAG("DSW") /* DSW */
+ PORT_SERVICE( 0x0001, IP_ACTIVE_LOW )
+ PORT_DIPNAME( 0x0002, 0x0002, "Music" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, "Voice" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, "Free" )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, "Stop" )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+ PORT_START_TAG("Region") /* Region */
+ PORT_DIPNAME( 0x0003, 0x0000, DEF_STR( Region ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( World ) )
+// PORT_DIPSETTING( 0x0001, DEF_STR( World ) ) // again?
+ PORT_DIPSETTING( 0x0002, "Korea" )
+ PORT_DIPSETTING( 0x0003, "China" )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( orld105k )
+ PORT_INCLUDE ( pgm )
+
+ PORT_MODIFY("Region")
+ PORT_DIPNAME( 0x0003, 0x0002, DEF_STR( Unused ) ) // region switch
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) // if enabled, game gives
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) // "incorrect version" error
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( sango )
+ PORT_START /* DSW */
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
+
+ PORT_START /* DSW */
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START3 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(3)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(3)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START4 )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(4)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(4)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(4)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(4)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4)
+ PORT_START /* DSW */
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN3 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN4 )
+// PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON5 ) // test 1p+2p
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // what should i use?
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE1 ) // service 1p+2p
+// PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON6 ) // test 3p+4p
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) // what should i use?
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SERVICE2 ) // service 3p+4p
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(4)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // uused?
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // uused?
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // uused?
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // uused?
+
+ PORT_START /* DSW */
+ PORT_SERVICE( 0x0001, IP_ACTIVE_LOW )
+ PORT_DIPNAME( 0x0002, 0x0002, "Music" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, "Voice" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, "Free" )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, "Stop" )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+ PORT_START /* Region - supplied by protection device */
+ PORT_DIPNAME( 0x000f, 0x0005, DEF_STR( Region ) )
+ PORT_DIPSETTING( 0x0000, "China" )
+ PORT_DIPSETTING( 0x0001, "Taiwan" )
+ PORT_DIPSETTING( 0x0002, "Japan (Alta License)" )
+ PORT_DIPSETTING( 0x0003, "Korea" )
+ PORT_DIPSETTING( 0x0004, "Hong Kong" )
+ PORT_DIPSETTING( 0x0005, DEF_STR( World ) )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( olds )
+ PORT_START /* DSW */
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
+
+ PORT_START /* DSW */
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START3 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(3)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(3)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START4 )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(4)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(4)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(4)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(4)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4)
+ PORT_START /* DSW */
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN3 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN4 )
+// PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON5 ) // test 1p+2p
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // what should i use?
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE1 ) // service 1p+2p
+// PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON6 ) // test 3p+4p
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) // what should i use?
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SERVICE2 ) // service 3p+4p
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(4)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // uused?
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // uused?
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // uused?
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // uused?
+
+ PORT_START /* DSW */
+ PORT_SERVICE( 0x0001, IP_ACTIVE_LOW )
+ PORT_DIPNAME( 0x0002, 0x0002, "Music" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, "Voice" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, "Free" )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, "Stop" )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+ PORT_START /* Region - supplied by protection device */
+ PORT_DIPNAME( 0x000f, 0x0006, DEF_STR( Region ) )
+ // includes region 1 = taiwan , 2 = china, 3 = japan (title = orlegend special), 4 = korea, 5 = hongkong, 6 = world
+ PORT_DIPSETTING( 0x0001, "Taiwan" )
+ PORT_DIPSETTING( 0x0002, "China" )
+ PORT_DIPSETTING( 0x0003, DEF_STR( Japan ) )
+ PORT_DIPSETTING( 0x0004, "Korea" )
+ PORT_DIPSETTING( 0x0005, "Hong Kong" )
+ PORT_DIPSETTING( 0x0006, DEF_STR( World ) )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( killbld )
+ PORT_START /* DSW */
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
+
+ PORT_START /* DSW */
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START3 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(3)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(3)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START4 )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(4)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(4)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(4)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(4)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4)
+
+ PORT_START /* DSW */
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN3 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN4 )
+// PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON5 ) // test 1p+2p
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // what should i use?
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE1 ) // service 1p+2p
+// PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON6 ) // test 3p+4p
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) // what should i use?
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SERVICE2 ) // service 3p+4p
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(4)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // uused?
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // uused?
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // uused?
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // uused?
+
+ PORT_START /* DSW */
+ PORT_SERVICE( 0x0001, IP_ACTIVE_LOW )
+ PORT_DIPNAME( 0x0002, 0x0002, "Music" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, "Voice" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, "Free" )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, "Stop" )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+ PORT_START /* Region - supplied by protection device */
+ PORT_DIPNAME( 0x00ff, 0x0021, DEF_STR( Region ) )
+ PORT_DIPSETTING( 0x0016, "Taiwan" )
+ PORT_DIPSETTING( 0x0017, "China" )
+ PORT_DIPSETTING( 0x0018, "Hong Kong" )
+ PORT_DIPSETTING( 0x0019, DEF_STR( Japan ) )
+// PORT_DIPSETTING( 0x001a, "1a" ) // invalid
+// PORT_DIPSETTING( 0x001b, "1b" ) // invalid
+// PORT_DIPSETTING( 0x001c, "1c" ) // invalid
+// PORT_DIPSETTING( 0x001d, "1d" ) // invalid
+// PORT_DIPSETTING( 0x001e, "1e" ) // invalid
+// PORT_DIPSETTING( 0x001f, "1f" ) // invalid
+ PORT_DIPSETTING( 0x0020, "Korea" )
+ PORT_DIPSETTING( 0x0021, DEF_STR( World ) )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( photoy2k )
+ PORT_START /* DSW */
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
+
+ PORT_START /* DSW */
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START3 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(3)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(3)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START4 )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(4)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(4)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(4)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(4)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4)
+ PORT_START /* DSW */
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN3 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN4 )
+// PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON5 ) // test 1p+2p
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // what should i use?
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE1 ) // service 1p+2p
+// PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON6 ) // test 3p+4p
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) // what should i use?
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SERVICE2 ) // service 3p+4p
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(4)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // uused?
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // uused?
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // uused?
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // uused?
+
+ PORT_START /* DSW */
+ PORT_SERVICE( 0x0001, IP_ACTIVE_LOW )
+ PORT_DIPNAME( 0x0002, 0x0002, "Music" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, "Voice" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, "Free" )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, "Stop" )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+ PORT_START /* Region - supplied by protection device */
+ PORT_DIPNAME( 0x000f, 0x0003, DEF_STR( Region ) )
+ PORT_DIPSETTING( 0x0000, "Taiwan" )
+ PORT_DIPSETTING( 0x0001, "China" )
+ PORT_DIPSETTING( 0x0002, "Japan (Alta License)" )
+ PORT_DIPSETTING( 0x0003, DEF_STR( World ))
+ PORT_DIPSETTING( 0x0004, "Korea" )
+ PORT_DIPSETTING( 0x0005, "Hong Kong" )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( ddp2 )
+ PORT_START /* P1 */
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
+
+ PORT_START /* P2 */
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START3 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(3)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(3)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3)
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START4 )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(4)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(4)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(4)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(4)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4)
+
+ PORT_START /* DSW */
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN3 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN4 )
+// PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON5 ) // test 1p+2p
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // what should i use?
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE1 ) // service 1p+2p
+// PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON6 ) // test 3p+4p
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) // what should i use?
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SERVICE2 ) // service 3p+4p
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(3)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(4)
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // uused?
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // uused?
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // uused?
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // uused?
+
+ PORT_START /* DSW */
+ PORT_SERVICE( 0x0001, IP_ACTIVE_LOW )
+ PORT_DIPNAME( 0x0002, 0x0002, "Music" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, "Voice" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, "Free" )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, "Stop" )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+/* probably not dsw related anyway
+ PORT_START
+ PORT_DIPNAME( 0x0001, 0x0001, "4" )
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Unknown ) ) // Freezes if off?
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+ PORT_START
+ PORT_DIPNAME( 0x0001, 0x0001, "5" )
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+*/
+ PORT_START /* Region - supplied by protection device */
+ PORT_DIPNAME( 0x000f, 0x0005, DEF_STR( Region ) )
+ PORT_DIPSETTING( 0x0000, "China" )
+ PORT_DIPSETTING( 0x0001, "Taiwan" )
+ PORT_DIPSETTING( 0x0002, "Japan (Cave License)" )
+ PORT_DIPSETTING( 0x0003, "Korea" )
+ PORT_DIPSETTING( 0x0004, "Hong Kong" )
+ PORT_DIPSETTING( 0x0005, DEF_STR( World ) )
+INPUT_PORTS_END
+
+/*** GFX Decodes *************************************************************/
+
+/* we can't decode the sprite data like this because it isn't tile based. the
+ data decoded by pgm32_charlayout was rearranged at start-up */
+
+static const gfx_layout pgm8_charlayout =
+{
+ 8,8,
+ RGN_FRAC(1,1),
+ 4,
+ { 0,1,2,3 },
+ { 4, 0, 12, 8, 20,16, 28, 24 },
+ { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
+ 8*32
+};
+
+static const gfx_layout pgm32_charlayout =
+{
+ 32,32,
+ RGN_FRAC(1,1),
+ 5,
+ { 3,4,5,6,7 },
+ { 0 , 8 ,16 ,24 ,32 ,40 ,48 ,56 ,
+ 64 ,72 ,80 ,88 ,96 ,104,112,120,
+ 128,136,144,152,160,168,176,184,
+ 192,200,208,216,224,232,240,248 },
+ { 0*256, 1*256, 2*256, 3*256, 4*256, 5*256, 6*256, 7*256,
+ 8*256, 9*256,10*256,11*256,12*256,13*256,14*256,15*256,
+ 16*256,17*256,18*256,19*256,20*256,21*256,22*256,23*256,
+ 24*256,25*256,26*256,27*256,28*256,29*256,30*256,31*256 },
+ 32*256
+};
+
+static GFXDECODE_START( pgm )
+ GFXDECODE_ENTRY( REGION_GFX1, 0, pgm8_charlayout, 0x800, 32 ) /* 8x8x4 Tiles */
+ GFXDECODE_ENTRY( REGION_GFX2, 0, pgm32_charlayout, 0x400, 32 ) /* 32x32x5 Tiles */
+GFXDECODE_END
+
+/*** Machine Driver **********************************************************/
+
+/* only dragon world 2 NEEDs irq4, Puzzli 2 explicitly doesn't want it, what
+ is the source? maybe the protection device? */
+static INTERRUPT_GEN( drgw_interrupt ) {
+ if( cpu_getiloops() == 0 )
+ cpunum_set_input_line(0, 6, HOLD_LINE);
+ else
+ cpunum_set_input_line(0, 4, HOLD_LINE);
+}
+
+static MACHINE_RESET ( pgm )
+{
+ cpunum_set_input_line(1, INPUT_LINE_HALT, ASSERT_LINE);
+}
+
+static MACHINE_DRIVER_START( pgm )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD_TAG("main", M68000, 20000000) /* 20 mhz! verified on real board */
+ MDRV_CPU_PROGRAM_MAP(pgm_mem,0)
+ MDRV_CPU_VBLANK_INT(irq6_line_hold,1)
+
+ MDRV_CPU_ADD_TAG("sound", Z80, 8468000)
+ MDRV_CPU_PROGRAM_MAP(z80_mem, 0)
+ MDRV_CPU_IO_MAP(z80_io, 0)
+ /* audio CPU */
+
+ MDRV_SPEAKER_STANDARD_MONO("mono")
+ MDRV_SOUND_ADD(ICS2115, 0)
+ MDRV_SOUND_CONFIG(pgm_ics2115_interface)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 5.0)
+
+ MDRV_SCREEN_REFRESH_RATE(60)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER )
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(64*8, 64*8)
+ MDRV_SCREEN_VISIBLE_AREA(0*8, 56*8-1, 0*8, 28*8-1)
+ MDRV_GFXDECODE(pgm)
+ MDRV_PALETTE_LENGTH(0x1200/2)
+ MDRV_MACHINE_RESET ( pgm )
+
+ MDRV_VIDEO_START(pgm)
+ MDRV_VIDEO_EOF(pgm)
+ MDRV_VIDEO_UPDATE(pgm)
+MACHINE_DRIVER_END
+
+static MACHINE_DRIVER_START( drgw2 )
+ MDRV_IMPORT_FROM(pgm)
+
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_VBLANK_INT(drgw_interrupt,2) // needs an extra IRQ, puzzli2 doesn't want this irq!
+MACHINE_DRIVER_END
+
+static MACHINE_RESET( killbld );
+
+static MACHINE_DRIVER_START( killbld )
+ MDRV_IMPORT_FROM(pgm)
+
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(killbld_mem,0)
+
+ MDRV_MACHINE_RESET(killbld)
+
+MACHINE_DRIVER_END
+
+static MACHINE_RESET( olds );
+
+static MACHINE_DRIVER_START( olds )
+ MDRV_IMPORT_FROM(pgm)
+
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(olds_mem,0)
+
+ MDRV_MACHINE_RESET(olds)
+
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( kov2 )
+ MDRV_IMPORT_FROM(pgm)
+
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(kov2_mem,0)
+
+ /* protection CPU */
+ MDRV_CPU_ADD_TAG("prot", ARM7, 20000000) // ???
+ MDRV_CPU_PROGRAM_MAP(arm7_map, 0)
+MACHINE_DRIVER_END
+
+static MACHINE_DRIVER_START( kovsh )
+ MDRV_IMPORT_FROM(pgm)
+
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(kovsh_mem,0)
+
+ /* protection CPU */
+ MDRV_CPU_ADD_TAG("prot", ARM7, 20000000) // ???
+ MDRV_CPU_PROGRAM_MAP(kovsh_arm7_map, 0)
+MACHINE_DRIVER_END
+
+#if 0
+static MACHINE_DRIVER_START( cavepgm )
+ MDRV_IMPORT_FROM(pgm)
+
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(cavepgm_mem,0)
+
+ /* protection CPU */
+// MDRV_CPU_ADD_TAG("prot", ARM7, 20000000) // ???
+// MDRV_CPU_PROGRAM_MAP(arm7_map, 0)
+MACHINE_DRIVER_END
+#endif
+
+
+/*** Init Stuff **************************************************************/
+
+/* This function expands the 32x32 5-bit data into a format which is easier to
+ decode in MAME */
+
+static void expand_32x32x5bpp(void)
+{
+ UINT8 *src = memory_region ( REGION_GFX1 );
+ UINT8 *dst = memory_region ( REGION_GFX2 );
+ size_t srcsize = memory_region_length( REGION_GFX1 );
+ int cnt, pix;
+
+ for (cnt = 0; cnt < srcsize/5 ; cnt ++)
+ {
+ pix = ((src[0+5*cnt] >> 0)& 0x1f ); dst[0+8*cnt]=pix;
+ pix = ((src[0+5*cnt] >> 5)& 0x07) | ((src[1+5*cnt] << 3) & 0x18);dst[1+8*cnt]=pix;
+ pix = ((src[1+5*cnt] >> 2)& 0x1f ); dst[2+8*cnt]=pix;
+ pix = ((src[1+5*cnt] >> 7)& 0x01) | ((src[2+5*cnt] << 1) & 0x1e);dst[3+8*cnt]=pix;
+ pix = ((src[2+5*cnt] >> 4)& 0x0f) | ((src[3+5*cnt] << 4) & 0x10);dst[4+8*cnt]=pix;
+ pix = ((src[3+5*cnt] >> 1)& 0x1f ); dst[5+8*cnt]=pix;
+ pix = ((src[3+5*cnt] >> 6)& 0x03) | ((src[4+5*cnt] << 2) & 0x1c);dst[6+8*cnt]=pix;
+ pix = ((src[4+5*cnt] >> 3)& 0x1f ); dst[7+8*cnt]=pix;
+ }
+}
+
+/* This function expands the sprite colour data (in the A Roms) from 3 pixels
+ in each word to a byte per pixel making it easier to use */
+
+UINT8 *pgm_sprite_a_region;
+size_t pgm_sprite_a_region_allocate;
+
+static void expand_colourdata(void)
+{
+ UINT8 *src = memory_region ( REGION_GFX3 );
+ size_t srcsize = memory_region_length( REGION_GFX3 );
+ int cnt;
+ size_t needed = srcsize / 2 * 3;
+
+ /* work out how much ram we need to allocate to expand the sprites into
+ and be able to mask the offset */
+ pgm_sprite_a_region_allocate = 1;
+ while (pgm_sprite_a_region_allocate < needed)
+ pgm_sprite_a_region_allocate = pgm_sprite_a_region_allocate <<1;
+
+ pgm_sprite_a_region = auto_malloc (pgm_sprite_a_region_allocate);
+
+
+ for (cnt = 0 ; cnt < srcsize/2 ; cnt++)
+ {
+ UINT16 colpack;
+
+ colpack = ((src[cnt*2]) | (src[cnt*2+1] << 8));
+ pgm_sprite_a_region[cnt*3+0] = (colpack >> 0 ) & 0x1f;
+ pgm_sprite_a_region[cnt*3+1] = (colpack >> 5 ) & 0x1f;
+ pgm_sprite_a_region[cnt*3+2] = (colpack >> 10) & 0x1f;
+ }
+}
+
+static void pgm_basic_init(void)
+{
+ UINT8 *ROM = memory_region(REGION_CPU1);
+ memory_set_bankptr(1,&ROM[0x100000]);
+
+ expand_32x32x5bpp();
+ expand_colourdata();
+}
+
+static DRIVER_INIT( pgm )
+{
+ pgm_basic_init();
+}
+
+/* Oriental Legend INIT */
+
+static DRIVER_INIT( orlegend )
+{
+ pgm_basic_init();
+
+ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0xC0400e, 0xC0400f, 0, 0, pgm_asic3_r);
+ memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0xC04000, 0xC04001, 0, 0, pgm_asic3_reg_w);
+ memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0xC0400e, 0xC0400f, 0, 0, pgm_asic3_w);
+}
+
+static void drgwld2_common_init(void)
+{
+ pgm_basic_init();
+ pgm_dw2_decrypt();
+ /*
+ Info from Elsemi
+ Here is how to "bypass" the dw2 hang protection, it fixes the mode
+ select and after failing in the 2nd stage (probably there are other checks
+ out there).
+ */
+ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0xd80000, 0xd80003, 0, 0, dw2_d80000_r);
+}
+
+static DRIVER_INIT( drgw2 )
+{ /* incomplete? */
+ UINT16 *mem16 = (UINT16 *)memory_region(REGION_CPU1);
+ drgwld2_common_init();
+ /* These ROM patches are not hacks, the protection device
+ overlays the normal ROM code, this has been confirmed on a real PCB
+ although some addresses may be missing */
+ mem16[0x131098/2]=0x4e93;
+ mem16[0x13113e/2]=0x4e93;
+ mem16[0x1311ce/2]=0x4e93;
+}
+
+static DRIVER_INIT( drgw2c )
+{
+ UINT16 *mem16 = (UINT16 *)memory_region(REGION_CPU1);
+ drgwld2_common_init();
+ /* These ROM patches are not hacks, the protection device
+ overlays the normal ROM code, this has been confirmed on a real PCB
+ although some addresses may be missing */
+ mem16[0x1303bc/2]=0x4e93;
+ mem16[0x130462/2]=0x4e93;
+ mem16[0x1304F2/2]=0x4e93;
+}
+
+static DRIVER_INIT( drgw2j )
+{
+ UINT16 *mem16 = (UINT16 *)memory_region(REGION_CPU1);
+ drgwld2_common_init();
+ /* These ROM patches are not hacks, the protection device
+ overlays the normal ROM code, this has been confirmed on a real PCB
+ although some addresses may be missing */
+ mem16[0x1302C0/2]=0x4e93;
+ mem16[0x130366/2]=0x4e93;
+ mem16[0x1303F6/2]=0x4e93;
+}
+
+static DRIVER_INIT( kov )
+{
+ pgm_basic_init();
+
+ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x500000, 0x500003, 0, 0, ASIC28_r16);
+ memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x500000, 0x500003, 0, 0, ASIC28_w16);
+
+ /* 0x4f0000 - ? is actually ram shared with the protection device,
+ the protection device provides the region code */
+ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x4f0000, 0x4fffff, 0, 0, sango_protram_r);
+
+ pgm_kov_decrypt();
+}
+
+static DRIVER_INIT( kov2 )
+{
+ pgm_basic_init();
+ pgm_kov2_decrypt();
+}
+
+static DRIVER_INIT( martmast )
+{
+ pgm_basic_init();
+ pgm_mm_decrypt();
+}
+
+
+extern READ16_HANDLER( PSTARS_protram_r );
+extern READ16_HANDLER( PSTARS_r16 );
+extern WRITE16_HANDLER( PSTARS_w16 );
+
+static DRIVER_INIT( pstar )
+{
+ pgm_basic_init();
+ pgm_pstar_decrypt();
+
+ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x4f0000, 0x4f0025, 0, 0, PSTARS_protram_r);
+ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x500000, 0x500003, 0, 0, PSTARS_r16);
+ memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x500000, 0x500005, 0, 0, PSTARS_w16);
+}
+
+
+
+static DRIVER_INIT( kovsh )
+{
+ pgm_basic_init();
+
+// memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x500000, 0x500003, 0, 0, ASIC28_r16);
+// memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x500000, 0x500003, 0, 0, ASIC28_w16);
+
+ /* 0x4f0000 - ? is actually ram shared with the protection device,
+ the protection device provides the region code */
+// memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x4f0000, 0x4fffff, 0, 0, sango_protram_r);
+
+ pgm_kovsh_decrypt();
+}
+
+static DRIVER_INIT( djlzz )
+{
+ pgm_basic_init();
+
+ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x500000, 0x500003, 0, 0, ASIC28_r16);
+ memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x500000, 0x500003, 0, 0, ASIC28_w16);
+
+ /* 0x4f0000 - ? is actually ram shared with the protection device,
+ the protection device provides the region code */
+ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x4f0000, 0x4fffff, 0, 0, sango_protram_r);
+
+ pgm_djlzz_decrypt();
+}
+
+static DRIVER_INIT( dw3 )
+{
+ pgm_basic_init();
+
+// memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0xda0000, 0xdaffff, 0, 0, dw3_prot_r);
+// memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0xda0000, 0xdaffff, 0, 0, dw3_prot_w);
+
+ pgm_dw3_decrypt();
+}
+
+
+/* Killing Blade uses some kind of DMA protection device which can copy data from a data rom. The
+ MCU appears to have an internal ROM as if you remove the data ROM then the shared ram is filled
+ with a constant value.
+
+ The device can perform various decryption operations on the data it copies. for now we're just
+ using a dump of the shared RAM instead. This will be improved later.
+*/
+
+static int kb_cmd;
+static int reg;
+static int ptr;
+
+static WRITE16_HANDLER( killbld_prot_w )
+{
+// mame_printf_debug("killbrd prot r\n");
+// return 0;
+ offset&=0xf;
+
+ if(offset==0)
+ kb_cmd=data;
+ else //offset==2
+ {
+ logerror("%06X: ASIC25 W CMD %X VAL %X",activecpu_get_pc(),kb_cmd,data);
+ if(kb_cmd==0)
+ reg=data;
+ else if(kb_cmd==2)
+ {
+
+ if(data==1) //Execute cmd
+ {
+ UINT16 cmd=killbld_sharedprotram[0x200/2];
+ //mame_printf_debug("command %04x\n",cmd);
+ if(cmd==0x6d) //Store values to asic ram
+ {
+ UINT32 p1=(killbld_sharedprotram[0x298/2] << 16) | killbld_sharedprotram[0x29a/2];
+ UINT32 p2=(killbld_sharedprotram[0x29c/2] << 16) | killbld_sharedprotram[0x29e/2];
+ static UINT32 Regs[0x10];
+ if((p2&0xFFFF)==0x9) //Set value
+ {
+ int reg=(p2>>16)&0xFFFF;
+ if(reg&0x200)
+ Regs[reg&0xFF]=p1;
+ }
+ if((p2&0xFFFF)==0x6) //Add value
+ {
+ int src1=(p1>>16)&0xFF;
+ int src2=(p1>>0)&0xFF;
+ int dst=(p2>>16)&0xFF;
+ Regs[dst]=Regs[src2]-Regs[src1];
+ }
+ if((p2&0xFFFF)==0x1) //Add Imm?
+ {
+ int reg=(p2>>16)&0xFF;
+ int imm=(p1>>0)&0xFFFF;
+ Regs[reg]+=imm;
+ }
+ if((p2&0xFFFF)==0xa) //Get value
+ {
+ int reg=(p1>>16)&0xFF;
+ killbld_sharedprotram[0x29c/2] = (Regs[reg]>>16)&0xffff;
+ killbld_sharedprotram[0x29e/2] = Regs[reg]&0xffff;
+ }
+ }
+ if(cmd==0x4f) //memcpy with encryption / scrambling
+ {
+ UINT16 src=killbld_sharedprotram[0x290/2]>>1; // ?
+ UINT32 dst=killbld_sharedprotram[0x292/2];
+ UINT16 size=killbld_sharedprotram[0x294/2];
+ UINT16 mode=killbld_sharedprotram[0x296/2];
+
+
+ // int a=1;
+ // if(src==0x580)
+ // int a=1;
+ /*
+ P_SRC =0x300290 (offset from prot rom base)
+ P_DST =0x300292 (words from 0x300000)
+ P_SIZE=0x300294 (words)
+ P_MODE=0x300296
+
+ Mode 5 direct
+ Mode 6 swap nibbles and bytes
+
+ 1,2,3 unk.
+ */
+
+ //mame_printf_debug("src %04x dst %04x size %04x mode %04x\n",src,dst,size,mode);
+
+ //if (src&1) mame_printf_debug("odd offset\n");
+
+ mode &=0xf; // what are the other bits?
+
+ if (mode == 1 || mode == 2 || mode == 3)
+ {
+ /* for now, cheat -- the scramble isn't understood, it might
+ be state based */
+ int x;
+ for (x=0;x<size;x++)
+ {
+ UINT16 *RAMDUMP = (UINT16*)memory_region(REGION_USER2);
+ UINT16 dat;
+
+ dat = RAMDUMP[dst+x];
+ killbld_sharedprotram[dst+x] = dat;
+ }
+ }
+ else if (mode == 5)
+ {
+ /* mode 5 seems to be a straight copy */
+ int x;
+ for (x=0;x<size;x++)
+ {
+ UINT16 *RAMDUMP = (UINT16*)memory_region(REGION_USER2);
+ UINT16 *PROTROM = (UINT16*)memory_region(REGION_USER1);
+ UINT16 dat;
+ dat = PROTROM[src+x];
+
+ if (RAMDUMP[dst+x] != dat)
+ mame_printf_debug("Mismatch! %04x %04x\n", RAMDUMP[dst+x], dat);
+
+ killbld_sharedprotram[dst+x] = dat;
+ }
+ }
+ else if (mode == 6)
+ {
+ /* mode 6 seems to swap bytes and nibbles */
+ int x;
+ for (x=0;x<size;x++)
+ {
+ UINT16 *RAMDUMP = (UINT16*)memory_region(REGION_USER2);
+ UINT16 *PROTROM = (UINT16*)memory_region(REGION_USER1);
+ UINT16 dat;
+ dat = PROTROM[src+x];
+
+ dat = ((dat & 0xf000) >> 12)|
+ ((dat & 0x0f00) >> 4)|
+ ((dat & 0x00f0) << 4)|
+ ((dat & 0x000f) << 12);
+
+
+ if (RAMDUMP[dst+x] != dat)
+ mame_printf_debug("Mismatch! Mode 6 %04x %04x\n", RAMDUMP[dst+x], dat);
+
+ killbld_sharedprotram[dst+x] = dat;
+ }
+ }
+ else
+ {
+ mame_printf_debug("unknown copy mode!\n");
+ }
+ /* hack.. it jumps here but there isn't valid code even when we do
+ use what was in ram.. probably some more protection as the game
+ still doesn't behave 100% correctly :-/
+
+ the code is copied in 'mode 3' but even the code put here on
+ the real ram dump is corrupt??? something _very_ strange is
+ going on.. maybe more rom overlays, or ram overlays too??
+
+ */
+ killbld_sharedprotram[0x2600/2]=0x4e75;
+
+
+ }
+ reg++;
+ }
+ }
+ else if(kb_cmd==4)
+ ptr=data;
+ else if(kb_cmd==0x20)
+ ptr++;
+ }
+}
+
+static READ16_HANDLER( killbld_prot_r )
+{
+// mame_printf_debug("killbld prot w\n");
+ UINT16 res ;
+
+ offset&=0xf;
+ res=0;
+
+ if(offset==1)
+ {
+ if(kb_cmd==1)
+ {
+ res=reg&0x7f;
+ }
+ else if(kb_cmd==5)
+ {
+ UINT32 protvalue;
+ protvalue = 0x89911400|readinputport(4); // region
+ res=(protvalue>>(8*(ptr-1)))&0xff;
+
+ }
+ }
+ logerror("%06X: ASIC25 R CMD %X VAL %X",activecpu_get_pc(),kb_cmd,res);
+ return res;
+}
+
+static MACHINE_RESET( killbld )
+{
+ int i;
+
+ machine_reset_pgm(machine);
+
+ /* fill the protection ram with a5 */
+ for (i = 0;i < 0x4000/2;i++)
+ killbld_sharedprotram[i] = 0xa5a5;
+
+}
+
+
+static DRIVER_INIT( killbld )
+{
+ UINT16 *mem16 = (UINT16 *)memory_region(REGION_CPU1);
+
+ pgm_basic_init();
+ pgm_killbld_decrypt();
+
+
+
+ /* this isn't a hack.. doing a rom dump while the game is running shows the
+ rom space to look like this.. there may be more overlays / enables tho */
+
+ /* the game actually performs a CRC check of the rom during the 'Please Wait'
+ screen, the checksum expected is that of the patched rom. if the checksum
+ fails the please wait screen doesn't last as long and the region supplied
+ by the protection device is ignored and the attract sequence appears out
+ of order */
+ mem16[0x108a2c/2]=0xB6AA;
+ mem16[0x108a30/2]=0x6610;
+ mem16[0x108a32/2]=0x13c2;
+ mem16[0x108a34/2]=0x0080;
+ mem16[0x108a36/2]=0x9c76;
+ mem16[0x108a38/2]=0x23c3;
+ mem16[0x108a3a/2]=0x0080;
+ mem16[0x108a3c/2]=0x9c78;
+ mem16[0x108a3e/2]=0x1002;
+ mem16[0x108a40/2]=0x6054;
+ mem16[0x108a42/2]=0x5202;
+ mem16[0x108a44/2]=0x0c02;
+
+ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0xd40000, 0xd40003, 0, 0, killbld_prot_r);
+ memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0xd40000, 0xd40003, 0, 0, killbld_prot_w);
+}
+
+/* ddp2 rubbish */
+
+static UINT16 *ddp2_protram;
+static int ddp2_asic27_0xd10000 = 0;
+
+static WRITE16_HANDLER ( ddp2_asic27_0xd10000_w )
+{
+ ddp2_asic27_0xd10000=data;
+}
+
+static READ16_HANDLER ( ddp2_asic27_0xd10000_r )
+{
+ if (PGMLOGERROR) logerror("d100000_prot_r %04x, %04x\n", offset,ddp2_asic27_0xd10000);
+ ddp2_asic27_0xd10000++;
+ ddp2_asic27_0xd10000&=0x7f;
+ return ddp2_asic27_0xd10000;
+}
+
+
+static READ16_HANDLER(ddp2_protram_r)
+{
+ if (PGMLOGERROR) logerror("prot_r %04x, %04x\n", offset,ddp2_protram[offset]);
+
+ if (offset == 0x02/2) return readinputport(4);
+
+ if (offset == 0x1f00/2) return 0;
+
+ return ddp2_protram[offset];
+}
+
+static WRITE16_HANDLER(ddp2_protram_w)
+{
+ if (PGMLOGERROR) logerror("prot_w %04x, %02x\n", offset,data);
+ COMBINE_DATA(&ddp2_protram[offset]);
+
+ ddp2_protram[0x10/2] = 0;
+ ddp2_protram[0x20/2] = 1;
+}
+
+static DRIVER_INIT( ddp2 )
+{
+ pgm_basic_init();
+
+ /* some kind of busy / counter */
+ /* the actual protection is an arm cpu with internal rom */
+
+ ddp2_protram = auto_malloc(0x2000);
+
+ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0xd10000, 0xd10001, 0, 0, ddp2_asic27_0xd10000_r);
+ memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0xd10000, 0xd10001, 0, 0, ddp2_asic27_0xd10000_w);
+
+ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0xd00000, 0xd01fff, 0, 0, ddp2_protram_r);
+ memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0xd00000, 0xd01fff, 0, 0, ddp2_protram_w);
+}
+
+static DRIVER_INIT( puzzli2 )
+{
+ /* this protection emulation is wrong
+ it uses an arm with no external rom
+ an acts in a similar way to kov etc. */
+
+ UINT16 *mem16 = (UINT16 *)memory_region(REGION_CPU1);
+
+ pgm_basic_init();
+
+ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x500000, 0x500003, 0, 0, ASIC28_r16);
+ memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x500000, 0x500003, 0, 0, ASIC28_w16);
+
+ /* 0x4f0000 - ? is actually ram shared with the protection device,
+ the protection device provides the region code */
+ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x4f0000, 0x4fffff, 0, 0, sango_protram_r);
+
+ pgm_puzzli2_decrypt();
+
+ /* protection related? */
+ mem16[0x1548ec/2]=0x4e71;
+ mem16[0x1548fc/2]=0x4e71;
+ mem16[0x1549FA/2]=0x4e71;
+ mem16[0x154A0A/2]=0x4e71;
+ mem16[0x15496A/2]=0x4e71;
+ mem16[0x14cee0/2]=0x4e71;
+ mem16[0x1268c0/2]=0x4e71;
+ mem16[0x1268c2/2]=0x4e71;
+ mem16[0x1268c4/2]=0x4e71;
+ mem16[0x154948/2]=0x4e71;
+ mem16[0x13877a/2]=0x662c;
+
+ /* patch irq4 vector (irq4 should be disabled on this game? how?) */
+// mem16[0x100070/2]=0x0012;
+// mem16[0x100072/2]=0x5D78;
+}
+
+static MACHINE_RESET( olds )
+{
+ UINT16 *mem16 = (UINT16 *)memory_region(REGION_USER2);
+// UINT16 *mem16_a = (UINT16 *)memory_region(REGION_CPU1);
+ int i;
+
+ machine_reset_pgm(machine);
+
+ /* populate shared protection ram with data read from pcb .. */
+
+// for(i=0;i<0x100000/2;i++)
+// {
+// mem16_a[i+(0x300000/2)] = mem16[i];
+// }
+
+ for(i=0;i<0x100000/2;i++)
+ {
+ olds_sharedprotram[i] = mem16[(0x100000/2)+i];
+
+ }
+}
+
+
+static UINT16 olds_bs,olds_cmd3;
+
+
+//UINT16 olds_r16(UINT32 addr)
+static READ16_HANDLER( olds_r16 )
+{
+// int offset=addr&0xf;
+ UINT16 res ;
+ res=0;
+
+ if(offset==1)
+ {
+ if(kb_cmd==1)
+ res=reg&0x7f;
+ if(kb_cmd==2)
+ res=olds_bs|0x80;
+ if(kb_cmd==3)
+ res=olds_cmd3;
+ else if(kb_cmd==5)
+ {
+ UINT32 protvalue = 0x900000|readinputport(4); // region from protection device.
+ res=(protvalue>>(8*(ptr-1)))&0xff; // includes region 1 = taiwan , 2 = china, 3 = japan (title = orlegend special), 4 = korea, 5 = hongkong, 6 = world
+
+ }
+ }
+ logerror("%06X: ASIC25 R CMD %X VAL %X\n",activecpu_get_pc(),kb_cmd,res);
+ return res;
+}
+
+//void olds_w16(UINT32 addr,UINT16 data)
+static WRITE16_HANDLER( olds_w16 )
+{
+// int offset=addr&0xf;
+
+ if(offset==0)
+ kb_cmd=data;
+ else //offset==2
+ {
+ logerror("%06X: ASIC25 W CMD %X VAL %X\n",activecpu_get_pc(),kb_cmd,data);
+ if(kb_cmd==0)
+ reg=data;
+ else if(kb_cmd==2) //a bitswap=
+ {
+ int reg=0;
+ if(data&0x01)
+ reg|=0x40;
+ if(data&0x02)
+ reg|=0x80;
+ if(data&0x04)
+ reg|=0x20;
+ if(data&0x08)
+ reg|=0x10;
+ olds_bs=reg;
+ }
+ else if(kb_cmd==3)
+ {
+ //UINT16 cmd=fast_r16(0x403026);
+ UINT16 cmd = 0;
+ if(cmd==0x12) //memcpy
+ {
+ // UINT16 src=fast_r16(0x40306A);
+ // UINT32 dst=0x400000+(fast_r16(0x403084)<<1);
+ // UINT16 size=fast_r16(0x4030A2);
+ // UINT16 mode=fast_r16(0x40303E)&0xf;
+ //int a=1;
+ }
+ //else
+ // int a=1;
+ olds_cmd3=((data>>4)+1)&0x3;
+ }
+ else if(kb_cmd==4)
+ ptr=data;
+ else if(kb_cmd==0x20)
+ ptr++;
+ }
+}
+
+
+
+
+static DRIVER_INIT( olds )
+{
+// UINT16 *mem16 = (UINT16 *)memory_region(REGION_CPU1);
+
+ pgm_basic_init();
+
+ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0xDCB400, 0xDCB403, 0, 0, olds_r16);
+ memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0xdcb400, 0xdcb403, 0, 0, olds_w16);
+
+}
+
+/*** Rom Loading *************************************************************/
+
+/* take note of REGION_GFX2 needed for expanding the 32x32x5bpp data and
+ REGION_GFX4 needed for expanding the Sprite Colour Data */
+
+/* The Bios - NOT A GAME */
+ROM_START( pgm )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x00000, 0x20000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x200000, REGION_GFX1, 0 ) /* 8x8 Text Layer Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) )
+
+ ROM_REGION( 0x200000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) )
+
+ ROM_REGION( 0x800000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+
+ ROM_REGION( 0x1000000, REGION_GFX4, ROMREGION_ERASEFF ) /* Sprite Masks + Colour Indexes */
+ROM_END
+
+ROM_START( orlegend )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) )// (BIOS)
+ ROM_LOAD16_WORD_SWAP( "p0103.rom", 0x100000, 0x200000, CRC(d5e93543) SHA1(f081edc26514ca8354c13c7f6f89aba8e4d3e7d2) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x800000, REGION_GFX1, ROMREGION_DISPOSE ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t0100.rom", 0x400000, 0x400000, CRC(61425e1e) SHA1(20753b86fc12003cfd763d903f034dbba8010b32) )
+
+ ROM_REGION( 0x800000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x1800000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprite Colour Data */
+ ROM_LOAD( "a0100.rom", 0x0000000, 0x400000, CRC(8b3bd88a) SHA1(42db3a60c6ba9d83ebe2008c8047d094027f65a7) )
+ ROM_LOAD( "a0101.rom", 0x0400000, 0x400000, CRC(3b9e9644) SHA1(5b95ec1d25c3bc3504c93547f5adb5ce24376405) )
+ ROM_LOAD( "a0102.rom", 0x0800000, 0x400000, CRC(069e2c38) SHA1(9bddca8c2f5bd80f4abe4e1f062751736dc151dd) )
+ ROM_LOAD( "a0103.rom", 0x0c00000, 0x400000, CRC(4460a3fd) SHA1(cbebdb65c17605853f7d0b298018dd8801a25a58) )
+ ROM_LOAD( "a0104.rom", 0x1000000, 0x400000, CRC(5f8abb56) SHA1(6c1ddc0309862a141aa0c0f63b641aec9257aaee) )
+ ROM_LOAD( "a0105.rom", 0x1400000, 0x400000, CRC(a17a7147) SHA1(44eeb43c6b0ebb829559a20ae357383fbdeecd82) )
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b0100.rom", 0x0000000, 0x400000, CRC(69d2e48c) SHA1(5b5f759007264c07b3b39be8e03a713698e1fc2a) )
+ ROM_LOAD( "b0101.rom", 0x0400000, 0x400000, CRC(0d587bf3) SHA1(5347828b0a6e4ddd7a263663d2c2604407e4d49c) )
+ ROM_LOAD( "b0102.rom", 0x0800000, 0x400000, CRC(43823c1e) SHA1(e10a1a9a81b51b11044934ff702e35d8d7ab1b08) )
+
+ ROM_REGION( 0x600000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m0100.rom", 0x400000, 0x200000, CRC(e5c36c83) SHA1(50c6f66770e8faa3df349f7d68c407a7ad021716) )
+ROM_END
+
+ROM_START( orlegnde )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) )// (BIOS)
+ ROM_LOAD16_WORD_SWAP( "p0102.rom", 0x100000, 0x200000, CRC(4d0f6cc5) SHA1(8d41f0a712fb11a1da865f5159e5e27447b4388a) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x800000, REGION_GFX1, ROMREGION_DISPOSE ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t0100.rom", 0x400000, 0x400000, CRC(61425e1e) SHA1(20753b86fc12003cfd763d903f034dbba8010b32) )
+
+ ROM_REGION( 0x800000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x1800000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprite Colour Data */
+ ROM_LOAD( "a0100.rom", 0x0000000, 0x400000, CRC(8b3bd88a) SHA1(42db3a60c6ba9d83ebe2008c8047d094027f65a7) )
+ ROM_LOAD( "a0101.rom", 0x0400000, 0x400000, CRC(3b9e9644) SHA1(5b95ec1d25c3bc3504c93547f5adb5ce24376405) )
+ ROM_LOAD( "a0102.rom", 0x0800000, 0x400000, CRC(069e2c38) SHA1(9bddca8c2f5bd80f4abe4e1f062751736dc151dd) )
+ ROM_LOAD( "a0103.rom", 0x0c00000, 0x400000, CRC(4460a3fd) SHA1(cbebdb65c17605853f7d0b298018dd8801a25a58) )
+ ROM_LOAD( "a0104.rom", 0x1000000, 0x400000, CRC(5f8abb56) SHA1(6c1ddc0309862a141aa0c0f63b641aec9257aaee) )
+ ROM_LOAD( "a0105.rom", 0x1400000, 0x400000, CRC(a17a7147) SHA1(44eeb43c6b0ebb829559a20ae357383fbdeecd82) )
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b0100.rom", 0x0000000, 0x400000, CRC(69d2e48c) SHA1(5b5f759007264c07b3b39be8e03a713698e1fc2a) )
+ ROM_LOAD( "b0101.rom", 0x0400000, 0x400000, CRC(0d587bf3) SHA1(5347828b0a6e4ddd7a263663d2c2604407e4d49c) )
+ ROM_LOAD( "b0102.rom", 0x0800000, 0x400000, CRC(43823c1e) SHA1(e10a1a9a81b51b11044934ff702e35d8d7ab1b08) )
+
+ ROM_REGION( 0x600000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m0100.rom", 0x400000, 0x200000, CRC(e5c36c83) SHA1(50c6f66770e8faa3df349f7d68c407a7ad021716) )
+ROM_END
+
+ROM_START( orlegndc )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) )// (BIOS)
+ ROM_LOAD16_WORD_SWAP( "p0101.160", 0x100000, 0x200000, CRC(b24f0c1e) SHA1(a2cf75d739681f091c24ef78ed6fc13aa8cfe0c6) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x800000, REGION_GFX1, ROMREGION_DISPOSE ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t0100.rom", 0x400000, 0x400000, CRC(61425e1e) SHA1(20753b86fc12003cfd763d903f034dbba8010b32) )
+
+ ROM_REGION( 0x800000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x1800000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprite Colour Data */
+ ROM_LOAD( "a0100.rom", 0x0000000, 0x400000, CRC(8b3bd88a) SHA1(42db3a60c6ba9d83ebe2008c8047d094027f65a7) )
+ ROM_LOAD( "a0101.rom", 0x0400000, 0x400000, CRC(3b9e9644) SHA1(5b95ec1d25c3bc3504c93547f5adb5ce24376405) )
+ ROM_LOAD( "a0102.rom", 0x0800000, 0x400000, CRC(069e2c38) SHA1(9bddca8c2f5bd80f4abe4e1f062751736dc151dd) )
+ ROM_LOAD( "a0103.rom", 0x0c00000, 0x400000, CRC(4460a3fd) SHA1(cbebdb65c17605853f7d0b298018dd8801a25a58) )
+ ROM_LOAD( "a0104.rom", 0x1000000, 0x400000, CRC(5f8abb56) SHA1(6c1ddc0309862a141aa0c0f63b641aec9257aaee) )
+ ROM_LOAD( "a0105.rom", 0x1400000, 0x400000, CRC(a17a7147) SHA1(44eeb43c6b0ebb829559a20ae357383fbdeecd82) )
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b0100.rom", 0x0000000, 0x400000, CRC(69d2e48c) SHA1(5b5f759007264c07b3b39be8e03a713698e1fc2a) )
+ ROM_LOAD( "b0101.rom", 0x0400000, 0x400000, CRC(0d587bf3) SHA1(5347828b0a6e4ddd7a263663d2c2604407e4d49c) )
+ ROM_LOAD( "b0102.rom", 0x0800000, 0x400000, CRC(43823c1e) SHA1(e10a1a9a81b51b11044934ff702e35d8d7ab1b08) )
+
+ ROM_REGION( 0x600000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m0100.rom", 0x400000, 0x200000, CRC(e5c36c83) SHA1(50c6f66770e8faa3df349f7d68c407a7ad021716) )
+ROM_END
+
+/*
+
+Oriental Legend / Xi Yo Gi Shi Re Zuang (CHINA 111 Ver.)
+(c)1997 IGS
+
+PGM system
+IGS PCB NO-0134-1
+IGS PCB NO-0135
+
+
+OLV111CH.U11 [b80ddd3c]
+OLV111CH.U6 [5fb86373]
+OLV111CH.U7 [6ee79faf]
+OLV111CH.U9 [83cf09c8]
+
+T0100.U8
+
+
+A0100.U5
+A0101.U6
+A0102.U7
+A0103.U8
+A0104.U11
+A0105.U12
+
+B0100.U9
+B0101.U10
+B0102.U15
+
+M0100.U1
+
+*/
+
+ROM_START( orld111c )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) )// (BIOS)
+ ROM_LOAD16_BYTE( "olv111ch.u6", 0x100001, 0x080000, CRC(5fb86373) SHA1(2fc58eff1f38754c75819fde666244b867ca4f05) )
+ ROM_LOAD16_BYTE( "olv111ch.u9", 0x100000, 0x080000, CRC(83cf09c8) SHA1(959780b45326059517f3008a356657f4f3d2908f) )
+ ROM_LOAD16_BYTE( "olv111ch.u7", 0x200001, 0x080000, CRC(6ee79faf) SHA1(039b4b07b8577f0d3022ae01210c00375624cb3c) )
+ ROM_LOAD16_BYTE( "olv111ch.u11", 0x200000, 0x080000, CRC(b80ddd3c) SHA1(55c700ce71ffdee392e03fd9d4719542c3527132) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x800000, REGION_GFX1, ROMREGION_DISPOSE ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t0100.rom", 0x400000, 0x400000, CRC(61425e1e) SHA1(20753b86fc12003cfd763d903f034dbba8010b32) )
+
+ ROM_REGION( 0x800000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x1800000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprite Colour Data */
+ ROM_LOAD( "a0100.rom", 0x0000000, 0x400000, CRC(8b3bd88a) SHA1(42db3a60c6ba9d83ebe2008c8047d094027f65a7) )
+ ROM_LOAD( "a0101.rom", 0x0400000, 0x400000, CRC(3b9e9644) SHA1(5b95ec1d25c3bc3504c93547f5adb5ce24376405) )
+ ROM_LOAD( "a0102.rom", 0x0800000, 0x400000, CRC(069e2c38) SHA1(9bddca8c2f5bd80f4abe4e1f062751736dc151dd) )
+ ROM_LOAD( "a0103.rom", 0x0c00000, 0x400000, CRC(4460a3fd) SHA1(cbebdb65c17605853f7d0b298018dd8801a25a58) )
+ ROM_LOAD( "a0104.rom", 0x1000000, 0x400000, CRC(5f8abb56) SHA1(6c1ddc0309862a141aa0c0f63b641aec9257aaee) )
+ ROM_LOAD( "a0105.rom", 0x1400000, 0x400000, CRC(a17a7147) SHA1(44eeb43c6b0ebb829559a20ae357383fbdeecd82) )
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b0100.rom", 0x0000000, 0x400000, CRC(69d2e48c) SHA1(5b5f759007264c07b3b39be8e03a713698e1fc2a) )
+ ROM_LOAD( "b0101.rom", 0x0400000, 0x400000, CRC(0d587bf3) SHA1(5347828b0a6e4ddd7a263663d2c2604407e4d49c) )
+ ROM_LOAD( "b0102.rom", 0x0800000, 0x400000, CRC(43823c1e) SHA1(e10a1a9a81b51b11044934ff702e35d8d7ab1b08) )
+
+ ROM_REGION( 0x600000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m0100.rom", 0x400000, 0x200000, CRC(e5c36c83) SHA1(50c6f66770e8faa3df349f7d68c407a7ad021716) )
+ROM_END
+
+/*
+
+Oriental Legend / Xi Yo Gi Shi Re Zuang (KOREA 105 Ver.)
+(c)1997 IGS
+
+PGM system
+IGS PCB NO-0134-2
+IGS PCB NO-0135
+
+
+OLV105KO.U11 [40ae4d9e]
+OLV105KO.U6 [b86703fe]
+OLV105KO.U7 [5712facc]
+OLV105KO.U9 [5a108e39]
+
+T0100.U8
+
+
+A0100.U5
+A0101.U6
+A0102.U7
+A0103.U8
+A0104.U11
+A0105.U12
+
+B0100.U9
+B0101.U10
+B0102.U15
+
+M0100.U1
+
+*/
+
+ROM_START( orld105k )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) )// (BIOS)
+ ROM_LOAD16_BYTE( "olv105ko.u6", 0x100001, 0x080000, CRC(b86703fe) SHA1(a3529b45efd400ecd5e76f764b528ebce46e24ab) )
+ ROM_LOAD16_BYTE( "olv105ko.u9", 0x100000, 0x080000, CRC(5a108e39) SHA1(2033f4fe3f2dfd725dac535324f58348b9ac3914) )
+ ROM_LOAD16_BYTE( "olv105ko.u7", 0x200001, 0x080000, CRC(5712facc) SHA1(2d95ebd1703874e89ac3a206f8c1f0ece6e833e0) )
+ ROM_LOAD16_BYTE( "olv105ko.u11", 0x200000, 0x080000, CRC(40ae4d9e) SHA1(62d7a96438b7fe93f74753333f50e077d417971e) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x800000, REGION_GFX1, ROMREGION_DISPOSE ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t0100.rom", 0x400000, 0x400000, CRC(61425e1e) SHA1(20753b86fc12003cfd763d903f034dbba8010b32) )
+
+ ROM_REGION( 0x800000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x1800000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprite Colour Data */
+ ROM_LOAD( "a0100.rom", 0x0000000, 0x400000, CRC(8b3bd88a) SHA1(42db3a60c6ba9d83ebe2008c8047d094027f65a7) )
+ ROM_LOAD( "a0101.rom", 0x0400000, 0x400000, CRC(3b9e9644) SHA1(5b95ec1d25c3bc3504c93547f5adb5ce24376405) )
+ ROM_LOAD( "a0102.rom", 0x0800000, 0x400000, CRC(069e2c38) SHA1(9bddca8c2f5bd80f4abe4e1f062751736dc151dd) )
+ ROM_LOAD( "a0103.rom", 0x0c00000, 0x400000, CRC(4460a3fd) SHA1(cbebdb65c17605853f7d0b298018dd8801a25a58) )
+ ROM_LOAD( "a0104.rom", 0x1000000, 0x400000, CRC(5f8abb56) SHA1(6c1ddc0309862a141aa0c0f63b641aec9257aaee) )
+ ROM_LOAD( "a0105.rom", 0x1400000, 0x400000, CRC(a17a7147) SHA1(44eeb43c6b0ebb829559a20ae357383fbdeecd82) )
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b0100.rom", 0x0000000, 0x400000, CRC(69d2e48c) SHA1(5b5f759007264c07b3b39be8e03a713698e1fc2a) )
+ ROM_LOAD( "b0101.rom", 0x0400000, 0x400000, CRC(0d587bf3) SHA1(5347828b0a6e4ddd7a263663d2c2604407e4d49c) )
+ ROM_LOAD( "b0102.rom", 0x0800000, 0x400000, CRC(43823c1e) SHA1(e10a1a9a81b51b11044934ff702e35d8d7ab1b08) )
+
+ ROM_REGION( 0x600000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m0100.rom", 0x400000, 0x200000, CRC(e5c36c83) SHA1(50c6f66770e8faa3df349f7d68c407a7ad021716) )
+ROM_END
+
+/*
+
+Dragon World 2 (English / World Version)
+IGS, 1997
+
+This is a cart for the IGS PGM system.
+
+
+PCB Layout
+----------
+
+IGS PCB NO-0162
+|-----------------------------------------------|
+| |------| |
+| |IGS012| *1 T0200.U7 |
+| | | |
+| |------| |
+| |--------| |
+| | | |
+| | IGS025 | *2 V-110X.U2 |
+| PAL PAL | | PAL |
+| |--------| |
+|-| |-|
+ |--------------------||---------------------|
+Notes:
+ IGS012 - Custom IGS IC (QFP80)
+
+ -- on english version
+ IGS025 - Custom IGS IC (PLCC68, labelled "DRAGON II 0006")
+ -- on china version
+ IGS025 - Custom IGS IC (PLCC68, labelled "DRAGON II 0005")
+
+
+ T0200.U7 - 32MBit MaskROM (SOP44)
+
+ -- on english version
+ V-110X.U2 - AM27C4096 4MBit EPROM (DIP42, labelled "DRAGON II V-110X")
+ -- on china version
+ V-110X.U2 - AM27C4096 4MBit EPROM (DIP42, labelled "DRAGON II V-100C")
+
+ PALs - x3, labelled "CZ U3", "CZ U4", "CZ U6"
+ *1 - Unpopulated position for MX23C4100 SOP40 MASKROM
+ *2 - Unpopulated position for MX23C4100 DIP40 EPROM/MASKROM
+
+
+IGS PCB NO-0135
+|-----------------------------------------------|
+| U11 U12 U13 U14 U15 U16|
+| |
+| |
+|A0200.U5 B0200.U9 |
+| U6 U7 U8 U10|
+| |
+| |
+|74LS138 U1 U2 74LS139|
+| |
+|-| |-|
+ |--------------------||---------------------|
+
+Notes:
+ This PCB contains only SOP44 MASKROMS and 2 logic IC's
+ Only U5 and U9 are populated
+
+ glitch on select screen exists on real board.
+
+*/
+
+ROM_START( drgw2 )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) )// (BIOS)
+ ROM_LOAD16_WORD_SWAP( "v-110x.u2", 0x100000, 0x080000, CRC(1978106b) SHA1(af8a13d7783b755a58762c98bdc32cab845b2251) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x800000, REGION_GFX1, ROMREGION_DISPOSE ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "pgmt0200.u7", 0x400000, 0x400000, CRC(b0f6534d) SHA1(174cacd81169a0e0d14790ac06d03caed737e05d) )
+
+ ROM_REGION( 0x800000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x400000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprite Colour Data */
+ ROM_LOAD( "pgma0200.u5", 0x0000000, 0x400000, CRC(13b95069) SHA1(4888b06002afb18eab81c010e9362629045767af) )
+
+ ROM_REGION( 0x400000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "pgmb0200.u9", 0x0000000, 0x400000, CRC(932d0f13) SHA1(4b8e008f9c617cb2b95effeb81abc065b30e5c86) )
+
+ ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ROM_END
+
+
+ROM_START( drgw2c )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) )// (BIOS)
+ ROM_LOAD16_WORD_SWAP( "v-100c.u2", 0x100000, 0x080000, CRC(67467981) SHA1(58af01a3871b6179fe42ff471cc39a2161940043) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x800000, REGION_GFX1, ROMREGION_DISPOSE ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "pgmt0200.u7", 0x400000, 0x400000, CRC(b0f6534d) SHA1(174cacd81169a0e0d14790ac06d03caed737e05d) )
+
+ ROM_REGION( 0x800000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x400000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprite Colour Data */
+ ROM_LOAD( "pgma0200.u5", 0x0000000, 0x400000, CRC(13b95069) SHA1(4888b06002afb18eab81c010e9362629045767af) )
+
+ ROM_REGION( 0x400000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "pgmb0200.u9", 0x0000000, 0x400000, CRC(932d0f13) SHA1(4b8e008f9c617cb2b95effeb81abc065b30e5c86) )
+
+ ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ROM_END
+
+ROM_START( drgw2j )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) )// (BIOS)
+ ROM_LOAD16_WORD_SWAP( "v-100j.u2", 0x100000, 0x080000, CRC(f8f8393e) SHA1(ef0db668b4e4f661d4c1e95d57afe881bcdf13cc) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x800000, REGION_GFX1, ROMREGION_DISPOSE ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "pgmt0200.u7", 0x400000, 0x400000, CRC(b0f6534d) SHA1(174cacd81169a0e0d14790ac06d03caed737e05d) )
+
+ ROM_REGION( 0x800000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x400000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprite Colour Data */
+ ROM_LOAD( "pgma0200.u5", 0x0000000, 0x400000, CRC(13b95069) SHA1(4888b06002afb18eab81c010e9362629045767af) )
+
+ ROM_REGION( 0x400000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "pgmb0200.u9", 0x0000000, 0x400000, CRC(932d0f13) SHA1(4b8e008f9c617cb2b95effeb81abc065b30e5c86) )
+
+ ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ROM_END
+
+/*
+
+Dragon World 3
+Alta Co./IGS, 1998
+
+Cart for IGS PGM system
+
+Top board of cart contains.....
+8MHz Xtal
+32.768kHz Xtal
+UM6164 (RAM x 2)
+MACH211 CPLD
+IGS022 ASIC
+IGS025 ASIC
+1x PAL
+2x 27C040 EPROMs (main 68k program)
+1x 27C512 EPROM (protection code?)
+1x 32MBit smt MASKROM (T0400)
+
+Bottom board contains.....
+4x 32MBit smt MASKROMs (A0400, A0401, B0400, M0400)
+
+*/
+
+ROM_START( drgw3 )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) ) // (BIOS)
+ ROM_LOAD16_BYTE( "dw3_v100.u12", 0x100001, 0x080000, CRC(47243906) SHA1(9cd46e3cba97f049bcb238ceb6edf27a760ef831) )
+ ROM_LOAD16_BYTE( "dw3_v100.u13", 0x100000, 0x080000, CRC(b7cded21) SHA1(c1ae2af2e42227503c81bbcd2bd6862aa416bd78) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x010000, REGION_USER1, 0 ) /* Protection Data */
+ ROM_LOAD( "dw3_v100.u15", 0x000000, 0x010000, CRC(03dc4fdf) SHA1(b329b04325d4f725231b1bb7862eedef2319b652) )
+
+ ROM_REGION( 0xc00000, REGION_GFX1, 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "dw3t0400.u18", 0x400000, 0x400000, CRC(b70f3357) SHA1(8733969d7d21f540f295a9f747a4bb8f0d325cf0) )
+
+ ROM_REGION( 0xc00000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x1800000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprite Colour Data */
+ ROM_LOAD( "dw3a0400.u9", 0x0000000, 0x400000, CRC(dd7bfd40) SHA1(fb7ec5bf89a413c5208716083762a725ff63f5db) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "dw3a0401.u10", 0x0400000, 0x400000, CRC(cab6557f) SHA1(1904dd86645eea27ac1ab8a2462b20f6531356f8) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "dw3b0400.u13", 0x0000000, 0x400000, CRC(4bb87cc0) SHA1(71b2dc43fd11f7a6dffaba501e4e344b843583d8) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+
+ ROM_REGION( 0x800000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "dw3m0400.u1", 0x400000, 0x400000, CRC(031eb9ce) SHA1(0673ec194732becc6648c2ae1396e894aa269f9a) )
+ROM_END
+
+/*
+
+Dragon World 3 (KOREA 106 Ver.)
+(c)1998 IGS
+
+PGM system
+IGS PCB NO-0189
+IGS PCB NO-0178
+
+
+DW3_V106.U12 [c3f6838b]
+DW3_V106.U13 [28284e22]
+
+
+*/
+
+ROM_START( drgw3k )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) ) // (BIOS)
+ ROM_LOAD16_BYTE( "dw3_v106.u12", 0x100001, 0x080000, CRC(c3f6838b) SHA1(c135b1d4dd62af308139d40d03c29be7508fb1e7) )
+ ROM_LOAD16_BYTE( "dw3_v106.u13", 0x100000, 0x080000, CRC(28284e22) SHA1(4643a69881ddb7383ca10f3eb2aa2cf41be39e9f) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x010000, REGION_USER1, 0 ) /* Protection Data - is it correct for this set? */
+ ROM_LOAD( "dw3_v100.u15", 0x000000, 0x010000, CRC(03dc4fdf) SHA1(b329b04325d4f725231b1bb7862eedef2319b652) )
+
+ ROM_REGION( 0xc00000, REGION_GFX1, 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "dw3t0400.u18", 0x400000, 0x400000, CRC(b70f3357) SHA1(8733969d7d21f540f295a9f747a4bb8f0d325cf0) )
+
+ ROM_REGION( 0xc00000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x1800000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprite Colour Data */
+ ROM_LOAD( "dw3a0400.u9", 0x0000000, 0x400000, CRC(dd7bfd40) SHA1(fb7ec5bf89a413c5208716083762a725ff63f5db) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "dw3a0401.u10", 0x0400000, 0x400000, CRC(cab6557f) SHA1(1904dd86645eea27ac1ab8a2462b20f6531356f8) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "dw3b0400.u13", 0x0000000, 0x400000, CRC(4bb87cc0) SHA1(71b2dc43fd11f7a6dffaba501e4e344b843583d8) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+
+ ROM_REGION( 0x800000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "dw3m0400.u1", 0x400000, 0x400000, CRC(031eb9ce) SHA1(0673ec194732becc6648c2ae1396e894aa269f9a) )
+ROM_END
+
+ROM_START( kov )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) ) // (BIOS)
+ ROM_LOAD16_WORD_SWAP( "p0600.117", 0x100000, 0x400000, CRC(c4d19fe6) SHA1(14ef31539bfbc665e76c9703ee01b12228344052) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0xc00000, REGION_GFX1, 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t0600.rom", 0x400000, 0x800000, CRC(4acc1ad6) SHA1(0668dbd5e856c2406910c6b7382548b37c631780) )
+
+ ROM_REGION( 0xc00000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x1c00000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprite Colour Data */
+ ROM_LOAD( "a0600.rom", 0x0000000, 0x0800000, CRC(d8167834) SHA1(fa55a99629d03b2ea253392352f70d2c8639a991) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0601.rom", 0x0800000, 0x0800000, CRC(ff7a4373) SHA1(7def9fca7513ad5a117da230bebd2e3c78679041) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0602.rom", 0x1000000, 0x0800000, CRC(e7a32959) SHA1(3d0ed684dc5b269238890836b2ce7ef46aa5265b) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0603.rom", 0x1800000, 0x0400000, CRC(ec31abda) SHA1(ee526655369bae63b0ef0730e9768b765c9950fc) )
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b0600.rom", 0x0000000, 0x0800000, CRC(7d3cd059) SHA1(00cf994b63337e0e4ebe96453daf45f24192af1c) )
+ ROM_LOAD( "b0601.rom", 0x0800000, 0x0400000, CRC(a0bb1c2f) SHA1(0542348c6e27779e0a98de16f04f9c18158f2b28) )
+
+ ROM_REGION( 0x800000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m0600.rom", 0x400000, 0x400000, CRC(3ada4fd6) SHA1(4c87adb25d31cbd41f04fbffe31f7bc37173da76) )
+ROM_END
+
+ROM_START( kov115 )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) )// (BIOS)
+ ROM_LOAD16_WORD_SWAP( "p0600.115", 0x100000, 0x400000, CRC(527a2924) SHA1(7e3b166dddc5245d7b408e78437c16fd2986d1d9) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0xc00000, REGION_GFX1, 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t0600.rom", 0x400000, 0x800000, CRC(4acc1ad6) SHA1(0668dbd5e856c2406910c6b7382548b37c631780) )
+
+ ROM_REGION( 0xc00000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x1c00000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprite Colour Data */
+ ROM_LOAD( "a0600.rom", 0x0000000, 0x0800000, CRC(d8167834) SHA1(fa55a99629d03b2ea253392352f70d2c8639a991) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0601.rom", 0x0800000, 0x0800000, CRC(ff7a4373) SHA1(7def9fca7513ad5a117da230bebd2e3c78679041) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0602.rom", 0x1000000, 0x0800000, CRC(e7a32959) SHA1(3d0ed684dc5b269238890836b2ce7ef46aa5265b) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0603.rom", 0x1800000, 0x0400000, CRC(ec31abda) SHA1(ee526655369bae63b0ef0730e9768b765c9950fc) )
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b0600.rom", 0x0000000, 0x0800000, CRC(7d3cd059) SHA1(00cf994b63337e0e4ebe96453daf45f24192af1c) )
+ ROM_LOAD( "b0601.rom", 0x0800000, 0x0400000, CRC(a0bb1c2f) SHA1(0542348c6e27779e0a98de16f04f9c18158f2b28) )
+
+ ROM_REGION( 0x800000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m0600.rom", 0x400000, 0x400000, CRC(3ada4fd6) SHA1(4c87adb25d31cbd41f04fbffe31f7bc37173da76) )
+ROM_END
+
+/*
+
+Sangoku Senki / Knights of Valour (JPN 100 Ver.)
+(c)1999 ALTA / IGS
+
+PGM system
+IGS PCB NO-0212-1
+IGS PCB NO-0213T
+
+
+SAV111.U10 [d5536107]
+SAV111.U4 [ae2f1b4e]
+SAV111.U5 [5fdd4aa8]
+SAV111.U7 [95eedf0e]
+SAV111.U8 [003cbf49]
+
+T0600.U11
+
+
+A0600.U2
+A0601.U4
+A0602.U6
+A0603.U9
+
+M0600.U3
+
+B0600.U5
+B0601.U7
+
+*/
+
+ROM_START( kovj )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) )// (BIOS)
+ ROM_LOAD16_BYTE( "sav111.u4", 0x100001, 0x080000, CRC(ae2f1b4e) SHA1(2ac9d84f5dee52f374941cfd68e2b98ecad436a8) )
+ ROM_LOAD16_BYTE( "sav111.u7", 0x100000, 0x080000, CRC(95eedf0e) SHA1(582a54e9a1eda7ff73e20f0e69d2d50141772378) )
+ ROM_LOAD16_BYTE( "sav111.u5", 0x200001, 0x080000, CRC(5fdd4aa8) SHA1(43c96e21ad4f11148e1e94a59c53780b2edd43ba) )
+ ROM_LOAD16_BYTE( "sav111.u8", 0x200000, 0x080000, CRC(003cbf49) SHA1(fb5bea47ecae025b1b425af52cd05e061f45e377) )
+ ROM_LOAD16_WORD_SWAP( "sav111.u10",0x300000, 0x080000, CRC(d5536107) SHA1(f963e015d99c1621323eecf63e773c0b9f4b6a43) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0xc00000, REGION_GFX1, 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t0600.rom", 0x400000, 0x800000, CRC(4acc1ad6) SHA1(0668dbd5e856c2406910c6b7382548b37c631780) )
+
+ ROM_REGION( 0xc00000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x1c00000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprite Colour Data */
+ ROM_LOAD( "a0600.rom", 0x0000000, 0x0800000, CRC(d8167834) SHA1(fa55a99629d03b2ea253392352f70d2c8639a991) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0601.rom", 0x0800000, 0x0800000, CRC(ff7a4373) SHA1(7def9fca7513ad5a117da230bebd2e3c78679041) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0602.rom", 0x1000000, 0x0800000, CRC(e7a32959) SHA1(3d0ed684dc5b269238890836b2ce7ef46aa5265b) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0603.rom", 0x1800000, 0x0400000, CRC(ec31abda) SHA1(ee526655369bae63b0ef0730e9768b765c9950fc) )
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b0600.rom", 0x0000000, 0x0800000, CRC(7d3cd059) SHA1(00cf994b63337e0e4ebe96453daf45f24192af1c) )
+ ROM_LOAD( "b0601.rom", 0x0800000, 0x0400000, CRC(a0bb1c2f) SHA1(0542348c6e27779e0a98de16f04f9c18158f2b28) )
+
+ ROM_REGION( 0x800000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m0600.rom", 0x400000, 0x400000, CRC(3ada4fd6) SHA1(4c87adb25d31cbd41f04fbffe31f7bc37173da76) )
+ROM_END
+
+ROM_START( kovplus )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) ) // (BIOS)
+ ROM_LOAD16_WORD_SWAP( "p0600.119", 0x100000, 0x400000, CRC(e4b0875d) SHA1(e8382e131b0e431406dc2a05cc1ef128302d987c) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0xc00000, REGION_GFX1, 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t0600.rom", 0x400000, 0x800000, CRC(4acc1ad6) SHA1(0668dbd5e856c2406910c6b7382548b37c631780) )
+
+ ROM_REGION( 0xc00000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x1c00000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprite Colour Data */
+ ROM_LOAD( "a0600.rom", 0x0000000, 0x0800000, CRC(d8167834) SHA1(fa55a99629d03b2ea253392352f70d2c8639a991) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0601.rom", 0x0800000, 0x0800000, CRC(ff7a4373) SHA1(7def9fca7513ad5a117da230bebd2e3c78679041) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0602.rom", 0x1000000, 0x0800000, CRC(e7a32959) SHA1(3d0ed684dc5b269238890836b2ce7ef46aa5265b) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0603.rom", 0x1800000, 0x0400000, CRC(ec31abda) SHA1(ee526655369bae63b0ef0730e9768b765c9950fc) )
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b0600.rom", 0x0000000, 0x0800000, CRC(7d3cd059) SHA1(00cf994b63337e0e4ebe96453daf45f24192af1c) )
+ ROM_LOAD( "b0601.rom", 0x0800000, 0x0400000, CRC(a0bb1c2f) SHA1(0542348c6e27779e0a98de16f04f9c18158f2b28) )
+
+ ROM_REGION( 0x800000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m0600.rom", 0x400000, 0x400000, CRC(3ada4fd6) SHA1(4c87adb25d31cbd41f04fbffe31f7bc37173da76) )
+ROM_END
+
+/*
+
+Sangoku Senki Plus / Knights of Valour Plus (Alt 119 Ver.)
+(c)1999 IGS
+
+PGM system
+IGS PCB NO-0222
+IGS PCB NO-0213
+
+
+V119.U2 [29588ef2]
+V119.U3 [6750388f]
+V119.U4 [8200ece6]
+V119.U5 [d4101ffd]
+V119.U6 [71e28f27]
+
+T0600.U11
+
+
+A0600.U2
+A0601.U4
+A0602.U6
+A0603.U9
+
+M0600.U3
+
+B0600.U5
+B0601.U7
+
+*/
+
+ROM_START( kovplusa )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) ) // (BIOS)
+ ROM_LOAD16_BYTE( "v119.u3", 0x100001, 0x080000, CRC(6750388f) SHA1(869f4ad27f2992cc62baa9a78bf7984a43ec4cc5) )
+ ROM_LOAD16_BYTE( "v119.u5", 0x100000, 0x080000, CRC(d4101ffd) SHA1(a327fd56eec65b07df9305cd93ef2c46bf8e40f3) )
+ ROM_LOAD16_BYTE( "v119.u4", 0x200001, 0x080000, CRC(8200ece6) SHA1(97081d2e8aed2ac6fbe5951890aecea18af5ce2e) )
+ ROM_LOAD16_BYTE( "v119.u6", 0x200000, 0x080000, CRC(71e28f27) SHA1(db382807e9185f0dc17124f210165fa1b36ca6ac) )
+ ROM_LOAD16_WORD_SWAP( "v119.u2",0x300000, 0x080000, CRC(29588ef2) SHA1(17d1a308d44434cf65224a24360cf4b6e32d28f3) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0xc00000, REGION_GFX1, 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t0600.rom", 0x400000, 0x800000, CRC(4acc1ad6) SHA1(0668dbd5e856c2406910c6b7382548b37c631780) )
+
+ ROM_REGION( 0xc00000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x1c00000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprite Colour Data */
+ ROM_LOAD( "a0600.rom", 0x0000000, 0x0800000, CRC(d8167834) SHA1(fa55a99629d03b2ea253392352f70d2c8639a991) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0601.rom", 0x0800000, 0x0800000, CRC(ff7a4373) SHA1(7def9fca7513ad5a117da230bebd2e3c78679041) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0602.rom", 0x1000000, 0x0800000, CRC(e7a32959) SHA1(3d0ed684dc5b269238890836b2ce7ef46aa5265b) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0603.rom", 0x1800000, 0x0400000, CRC(ec31abda) SHA1(ee526655369bae63b0ef0730e9768b765c9950fc) )
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b0600.rom", 0x0000000, 0x0800000, CRC(7d3cd059) SHA1(00cf994b63337e0e4ebe96453daf45f24192af1c) )
+ ROM_LOAD( "b0601.rom", 0x0800000, 0x0400000, CRC(a0bb1c2f) SHA1(0542348c6e27779e0a98de16f04f9c18158f2b28) )
+
+ ROM_REGION( 0x800000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m0600.rom", 0x400000, 0x400000, CRC(3ada4fd6) SHA1(4c87adb25d31cbd41f04fbffe31f7bc37173da76) )
+ROM_END
+
+/* is this loading the right roms? */
+ROM_START( kovsh )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) ) // (BIOS)
+ ROM_LOAD16_WORD_SWAP( "p0600.322", 0x100000, 0x400000, CRC(7c78e5f3) SHA1(9b1e4bd63fb1294ebeb539966842273c8dc7683b) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x4000, REGION_CPU3, 0 ) /* ARM protection ASIC - internal rom */
+ ROM_LOAD( "kovsh_v100_china.asic", 0x000000, 0x04000, CRC(0f09a5c1) SHA1(621b38c05f33277608d58b49822aebc930ae4870) )
+
+ ROM_REGION( 0x400000, REGION_USER1, ROMREGION_ERASE00 )
+ /* unpopulated (needs to return 0) */
+
+ ROM_REGION( 0xc00000, REGION_GFX1, 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t0600.320", 0x400000, 0x400000, CRC(164b3c94) SHA1(f00ea66886ca6bff74bbeaa49e7f5c75c275d5d7) ) // bad? its half the size of the kov one
+
+ ROM_REGION( 0xc00000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ /* all roms below need checking to see if they're the same on this board */
+ ROM_REGION( 0x1c00000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprite Colour Data */
+ ROM_LOAD( "a0600.rom", 0x0000000, 0x0800000, CRC(d8167834) SHA1(fa55a99629d03b2ea253392352f70d2c8639a991) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0601.rom", 0x0800000, 0x0800000, CRC(ff7a4373) SHA1(7def9fca7513ad5a117da230bebd2e3c78679041) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0602.rom", 0x1000000, 0x0800000, CRC(e7a32959) SHA1(3d0ed684dc5b269238890836b2ce7ef46aa5265b) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0603.rom", 0x1800000, 0x0400000, CRC(ec31abda) SHA1(ee526655369bae63b0ef0730e9768b765c9950fc) )
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b0600.rom", 0x0000000, 0x0800000, CRC(7d3cd059) SHA1(00cf994b63337e0e4ebe96453daf45f24192af1c) )
+ ROM_LOAD( "b0601.rom", 0x0800000, 0x0400000, CRC(a0bb1c2f) SHA1(0542348c6e27779e0a98de16f04f9c18158f2b28) )
+
+ ROM_REGION( 0x800000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m0600.rom", 0x400000, 0x400000, CRC(3ada4fd6) SHA1(4c87adb25d31cbd41f04fbffe31f7bc37173da76) )
+ROM_END
+
+ROM_START( photoy2k )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) ) // (BIOS)
+ ROM_LOAD16_WORD_SWAP( "v104.16m", 0x100000, 0x200000, CRC(e051070f) SHA1(a5a1a8dd7542a30632501af8d02fda07475fd9aa) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x4000, REGION_CPU3, 0 ) /* ARM protection ASIC - internal rom, supplies region code etc. */
+ /* not hooked up yet (simulation code used instead for now) */
+ ROM_LOAD( "photoy2k_v100_china.asic", 0x000000, 0x04000, CRC(6dd7f257) SHA1(1984f98a282d8b3264674f231c3b7def1757cf72) )
+
+ ROM_REGION( 0x480000, REGION_GFX1, 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t0700.rom", 0x400000, 0x080000, CRC(93943b4d) SHA1(3b439903853727d45d62c781af6073024eb3c5a3) )
+
+ ROM_REGION( 0x480000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ /* all roms below need checking to see if they're the same on this board */
+ ROM_REGION( 0x1080000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprite Colour Data */
+ ROM_LOAD( "a0700.l", 0x0000000, 0x0400000, CRC(26a9ae9c) SHA1(c977c89db6fdf47ee260ff687b80375caeab975c) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0700.h", 0x0400000, 0x0400000, CRC(79bc1fc1) SHA1(a09472a9b75704c1d31ab828f92c2a5007b2b4ed) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0701.l", 0x0800000, 0x0400000, CRC(23607f81) SHA1(8b6dbcdce9b131370693847ed9771aa04b62711c) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0701.h", 0x0c00000, 0x0400000, CRC(5f2efd37) SHA1(9a5bd9751691bc085b0751b9fa8ede9eb97b1248) )
+ ROM_LOAD( "a0702.rom", 0x1000000, 0x0080000, CRC(42239e1b) SHA1(2b6d20958abf8a67ce525d5c8964b6d225ccaeda) )
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b0700.l", 0x0000000, 0x0400000, CRC(af096904) SHA1(8e86b36cc44720ece68022e409279bf9144341ba) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "b0700.h", 0x0400000, 0x0400000, CRC(6d53de26) SHA1(f3f93fd2f87adb815834ba0242b94073fbb5e333) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "cgv101.rom", 0x0800000, 0x0020000, CRC(da02ec3e) SHA1(7ee21d748c9b932f53e790a9040167f904fecefc) )
+
+ ROM_REGION( 0x480000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m0700.rom", 0x400000, 0x080000, CRC(acc7afce) SHA1(ac2d344ebac336f0f363bb045dd8ea4e83d1fb50) )
+ROM_END
+
+/*
+
+Real and Fake / Photo Y2K (JPN 102 Ver.)
+(c)1999 ALTA / IGS
+
+PGM system
+IGS PCB NO-0220
+IGS PCB NO-0221
+
+
+V102.U4 [a65eda9f]
+V102.U5 [9201621b]
+V102.U6 [b9ca5504]
+V102.U8 [3be22b8f]
+
+T0700.U11
+
+
+A0700.U2
+A0701.U4
+
+SP_V102.U5
+
+B0700.U7
+
+CG_V101.U3
+CG_V101.U6
+
+*/
+
+ROM_START( raf102j )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) ) // (BIOS)
+ ROM_LOAD16_BYTE( "v102.u4", 0x100001, 0x080000, CRC(a65eda9f) SHA1(6307cacf4a262e781753eff14700a0455837780c) )
+ ROM_LOAD16_BYTE( "v102.u6", 0x100000, 0x080000, CRC(b9ca5504) SHA1(058cf01316f233236ca9861349f515935283b75e) )
+ ROM_LOAD16_BYTE( "v102.u5", 0x200001, 0x080000, CRC(9201621b) SHA1(1ca3ebe7eec40614bfa8b911657fa2b51f2c51a4) )
+ ROM_LOAD16_BYTE( "v102.u8", 0x200000, 0x080000, CRC(3be22b8f) SHA1(03634fbd6a8a8369c6cb1fd6694a3784dac5bf59) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x480000, REGION_GFX1, 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t0700.rom", 0x400000, 0x080000, CRC(93943b4d) SHA1(3b439903853727d45d62c781af6073024eb3c5a3) )
+
+ ROM_REGION( 0x480000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ /* all roms below need checking to see if they're the same on this board */
+ ROM_REGION( 0x1080000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprite Colour Data */
+ ROM_LOAD( "a0700.l", 0x0000000, 0x0400000, CRC(26a9ae9c) SHA1(c977c89db6fdf47ee260ff687b80375caeab975c) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0700.h", 0x0400000, 0x0400000, CRC(79bc1fc1) SHA1(a09472a9b75704c1d31ab828f92c2a5007b2b4ed) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0701.l", 0x0800000, 0x0400000, CRC(23607f81) SHA1(8b6dbcdce9b131370693847ed9771aa04b62711c) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0701.h", 0x0c00000, 0x0400000, CRC(5f2efd37) SHA1(9a5bd9751691bc085b0751b9fa8ede9eb97b1248) )
+ ROM_LOAD( "a0702.rom", 0x1000000, 0x0080000, CRC(42239e1b) SHA1(2b6d20958abf8a67ce525d5c8964b6d225ccaeda) )
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b0700.l", 0x0000000, 0x0400000, CRC(af096904) SHA1(8e86b36cc44720ece68022e409279bf9144341ba) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "b0700.h", 0x0400000, 0x0400000, CRC(6d53de26) SHA1(f3f93fd2f87adb815834ba0242b94073fbb5e333) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "cgv101.rom", 0x0800000, 0x0020000, CRC(da02ec3e) SHA1(7ee21d748c9b932f53e790a9040167f904fecefc) )
+
+ ROM_REGION( 0x480000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m0700.rom", 0x400000, 0x080000, CRC(acc7afce) SHA1(ac2d344ebac336f0f363bb045dd8ea4e83d1fb50) )
+ROM_END
+
+/*
+
+The Killing Blade (English / World Version)
+IGS, 1998
+
+This is a cart for the IGS PGM system.
+
+
+PCB Layout
+----------
+
+IGS PCB NO-0179
+|-----------------------------------------------|
+| 8MHz |--------| |
+| 32.768kHz|----| | |T0300.U14|
+|6164 6164 |IGS | | IGS025 | |
+| |022 | | | |
+|* |----| |--------| |
+| |
+| U2 U3 U4 U5 U6 |
+| PAL PAL PAL |
+| |
+|-| |-|
+ |--------------------||---------------------|
+Notes:
+ IGS022 - Custom IGS IC (QFP100)
+ IGS025 - Custom IGS IC (PLCC68, labelled "ENGLISH")
+ T0300.U14 - 32MBit MaskROM (SOP44, labelled "T0300")
+ 6164 - x2, 8K x8 SRAM (SOJ28)
+ U2 - 27C512 512KBit EPROM (DIP28, labelled "KB U2 V104")
+ U3 - 27C4000 4MBit EPROM (DIP32, labelled "KB U3 V104")
+ U4 - 27C4000 4MBit EPROM (DIP32, labelled "KB U4 V104")
+ U5 - 27C4000 4MBit EPROM (DIP32, labelled "KB U5 V104")
+ U6 - 27C4000 4MBit EPROM (DIP32, labelled "KB U6 V104")
+ PALs - x3, labelled "DH U8", "DH U1", "DH U7"
+ * - Unpopulated position for DIP42 EPROM/MASKROM (labelled "P0300")
+
+
+IGS PCB NO-0178
+|-----------------------------------------------|
+| U9 U10 U11 U12 U13 U14 U15|
+| |
+| |
+| |
+| U1 U2 74LS138 |
+| 74LS139 |
+| U3 U4 U5 U8 |
+| |
+| |
+|-| |-|
+ |--------------------||---------------------|
+
+Notes:
+ U1 - 32MBit MASKROM (SOP44, labelled "M0300")
+ U2 - 32MBit MASKROM (SOP44, labelled "A0307")
+ U3 - 16MBit MASKROM (DIP42, labelled "A0302")
+ U4 - 16MBit MASKROM (DIP42, labelled "A0304")
+ U5 - 16MBit MASKROM (DIP42, labelled "A0305")
+ U8 - 16MBit MASKROM (DIP42, labelled "B0301")
+ U9 - 32MBit MASKROM (SOP44, labelled "A0300")
+ U10 - 32MBit MASKROM (SOP44, labelled "A0301")
+ U11 - 32MBit MASKROM (SOP44, labelled "A0303")
+ U12 - 32MBit MASKROM (SOP44, labelled "A0306")
+ U13 - 32MBit MASKROM (SOP44, labelled "B0300")
+ U14 - 32MBit MASKROM (SOP44, labelled "B0302")
+ U15 - 32MBit MASKROM (SOP44, labelled "B0303")
+
+*/
+
+ROM_START( killbld )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) ) // (BIOS)
+ ROM_LOAD16_BYTE( "kb_u3_v104.u3", 0x100001, 0x080000, CRC(6db1d719) SHA1(804002f014d275aaf0368fb7f904938fe4ac07ee) )
+ ROM_LOAD16_BYTE( "kb_u6_v104.u6", 0x100000, 0x080000, CRC(31ecc978) SHA1(82666d534e4151775063af6d39f575faba0f1047) )
+ ROM_LOAD16_BYTE( "kb_u4_v104.u4", 0x200001, 0x080000, CRC(1ed8b2e7) SHA1(331c037640cfc1fe743cd0e65a1156c470b3303e) ) // order?
+ ROM_LOAD16_BYTE( "kb_u5_v104.u5", 0x200000, 0x080000, CRC(a0bafc29) SHA1(b20db7c16353c6f87ed3c08c9d037b07336711f1) ) // order?
+
+ ROM_REGION( 0x4000, REGION_USER2, ROMREGION_ERASEFF )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x010000, REGION_USER1, 0 ) /* Protection Data */
+ ROM_LOAD16_WORD_SWAP( "kb_u2_v104.u2", 0x000000, 0x010000, CRC(c970f6d5) SHA1(399fc6f80262784c566363c847dc3fdc4fb37494) )
+
+ ROM_REGION( 0x800000, REGION_GFX1, 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t0300.u14", 0x400000, 0x400000, CRC(0922f7d9) SHA1(4302b4b7369e13f315fad14f7d6cad1321101d24) )
+
+ ROM_REGION( 0x800000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x2000000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprite Colour Data */
+ ROM_LOAD( "a0300.u9", 0x0000000, 0x0400000, CRC(3f9455d3) SHA1(3718ce00ad93975383aafc14e5a74dc297b011a1) )
+ ROM_LOAD( "a0301.u10", 0x0400000, 0x0400000, CRC(92776889) SHA1(6d677837fefff47bfd1c6166322f69f89989a5e2) )
+ ROM_LOAD( "a0303.u11", 0x0800000, 0x0400000, CRC(33f5cc69) SHA1(9cacd5058d4bb25b77f71658bbbbd4b38d0a6b6a) )
+ ROM_LOAD( "a0306.u12", 0x0c00000, 0x0400000, CRC(cc018a8e) SHA1(37752d46f238fb57c0ab5a4f96b1e013f2077347) )
+ ROM_LOAD( "a0307.u2", 0x1000000, 0x0400000, CRC(bc772e39) SHA1(079cc42a190cb916f02b59bca8fa90e524acefe9) )
+// ROM_LOAD( "a0302.u3", 0x1400000, 0x0200000, CRC(a4810e38) SHA1(c31fe641feab2c93795fc35bf71d4f37af1056d4) ) // from lord of gun! unused..
+// ROM_LOAD( "a0304.u4", 0x1600000, 0x0200000, CRC(3096de1c) SHA1(d010990d21cfda9cb8ab5b4bc0e329c23b7719f5) ) // from lord of gun! unused..
+// ROM_LOAD( "a0305.u5", 0x1800000, 0x0200000, CRC(2234531e) SHA1(58a82e31a1c0c1a4dd026576319f4e7ecffd140e) ) // from lord of gun! unused..
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b0300.u13", 0x0000000, 0x0400000, CRC(7f876981) SHA1(43555a200929ad5ecc42137fc9aeb42dc4f50d20) )
+ ROM_LOAD( "b0302.u14", 0x0400000, 0x0400000, CRC(eea9c502) SHA1(04b3972c7111ea59a3cceab6ad124080c4ce3520) )
+ ROM_LOAD( "b0303.u15", 0x0800000, 0x0200000, CRC(77a9652e) SHA1(2342f643d37945fbda224a5034c013796e5134ca) )
+// ROM_LOAD( "b0301.u8", 0x0a00000, 0x0200000, CRC(400abe33) SHA1(20de1eb626424ea41bd55eb3cecd6b50be744ee0) ) // from lord of gun! unused..
+
+ ROM_REGION( 0x800000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m0300.u1", 0x400000, 0x400000, CRC(93159695) SHA1(50c5976c9b681bd3d1ebefa3bfa9fe6e72dcb96f) )
+ROM_END
+
+ROM_START( killbldt )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) ) // (BIOS)
+ ROM_LOAD16_WORD_SWAP( "kb.u9", 0x100000, 0x200000, BAD_DUMP CRC(43da77d7) SHA1(f99e89da4587d6c9e3c2ae66fa139830d893fdda) ) // not verified to be correct
+
+ ROM_REGION( 0x4000, REGION_USER2, 0 ) /* dump of RAM shared with protection device, todo, emulate protection device instead! */
+ ROM_LOAD( "kb.ram", 0x000000, 0x04000, CRC(6994c507) SHA1(8264c56709488b72282d6ddfce3a4b188c6cc109) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x010000, REGION_USER1, 0 ) /* Protection Data */
+ ROM_LOAD16_WORD_SWAP( "kb_u2.rom", 0x000000, 0x010000, CRC(de3eae63) SHA1(03af767ef764055bda528b5cc6a24b9e1218cca8) )
+
+ ROM_REGION( 0x800000, REGION_GFX1, 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t0300.u14", 0x400000, 0x400000, CRC(0922f7d9) SHA1(4302b4b7369e13f315fad14f7d6cad1321101d24) )
+
+ ROM_REGION( 0x800000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x2000000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprite Colour Data */
+ ROM_LOAD( "a0300.u9", 0x0000000, 0x0400000, CRC(3f9455d3) SHA1(3718ce00ad93975383aafc14e5a74dc297b011a1) )
+ ROM_LOAD( "a0301.u10", 0x0400000, 0x0400000, CRC(92776889) SHA1(6d677837fefff47bfd1c6166322f69f89989a5e2) )
+ ROM_LOAD( "a0303.u11", 0x0800000, 0x0400000, CRC(33f5cc69) SHA1(9cacd5058d4bb25b77f71658bbbbd4b38d0a6b6a) )
+ ROM_LOAD( "a0306.u12", 0x0c00000, 0x0400000, CRC(cc018a8e) SHA1(37752d46f238fb57c0ab5a4f96b1e013f2077347) )
+ ROM_LOAD( "a0307.u2", 0x1000000, 0x0400000, CRC(bc772e39) SHA1(079cc42a190cb916f02b59bca8fa90e524acefe9) )
+// ROM_LOAD( "a0302.u3", 0x1400000, 0x0200000, CRC(a4810e38) SHA1(c31fe641feab2c93795fc35bf71d4f37af1056d4) ) // from lord of gun! unused..
+// ROM_LOAD( "a0304.u4", 0x1600000, 0x0200000, CRC(3096de1c) SHA1(d010990d21cfda9cb8ab5b4bc0e329c23b7719f5) ) // from lord of gun! unused..
+// ROM_LOAD( "a0305.u5", 0x1800000, 0x0200000, CRC(2234531e) SHA1(58a82e31a1c0c1a4dd026576319f4e7ecffd140e) ) // from lord of gun! unused..
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b0300.u13", 0x0000000, 0x0400000, CRC(7f876981) SHA1(43555a200929ad5ecc42137fc9aeb42dc4f50d20) )
+ ROM_LOAD( "b0302.u14", 0x0400000, 0x0400000, CRC(eea9c502) SHA1(04b3972c7111ea59a3cceab6ad124080c4ce3520) )
+ ROM_LOAD( "b0303.u15", 0x0800000, 0x0200000, CRC(77a9652e) SHA1(2342f643d37945fbda224a5034c013796e5134ca) )
+// ROM_LOAD( "b0301.u8", 0x0a00000, 0x0200000, CRC(400abe33) SHA1(20de1eb626424ea41bd55eb3cecd6b50be744ee0) ) // from lord of gun! unused..
+
+ ROM_REGION( 0x800000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m0300.u1", 0x400000, 0x400000, CRC(93159695) SHA1(50c5976c9b681bd3d1ebefa3bfa9fe6e72dcb96f) )
+ROM_END
+
+ROM_START( puzlstar )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) ) // (BIOS)
+ ROM_LOAD16_BYTE( "v100mg.u1", 0x100001, 0x080000, CRC(5788b77d) SHA1(7770aae6e686da92b2623c977d1bc8f019f48267) )
+ ROM_LOAD16_BYTE( "v100mg.u2", 0x100000, 0x080000, CRC(4c79d979) SHA1(3b92052a35994f2b3dd164930154184c45d5e2d0) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x4000, REGION_CPU3, ROMREGION_ERASEFF ) /* ARM protection ASIC - internal rom */
+ /* this has no external rom so the internal rom probably can't be dumped */
+// ROM_LOAD( "puzlstar_igs027a.bin", 0x000000, 0x04000, NO_DUMP )
+
+ ROM_REGION( 0xc00000, REGION_GFX1, 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t0800.u5", 0x400000, 0x200000, CRC(f9d84e59) SHA1(80ec77025ac5bf355b1a60f2a678dd4c56071f6b) )
+
+ ROM_REGION( 0xc00000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x1c00000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprite Colour Data */
+ ROM_LOAD( "a0800.u1", 0x0000000, 0x0400000, CRC(e1e6ec40) SHA1(390432431f144ef63424a426582b311765a61771) )
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b0800.u3", 0x0000000, 0x0200000, CRC(52e7bef5) SHA1(a678251b7e46a1016d0afc1d8d5c9928008ad5b1) )
+
+ ROM_REGION( 0x800000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m0800.u2", 0x400000, 0x400000, CRC(e1a46541) SHA1(6fe9de5700d8638374734d80551dcedb62975140) )
+ROM_END
+
+
+/*
+
+Oriental Legend Super
+IGS, 1998
+
+This is a cart for the IGS PGM system.
+
+PCB Layout
+----------
+IGS PCB NO-0191-1
+|-----------------------------------------------|
+|6264 8MHz|--------| |
+|6264 | | T0500.U18|
+| | IGS025 | |
+| |-----| | | T0501.U19|
+| | IGS | |--------| |
+| | 028 | |
+| *1 |-----| V101.U1 |
+| V101.U2 V101.U4 PAL PAL |
+| V101.U6 V101.U3 V101.U5 |
+|-| |-|
+ |--------------------||---------------------|
+Notes:
+ IGS028 - Custom IGS IC (QFP100)
+ IGS025 - Custom IGS IC (PLCC68, labelled "KOREA")
+ T0500.U18 - 32MBit MaskROM (SOP44)
+ T0501.U19 - 16MBit MaskROM (SOP44)
+ V101.U1 - MX27C4096 4MBit EPROM (DIP40)
+ V101.U2/3/4/5- MX27C4000 4MBit EPROM (DIP32)
+ PALs - x2, labelled "CW-2 U8", "CW-2 U7"
+ 6264 - 8K x8 SRAM
+ *1 - Unpopulated position for SOP44 MASKROM labelled "P0500"
+
+
+IGS PCB NO-0135
+|-----------------------------------------------|
+|A0504.U11 A0506.U13 B0502.U15 |
+| A0505.U12 U14 B0503.U16|
+| |
+|A0500.U5 B0500.U9 |
+| A0501.U6 A0503.U8 B0501.U10|
+| A0502.U7 |
+| |
+|74LS138 M0500.U1 74LS139|
+| U2 |
+|-| |-|
+ |--------------------||---------------------|
+
+Notes:
+ This PCB contains only SOP44 MaskROMS and 2 logic IC's
+ U2 and U14 are not populated.
+ All are 32MBit except M0500 which is 16MBit.
+
+*/
+
+ROM_START( olds )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) )// (BIOS)
+ ROM_LOAD16_BYTE( "sp_v101.u2", 0x100001, 0x080000, CRC(08eb9661) SHA1(105946e72e562adb1a9fd794ca0fd2c91967eb56) )
+ ROM_LOAD16_BYTE( "sp_v101.u3", 0x100000, 0x080000, CRC(0a358c1e) SHA1(95c7c3f069c5d05001e22535750f6b3cd7de105f) )
+ ROM_LOAD16_BYTE( "sp_v101.u4", 0x200001, 0x080000, CRC(766570e0) SHA1(e7c3f5664ec69b662b82c2e1375555db7305390c) )
+ ROM_LOAD16_BYTE( "sp_v101.u5", 0x200000, 0x080000, CRC(58662e12) SHA1(2b39bd847e9c4968a8e77a2f3cec77cf323ceee3) )
+ ROM_LOAD16_WORD_SWAP( "sp_v101.u1",0x300000, 0x080000, CRC(2b2f4f1e) SHA1(67b97cf8cc7f517d67cd45588addd2ad8e24612a) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x010000, REGION_USER1, 0 ) /* ASIC25? Protection Data */
+ ROM_LOAD( "sp_v101.u6", 0x000000, 0x010000, CRC(097046bc) SHA1(6d75db85cf4c79b63e837897785c253014b2126d) )
+
+ ROM_REGION( 0x200000, REGION_USER2, ROMREGION_ERASEFF ) /* its a dump of the shared protection rom/ram from pcb. */
+ // clearly not for this revision
+ //ROM_LOAD16_WORD_SWAP( "ram_dump", 0x000000, 0x200000, CRC(e7b26aea) SHA1(17d101f760d790619ce4858984787b494bdbbc8a) )
+
+
+ ROM_REGION( 0xc00000, REGION_GFX1, ROMREGION_DISPOSE ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t0500.rom", 0x400000, 0x400000, CRC(d881726c) SHA1(a82517e665996f7b7017c940f1fcf016fccb65c2) )
+ ROM_LOAD( "t0501.rom", 0x800000, 0x200000, CRC(d2106864) SHA1(65d827135b87d82196433aea3279608ee263feca) )
+
+ ROM_REGION( 0xc00000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x1c00000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprite Colour Data */
+ ROM_LOAD( "a0500.rom", 0x0000000, 0x400000, CRC(80a59197) SHA1(7d0108e2f0d0347d43ace2d96c0388202c05fdfb) )
+ ROM_LOAD( "a0501.rom", 0x0400000, 0x400000, CRC(98c931b1) SHA1(9b70d1a7beb4c3a0c1436c25fd1fb76e47539538) )
+ ROM_LOAD( "a0502.rom", 0x0800000, 0x400000, CRC(c3fcdf1d) SHA1(107585fd103fcd0af0fb7db283be4f7c7058aef7) )
+ ROM_LOAD( "a0503.rom", 0x0c00000, 0x400000, CRC(066dffec) SHA1(f023032a7202b7090fb609a39e0f19018e664bf3) )
+ ROM_LOAD( "a0504.rom", 0x1000000, 0x400000, CRC(45337583) SHA1(c954d0e5bf7fa99c90b0d154e7119d2b0c461f1c) )
+ ROM_LOAD( "a0505.rom", 0x1400000, 0x400000, CRC(5b8cf3a5) SHA1(856d1e47b5d9a66dcfbdc74a51ed646fd7d96a35) )
+ ROM_LOAD( "a0506.rom", 0x1800000, 0x400000, CRC(087ac60c) SHA1(3d5bf7dd40c8a3c1224cf82e12410ca904c0c5db) )
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b0500.rom", 0x0000000, 0x400000, CRC(cde07f74) SHA1(1fe90db7c57faa28f3a054b2c07909bef89e3efb) )
+ ROM_LOAD( "b0501.rom", 0x0400000, 0x400000, CRC(1546c2e9) SHA1(a7b9c8b44203db54a59d49fe469bb52bba807ba2) )
+ ROM_LOAD( "b0502.rom", 0x0800000, 0x400000, CRC(e97b31c3) SHA1(1a7ca4f6c8644e84a33ae41cd4637f21046b14c5) )
+ ROM_LOAD( "b0503.u16", 0x0c00000, 0x400000, CRC(e41d98e4) SHA1(f80b27fcee81762993e09bf1b3cad6e85274760c) )
+
+
+ ROM_REGION( 0x600000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m0500.rom", 0x400000, 0x200000, CRC(37928cdd) SHA1(e80498cabc2a6a54d4f3ebcb097d4b3fad96fe55) )
+ROM_END
+
+ROM_START( olds100 )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) )// (BIOS)
+ ROM_LOAD16_BYTE( "v100-u2.040", 0x100001, 0x080000, CRC(517c2a06) SHA1(bbf5b311fac9b0bb4d4129c0561e5e24f6963fa2) )
+ ROM_LOAD16_BYTE( "v100-u3.040", 0x100000, 0x080000, CRC(d0e2b741) SHA1(2e671dbb4320d1f0c059b35efd33cdea26f12131) )
+ ROM_LOAD16_BYTE( "v100-u4.040", 0x200001, 0x080000, CRC(32a6bdbd) SHA1(a93d7f4eae722a58eca9ec351ad5890cefda56f0) )
+ ROM_LOAD16_BYTE( "v100-u5.040", 0x200000, 0x080000, CRC(b4a1cafb) SHA1(b2fccd480ede93f58ad043387b18b898152f06ef) )
+ /* u1 is missing from this set? - the parent has v101 rom for u1 so it probably doesn't go with v100 main program roms */
+// ROM_LOAD16_WORD_SWAP( "v100-u1.040",0x300000, 0x080000, CRC(1) SHA1(1) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x200000, REGION_USER2, ROMREGION_ERASEFF ) /* its a dump of the shared protection rom/ram from pcb. */
+ // used to simulate encrypted DMA protection device for now ..
+ //ROM_LOAD16_WORD_SWAP( "ram_dump", 0x000000, 0x200000, CRC(e7b26aea) SHA1(17d101f760d790619ce4858984787b494bdbbc8a) )
+
+
+ ROM_REGION( 0x010000, REGION_USER1, 0 ) /* ASIC25? Protection Data */
+ ROM_LOAD( "kd-u6.512", 0x000000, 0x010000, CRC(e7613dda) SHA1(0d7c043b90e2f9a36a45066f22e3e305dc716676) )
+
+ ROM_REGION( 0xc00000, REGION_GFX1, ROMREGION_DISPOSE ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t0500.rom", 0x400000, 0x400000, CRC(d881726c) SHA1(a82517e665996f7b7017c940f1fcf016fccb65c2) )
+ ROM_LOAD( "t0501.rom", 0x800000, 0x200000, CRC(d2106864) SHA1(65d827135b87d82196433aea3279608ee263feca) )
+
+ ROM_REGION( 0xc00000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x1c00000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprite Colour Data */
+ ROM_LOAD( "a0500.rom", 0x0000000, 0x400000, CRC(80a59197) SHA1(7d0108e2f0d0347d43ace2d96c0388202c05fdfb) )
+ ROM_LOAD( "a0501.rom", 0x0400000, 0x400000, CRC(98c931b1) SHA1(9b70d1a7beb4c3a0c1436c25fd1fb76e47539538) )
+ ROM_LOAD( "a0502.rom", 0x0800000, 0x400000, CRC(c3fcdf1d) SHA1(107585fd103fcd0af0fb7db283be4f7c7058aef7) )
+ ROM_LOAD( "a0503.rom", 0x0c00000, 0x400000, CRC(066dffec) SHA1(f023032a7202b7090fb609a39e0f19018e664bf3) )
+ ROM_LOAD( "a0504.rom", 0x1000000, 0x400000, CRC(45337583) SHA1(c954d0e5bf7fa99c90b0d154e7119d2b0c461f1c) )
+ ROM_LOAD( "a0505.rom", 0x1400000, 0x400000, CRC(5b8cf3a5) SHA1(856d1e47b5d9a66dcfbdc74a51ed646fd7d96a35) )
+ ROM_LOAD( "a0506.rom", 0x1800000, 0x400000, CRC(087ac60c) SHA1(3d5bf7dd40c8a3c1224cf82e12410ca904c0c5db) )
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b0500.rom", 0x0000000, 0x400000, CRC(cde07f74) SHA1(1fe90db7c57faa28f3a054b2c07909bef89e3efb) )
+ ROM_LOAD( "b0501.rom", 0x0400000, 0x400000, CRC(1546c2e9) SHA1(a7b9c8b44203db54a59d49fe469bb52bba807ba2) )
+ ROM_LOAD( "b0502.rom", 0x0800000, 0x400000, CRC(e97b31c3) SHA1(1a7ca4f6c8644e84a33ae41cd4637f21046b14c5) )
+ ROM_LOAD( "b0503.u16", 0x0c00000, 0x400000, CRC(e41d98e4) SHA1(f80b27fcee81762993e09bf1b3cad6e85274760c) )
+
+ ROM_REGION( 0x600000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m0500.rom", 0x400000, 0x200000, CRC(37928cdd) SHA1(e80498cabc2a6a54d4f3ebcb097d4b3fad96fe55) )
+ROM_END
+
+/* this is the set which the protection ram dump seems to be for.. */
+ROM_START( olds100a )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) )// (BIOS)
+ /* this rom had a lame hack applied to it by the dumper, this was removed, hopefully it is correct now */
+ ROM_LOAD16_WORD_SWAP( "p0500.v10", 0x100000, 0x400000, CRC(8981fc87) SHA1(678d6705d06b99bca5951ff77708adadc4c4396b) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x010000, REGION_USER1, ROMREGION_ERASEFF ) /* ASIC25? Protection Data */
+ /* missing from this set .. */
+ ROM_LOAD( "protection_data.u6", 0x000000, 0x010000, NO_DUMP )
+
+ ROM_REGION( 0x200000, REGION_USER2, ROMREGION_ERASEFF ) /* its a dump of the shared protection rom/ram from pcb. */
+ // used to simulate encrypted DMA protection device for now ..
+ ROM_LOAD16_WORD_SWAP( "ram_dump", 0x000000, 0x200000, CRC(e7b26aea) SHA1(17d101f760d790619ce4858984787b494bdbbc8a) )
+
+
+ ROM_REGION( 0xc00000, REGION_GFX1, ROMREGION_DISPOSE ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t0500.rom", 0x400000, 0x400000, CRC(d881726c) SHA1(a82517e665996f7b7017c940f1fcf016fccb65c2) )
+ ROM_LOAD( "t0501.rom", 0x800000, 0x200000, CRC(d2106864) SHA1(65d827135b87d82196433aea3279608ee263feca) )
+
+ ROM_REGION( 0xc00000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x1c00000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprite Colour Data */
+ ROM_LOAD( "a0500.rom", 0x0000000, 0x400000, CRC(80a59197) SHA1(7d0108e2f0d0347d43ace2d96c0388202c05fdfb) )
+ ROM_LOAD( "a0501.rom", 0x0400000, 0x400000, CRC(98c931b1) SHA1(9b70d1a7beb4c3a0c1436c25fd1fb76e47539538) )
+ ROM_LOAD( "a0502.rom", 0x0800000, 0x400000, CRC(c3fcdf1d) SHA1(107585fd103fcd0af0fb7db283be4f7c7058aef7) )
+ ROM_LOAD( "a0503.rom", 0x0c00000, 0x400000, CRC(066dffec) SHA1(f023032a7202b7090fb609a39e0f19018e664bf3) )
+ ROM_LOAD( "a0504.rom", 0x1000000, 0x400000, CRC(45337583) SHA1(c954d0e5bf7fa99c90b0d154e7119d2b0c461f1c) )
+ ROM_LOAD( "a0505.rom", 0x1400000, 0x400000, CRC(5b8cf3a5) SHA1(856d1e47b5d9a66dcfbdc74a51ed646fd7d96a35) )
+ ROM_LOAD( "a0506.rom", 0x1800000, 0x400000, CRC(087ac60c) SHA1(3d5bf7dd40c8a3c1224cf82e12410ca904c0c5db) )
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b0500.rom", 0x0000000, 0x400000, CRC(cde07f74) SHA1(1fe90db7c57faa28f3a054b2c07909bef89e3efb) )
+ ROM_LOAD( "b0501.rom", 0x0400000, 0x400000, CRC(1546c2e9) SHA1(a7b9c8b44203db54a59d49fe469bb52bba807ba2) )
+ ROM_LOAD( "b0502.rom", 0x0800000, 0x400000, CRC(e97b31c3) SHA1(1a7ca4f6c8644e84a33ae41cd4637f21046b14c5) )
+ ROM_LOAD( "b0503.u16", 0x0c00000, 0x400000, CRC(e41d98e4) SHA1(f80b27fcee81762993e09bf1b3cad6e85274760c) )
+
+ ROM_REGION( 0x600000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m0500.rom", 0x400000, 0x200000, CRC(37928cdd) SHA1(e80498cabc2a6a54d4f3ebcb097d4b3fad96fe55) )
+ROM_END
+
+
+ROM_START( kov2 )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) ) // (BIOS)
+ ROM_LOAD16_WORD_SWAP( "igs_u18.rom", 0x100000, 0x400000, CRC(86205879) SHA1(f73d5b70b41d39be1cac75e474b025de2cce0b01) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x4000, REGION_CPU3, 0 ) /* ARM protection ASIC - internal rom */
+ ROM_LOAD( "kov2_v100_hongkong.asic", 0x000000, 0x04000, CRC(e0d7679f) SHA1(e1c2d127eba4ddbeb8ad173c55b90ac1467e1ca8) )
+
+ ROM_REGION( 0x400000, REGION_USER1, 0 ) /* Protection Data (encrypted external ARM data) */
+ ROM_LOAD( "igs_u19.rom", 0x000000, 0x200000, CRC(edd59922) SHA1(09b14f20f685944a93292c83e5830849aade42c9) )
+
+ ROM_REGION( 0xc00000, REGION_GFX1, 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t1200.rom", 0x400000, 0x800000, CRC(d7e26609) SHA1(bdad810f82fcf1d50a8791bdc495374ec5a309c6) )
+
+ ROM_REGION( 0xc00000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x2800000, REGION_GFX3, 0 ) /* Sprite Colour Data */
+ ROM_LOAD( "a1200.rom", 0x0000000, 0x0800000, CRC(ceeb81d8) SHA1(5476729443fc1bc9593ae10fbf7cbc5d7290b017) )
+ ROM_LOAD( "a1201.rom", 0x0800000, 0x0800000, CRC(82f0a878) SHA1(ddd13e404252a71de1b2b3b974b910f899f51c38) )
+ ROM_LOAD( "a1202.rom", 0x1000000, 0x0800000, CRC(4bb92fae) SHA1(f0b6d72ed425de1c69dc8f8d5795ea760a4a59b0) )
+ ROM_LOAD( "a1203.rom", 0x1800000, 0x0800000, CRC(e73cb627) SHA1(4c6e48b845a5d1e8f9899010fbf273d54c2b8899) )
+ ROM_LOAD( "a1204.rom", 0x2000000, 0x0800000, CRC(27527099) SHA1(e23cf366bdeaca1e009a5cec6b13164310a34384) )
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b1200.rom", 0x0000000, 0x0800000, CRC(bed7d994) SHA1(019dfba8154256d64cd249eb0fa4c451edce34b8) )
+ ROM_LOAD( "b1201.rom", 0x0800000, 0x0800000, CRC(f251eb57) SHA1(56a5fc14ab7822f83379cecb26638e5bb266349a) )
+
+ ROM_REGION( 0x1000000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m1200.rom", 0x800000, 0x800000, CRC(b0d88720) SHA1(44ab137e3f8e15b7cb5697ffbd9b1143d8210c4f) )
+ROM_END
+
+
+ROM_START( kov2106 )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) ) // (BIOS)
+ ROM_LOAD16_WORD_SWAP( "u18.106", 0x100000, 0x400000, CRC(40051ad9) SHA1(ba2ddf267fe688d5dfed575aeeccbab10135b37b) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x4000, REGION_CPU3, 0 ) /* ARM protection ASIC - internal rom */
+ ROM_LOAD( "kov2_v100_hongkong.asic", 0x000000, 0x04000, CRC(e0d7679f) SHA1(e1c2d127eba4ddbeb8ad173c55b90ac1467e1ca8) )
+
+ ROM_REGION( 0x400000, REGION_USER1, 0 ) /* Protection Data (encrypted external ARM data) */
+ ROM_LOAD( "u19.102", 0x000000, 0x200000, CRC(462e2980) SHA1(3da7c3d2c65b59f50c78be1c25922b71d40f6080) )
+
+ ROM_REGION( 0xc00000, REGION_GFX1, 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t1200.rom", 0x400000, 0x800000, CRC(d7e26609) SHA1(bdad810f82fcf1d50a8791bdc495374ec5a309c6) )
+
+ ROM_REGION( 0xc00000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x2800000, REGION_GFX3, 0 ) /* Sprite Colour Data */
+ ROM_LOAD( "a1200.rom", 0x0000000, 0x0800000, CRC(ceeb81d8) SHA1(5476729443fc1bc9593ae10fbf7cbc5d7290b017) )
+ ROM_LOAD( "a1201.rom", 0x0800000, 0x0800000, CRC(82f0a878) SHA1(ddd13e404252a71de1b2b3b974b910f899f51c38) )
+ ROM_LOAD( "a1202.rom", 0x1000000, 0x0800000, CRC(4bb92fae) SHA1(f0b6d72ed425de1c69dc8f8d5795ea760a4a59b0) )
+ ROM_LOAD( "a1203.rom", 0x1800000, 0x0800000, CRC(e73cb627) SHA1(4c6e48b845a5d1e8f9899010fbf273d54c2b8899) )
+ ROM_LOAD( "a1204.rom", 0x2000000, 0x0800000, CRC(27527099) SHA1(e23cf366bdeaca1e009a5cec6b13164310a34384) )
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b1200.rom", 0x0000000, 0x0800000, CRC(bed7d994) SHA1(019dfba8154256d64cd249eb0fa4c451edce34b8) )
+ ROM_LOAD( "b1201.rom", 0x0800000, 0x0800000, CRC(f251eb57) SHA1(56a5fc14ab7822f83379cecb26638e5bb266349a) )
+
+ ROM_REGION( 0x1000000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m1200.rom", 0x800000, 0x800000, CRC(b0d88720) SHA1(44ab137e3f8e15b7cb5697ffbd9b1143d8210c4f) )
+ROM_END
+
+
+ROM_START( kov2p )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) ) // (BIOS)
+ ROM_LOAD16_WORD_SWAP( "v204-32m.rom", 0x100000, 0x400000, CRC(583e0650) SHA1(2e5656dd9c6cba9f84af9baa3f5f70cdccf9db47) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x4000, REGION_CPU3, 0 ) /* ARM protection ASIC - internal rom */
+ /* not correct for this set, needs dumping from internal rom */
+ ROM_LOAD( "kov2p.asic", 0x000000, 0x04000, BAD_DUMP CRC(e0d7679f) SHA1(e1c2d127eba4ddbeb8ad173c55b90ac1467e1ca8) ) // NOT for this version, works with a patch
+
+ ROM_REGION( 0x400000, REGION_USER1, 0 ) /* Protection Data (encrypted external ARM data) */
+ ROM_LOAD( "v200-16.rom", 0x000000, 0x200000, CRC(16a0c11f) SHA1(ce449cef76ebd5657d49b57951e2eb0f132e203e) )
+
+ ROM_REGION( 0xc00000, REGION_GFX1, 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t1200.rom", 0x400000, 0x800000, CRC(d7e26609) SHA1(bdad810f82fcf1d50a8791bdc495374ec5a309c6) )
+
+ ROM_REGION( 0xc00000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x2800000, REGION_GFX3, 0 ) /* Sprite Colour Data */
+ ROM_LOAD( "a1200.rom", 0x0000000, 0x0800000, CRC(ceeb81d8) SHA1(5476729443fc1bc9593ae10fbf7cbc5d7290b017) )
+ ROM_LOAD( "a1201.rom_p", 0x0800000, 0x0800000, CRC(21063ca7) SHA1(cf561b44902425a920d5cbea5bf65dd9530b2289) ) // either this or a1201.rom in kov2 is probably bad
+ ROM_LOAD( "a1202.rom", 0x1000000, 0x0800000, CRC(4bb92fae) SHA1(f0b6d72ed425de1c69dc8f8d5795ea760a4a59b0) )
+ ROM_LOAD( "a1203.rom", 0x1800000, 0x0800000, CRC(e73cb627) SHA1(4c6e48b845a5d1e8f9899010fbf273d54c2b8899) )
+ ROM_LOAD( "a1204.rom_p", 0x2000000, 0x0200000, CRC(14b4b5bb) SHA1(d7db5740eec971f2782fb2885ee3af8f2a796550) ) // either this or a1204.rom in kov2 is probably bad
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b1200.rom", 0x0000000, 0x0800000, CRC(bed7d994) SHA1(019dfba8154256d64cd249eb0fa4c451edce34b8) )
+ ROM_LOAD( "b1201.rom", 0x0800000, 0x0800000, CRC(f251eb57) SHA1(56a5fc14ab7822f83379cecb26638e5bb266349a) )
+
+ ROM_REGION( 0x1000000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m1200.rom", 0x800000, 0x800000, CRC(b0d88720) SHA1(44ab137e3f8e15b7cb5697ffbd9b1143d8210c4f) )
+ROM_END
+
+/*
+
+Do Donpachi II
+Cave, 2001
+
+This is a PGM cart containing not a lot....
+5x SOP44 mask ROMs (4x 64M, 1x 32M)
+2x EPROMs (1x 4M, 1x 16M)
+2x PALs (labelled FN U14 and FN U15)
+1x custom IGS027A (QFP120)
+3x RAMs WINBOND W24257AJ-8N
+Some logic IC's, resistors, caps etc.
+
+*/
+
+ROM_START( ddp2 )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) ) // (BIOS)
+ ROM_LOAD16_WORD_SWAP( "v100.u8", 0x100000, 0x200000, CRC(0c8aa8ea) SHA1(57e33224622607a1df8daabf26ba063cf8a6d3fc) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x4000, REGION_CPU3, 0 ) /* ARM protection ASIC - internal rom */
+ ROM_LOAD( "ddp2_igs027a.bin", 0x000000, 0x04000, NO_DUMP )
+
+ ROM_REGION( 0x20000, REGION_USER1, 0 ) /* Protection Data (encrypted external ARM data, internal missing) */
+ ROM_LOAD( "v100.u23", 0x000000, 0x20000, CRC(06c3dd29) SHA1(20c9479f158467fc2037dcf162b6c6be18c91d46) )
+
+ ROM_REGION( 0xc00000, REGION_GFX1, 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t1300.u21", 0x400000, 0x800000, CRC(e748f0cb) SHA1(5843bee3a17c33648ce904af2b98c6a90aff7393) )
+
+ ROM_REGION( 0xc00000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x1000000, REGION_GFX3, 0 ) /* Sprite Colour Data */
+ ROM_LOAD( "a1300.u1", 0x0000000, 0x0800000, CRC(fc87a405) SHA1(115c21ecc56997652e527c92654076870bc9fa51) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a1301.u2", 0x0800000, 0x0800000, CRC(0c8520da) SHA1(390317857ae5baa94a4cc042874b00a811f06a63) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+
+ ROM_REGION( 0x0800000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b1300.u7", 0x0000000, 0x0800000, CRC(ef646604) SHA1(d737ff513792962f18df88c2caa9dd71de449079) )
+
+ ROM_REGION( 0x800000, REGION_SOUND1, ROMREGION_ERASE00 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m1300.u5", 0x400000, 0x400000, CRC(82d4015d) SHA1(d4cdc1aec1c97cf23ff7a20ccaad822962e66ffa) )
+ROM_END
+
+/*
+
+Puzzli 2
+IGS, 2001
+
+Cart for IGS PGM system. The layout of the PCB is virtually identical to Puzzle Star.
+
+PCB Layout
+----------
+
+IGS PCB NO- 0259
+|-----------------------------------------------|
+| U6 U7 |
+| |-------| |
+| |IGS027A| |
+| | | T0900.U9|
+| | | |
+| |-------| |
+| 2SP_V200.U3 |
+| 2SP_V200.U4 U5 PAL |
+| |
+|-| |-|
+ |--------------------||---------------------|
+Notes:
+ IGS027A - Custom IGS IC, ARM7/9? based CPU (QFP120, stamped 'IGS027A')
+ T0900.U9 - 16MBit MaskROM (SOP44)
+ 2SP_V200.U3 - MX27C4000 512K x8 EPROM (DIP32, labelled '2SP V200 U3')
+ 2SP_V200.U4 - MX27C4000 512K x8 EPROM (DIP32, labelled '2SP V200 U4')
+ PAL - AMD PALCE22V10 PAL (DIP24, labelled 'EL U8')
+ U5 - Unpopulated position for 16MBit MaskROM (DIP42)
+ U6, U7 - Unpopulated position for 74LS245 logic chip (x2)
+
+
+IGS PCB NO- 0258
+|-----------------------------------------------|
+| |
+| |
+| |
+| |
+| * M0900.U2 A0900.U3 B0900.U4 |
+| |
+| |
+| |
+| |
+|-| |-|
+ |--------------------||---------------------|
+Notes:
+ * - Unpopulated position for Oki MSM27C3202CZ 32MBit MaskROM (TSOP48 Type II)
+ U2 - 32MBit MaskROM (DIP42, Byte mode)
+ U3 - 32MBit MaskROM (SOP44)
+ U4 - 16MBit MaskROM (SOP44)
+
+*/
+ROM_START( puzzli2 )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) ) // (BIOS)
+ ROM_LOAD16_BYTE( "2sp_v200.u3", 0x100001, 0x080000, CRC(2a5ba8a6) SHA1(4c87b849fd6f39152e3e2ef699b78ce24b3fb6d0) )
+ ROM_LOAD16_BYTE( "2sp_v200.u4", 0x100000, 0x080000, CRC(fa5c86c1) SHA1(11c219722b891b775c0f7f9bc8276cdd8f74d657) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x4000, REGION_CPU3, ROMREGION_ERASEFF ) /* ARM protection ASIC - internal rom */
+ /* this has no external rom so the internal rom probably can't be dumped */
+// ROM_LOAD( "puzzli2_igs027a.bin", 0x000000, 0x04000, NO_DUMP )
+
+
+ ROM_REGION( 0x600000, REGION_GFX1, 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t0900.u9", 0x400000, 0x200000, CRC(70615611) SHA1(a46d4aa71396947b427f9ba4ba0e636876c09d6b) )
+
+ ROM_REGION( 0x600000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x400000, REGION_GFX3, 0 ) /* Sprite Colour Data */
+ ROM_LOAD( "a0900.u3", 0x0000000, 0x0400000, CRC(14911251) SHA1(e0d10ef50c408dbcf0907f81d4f0e49aeb651a6c) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+
+ ROM_REGION( 0x0200000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b0900.u4", 0x0000000, 0x0200000, CRC(6f0638b6) SHA1(14b315fe9e80b3314bb63487e6ea9ce04c9703bd) )
+
+ ROM_REGION( 0x1000000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m0900.u2", 0x400000, 0x400000, CRC(9ea7af2e) SHA1(d2593d391a93c5cf5a554750c32886dea6599b3d) )
+ROM_END
+
+
+/*
+
+Martial Masters
+IGS, 2001
+
+Cart for IGS PGM system. This game is a straight rip-off of any of the
+late side-by-side fighting games made by SNK or Capcom such as King Of Fighters
+or Super Street Fighter II etc
+
+
+PCB Layout
+----------
+
+IGS PCB-0293-01
+|-----------------------------------------------|
+| 62256 62256 IGS027A |
+| 62256 |
+| * |
+| |
+| PAL |
+| |
+| PAL V102_16M.U10 T1000.U3 |
+| |
+| V104_32M.U9 22MHz|
+|-| |-|
+ |--------------------||---------------------|
+Notes:
+ 62256 - 32K x8 SRAM (SOJ28)
+ IGS027A - Custom IGS IC, ARM7 based CPU with internal 64K ROM (QFP120)
+ T1000.U3 - 23C6410 64MBit MaskROM (SOP44)
+ V102_16M.U10 - MX29F1610MC 16MBit SOP44 FlashROM mounted onto a tiny DIP42 to SOP44 adapter board
+ (manufactured by IGS) which is plugged into a standard DIP42 socket. This chip was
+ read directly on the adapter as a 27C160 EPROM. The socket is wired to accept 32MBit
+ DIP42 EPROMs.
+ V104_32M.U9 - M27C3202CZ 32MBit TSOP48 Type II OTP MaskROM mounted onto a tiny DIP42 to TSOP48 Type II
+ adapter board (manufactured by IGS) which is plugged into a standard DIP42 socket. This
+ chip was read directly on the adapter as a 27C322 EPROM. The socket is wired to accept
+ 32MBit DIP42 EPROMs.
+ * - Unpopulated position for 62256 SRAM
+
+
+IGS PCB-0292-00
+|-----------------------------------------------|
+| A1000.U3 A1002.U6 A1004.U10 |
+| A1001.U4 A1003.U8 |
+| |
+| |
+| |
+| |
+| M1001.U7 B1001.U11 |
+| M1000.U5 B1000.U9 |
+| |
+|-| |-|
+ |--------------------||---------------------|
+
+
+
+*/
+
+ROM_START( martmast )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) ) // (BIOS)
+ ROM_LOAD16_WORD_SWAP( "v104_32m.u9", 0x100000, 0x400000, CRC(cfd9dff4) SHA1(328eaf6ac49a73265ee4e0f992b1b1312f49877b) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x4000, REGION_CPU3, 0 ) /* ARM protection ASIC - internal rom */
+ ROM_LOAD( "martial_masters_v102_usa.asic", 0x000000, 0x04000, BAD_DUMP CRC(a6c0828c) SHA1(0a5bda56dca264c3c7ff7698b8f699563f203c4d) ) // not verified, could be bad
+
+ ROM_REGION( 0x400000, REGION_USER1, 0 ) /* Protection Data (encrypted external ARM data) */
+ ROM_LOAD( "v102_16m.u10", 0x000000, 0x200000, CRC(18b745e6) SHA1(7bcb58dd3a2d6072f492cf0dd7181cb061c1f49d) )
+
+ ROM_REGION( 0xc00000, REGION_GFX1, 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t1000.u3", 0x400000, 0x800000, CRC(bbf879b5) SHA1(bd9a6aea34ad4001e89e62ff4b7a2292eb833c00) )
+
+ ROM_REGION( 0xc00000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x2800000, REGION_GFX3, 0 ) /* Sprite Colour Data */
+ ROM_LOAD( "a1000.u3", 0x0000000, 0x0800000, CRC(43577ac8) SHA1(6eea8b455985d5bac74dcc9943cdc3c0902de6cc) )
+ ROM_LOAD( "a1001.u4", 0x0800000, 0x0800000, CRC(fe7a476f) SHA1(a8c7f1f0dd3e53141aed6d927eb88a3ceebb81e4) )
+ ROM_LOAD( "a1002.u6", 0x1000000, 0x0800000, CRC(62e33d38) SHA1(96163d583e25073594f8413ce263e56b66bd69a1) )
+ ROM_LOAD( "a1003.u8", 0x1800000, 0x0800000, CRC(b2c4945a) SHA1(7b18287a2db56db3651cfd4deb607af53522fefd) )
+ ROM_LOAD( "a1004.u10", 0x2000000, 0x0400000, CRC(9fd3f5fd) SHA1(057531f91062be51589c6cf8f4170089b9be6380) )
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b1000.u9", 0x0000000, 0x0800000, CRC(c5961f6f) SHA1(a68060b10edbd084cbde79d2ed1c9084777beb10) )
+ ROM_LOAD( "b1001.u11", 0x0800000, 0x0800000, CRC(0b7e1c06) SHA1(545e15e0087f8621d593fecd8b4013f7ca311686) )
+
+ ROM_REGION( 0x1000000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m1000.u5", 0x400000, 0x800000, CRC(ed407ae8) SHA1(a6e9c09b39c13e8fb7fbc89fa9f823cbeb66e901) )
+ ROM_LOAD( "m1001.u7", 0xc00000, 0x400000, CRC(662d2d48) SHA1(2fcc3099d9c04456cae3b13035fb28eaf709e7d8) )
+ROM_END
+
+/*
+
+Demon Front
+IGS, 2002
+
+Cart for IGS PGM system. This game is a straight rip-off of Metal Slug.
+
+PCB Layout
+----------
+
+IGS PCB-0387-02-FV
+|-----------------------------------------------|
+| BS616LV1010 IGS027A |
+| BS616LV1010 |
+| |
+| * BS616LV1010|
+| PAL PAL |
+| |
+| V102_16M.U5 V101_32M.U26 |
+| PAL |
+| T04501.U29 22MHz|
+|-| |-|
+ |--------------------||---------------------|
+Notes:
+ BS616LV1010 - 64K x16 SRAM (TSOP44)
+ IGS027A - Custom IGS IC, ARM7 based CPU (QFP120)
+ T04501.U29 - 23C6410 64MBit MaskROM (SOP44)
+ V102_16M.U5 - 27C160 16MBit EPROM (DIP42)
+ V101_32M.U26 - 27C322 32MBit EPROM (DIP42)
+ * - Unpopulated position for 29F1610 16MBit SOP44 FlashROM, linked to IGS027A
+
+
+IGS PCB-0390-00-FV-A
+|-----------------------------------------------|
+| A04501.U3 A04502.U4 A04503.U6 U8* U10*|
+| |
+| |
+| |
+| |
+| W04501.U5 U7* B04501.U9 B04502.U11 |
+| |
+| |
+| |
+|-| |-|
+ |--------------------||---------------------|
+Notes:
+ * - Unpopulated SOP44 ROM position.
+
+*/
+
+ROM_START( dmnfrnt )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) ) // (BIOS)
+ ROM_LOAD16_WORD_SWAP( "v102_16m.u5", 0x100000, 0x200000, CRC(3d4d481a) SHA1(95953b8f31343389405cc722b4177ff5adf67b62) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x4000, REGION_CPU3, 0 ) /* ARM protection ASIC - internal rom */
+ ROM_LOAD( "dmnfrnt_igs027a.bin", 0x000000, 0x04000, NO_DUMP )
+
+ ROM_REGION( 0x400000, REGION_USER1, 0 ) /* Protection Data (encrypted external ARM data, internal missing) */
+ ROM_LOAD( "v101_32m.u26", 0x000000, 0x400000, CRC(93965281) SHA1(89da198aaa7ca759cb96b5f18859a477e55fd590) )
+
+ ROM_REGION( 0xc00000, REGION_GFX1, 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t04501.u29", 0x400000, 0x800000, CRC(900eaaac) SHA1(4033cb7b28fcadb92d5af3ea7fdd1c22747618fd) )
+
+ ROM_REGION( 0xc00000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x1800000, REGION_GFX3, 0 ) /* Sprite Colour Data */
+ ROM_LOAD( "a04501.u3", 0x0000000, 0x0800000, CRC(9741bea6) SHA1(e3e904249be228628c8c2bd3495cda23586dc048) )
+ ROM_LOAD( "a04502.u4", 0x0800000, 0x0800000, CRC(e104f405) SHA1(124b3deed3e838f8bae6c7d78bdd788859597585) )
+ ROM_LOAD( "a04503.u6", 0x1000000, 0x0800000, CRC(bfd5cfe3) SHA1(fbe4c0a2987c2036df707b86597d78124ee2e665) )
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b04501.u9", 0x0000000, 0x0800000, CRC(29320b7d) SHA1(59c78805e666f912df201c34616744f46057937b) )
+ ROM_LOAD( "b04502.u11", 0x0800000, 0x0200000, CRC(578c00e9) SHA1(14235cc8b0f8c7dd659512f017a2d4aacd91d89d) )
+
+ ROM_REGION( 0x1000000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "w04501.u5", 0x400000, 0x800000, CRC(3ab58137) SHA1(b221f7e551ff0bfa3fd97b6ebedbac69442a66e9) )
+ROM_END
+
+ROM_START( dmnfrnta )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) ) // (BIOS)
+ ROM_LOAD16_WORD_SWAP( "v105_16m.u5", 0x100000, 0x200000, CRC(bda083bd) SHA1(58d6438737a2c43aa8bbcb7f34fb51375b781b1c) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x4000, REGION_CPU3, 0 ) /* ARM protection ASIC - internal rom */
+ ROM_LOAD( "dmnfrnt_igs027a.bin", 0x000000, 0x04000, NO_DUMP )
+
+ ROM_REGION( 0x400000, REGION_USER1, 0 ) /* Protection Data (encrypted external ARM data, internal missing) */
+ ROM_LOAD( "v105_32m.u26", 0x000000, 0x400000, CRC(d200ee63) SHA1(3128c27c5f5a4361d31e7b4bb006de631b3a228c) )
+
+ ROM_REGION( 0xc00000, REGION_GFX1, 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t04501.u29", 0x400000, 0x800000, CRC(900eaaac) SHA1(4033cb7b28fcadb92d5af3ea7fdd1c22747618fd) )
+
+ ROM_REGION( 0xc00000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x1800000, REGION_GFX3, 0 ) /* Sprite Colour Data */
+ ROM_LOAD( "a04501.u3", 0x0000000, 0x0800000, CRC(9741bea6) SHA1(e3e904249be228628c8c2bd3495cda23586dc048) )
+ ROM_LOAD( "a04502.u4", 0x0800000, 0x0800000, CRC(e104f405) SHA1(124b3deed3e838f8bae6c7d78bdd788859597585) )
+ ROM_LOAD( "a04503.u6", 0x1000000, 0x0800000, CRC(bfd5cfe3) SHA1(fbe4c0a2987c2036df707b86597d78124ee2e665) )
+
+ ROM_REGION( 0xc00000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b04501.u9", 0x0000000, 0x0800000, CRC(29320b7d) SHA1(59c78805e666f912df201c34616744f46057937b) )
+ ROM_LOAD( "b04502.u11", 0x0800000, 0x0200000, CRC(578c00e9) SHA1(14235cc8b0f8c7dd659512f017a2d4aacd91d89d) )
+
+ ROM_REGION( 0x1000000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "w04501.u5", 0x400000, 0x800000, CRC(3ab58137) SHA1(b221f7e551ff0bfa3fd97b6ebedbac69442a66e9) )
+ROM_END
+
+ROM_START( theglad )
+ ROM_REGION( 0x600000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_WORD_SWAP( "pgm_p01s.rom", 0x000000, 0x020000, CRC(e42b166e) SHA1(2a9df9ec746b14b74fae48b1a438da14973702ea) ) // (BIOS)
+ ROM_LOAD16_WORD_SWAP( "u6.rom", 0x100000, 0x080000, CRC(14c85212) SHA1(8d2489708e176a2c460498a13173be01f645b79e) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x200000, REGION_USER1, 0 ) /* Protection Data (encrypted external ARM data, internal missing) */
+ ROM_LOAD( "u2.rom", 0x000000, 0x200000, CRC(c7bcf2ae) SHA1(10bc012c83987f594d5375a51bc4be2e17568a81) )
+
+ ROM_REGION( 0xc00000, REGION_GFX1, 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t04601.u33", 0x400000, 0x800000, BAD_DUMP CRC(2da3be8e) SHA1(704be0efc09bc931c71efd0b3e9f1bc4bfcdd3c1) )
+
+ ROM_REGION( 0xc00000/5*8, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x1800000, REGION_GFX3, 0 ) /* Sprite Colour Data */
+ ROM_LOAD( "a04601.u2", 0x0000000, 0x0800000, CRC(d9b2e004) SHA1(8e1882b800fe9f12d7d49303e7417ba5b6f8ef85) )
+ ROM_LOAD( "a04602.u4", 0x0800000, 0x0800000, CRC(14f22308) SHA1(7fad54704e8c97eab723f53dfb50fb3e7bb606d2) )
+ ROM_LOAD( "a04603.u6", 0x1000000, 0x0800000, CRC(8f621e17) SHA1(b0f87f378e0115d0c95017ca0f1b0d508827a7c6) )
+
+ ROM_REGION( 0x1000000, REGION_GFX4, 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b04601.u11", 0x0000000, 0x0800000, CRC(ee72bccf) SHA1(73c25fe659f6c903447066e4ef83d2f580449d76) )
+ ROM_LOAD( "b04602.u12", 0x0800000, 0x0400000, CRC(7dba9c38) SHA1(a03d509274e8f6a500a7ebe2da5aab8bed4e7f2f) )
+
+ ROM_REGION( 0x1000000, REGION_SOUND1, 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "w04601.u1", 0x400000, 0x800000, CRC(5f15ddb3) SHA1(c38dcef8e06802a84e42a7fc9fa505475fc3ac65) )
+ROM_END
+
+
+/*** GAME ********************************************************************/
+
+GAME( 1997, pgm, 0, pgm, pgm, pgm, ROT0, "IGS", "PGM (Polygame Master) System BIOS", GAME_IS_BIOS_ROOT )
+
+GAME( 1997, orlegend, pgm, pgm, pgm, orlegend, ROT0, "IGS", "Oriental Legend / Xi Yo Gi Shi Re Zuang (ver. 126)", GAME_IMPERFECT_SOUND )
+GAME( 1997, orlegnde, orlegend, pgm, pgm, orlegend, ROT0, "IGS", "Oriental Legend / Xi Yo Gi Shi Re Zuang (ver. 112)", GAME_IMPERFECT_SOUND )
+GAME( 1997, orlegndc, orlegend, pgm, pgm, orlegend, ROT0, "IGS", "Oriental Legend / Xi Yo Gi Shi Re Zuang (ver. 112, Chinese Board)", GAME_IMPERFECT_SOUND )
+GAME( 1997, orld111c, orlegend, pgm, pgm, orlegend, ROT0, "IGS", "Oriental Legend / Xi Yo Gi Shi Re Zuang (ver. 111, Chinese Board)", GAME_IMPERFECT_SOUND )
+GAME( 1997, orld105k, orlegend, pgm, orld105k, orlegend, ROT0, "IGS", "Oriental Legend / Xi Yo Gi Shi Re Zuang (ver. 105, Korean Board)", GAME_IMPERFECT_SOUND )
+GAME( 1997, drgw2c, drgw2, drgw2, pgm, drgw2c, ROT0, "IGS", "Zhong Guo Long II (ver. 100C, China)", GAME_IMPERFECT_SOUND )
+GAME( 1999, kov, pgm, pgm, sango, kov, ROT0, "IGS", "Knights of Valour / Sangoku Senki (ver. 117)", GAME_IMPERFECT_SOUND ) /* ver # provided by protection? */
+GAME( 1999, kov115, kov, pgm, sango, kov, ROT0, "IGS", "Knights of Valour / Sangoku Senki (ver. 115)", GAME_IMPERFECT_SOUND ) /* ver # provided by protection? */
+GAME( 1999, kovj, kov, pgm, sango, kov, ROT0, "IGS", "Knights of Valour / Sangoku Senki (ver. 100, Japanese Board)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) /* ver # provided by protection? */
+GAME( 1999, photoy2k, pgm, pgm, photoy2k, djlzz, ROT0, "IGS", "Photo Y2K", GAME_IMPERFECT_SOUND ) /* region provided by protection device */
+GAME( 1999, raf102j, photoy2k, pgm, photoy2k, djlzz, ROT0, "IGS", "Real and Fake / Photo Y2K (ver. 102, Japan Board)", GAME_IMPERFECT_SOUND ) /* region provided by protection device */
+
+/* Playable but maybe imperfect protection emulation */
+GAME( 1997, drgw2, pgm, drgw2, pgm, drgw2, ROT0, "IGS", "Dragon World II (ver. 110X, Export)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
+GAME( 1997, drgw2j, drgw2, drgw2, pgm, drgw2j, ROT0, "IGS", "Chuugokuryuu II (ver. 100J, Japan)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
+GAME( 1999, kovplus, kov, pgm, sango, kov, ROT0, "IGS", "Knights of Valour Plus / Sangoku Senki Plus (ver. 119)", GAME_IMPERFECT_SOUND )
+GAME( 1999, kovplusa, kov, pgm, sango, kov, ROT0, "IGS", "Knights of Valour Plus / Sangoku Senki Plus (alt ver. 119)", GAME_IMPERFECT_SOUND )
+GAME( 1998, killbldt, killbld, killbld,killbld, killbld, ROT0, "IGS", "The Killing Blade (Chinese Board)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION ) // it's playable, but there are some things unclear about the protection
+GAME( 1999, puzlstar, pgm, pgm, sango, pstar, ROT0, "IGS", "Puzzle Star", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION ) // not playable past first few rounds
+
+
+/* not working */
+GAME( 1998, drgw3, pgm, pgm, sango, dw3, ROT0, "IGS", "Dragon World 3", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
+GAME( 1998, drgw3k, drgw3, pgm, sango, dw3, ROT0, "IGS", "Dragon World 3 (Korean Board)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
+GAME( 1999, kovsh, kov, kovsh, sango, kovsh, ROT0, "IGS", "Knights of Valour Superheroes / Sangoku Senki Superheroes (ver. 322)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
+
+GAME( 1998, killbld, pgm, killbld,killbld, killbld, ROT0, "IGS", "The Killing Blade", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
+GAME( 1999, olds, pgm, olds, olds, olds, ROT0, "IGS", "Oriental Legend Super / Special (Korea 101)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
+GAME( 1999, olds100, olds, olds, olds, olds, ROT0, "IGS", "Oriental Legend Super / Special (100)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
+GAME( 1999, olds100a, olds, olds, olds, olds, ROT0, "IGS", "Oriental Legend Super / Special (100 alt)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
+GAME( 2000, kov2, pgm, kov2, sango, kov2, ROT0, "IGS", "Knights of Valour 2", GAME_IMPERFECT_SOUND )
+GAME( 2000, kov2106, kov2, kov2, sango, kov2, ROT0, "IGS", "Knights of Valour 2 (106)", GAME_IMPERFECT_SOUND )
+GAME( 2000, kov2p, kov2, kov2, sango, kov2, ROT0, "IGS", "Knights of Valour 2 Plus - Nine Dragons", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
+GAME( 2001, ddp2, pgm, pgm, ddp2, ddp2, ROT270, "IGS", "Bee Storm - DoDonPachi II", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
+GAME( 2001, puzzli2, pgm, pgm, sango, puzzli2, ROT0, "IGS", "Puzzli 2 Super", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
+GAME( 2001, martmast, pgm, kov2, sango, martmast, ROT0, "IGS", "Martial Masters", GAME_IMPERFECT_SOUND )
+GAME( 2001, theglad, pgm, pgm, sango, pgm, ROT0, "IGS", "The Gladiator", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
+GAME( 2002, dmnfrnt, pgm, pgm, sango, pgm, ROT0, "IGS", "Demon Front (V102)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
+GAME( 2002, dmnfrnta, dmnfrnt, pgm, sango, pgm, ROT0, "IGS", "Demon Front (V105)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )