diff options
Diffstat (limited to 'src/mame/drivers/psikyosh.c')
-rw-r--r-- | src/mame/drivers/psikyosh.c | 1304 |
1 files changed, 1304 insertions, 0 deletions
diff --git a/src/mame/drivers/psikyosh.c b/src/mame/drivers/psikyosh.c new file mode 100644 index 00000000000..a3d8983fd13 --- /dev/null +++ b/src/mame/drivers/psikyosh.c @@ -0,0 +1,1304 @@ +/*---------------------------------------------------------------- + Psikyo PS3/PS5/PS5v2 SH-2 Based Systems + driver by David Haywood (+ Paul Priest) + thanks to Farfetch'd for information about the sprite zoom table. +------------------------------------------------------------------ + +Moving on from the 68020 based system used for the first Strikers +1945 game Psikyo introduced a system using Hitachi's SH-2 CPU + +This driver is for the single-screen PS3/PS5/PS5v2 boards + +There appear to be multiple revisions of this board + + Board PS3-V1 (Custom Chip PS6406B) + ----------------------------------- + Sol Divide (c)1997 + Strikers 1945 II (c)1997 + Space Bomber Ver.B (c)1998 + Daraku Tenshi - The Fallen Angels (c)1998 + + Board PS5 (Custom Chip PS6406B) + ------------------------------- + Gunbird 2 (c)1998 + Strikers 1999 / Strikers 1945 III (c)1999 + + The PS5 board appears to just have a different memory map to PS3 + Otherwise identical. + + Board PS5V2 (Custom Chip PS6406B) + --------------------------------- + Dragon Blaze (c)2000 + Tetris The Grand Master 2 (c)2000 + Tetris The Grand Master 2 Plus (c)2000 (Confirmed by Japump to be a Dragon Blaze upgraded board) + GunBarich (c)2001 (Appears to be a Dragon Blaze upgraded board, easily replaced chips have been swapped) + Mahjong G-Taste (c)2002 + + The PS5v2 board is only different physically. + +All the boards have + +YMF278B-F (80 pin PQFP) & YAC513 (16 pin SOIC) +( YMF278B-F is OPL4 == OPL3 plus a sample playback engine. ) + +93C56 EEPROM +( 93c56 is a 93c46 with double the address space. ) + +To Do: + + - see notes in video file - + + Sol Divid's music is not correct, related to sh-2 timers. + + +*-----------------------------------* +| Tips and Tricks | +*-----------------------------------* + +Hold Button during booting to test roms (Checksum 16-bit, on Words for gfx and Bytes for sound) for: + +Daraku: PL1 Button 1 (passes, doesn't test sound) +Space Bomber: PL1 Start (passes all, only if bit 0x40 is set. But then EEPROM resets?) +Gunbird 2: PL1 Start (passes all, only if bit 0x40 is set. But then EEPROM resets) +Strikers 1945III: PL1 Start (passes all, only if bit 0x40 is set) +Dragon Blaze: PL1 Start (passes all, only if bit 0x40 is set) +Gunbarich: PL1 Start (passes all, only if bit 0x40 is set) + + +Hold PL1 Button 1 and Test Mode button to get Maintenance mode for: + +Space Bomber, Strikers 1945 II, Sol Divide, Daraku +(this works for earlier Psikyo games as well) + +--- Space Bomber --- + +Keywords, what are these for???, you earn them when you complete the game +with different points.: + +DOG-1 +CAT-2 +BUTA-3 +KAME-4 +IKA-5 +RABBIT-6 +FROG-7 +TAKO-8 + +--- Gunbird 2 --- + +5-2-0-4-8 Maintenance Mode +5-3-5-7-3 All Data Initialised + +[Aine] +5-1-0-2-4 Secret Command Enabled ["Down" on ?] +5-3-7-6-5 Secret Random Enabled +5-3-1-5-7 Secret All Disabled + +--- Strikers 1945 III / S1999 --- + +8-1-6-5-0 Maintenance Mode +8-1-6-1-0 All Data Initialised +1-2-3-4-5 Best Score Erased + +[X-36] +0-1-9-9-9 Secret Command Enabled ["Up" on ?] +8-1-6-3-0 Secret Random Enabled +8-1-6-2-0 Secret All Disabled + +--- Dragon Blaze --- + +9-2-2-2-0 Maintenance Mode +9-2-2-1-0 All Data Initialised +1-2-3-4-5 Best Score Erased + +--- Gunbarich --- + +0-2-9-2-0 Maintainance Mode +0-2-9-1-0 All Data Initialised +1-2-3-4-5 Best Score Erased + +--- Tetris The Grand Master 2 / TGM2+ --- + +4-1-5-7-3 All Data Initialised +4-1-7-6-5 Best Score Erased + +The following 4 are also tested for, but appear to be disabled: +1-3-5-7-9 +0-2-4-6-8 +4-1-3-7-3 +5-0-2-1-3 + +----------------------------------------------------------------*/ + +/* + +Psikyo PS3-V1 hardware readme +----------------------------- + +Strikers 1945 II +Sol Divid +Daraku +Space Bomber + +PCB Layout +---------- + +PS3-V1 +|-------------------------------------------------| +|HA13118 3771 PROG_L | +| VOL YAC513 PROG_H |-----| | +| JRC4741 | SH2 | | +| *U16 | | | +| YMF278B SOUND.U32 |-----| | +| | +|J | +|A 57.2727MHz HY514260 HY514260| +|M | +|M |-------| | +|A |PSIKYO | | +| |PS6406B| *4L.10 0L.4 | +| 62256 | | | +|93C56 62256 |-------| *5L.9 1L.3 | +|JP5 | +| *6H.37 *4H.31 2H.20 0H.13 *6L.8 2L.2 | +| | +| *7L.7 3L.1 | +| *7H.36 *5H.30 3H.19 1H.12 | +|-------------------------------------------------| +Notes: + JP5 - hardwired jumper bank (x4) for region selection. Cut 2ND jumper from left + for International/English region. All jumpers shorted = Japan region (default) + SH2 - Hitachi HD6417604F28 SH-2 CPU, clock input 28.63635 [57.2727/2] (QFP144) + YMF278B - Yamaha YMF278B OPL4 sound chip, clock input 28.63635MHz [57.2727/2] (QFP80) + PROG_H/PROG_L - 27C4096 DIP40 EPROM + All other ROMs - 32M SOP44 MaskROM + * - ROM locations not populated + VSync - 60Hz + HSync - 15.27kHz + + +Psikyo PS5 hardware readme +-------------------------- + +Gunbird 2 +Strikers 1945 III / Strikers 1999 + +PCB Layout +---------- + +PS5 +|-------------------------------------------------| +|HA13118 M514260 PROG_L.U16 DATA.U1 | +| VOL 3771 M514260 PROG_H.U17 | +| *PROG_DATA.U2| +| PAL | +| | +| JRC4741 0H.10 0L.3 | +|J |-----| | +|A | SH2 | 57.2727MHz 1H.11 1L.4 | +|M YAC513 | | | +|M |-----| |-------| 2H.12 2L.5 | +|A |PSIKYO | | +| |PS6406B| 3H.13 3L.6 | +| | | | +| |-------| *4H.14 *4L.7 | +| | +| 62256 *5H.15 *5L.8 | +| 62256 | +| 93C56 | +| JP4 YMF278B SOUND.9 | +|-------------------------------------------------| +Notes: + JP4 - hardwired jumper bank (x4) for region selection. Cut leftmost jumper + for International/English region. All jumpers shorted = Japan region (default) + SH2 - Hitachi HD6417604F28 SH-2 CPU, clock input 28.63635 [57.2727/2] (QFP144) + YMF278B - Yamaha YMF278B OPL4 sound chip, clock input 28.63635MHz [57.2727/2] (QFP80) + PAL - AMD PALCE 16V8H stamped 'PS5-1' (DIP20) + PROG_H/PROG_L/DATA - 27C4096 DIP40 EPROM + All other ROMs - 64M/32M SOP44 MaskROM + * - ROM locations not populated + VSync - 60Hz + HSync - 15.27kHz + + +Psikyo PS5V2 hardware readme +---------------------------- + +Dragon Blaze, Psikyo, 2000 +Gunbarich, Psikyo, 2001 +Tetris The Grand Master 2 , Psikyo, 2000 +Tetris The Grand Master 2+, Psikyo, 2000 + +PCB Layout +---------- + +PS5V2 +|----------------------------------------------------| +|HA13118 PS5-1 SM81C256 PROG_H.U21 *0H.U11 *0L.U3 | +|VOL JRC4741 SM81C256 PROG_L.U22 | +| YAC516 3771 *1H.U12 *1L.U4 | +| |-----| *U23 | +| | SH2 | *2H.U13 *2L.U5 | +| | | | +|J YMF278B |-----| 3H.U14 3L.U6 | +|A 57.2727MHz | +|M 4H.U15 4L.U7 | +|M SND.U52 |-------| | +|A |PSIKYO | 5H.U16 5L.U8 | +| |PS6406B| | +| | | *6H.U17 *6L.U9 | +| 62256 |-------| | +| JP3 93C56 62256 *7H.U18 *7L.U10| +| | +| 10L.U58 9L.U41 8L.U28 7L.U19 6L.U1 | +| | +| 10H.U59 9H.U42 8H.U29 7H.U20 6H.U2 | +|----------------------------------------------------| +Notes: + JP3 - hardwired jumper bank (x4) for region selection. Cut rightmost jumper + for International/English region. All jumpers shorted = Japan region (default) + SH2 - Hitachi HD6417604F28 SH-2 CPU, clock input 28.63635 [57.2727/2] (QFP144) + YMF278B - Yamaha YMF278B OPL4 sound chip, clock input 28.63635MHz [57.2727/2] (QFP80) + PROG_H/PROG_L - 27C4096 DIP40 EPROM + ROMs U1-U59 (at bottom of PCB) - 16M DIP42 MaskROM + ROMs U3-U10 & U11-U18 (at side of PCB) - 16M TSOP48 Type-II surface-mounted MaskROM + ROM U52 - 32M TSOP48 Type-II surface-mounted MaskROM + * - ROM locations not populated on tgm2 & tgm2+ + VSync - 60Hz + HSync - 15.27kHz + +*/ + +#include "driver.h" + +#include "cpu/sh2/sh2.h" +#include "machine/eeprom.h" +#include "sound/ymf278b.h" + +#include "psikyosh.h" + +#define ROMTEST 1 /* Does necessary stuff to perform rom test, uses RAM as it doesn't dispose of GFX after decoding */ + +static UINT8 factory_eeprom[16] = { 0x00,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00 }; +static UINT8 daraku_eeprom[16] = { 0x03,0x02,0x00,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; +static UINT8 s1945iii_eeprom[16] = { 0x00,0x00,0x00,0x00,0x00,0x01,0x11,0x70,0x25,0x25,0x25,0x00,0x01,0x00,0x11,0xe0 }; +static UINT8 dragnblz_eeprom[16] = { 0x00,0x01,0x11,0x70,0x25,0x25,0x25,0x00,0x01,0x00,0x11,0xe0,0x00,0x00,0x00,0x00 }; +static UINT8 gnbarich_eeprom[16] = { 0x00,0x0f,0x42,0x40,0x08,0x0a,0x00,0x00,0x01,0x06,0x42,0x59,0x00,0x00,0x00,0x00 }; +static UINT8 mjgtaste_eeprom[16] = { 0x00,0x00,0x00,0x01,0x01,0x00,0x01,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00 }; + +static int use_factory_eeprom; + +UINT32 *psikyosh_bgram, *psikyosh_zoomram, *psikyosh_vidregs; +static UINT32 *psh_ram; + +static const gfx_layout layout_16x16x4 = +{ + 16,16, + RGN_FRAC(1,1), + 4, + {STEP4(0,1)}, + {STEP16(0,4)}, + {STEP16(0,16*4)}, + 16*16*4 +}; + +static const gfx_layout layout_16x16x8 = +{ + 16,16, + RGN_FRAC(1,1), + 8, + {STEP8(0,1)}, + {STEP16(0,8)}, + {STEP16(0,16*8)}, + 16*16*8 +}; + +static GFXDECODE_START( psikyosh ) + GFXDECODE_ENTRY( REGION_GFX1, 0, layout_16x16x4, 0x000, 0x100 ) // 4bpp tiles + GFXDECODE_ENTRY( REGION_GFX1, 0, layout_16x16x8, 0x000, 0x100 ) // 8bpp tiles +GFXDECODE_END + +static struct EEPROM_interface eeprom_interface_93C56 = +{ + 8, // address bits 8 + 8, // data bits 8 + "*110x", // read 110x aaaaaaaa + "*101x", // write 101x aaaaaaaa dddddddd + "*111x", // erase 111x aaaaaaaa + "*10000xxxxxxx",// lock 100x 00xxxx + "*10011xxxxxxx",// unlock 100x 11xxxx +// "*10001xxxx", // write all 1 00 01xxxx dddddddddddddddd +// "*10010xxxx" // erase all 1 00 10xxxx +}; + +static NVRAM_HANDLER(93C56) +{ + if (read_or_write) + { + EEPROM_save(file); + } + else + { + EEPROM_init(&eeprom_interface_93C56); + if (file) + { + EEPROM_load(file); + } + else // these games want the eeprom all zeros by default + { + int length; + UINT8 *dat; + + dat = EEPROM_get_data_pointer(&length); + memset(dat, 0, length); + + if (use_factory_eeprom!=EEPROM_0) /* Set the EEPROM to Factory Defaults for games needing them*/ + { + UINT8 eeprom_data[0x100]; + int i; + + for(i=0; i<0x100; i++) eeprom_data[i] = 0; + + memcpy(eeprom_data, factory_eeprom, 0x10); + + if (use_factory_eeprom==EEPROM_DARAKU) /* Daraku, replace top 10 bytes with defaults (different to other games) */ + memcpy(eeprom_data, daraku_eeprom, 0x10); + + if (use_factory_eeprom==EEPROM_S1945III) /* S1945iii suffers from corruption on highscore unless properly initialised at the end of the eeprom */ + memcpy(eeprom_data+0xf0, s1945iii_eeprom, 0x10); + + if (use_factory_eeprom==EEPROM_DRAGNBLZ) /* Dragnblz too */ + memcpy(eeprom_data+0xf0, dragnblz_eeprom, 0x10); + + if (use_factory_eeprom==EEPROM_GNBARICH) /* Might as well do Gnbarich as well, otherwise the highscore is incorrect */ + memcpy(eeprom_data+0xf0, gnbarich_eeprom, 0x10); + + if (use_factory_eeprom==EEPROM_MJGTASTE) /* We don't emulate the Mahjong panel yet, so default it to joystick */ + { + memcpy(eeprom_data+0x00, mjgtaste_eeprom, 0x10); + memcpy(eeprom_data+0xf0, mjgtaste_eeprom, 0x10); + } + + EEPROM_set_data(eeprom_data,0x100); + } + } + } +} + +static WRITE32_HANDLER( psh_eeprom_w ) +{ + if (ACCESSING_MSB32) + { + EEPROM_write_bit((data & 0x20000000) ? 1 : 0); + EEPROM_set_cs_line((data & 0x80000000) ? CLEAR_LINE : ASSERT_LINE); + EEPROM_set_clock_line((data & 0x40000000) ? ASSERT_LINE : CLEAR_LINE); + + return; + } + + logerror("Unk EEPROM write %x mask %x\n", data, mem_mask); +} + +static READ32_HANDLER( psh_eeprom_r ) +{ + if (ACCESSING_MSB32) + { + return ((EEPROM_read_bit() << 28) | (readinputport(4) << 24)); /* EEPROM | Region */ + } + + logerror("Unk EEPROM read mask %x\n", mem_mask); + + return 0; +} + +static INTERRUPT_GEN(psikyosh_interrupt) +{ + cpunum_set_input_line(0, 4, HOLD_LINE); +} + +static READ32_HANDLER(io32_r) +{ + return ((readinputport(0) << 24) | (readinputport(1) << 16) | (readinputport(2) << 8) | (readinputport(3) << 0)); +} + +static WRITE32_HANDLER( paletteram32_RRRRRRRRGGGGGGGGBBBBBBBBxxxxxxxx_dword_w ) +{ + int r,g,b; + COMBINE_DATA(&paletteram32[offset]); /* is this ok .. */ + + b = ((paletteram32[offset] & 0x0000ff00) >>8); + g = ((paletteram32[offset] & 0x00ff0000) >>16); + r = ((paletteram32[offset] & 0xff000000) >>24); + + palette_set_color(Machine,offset,MAKE_RGB(r,g,b)); +} + +static WRITE32_HANDLER( psikyosh_vidregs_w ) +{ + COMBINE_DATA(&psikyosh_vidregs[offset]); + +#if ROMTEST + if(offset==4) /* Configure bank for gfx test */ + { + if (!(mem_mask & 0x000000ff) || !(mem_mask & 0x0000ff00)) // Bank + { + UINT8 *ROM = memory_region(REGION_GFX1); + memory_set_bankptr(2,&ROM[0x20000 * (psikyosh_vidregs[offset]&0xfff)]); /* Bank comes from vidregs */ + } + } +#endif +} + +#if ROMTEST +static UINT32 sample_offs = 0; + +static READ32_HANDLER( psh_sample_r ) /* Send sample data for test */ +{ + UINT8 *ROM = memory_region(REGION_SOUND1); + + return ROM[sample_offs++]<<16; +} +#endif + +static READ32_HANDLER( psh_ymf_fm_r ) +{ + return YMF278B_status_port_0_r(0)<<24; /* Also, bit 0 being high indicates not ready to send sample data for test */ +} + +static WRITE32_HANDLER( psh_ymf_fm_w ) +{ + if (!(mem_mask & 0xff000000)) // FM bank 1 address (OPL2/OPL3 compatible) + { + YMF278B_control_port_0_A_w(0, data>>24); + } + + if (!(mem_mask & 0x00ff0000)) // FM bank 1 data + { + YMF278B_data_port_0_A_w(0, data>>16); + } + + if (!(mem_mask & 0x0000ff00)) // FM bank 2 address (OPL3/YMF 262 extended) + { + YMF278B_control_port_0_B_w(0, data>>8); + } + + if (!(mem_mask & 0x000000ff)) // FM bank 2 data + { + YMF278B_data_port_0_B_w(0, data); + } +} + +static WRITE32_HANDLER( psh_ymf_pcm_w ) +{ + if (!(mem_mask & 0xff000000)) // PCM address (OPL4/YMF 278B extended) + { + YMF278B_control_port_0_C_w(0, data>>24); + +#if ROMTEST + if (data>>24 == 0x06) // Reset Sample reading (They always write this code immediately before reading data) + { + sample_offs = 0; + } +#endif + } + + if (!(mem_mask & 0x00ff0000)) // PCM data + { + YMF278B_data_port_0_C_w(0, data>>16); + } +} + +static ADDRESS_MAP_START( ps3v1_readmem, ADDRESS_SPACE_PROGRAM, 32 ) + AM_RANGE(0x00000000, 0x000fffff) AM_READ(MRA32_ROM) // program ROM (1 meg) + AM_RANGE(0x02000000, 0x021fffff) AM_READ(MRA32_BANK1) // data ROM + AM_RANGE(0x03000000, 0x03003fff) AM_READ(MRA32_RAM) // sprites + AM_RANGE(0x03004000, 0x0300ffff) AM_READ(MRA32_RAM) + AM_RANGE(0x03040000, 0x03044fff) AM_READ(MRA32_RAM) + AM_RANGE(0x03050000, 0x030501ff) AM_READ(MRA32_RAM) + AM_RANGE(0x0305ffdc, 0x0305ffdf) AM_READ(MRA32_NOP) // also writes to this address - might be vblank reads? + AM_RANGE(0x0305ffe0, 0x0305ffff) AM_READ(MRA32_RAM) // video registers + AM_RANGE(0x05000000, 0x05000003) AM_READ(psh_ymf_fm_r) // read YMF status + AM_RANGE(0x05800000, 0x05800003) AM_READ(io32_r) + AM_RANGE(0x05800004, 0x05800007) AM_READ(psh_eeprom_r) + AM_RANGE(0x06000000, 0x060fffff) AM_READ(MRA32_RAM) // main RAM (1 meg) + +#if ROMTEST + AM_RANGE(0x05000004, 0x05000007) AM_READ(psh_sample_r) // data for rom tests (Used to verify Sample rom) + AM_RANGE(0x03060000, 0x0307ffff) AM_READ(MRA32_BANK2) // data for rom tests (gfx), data is controlled by vidreg + AM_RANGE(0x04060000, 0x0407ffff) AM_READ(MRA32_BANK2) // data for rom tests (gfx) (Mirrored?) +#endif +ADDRESS_MAP_END + +static ADDRESS_MAP_START( ps3v1_writemem, ADDRESS_SPACE_PROGRAM, 32 ) + AM_RANGE(0x00000000, 0x000fffff) AM_WRITE(MWA32_ROM) // program ROM (1 meg) + AM_RANGE(0x02000000, 0x021fffff) AM_WRITE(MWA32_ROM) // data ROM + AM_RANGE(0x03000000, 0x03003fff) AM_WRITE(MWA32_RAM) AM_BASE(&spriteram32) AM_SIZE(&spriteram_size) // sprites (might be a bit longer) + AM_RANGE(0x03004000, 0x0300ffff) AM_WRITE(MWA32_RAM) AM_BASE(&psikyosh_bgram) // backgrounds + AM_RANGE(0x03040000, 0x03044fff) AM_WRITE(paletteram32_RRRRRRRRGGGGGGGGBBBBBBBBxxxxxxxx_dword_w) AM_BASE(&paletteram32) // palette.. + AM_RANGE(0x03050000, 0x030501ff) AM_WRITE(MWA32_RAM) AM_BASE(&psikyosh_zoomram) // a gradient sometimes ... + AM_RANGE(0x0305ffdc, 0x0305ffdf) AM_WRITE(MWA32_RAM) // also reads from this address + AM_RANGE(0x0305ffe0, 0x0305ffff) AM_WRITE(psikyosh_vidregs_w) AM_BASE(&psikyosh_vidregs) // video registers + AM_RANGE(0x05000000, 0x05000003) AM_WRITE(psh_ymf_fm_w) // first 2 OPL4 register banks + AM_RANGE(0x05000004, 0x05000007) AM_WRITE(psh_ymf_pcm_w) // third OPL4 register bank + AM_RANGE(0x05800004, 0x05800007) AM_WRITE(psh_eeprom_w) + AM_RANGE(0x06000000, 0x060fffff) AM_WRITE(MWA32_RAM) AM_BASE(&psh_ram) // work RAM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( ps5_readmem, ADDRESS_SPACE_PROGRAM, 32 ) + AM_RANGE(0x00000000, 0x000fffff) AM_READ(MRA32_ROM) // program ROM (1 meg) + AM_RANGE(0x03000000, 0x03000003) AM_READ(io32_r) + AM_RANGE(0x03000004, 0x03000007) AM_READ(psh_eeprom_r) + AM_RANGE(0x03100000, 0x03100003) AM_READ(psh_ymf_fm_r) + AM_RANGE(0x04000000, 0x04003fff) AM_READ(MRA32_RAM) // sprites + AM_RANGE(0x04004000, 0x0400ffff) AM_READ(MRA32_RAM) + AM_RANGE(0x04040000, 0x04044fff) AM_READ(MRA32_RAM) + AM_RANGE(0x04050000, 0x040501ff) AM_READ(MRA32_RAM) + AM_RANGE(0x0405ffdc, 0x0405ffdf) AM_READ(MRA32_NOP) // also writes to this address - might be vblank reads? + AM_RANGE(0x0405ffe0, 0x0405ffff) AM_READ(MRA32_RAM) // video registers + AM_RANGE(0x05000000, 0x0507ffff) AM_READ(MRA32_BANK1) // data ROM + AM_RANGE(0x06000000, 0x060fffff) AM_READ(MRA32_RAM) + +#if ROMTEST + AM_RANGE(0x03100004, 0x03100007) AM_READ(psh_sample_r) // data for rom tests (Used to verify Sample rom) + AM_RANGE(0x04060000, 0x0407ffff) AM_READ(MRA32_BANK2) // data for rom tests (gfx), data is controlled by vidreg +#endif +ADDRESS_MAP_END + +static ADDRESS_MAP_START( ps5_writemem, ADDRESS_SPACE_PROGRAM, 32 ) + AM_RANGE(0x00000000, 0x000fffff) AM_WRITE(MWA32_ROM) // program ROM (1 meg) + AM_RANGE(0x03000004, 0x03000007) AM_WRITE(psh_eeprom_w) + AM_RANGE(0x03100000, 0x03100003) AM_WRITE(psh_ymf_fm_w) // first 2 OPL4 register banks + AM_RANGE(0x03100004, 0x03100007) AM_WRITE(psh_ymf_pcm_w) // third OPL4 register bank + AM_RANGE(0x04000000, 0x04003fff) AM_WRITE(MWA32_RAM) AM_BASE(&spriteram32) AM_SIZE(&spriteram_size) + AM_RANGE(0x04004000, 0x0400ffff) AM_WRITE(MWA32_RAM) AM_BASE(&psikyosh_bgram) // backgrounds + AM_RANGE(0x04040000, 0x04044fff) AM_WRITE(paletteram32_RRRRRRRRGGGGGGGGBBBBBBBBxxxxxxxx_dword_w) AM_BASE(&paletteram32) + AM_RANGE(0x04050000, 0x040501ff) AM_WRITE(MWA32_RAM) AM_BASE(&psikyosh_zoomram) + AM_RANGE(0x0405ffdc, 0x0405ffdf) AM_WRITE(MWA32_RAM) // also reads from this address + AM_RANGE(0x0405ffe0, 0x0405ffff) AM_WRITE(psikyosh_vidregs_w) AM_BASE(&psikyosh_vidregs) // video registers + AM_RANGE(0x05000000, 0x0507ffff) AM_WRITE(MWA32_ROM) // data ROM + AM_RANGE(0x06000000, 0x060fffff) AM_WRITE(MWA32_RAM) AM_BASE(&psh_ram) +ADDRESS_MAP_END + +static void irqhandler(int linestate) +{ + if (linestate) + cpunum_set_input_line(0, 12, ASSERT_LINE); + else + cpunum_set_input_line(0, 12, CLEAR_LINE); +} + +static struct YMF278B_interface ymf278b_interface = +{ + REGION_SOUND1, + irqhandler +}; + +static MACHINE_DRIVER_START( psikyo3v1 ) + /* basic machine hardware */ + MDRV_CPU_ADD_TAG("main", SH2, MASTER_CLOCK/2) + MDRV_CPU_PROGRAM_MAP(ps3v1_readmem,ps3v1_writemem) + MDRV_CPU_VBLANK_INT(psikyosh_interrupt,1) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + MDRV_NVRAM_HANDLER(93C56) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_BUFFERS_SPRITERAM ) /* If using alpha */ + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_RGB32) + MDRV_SCREEN_SIZE(64*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0, 40*8-1, 0, 28*8-1) + MDRV_GFXDECODE(psikyosh) + MDRV_PALETTE_LENGTH(0x5000/4) + + MDRV_VIDEO_START(psikyosh) + MDRV_VIDEO_EOF(psikyosh) + MDRV_VIDEO_UPDATE(psikyosh) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(YMF278B, MASTER_CLOCK/2) + MDRV_SOUND_CONFIG(ymf278b_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 1.0) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 1.0) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( psikyo5 ) + /* basic machine hardware */ + MDRV_IMPORT_FROM(psikyo3v1) + + MDRV_CPU_MODIFY("main") + MDRV_CPU_PROGRAM_MAP(ps5_readmem,ps5_writemem) +MACHINE_DRIVER_END + +#if 0 +static MACHINE_DRIVER_START( psikyo5_240 ) + /* basic machine hardware */ + MDRV_IMPORT_FROM(psikyo3v1) + + MDRV_CPU_MODIFY("main") + MDRV_CPU_PROGRAM_MAP(ps5_readmem,ps5_writemem) + + /* It probably has a register to change visarea */ + MDRV_SCREEN_VISIBLE_AREA(0, 40*8-1, 0, 30*8-1) +MACHINE_DRIVER_END +#endif + + +#define UNUSED_PORT \ + PORT_START_TAG("IN2")/* not read? */ \ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) \ + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) \ + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) \ + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) \ + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) \ + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) \ + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) \ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + +#define PORT_COIN( debug ) \ + PORT_START_TAG("IN3") /* System inputs */ \ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) \ + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) \ + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) \ + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) \ + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) \ + PORT_SERVICE_NO_TOGGLE(0x20, IP_ACTIVE_LOW) \ + PORT_DIPNAME( 0x40, debug, "Debug" ) /* Must be high for dragnblz, low for others (Resets EEPROM?). Debug stuff */ \ + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) \ + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) \ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + +#define PSIKYOSH_PORT_PLAYER( player, start, button1, button2, button3 ) \ + PORT_BIT( 0x01, IP_ACTIVE_LOW, start ) \ + PORT_BIT( 0x02, IP_ACTIVE_LOW, button3 ) PORT_PLAYER(player) \ + PORT_BIT( 0x04, IP_ACTIVE_LOW, button2 ) PORT_PLAYER(player) \ + PORT_BIT( 0x08, IP_ACTIVE_LOW, button1 ) PORT_PLAYER(player) \ + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(player) \ + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(player) \ + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(player) \ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(player) + +static INPUT_PORTS_START( s1945ii ) + PORT_START_TAG("IN0") + PSIKYOSH_PORT_PLAYER( 1, IPT_START1, IPT_BUTTON1, IPT_BUTTON2, IPT_UNKNOWN ) + PORT_START_TAG("IN1") + PSIKYOSH_PORT_PLAYER( 2, IPT_START2, IPT_BUTTON1, IPT_BUTTON2, IPT_UNKNOWN ) + + UNUSED_PORT + PORT_COIN( 0x40 ) + + PORT_START_TAG("IN4") /* jumper pads on the PCB */ + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Region ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Japan ) ) + PORT_DIPSETTING( 0x01, DEF_STR( World ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( soldivid ) + PORT_START_TAG("IN0") + PSIKYOSH_PORT_PLAYER( 1, IPT_START1, IPT_BUTTON1, IPT_BUTTON2, IPT_BUTTON3 ) + PORT_START_TAG("IN1") + PSIKYOSH_PORT_PLAYER( 2, IPT_START2, IPT_BUTTON1, IPT_BUTTON2, IPT_BUTTON3 ) + + UNUSED_PORT + PORT_COIN( 0x40 ) + + PORT_START_TAG("IN4")/* jumper pads on the PCB */ + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Region ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Japan ) ) + PORT_DIPSETTING( 0x01, DEF_STR( World ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( daraku ) + PORT_START_TAG("IN0") + PSIKYOSH_PORT_PLAYER( 1, IPT_START1, IPT_BUTTON1, IPT_BUTTON2, IPT_UNKNOWN ) + PORT_START_TAG("IN1") + PSIKYOSH_PORT_PLAYER( 2, IPT_START2, IPT_BUTTON1, IPT_BUTTON2, IPT_UNKNOWN ) + + PORT_START_TAG("IN2") /* more controls */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + + PORT_COIN( 0x40 ) + + PORT_START_TAG("IN4")/* jumper pads on the PCB */ + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Region ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Japan ) ) + PORT_DIPSETTING( 0x01, DEF_STR( World ) ) /* Title screen is different, English is default now */ +INPUT_PORTS_END + +static INPUT_PORTS_START( sbomberb ) + PORT_START_TAG("IN0") + PSIKYOSH_PORT_PLAYER( 1, IPT_START1, IPT_BUTTON1, IPT_BUTTON2, IPT_UNKNOWN ) + PORT_START_TAG("IN1") + PSIKYOSH_PORT_PLAYER( 2, IPT_START2, IPT_BUTTON1, IPT_BUTTON2, IPT_UNKNOWN ) + + UNUSED_PORT + PORT_COIN( 0x40 ) /* If HIGH then you can perform rom test, but EEPROM resets? */ + + PORT_START_TAG("IN4")/* jumper pads on the PCB */ + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Region ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Japan ) ) + PORT_DIPSETTING( 0x01, DEF_STR( World ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( gunbird2 ) /* Different Region */ + PORT_START_TAG("IN0") + PSIKYOSH_PORT_PLAYER( 1, IPT_START1, IPT_BUTTON1, IPT_BUTTON2, IPT_BUTTON3 ) + PORT_START_TAG("IN1") + PSIKYOSH_PORT_PLAYER( 2, IPT_START2, IPT_BUTTON1, IPT_BUTTON2, IPT_BUTTON3 ) + + UNUSED_PORT + PORT_COIN( 0x40 ) /* If HIGH then you can perform rom test, but EEPROM resets */ + + PORT_START_TAG("IN4")/* jumper pads on the PCB */ + PORT_DIPNAME( 0x03, 0x02, DEF_STR( Region ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Japan ) ) + PORT_DIPSETTING( 0x01, "International Ver A." ) + PORT_DIPSETTING( 0x02, "International Ver B." ) +INPUT_PORTS_END + +static INPUT_PORTS_START( s1945iii ) /* Different Region again */ + PORT_START_TAG("IN0") + PSIKYOSH_PORT_PLAYER( 1, IPT_START1, IPT_BUTTON1, IPT_BUTTON2, IPT_BUTTON3 ) + PORT_START_TAG("IN1") + PSIKYOSH_PORT_PLAYER( 2, IPT_START2, IPT_BUTTON1, IPT_BUTTON2, IPT_BUTTON3 ) + + UNUSED_PORT + PORT_COIN( 0x40 ) /* If HIGH then you can perform rom test, EEPROM doesn't reset */ + + PORT_START_TAG("IN4")/* IN4 jumper pads on the PCB */ + PORT_DIPNAME( 0x03, 0x01, DEF_STR( Region ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Japan ) ) + PORT_DIPSETTING( 0x02, "International Ver A." ) + PORT_DIPSETTING( 0x01, "International Ver B." ) +INPUT_PORTS_END + +static INPUT_PORTS_START( dragnblz ) /* Security requires bit high */ + PORT_START_TAG("IN0") + PSIKYOSH_PORT_PLAYER( 1, IPT_START1, IPT_BUTTON1, IPT_BUTTON2, IPT_BUTTON3 ) + PORT_START_TAG("IN1") + PSIKYOSH_PORT_PLAYER( 2, IPT_START2, IPT_BUTTON1, IPT_BUTTON2, IPT_BUTTON3 ) + + UNUSED_PORT + + PORT_COIN( 0 ) /* Must be HIGH (Or Security Error), so can perform test */ + + PORT_START_TAG("IN4")/* jumper pads on the PCB */ + PORT_DIPNAME( 0x03, 0x01, DEF_STR( Region ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Japan ) ) + PORT_DIPSETTING( 0x02, "International Ver A." ) + PORT_DIPSETTING( 0x01, "International Ver B." ) +INPUT_PORTS_END + +static INPUT_PORTS_START( gnbarich ) /* Same as S1945iii except only one button */ + PORT_START_TAG("IN0") + PSIKYOSH_PORT_PLAYER( 1, IPT_START1, IPT_BUTTON1, IPT_BUTTON2, IPT_BUTTON3 ) + PORT_START_TAG("IN1") + PSIKYOSH_PORT_PLAYER( 2, IPT_START2, IPT_BUTTON1, IPT_BUTTON2, IPT_BUTTON3 ) + + UNUSED_PORT + PORT_COIN( 0x40 ) /* If HIGH then you can perform rom test, but EEPROM resets? */ + + PORT_START_TAG("IN4")/* jumper pads on the PCB */ + PORT_DIPNAME( 0x03, 0x01, DEF_STR( Region ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Japan ) ) + PORT_DIPSETTING( 0x02, "International Ver A." ) + PORT_DIPSETTING( 0x01, "International Ver B." ) +INPUT_PORTS_END + +static INPUT_PORTS_START( mjgtaste ) /* This will need the Mahjong inputs */ + PORT_START_TAG("IN0") + PSIKYOSH_PORT_PLAYER( 1, IPT_START1, IPT_BUTTON1, IPT_BUTTON2, IPT_BUTTON3 ) + PORT_START_TAG("IN1") + PSIKYOSH_PORT_PLAYER( 2, IPT_START2, IPT_BUTTON1, IPT_BUTTON2, IPT_BUTTON3 ) + + UNUSED_PORT + PORT_COIN( 0x40 ) + + PORT_START_TAG("IN4")/* jumper pads on the PCB */ +// PORT_DIPNAME( 0x03, 0x01, DEF_STR( Region ) ) +// PORT_DIPSETTING( 0x00, DEF_STR( Japan ) ) +// PORT_DIPSETTING( 0x02, "International Ver A." ) +// PORT_DIPSETTING( 0x01, "International Ver B." ) +INPUT_PORTS_END + + +#if ROMTEST +#define ROMTEST_GFX 0 +#else +#define ROMTEST_GFX ROMREGION_DISPOSE +#endif + +/* PS3 */ + +ROM_START( soldivid ) + ROM_REGION( 0x100000, REGION_CPU1, 0) + ROM_LOAD32_WORD_SWAP( "2-prog_l.u18", 0x000002, 0x080000, CRC(cf179b04) SHA1(343f00a81cffd44334a4db81b6b828b7cf73c1e8) ) + ROM_LOAD32_WORD_SWAP( "1-prog_h.u17", 0x000000, 0x080000, CRC(f467d1c4) SHA1(a011e6f310a54f09efa0bf4597783cd78c05ad6f) ) + + ROM_REGION( 0x3800000, REGION_GFX1, ROMTEST_GFX ) + /* This Space Empty! */ + ROM_LOAD32_WORD_SWAP( "4l.u10", 0x2000000, 0x400000, CRC(9eb9f269) SHA1(4a4d90eefe62b5462f5ed5e062eea7b6b4900f85) ) + ROM_LOAD32_WORD_SWAP( "4h.u31", 0x2000002, 0x400000, CRC(7c76cfe7) SHA1(14e291e840a4afe3802fe1847615c5e806d7492a) ) + ROM_LOAD32_WORD_SWAP( "5l.u9", 0x2800000, 0x400000, CRC(c59c6858) SHA1(bd580b57e432ef42295060c5a84c8129d9b995f7) ) + ROM_LOAD32_WORD_SWAP( "5h.u30", 0x2800002, 0x400000, CRC(73bc66d0) SHA1(7988ce81ff43235a3b30ddd8fd9419530a07b6ba) ) + ROM_LOAD32_WORD_SWAP( "6l.u8", 0x3000000, 0x400000, CRC(f01b816e) SHA1(2a0d86c1c106eef539028aa9ebe49d13216a6b9c) ) + ROM_LOAD32_WORD_SWAP( "6h.u37", 0x3000002, 0x400000, CRC(fdd57361) SHA1(f58d91acde1f4e6d4f0e8dcd1b23aa5092d89916) ) + + ROM_REGION( 0x400000, REGION_SOUND1, 0 ) + ROM_LOAD( "sound.bin", 0x000000, 0x400000, CRC(e98f8d45) SHA1(7791c0f31d08f37c6ec65e7cecf8ef54ca73b1fd) ) +ROM_END + +ROM_START( s1945ii ) + ROM_REGION( 0x100000, REGION_CPU1, 0) /* Code */ + ROM_LOAD32_WORD_SWAP( "2_prog_l.u18", 0x000002, 0x080000, CRC(20a911b8) SHA1(82ba7b93bd621fc45a4dc2722752077b59a0a233) ) + ROM_LOAD32_WORD_SWAP( "1_prog_h.u17", 0x000000, 0x080000, CRC(4c0fe85e) SHA1(74f810a1c3e9d629c8b190f68d73ce07b11f77b7) ) + + ROM_REGION( 0x2000000, REGION_GFX1, ROMTEST_GFX ) /* Tiles */ + ROM_LOAD32_WORD( "0l.u4", 0x0000000, 0x400000, CRC(bfacf98d) SHA1(19954f12881e6e95e808bd1f2c2f5a425786727f) ) + ROM_LOAD32_WORD( "0h.u13", 0x0000002, 0x400000, CRC(1266f67c) SHA1(cf93423a827aa92aa54afbbecf8509d2590edc9b) ) + ROM_LOAD32_WORD( "1l.u3", 0x0800000, 0x400000, CRC(2d3332c9) SHA1(f2e54100a48061bfd589e8765f59ca051176a38b) ) + ROM_LOAD32_WORD( "1h.u12", 0x0800002, 0x400000, CRC(27b32c3e) SHA1(17a80b3c919d8a282169c019ede8a22d2079c018) ) + ROM_LOAD32_WORD( "2l.u2", 0x1000000, 0x400000, CRC(91ba6d23) SHA1(fd016a90204b2de43bb709971f7cd891f839de1a) ) + ROM_LOAD32_WORD( "2h.u20", 0x1000002, 0x400000, CRC(fabf4334) SHA1(f8ec43e083b674700f532575f0d067bd49c5aaf7) ) + ROM_LOAD32_WORD( "3l.u1", 0x1800000, 0x400000, CRC(a6c3704e) SHA1(cb9881e4235cc8e4bcca4c6ccbd8d8d8634e3624) ) + ROM_LOAD32_WORD( "3h.u19", 0x1800002, 0x400000, CRC(4cd3ca70) SHA1(5b0a6ea4fe0e821cebe6e840596f648e24dded51) ) + + ROM_REGION( 0x800000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "sound.u32", 0x000000, 0x400000, CRC(ba680ca7) SHA1(b645896e297aad426784aa656bff738e1b33c2a2) ) + ROM_RELOAD ( 0x400000, 0x400000 ) + /* 0x400000 - 0x7fffff allocated but left blank, it randomly reads from here on the + Iron Casket level causing a crash otherwise, not sure why, bug in the sound emulation? */ +ROM_END + +ROM_START( daraku ) + /* main program */ + ROM_REGION( 0x200000, REGION_CPU1, 0) + ROM_LOAD32_WORD_SWAP( "4_prog_l.u18", 0x000002, 0x080000, CRC(660b4609) SHA1(ee6b5606fae41881c3e671ee642baae5c03331ca) ) + ROM_LOAD32_WORD_SWAP( "3_prog_h.u17", 0x000000, 0x080000, CRC(7a9cf601) SHA1(8df464ce3fd02b30dd2ab77828594f4916375fd5) ) + ROM_LOAD16_WORD_SWAP( "prog.u16", 0x100000, 0x100000, CRC(3742e990) SHA1(dd4b8777e57245151b3d520ed1bdab207530420b) ) + + ROM_REGION( 0x3400000, REGION_GFX1, ROMTEST_GFX ) + ROM_LOAD32_WORD( "0l.u4", 0x0000000, 0x400000, CRC(565d8427) SHA1(090ce9213c530d29e488cfb89bb39fd7169985d5) ) + ROM_LOAD32_WORD( "0h.u13", 0x0000002, 0x400000, CRC(9a602630) SHA1(ab176490b36aec7ce30d1cf20b57c02c926c59d3) ) + ROM_LOAD32_WORD( "1l.u3", 0x0800000, 0x400000, CRC(ac5ce8e1) SHA1(7df6a04ea2530cc669581474e8b8ee6f59caae1b) ) + ROM_LOAD32_WORD( "1h.u12", 0x0800002, 0x400000, CRC(b0a59f7b) SHA1(8704705aa0977f11da8bcdafae6e2531190878d0) ) + ROM_LOAD32_WORD( "2l.u2", 0x1000000, 0x400000, CRC(2daa03b2) SHA1(475badc60cbd26786242d685a3d7dbaf385862a8) ) + ROM_LOAD32_WORD( "2h.u20", 0x1000002, 0x400000, CRC(e98e185a) SHA1(124d5fcf6cfb1faf70d665b687564bf6589d17c4) ) + ROM_LOAD32_WORD( "3l.u1", 0x1800000, 0x400000, CRC(1d372aa1) SHA1(e5965a1d8919409a314dfd56482a848d6ab9f5ac) ) + ROM_LOAD32_WORD( "3h.u19", 0x1800002, 0x400000, CRC(597f3f15) SHA1(62bf74ed29732e6cc1979458745cdb53a8edddf3) ) + ROM_LOAD32_WORD( "4l.u10", 0x2000000, 0x400000, CRC(e3d58cd8) SHA1(9482d0b71f840d72b20029804cfc8dca207462de) ) + ROM_LOAD32_WORD( "4h.u31", 0x2000002, 0x400000, CRC(aebc9cd0) SHA1(c20a1f9851ace74e00f1a0746e0c9e751ccec336) ) + ROM_LOAD32_WORD( "5l.u9", 0x2800000, 0x400000, CRC(eab5a50b) SHA1(76ce96e89afc438bafb9f8caa86eb48fb7e4e154) ) + ROM_LOAD32_WORD( "5h.u30", 0x2800002, 0x400000, CRC(f157474f) SHA1(89509f0772a40829070cea708c21438ff61d1019) ) + ROM_LOAD32_WORD( "6l.u8", 0x3000000, 0x200000, CRC(9f008d1b) SHA1(9607e09bde430eefe126569a6e251114bc8f754b) ) + ROM_LOAD32_WORD( "6h.u37", 0x3000002, 0x200000, CRC(acd2d0e3) SHA1(dee96bdf3b8efde1298b73c5e7dd62abcdc101cf) ) + + ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "sound.u32", 0x000000, 0x400000, CRC(ef2c781d) SHA1(1313f082f6dbe4da0efaf261226085eb7325667f) ) +ROM_END + +ROM_START( sbomberb ) + ROM_REGION( 0x100000, REGION_CPU1, 0) + ROM_LOAD32_WORD_SWAP( "1-b_pr_l.u18", 0x000002, 0x080000, CRC(52d12225) SHA1(0a31a5d557414e7bf51dc6f7fbdd417a20b78df1) ) + ROM_LOAD32_WORD_SWAP( "1-b_pr_h.u17", 0x000000, 0x080000, CRC(1bbd0345) SHA1(c6ccb7c97cc9e9ea298c1883d1dd5563907a7255) ) + + ROM_REGION( 0x2800000, REGION_GFX1, ROMTEST_GFX ) + ROM_LOAD32_WORD( "0l.u4", 0x0000000, 0x400000, CRC(b7e4ac51) SHA1(70e802b6235932116496a77ee0c78a256e85aff3) ) + ROM_LOAD32_WORD( "0h.u13", 0x0000002, 0x400000, CRC(235e6c27) SHA1(c597d7b5bef4edac1474ad0024cfb33eb1257106) ) + ROM_LOAD32_WORD( "1l.u3", 0x0800000, 0x400000, CRC(3c88c48c) SHA1(d1ce4ab60ba18449bbd96e29c310e060a0bb6de6) ) + ROM_LOAD32_WORD( "1h.u12", 0x0800002, 0x400000, CRC(15626a6e) SHA1(5493e92c9724982938591d758bee7d86cf96fd19) ) + ROM_LOAD32_WORD( "2l.u2", 0x1000000, 0x400000, CRC(41e92f64) SHA1(ea121c7cb35266ed0c21af4bb958fe5d73d84977) ) + ROM_LOAD32_WORD( "2h.u20", 0x1000002, 0x400000, CRC(4ae62e84) SHA1(adc1dab2f09aa4f5665d7bb7603a9b75c978031e) ) + ROM_LOAD32_WORD( "3l.u1", 0x1800000, 0x400000, CRC(43ba5f0f) SHA1(b8f93ed055441fd06b68103c9fd62b6aa3f3da7d) ) + ROM_LOAD32_WORD( "3h.u19", 0x1800002, 0x400000, CRC(ff01bb12) SHA1(df6fab898356c02f34ee7a45fdcc265218f2f20e) ) + ROM_LOAD32_WORD( "4l.u10", 0x2000000, 0x400000, CRC(e491d593) SHA1(12a7f6c282969be342b70443b8c802a399571245) ) + ROM_LOAD32_WORD( "4h.u31", 0x2000002, 0x400000, CRC(7bdd377a) SHA1(e357c98f82b8ea3ae4fd8eae6c1ad2dfb500db9c) ) + + ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "sound.u32", 0x000000, 0x400000, CRC(85cbff69) SHA1(34c7f4d337111de2064f84214294b6bdc37bf16c) ) +ROM_END + +/* PS5 */ + +ROM_START( gunbird2 ) + ROM_REGION( 0x180000, REGION_CPU1, 0) + ROM_LOAD32_WORD_SWAP( "2_prog_l.u16", 0x000002, 0x080000, CRC(76f934f0) SHA1(cf197796d66f15639a6b3d5311c18da33cefd06b) ) + ROM_LOAD32_WORD_SWAP( "1_prog_h.u17", 0x000000, 0x080000, CRC(7328d8bf) SHA1(c640de1ab5b32400b2d77e0dc6e3ee0f78ab7803) ) + ROM_LOAD16_WORD_SWAP( "3_pdata.u1", 0x100000, 0x080000, CRC(a5b697e6) SHA1(947f124fa585c2cf77c6571af7559bd652897b89) ) + + ROM_REGION( 0x3800000, REGION_GFX1, ROMTEST_GFX ) + ROM_LOAD32_WORD( "0l.u3", 0x0000000, 0x800000, CRC(5c826bc8) SHA1(74fb6b242b4c5fe5365cfcc3029ed6da4cf3a621) ) + ROM_LOAD32_WORD( "0h.u10", 0x0000002, 0x800000, CRC(3df0cb6c) SHA1(271d276fa0f63d84e458223316a9517865fc2255) ) + ROM_LOAD32_WORD( "1l.u4", 0x1000000, 0x800000, CRC(1558358d) SHA1(e3b9c3da4e9b29ffa9568b57d14fe2b600aead68) ) + ROM_LOAD32_WORD( "1h.u11", 0x1000002, 0x800000, CRC(4ee0103b) SHA1(29bbe0162dda39919fcd188ea4a6b7b5f20366ff) ) + ROM_LOAD32_WORD( "2l.u5", 0x2000000, 0x800000, CRC(e1c7a7b8) SHA1(b5f6e5d53e21928197773df7dde0e7c83f4082af) ) + ROM_LOAD32_WORD( "2h.u12", 0x2000002, 0x800000, CRC(bc8a41df) SHA1(90460b11eea778f17cf8be67430e2ab149680686) ) + ROM_LOAD32_WORD( "3l.u6", 0x3000000, 0x400000, CRC(0229d37f) SHA1(f9d98d1d2dda2d552b2a46c76b4c7fc84b1aa4c6) ) + ROM_LOAD32_WORD( "3h.u13", 0x3000002, 0x400000, CRC(f41bbf2b) SHA1(b705274e392541e2f513a4ae4bae543c03be0913) ) + + ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "sound.u9", 0x000000, 0x400000, CRC(f19796ab) SHA1(b978f0550ebd675e8ce9d9edcfcc3f6214e49e8b) ) +ROM_END + +ROM_START( s1945iii ) + ROM_REGION( 0x180000, REGION_CPU1, 0) + ROM_LOAD32_WORD_SWAP( "2_progl.u16", 0x000002, 0x080000, CRC(5d5d385f) SHA1(67b3bcabd71cf084bcea7a59939281a8d6257059) ) + ROM_LOAD32_WORD_SWAP( "1_progh.u17", 0x000000, 0x080000, CRC(1b8a5a18) SHA1(718a176bd48e16f964fcb07c568b5227cfc0515f) ) + ROM_LOAD16_WORD_SWAP( "3_data.u1", 0x100000, 0x080000, CRC(8ff5f7d3) SHA1(420a3d7f2d5ab6a56789d36b418431f12f5f73f5) ) + + ROM_REGION( 0x3800000, REGION_GFX1, ROMTEST_GFX ) + ROM_LOAD32_WORD( "0l.u3", 0x0000000, 0x800000, CRC(70a0d52c) SHA1(c9d9534da59123b577dc22020273b94ccdeeb67d) ) + ROM_LOAD32_WORD( "0h.u10", 0x0000002, 0x800000, CRC(4dcd22b4) SHA1(2df7a7d08df17d2a62d574fccc8ba40aaae21a13) ) + ROM_LOAD32_WORD( "1l.u4", 0x1000000, 0x800000, CRC(de1042ff) SHA1(468f6dfd5c1f2084c573b6851e314ff2826dc350) ) + ROM_LOAD32_WORD( "1h.u11", 0x1000002, 0x800000, CRC(b51a4430) SHA1(b51117591b0e351e922f9a6a7930e8b50237e54e) ) + ROM_LOAD32_WORD( "2l.u5", 0x2000000, 0x800000, CRC(23b02dca) SHA1(0249dceca02b312301a917d98fac481b6a0a9122) ) + ROM_LOAD32_WORD( "2h.u12", 0x2000002, 0x800000, CRC(9933ab04) SHA1(710e6b20e111c1898666b4466554d039309883cc) ) + ROM_LOAD32_WORD( "3l.u6", 0x3000000, 0x400000, CRC(f693438c) SHA1(d70e25a3f56aae6575c696d9b7b6d7a9d04f0104) ) + ROM_LOAD32_WORD( "3h.u13", 0x3000002, 0x400000, CRC(2d0c334f) SHA1(74d94abb34484c7b79dbb989645f53124e53e3b7) ) + + ROM_REGION( 0x800000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "sound.u9", 0x000000, 0x400000, CRC(c5374beb) SHA1(d13e12cbd249246d953c45bb3bfa576a0ec75595) ) + ROM_RELOAD ( 0x400000, 0x400000 ) +ROM_END + +/* PS5v2 */ + +ROM_START( dragnblz ) + ROM_REGION( 0x100000, REGION_CPU1, 0) + ROM_LOAD32_WORD_SWAP( "2prog_h.u21", 0x000000, 0x080000, CRC(fc5eade8) SHA1(e5d05543641e4a3900b0d42e0d5f75734683d635) ) + ROM_LOAD32_WORD_SWAP( "1prog_l.u22", 0x000002, 0x080000, CRC(95d6fd02) SHA1(2b2830e7fa66cbd13666191762bfddc40571caec) ) + + ROM_REGION( 0x2c00000, REGION_GFX1, ROMTEST_GFX ) /* Sprites */ + ROM_LOAD32_WORD( "1l.u4", 0x0400000, 0x200000, CRC(c2eb565c) SHA1(07e41b36cc03a87f28d091754fdb0d1a7316a532) ) + ROM_LOAD32_WORD( "1h.u12", 0x0400002, 0x200000, CRC(23cb46b7) SHA1(005b7cc40eea103688a64a72c219c7535970dbfb) ) + ROM_LOAD32_WORD( "2l.u5", 0x0800000, 0x200000, CRC(bc256aea) SHA1(1f1d678e8a63513a95f296b8a07d2ea485d1e53f) ) + ROM_LOAD32_WORD( "2h.u13", 0x0800002, 0x200000, CRC(b75f59ec) SHA1(a6cde94bc972e46e54c962fde49fc2174b312882) ) + ROM_LOAD32_WORD( "3l.u6", 0x0c00000, 0x200000, CRC(4284f008) SHA1(610b13304043411b3088fd4299b3cb0a4d8b0cc2) ) + ROM_LOAD32_WORD( "3h.u14", 0x0c00002, 0x200000, CRC(abe5cbbf) SHA1(c2fb1d8ea8772572c08b36496cf9fc5b91cf848b) ) + ROM_LOAD32_WORD( "4l.u7", 0x1000000, 0x200000, CRC(c9fcf2e5) SHA1(7cecdf3406da11289b54aaf58d12883ddfdc5e6b) ) + ROM_LOAD32_WORD( "4h.u15", 0x1000002, 0x200000, CRC(0ab0a12a) SHA1(1b29b6dc79e69edb56634517365d0ee8e6ea78ae) ) + ROM_LOAD32_WORD( "5l.u8", 0x1400000, 0x200000, CRC(68d03ccf) SHA1(d2bf6da5fa6e346b05872ed9616ffe51c3768f50) ) + ROM_LOAD32_WORD( "5h.u16", 0x1400002, 0x200000, CRC(5450fbca) SHA1(7a804263549cea951782a67855e69cb8cb417e98) ) + ROM_LOAD32_WORD( "6l.u1", 0x1800000, 0x200000, CRC(8b52c90b) SHA1(e1067ef252870787e46c62015e5778b4e641e68d) ) + ROM_LOAD32_WORD( "6h.u2", 0x1800002, 0x200000, CRC(7362f929) SHA1(9ced06202e3f104d30377aeef489021d26e87f73) ) + ROM_LOAD32_WORD( "7l.u19", 0x1c00000, 0x200000, CRC(b4f4d86e) SHA1(2ad786c5626c98e6943ae05688a1b66307ceac84) ) + ROM_LOAD32_WORD( "7h.u20", 0x1c00002, 0x200000, CRC(44b7b9cc) SHA1(3f8122b62ea1183d9fb3aad32d0e47bd32244f87) ) + ROM_LOAD32_WORD( "8l.u28", 0x2000000, 0x200000, CRC(cd079f89) SHA1(49c46eb36bc0458428a7fad3fe622f5ed974073b) ) + ROM_LOAD32_WORD( "8h.u29", 0x2000002, 0x200000, CRC(3edb508a) SHA1(72b07fb34a94cc127de02070604b1ff31f3d46c7) ) + ROM_LOAD32_WORD( "9l.u41", 0x2400000, 0x200000, CRC(0b53cd78) SHA1(e2071d9fe6c7be4e289b491587ab431c164e59da) ) + ROM_LOAD32_WORD( "9h.u42", 0x2400002, 0x200000, CRC(bc61998a) SHA1(75dbefe712104c64576196c27c25dbed59ae3923) ) + ROM_LOAD32_WORD( "10l.u58",0x2800000, 0x200000, CRC(a3f5c7f8) SHA1(d17478ca3e7ef46270f350ffa35d43acb05b1185) ) + ROM_LOAD32_WORD( "10h.u59",0x2800002, 0x200000, CRC(30e304c4) SHA1(1d866276bfe7f7524306a880d225aaf11ac2e5dd) ) + + ROM_REGION( 0x800000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "snd0.u52", 0x000000, 0x200000, CRC(7fd1b225) SHA1(6aa61021ada51393bbb34fd1aea00b8feccc8197) ) +ROM_END + +/* Most of the roms on this board are from Dragon Blaze and not used by the game, they're needed for the board to + work, but the content doesn't matter. */ +ROM_START( gnbarich ) + ROM_REGION( 0x100000, REGION_CPU1, 0) + ROM_LOAD32_WORD_SWAP( "2-prog_l.u21", 0x000000, 0x080000, CRC(c136cd9c) SHA1(ab66c4f5196a66a97dbb5832336a203421cf40fa) ) + ROM_LOAD32_WORD_SWAP( "1-prog_h.u22", 0x000002, 0x080000, CRC(6588fc96) SHA1(3db29fcf17e8b2aee465319b557bd3e45bc966b2) ) + + ROM_REGION( 0x2c00000, REGION_GFX1, ROMTEST_GFX ) /* Sprites */ + /* Gunbarich doesn't actually use 1-5 and 10, they're on the board, but all the gfx are in 6-9 + The game was an upgrade to Dragon Blaze, only some of the roms were replaced however it + appears the board needs to be fully populated to work correctly so the Dragon Blaze roms + were left on it. After hooking up hidden rom test we can see only the 8 roms we load are + tested */ +// ROM_LOAD32_WORD( "1l.u4", 0x0400000, 0x200000, CRC(c2eb565c) SHA1(07e41b36cc03a87f28d091754fdb0d1a7316a532) ) /* From Dragon Blaze */ +// ROM_LOAD32_WORD( "1h.u12", 0x0400002, 0x200000, CRC(23cb46b7) SHA1(005b7cc40eea103688a64a72c219c7535970dbfb) ) /* From Dragon Blaze */ +// ROM_LOAD32_WORD( "2l.u5", 0x0800000, 0x200000, CRC(bc256aea) SHA1(1f1d678e8a63513a95f296b8a07d2ea485d1e53f) ) /* From Dragon Blaze */ +// ROM_LOAD32_WORD( "2h.u13", 0x0800002, 0x200000, CRC(b75f59ec) SHA1(a6cde94bc972e46e54c962fde49fc2174b312882) ) /* From Dragon Blaze */ +// ROM_LOAD32_WORD( "3l.u6", 0x0c00000, 0x200000, CRC(4284f008) SHA1(610b13304043411b3088fd4299b3cb0a4d8b0cc2) ) /* From Dragon Blaze */ +// ROM_LOAD32_WORD( "3h.u14", 0x0c00002, 0x200000, CRC(abe5cbbf) SHA1(c2fb1d8ea8772572c08b36496cf9fc5b91cf848b) ) /* From Dragon Blaze */ +// ROM_LOAD32_WORD( "4l.u7", 0x1000000, 0x200000, CRC(c9fcf2e5) SHA1(7cecdf3406da11289b54aaf58d12883ddfdc5e6b) ) /* From Dragon Blaze */ +// ROM_LOAD32_WORD( "4h.u15", 0x1000002, 0x200000, CRC(0ab0a12a) SHA1(1b29b6dc79e69edb56634517365d0ee8e6ea78ae) ) /* From Dragon Blaze */ +// ROM_LOAD32_WORD( "5l.u8", 0x1400000, 0x200000, CRC(68d03ccf) SHA1(d2bf6da5fa6e346b05872ed9616ffe51c3768f50) ) /* From Dragon Blaze */ +// ROM_LOAD32_WORD( "5h.u16", 0x1400002, 0x200000, CRC(5450fbca) SHA1(7a804263549cea951782a67855e69cb8cb417e98) ) /* From Dragon Blaze */ + ROM_LOAD32_WORD( "6l.u1", 0x1800000, 0x200000, CRC(0432e1a8) SHA1(632cb6534a19a92aa16d1dc8bb98c0c1fa17e428) ) + ROM_LOAD32_WORD( "6h.u2", 0x1800002, 0x200000, CRC(f90fa3ea) SHA1(773861c6c559f2df88e395669f27c43bd4dd6eb6) ) + ROM_LOAD32_WORD( "7l.u19", 0x1c00000, 0x200000, CRC(36bf9a58) SHA1(b546425f17f4b0b1112f0a22f9f5c695f5d97fe9) ) + ROM_LOAD32_WORD( "7h.u20", 0x1c00002, 0x200000, CRC(4b3eafd8) SHA1(8d0a4516bab2a188a66291e805c3c265774a6b72) ) + ROM_LOAD32_WORD( "8l.u28", 0x2000000, 0x200000, CRC(026754da) SHA1(66072e7584dcfea614a1e37592bda65733c9ce11) ) + ROM_LOAD32_WORD( "8h.u29", 0x2000002, 0x200000, CRC(8cd7aaa0) SHA1(83469c5407cba134ec1d22330623d8be8e0eabec) ) + ROM_LOAD32_WORD( "9l.u41", 0x2400000, 0x200000, CRC(02c066fe) SHA1(ecd5f36d9e55a341aff956bab4e7b0ae9e6cc15f) ) + ROM_LOAD32_WORD( "9h.u42", 0x2400002, 0x200000, CRC(5433385a) SHA1(138d62409cfb9e1a4eb3ca378ab8f6df45d478c0) ) +// ROM_LOAD32_WORD( "10l.u58",0x2800000, 0x200000, CRC(a3f5c7f8) SHA1(d17478ca3e7ef46270f350ffa35d43acb05b1185) ) /* From Dragon Blaze */ +// ROM_LOAD32_WORD( "10h.u59",0x2800002, 0x200000, CRC(30e304c4) SHA1(1d866276bfe7f7524306a880d225aaf11ac2e5dd) ) /* From Dragon Blaze */ + + ROM_REGION( 0x800000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "snd0.u52", 0x000000, 0x200000, CRC(7b10436b) SHA1(c731fcce024e286a677ca10a91761c1ee06094a5) ) +ROM_END + +/* Most of the roms on this board are from Dragon Blaze and not used by the game, they're needed for the board to + work, but the content doesn't matter. */ +ROM_START( mjgtaste ) + ROM_REGION( 0x100000, REGION_CPU1, 0) + ROM_LOAD32_WORD_SWAP( "2.u21", 0x000000, 0x080000, CRC(5f2041dc) SHA1(f3862ffdb8df0cf921ce1cb0236935731e7729a7) ) + ROM_LOAD32_WORD_SWAP( "1.u22", 0x000002, 0x080000, CRC(f5ff7876) SHA1(4c909db9c97f29fd79df6dacd29762688701b973) ) + + /* exact number of gfx / sound roms may be incorrect */ + ROM_REGION( 0x2c00000, REGION_GFX1, ROMTEST_GFX | ROMREGION_ERASE00 ) /* Sprites */ + ROM_LOAD32_WORD( "1l.u4", 0x0400000, 0x200000, CRC(30da42b1) SHA1(8485f2c0e7769b50b95d962afe14fa7ae74cd887) ) + ROM_LOAD32_WORD( "1h.u12", 0x0400002, 0x200000, CRC(629c1d44) SHA1(61909091328bb7b6d3e6e0bff91e14c9b4b86c2c) ) + ROM_LOAD32_WORD( "2l.u5", 0x0800000, 0x200000, CRC(1f6126ab) SHA1(e9fc70ca42798c04a4d4e1ef1113a59477c77fdc) ) + ROM_LOAD32_WORD( "2h.u13", 0x0800002, 0x200000, CRC(dba34e46) SHA1(ae26ef5f90431274764aaa72ae179c4c7572d2ad) ) + ROM_LOAD32_WORD( "3l.u6", 0x0c00000, 0x200000, CRC(1023e35e) SHA1(47a6f6f205703e6ee86b6e77b386060f4b2d87df) ) + ROM_LOAD32_WORD( "3h.u14", 0x0c00002, 0x200000, CRC(8aebec7f) SHA1(f56ab20901688665438b1efd254d5796d43c6625) ) + ROM_LOAD32_WORD( "4l.u7", 0x1000000, 0x200000, CRC(9acf018b) SHA1(9d1e34273a8cfb0ef481c9f31459960bb93b6431) ) + ROM_LOAD32_WORD( "4h.u15", 0x1000002, 0x200000, CRC(f93e154c) SHA1(f783c6ddb3727eeface1df7c1d0bc3bb28bef047) ) +// ROM_LOAD32_WORD( "5l.u8", 0x1400000, 0x200000, CRC(68d03ccf) SHA1(d2bf6da5fa6e346b05872ed9616ffe51c3768f50) ) /* From Dragon Blaze */ +// ROM_LOAD32_WORD( "5h.u16", 0x1400002, 0x200000, CRC(5450fbca) SHA1(7a804263549cea951782a67855e69cb8cb417e98) ) /* From Dragon Blaze */ +// ROM_LOAD32_WORD( "6l.u1", 0x1800000, 0x200000, CRC(8b52c90b) SHA1(e1067ef252870787e46c62015e5778b4e641e68d) ) /* From Dragon Blaze */ +// ROM_LOAD32_WORD( "6h.u2", 0x1800002, 0x200000, CRC(7362f929) SHA1(9ced06202e3f104d30377aeef489021d26e87f73) ) /* From Dragon Blaze */ +// ROM_LOAD32_WORD( "7l.u19", 0x1c00000, 0x200000, CRC(b4f4d86e) SHA1(2ad786c5626c98e6943ae05688a1b66307ceac84) ) /* From Dragon Blaze */ +// ROM_LOAD32_WORD( "7h.u20", 0x1c00002, 0x200000, CRC(44b7b9cc) SHA1(3f8122b62ea1183d9fb3aad32d0e47bd32244f87) ) /* From Dragon Blaze */ +// ROM_LOAD32_WORD( "8l.u28", 0x2000000, 0x200000, CRC(cd079f89) SHA1(49c46eb36bc0458428a7fad3fe622f5ed974073b) ) /* From Dragon Blaze */ +// ROM_LOAD32_WORD( "8h.u29", 0x2000002, 0x200000, CRC(3edb508a) SHA1(72b07fb34a94cc127de02070604b1ff31f3d46c7) ) /* From Dragon Blaze */ +// ROM_LOAD32_WORD( "9l.u41", 0x2400000, 0x200000, CRC(0b53cd78) SHA1(e2071d9fe6c7be4e289b491587ab431c164e59da) ) /* From Dragon Blaze */ +// ROM_LOAD32_WORD( "9h.u42", 0x2400002, 0x200000, CRC(bc61998a) SHA1(75dbefe712104c64576196c27c25dbed59ae3923) ) /* From Dragon Blaze */ +// ROM_LOAD32_WORD( "10l.u58",0x2800000, 0x200000, CRC(a3f5c7f8) SHA1(d17478ca3e7ef46270f350ffa35d43acb05b1185) ) /* From Dragon Blaze */ +// ROM_LOAD32_WORD( "10h.u59",0x2800002, 0x200000, CRC(30e304c4) SHA1(1d866276bfe7f7524306a880d225aaf11ac2e5dd) ) /* From Dragon Blaze */ + + ROM_REGION( 0x800000, REGION_SOUND1, 0 ) /* Samples - Not Dumped */ + ROM_LOAD( "snd0.u52", 0x000000, 0x400000, CRC(0179f018) SHA1(16ae63e021230356777342ed902e02407a1a1b82) ) +ROM_END + +/* are these right? should i fake the counter return? + 'speedups / idle skipping isn't needed for 'hotgmck, hgkairak' + as the core catches and skips the idle loops automatically' +*/ + +static READ32_HANDLER( soldivid_speedup_r ) +{ + /* +PC : 0001AE74: MOV.L @R14,R1 +PC : 0001AE76: ADD #$01,R1 +PC : 0001AE78: MOV.L R1,@R14 +PC : 0001AE7A: MOV.L @($7C,PC),R3 +PC : 0001AE7C: MOV.L @R3,R0 +PC : 0001AE7E: TST R0,R0 +PC : 0001AE80: BT $0001AE74 +*/ + if (activecpu_get_pc()==0x0001AFAC) cpu_spinuntil_int(); // Character Select + InGame + if (activecpu_get_pc()==0x0001AE76) cpu_spinuntil_int(); // Everything Else? + + return psh_ram[0x00000C/4]; +} + +static READ32_HANDLER( s1945ii_speedup_r ) +{ +/* +PC : 0609FC68: MOV.L @R13,R1 // R13 is 600000C R1 is counter (read from r13) +PC : 0609FC6A: ADD #$01,R1 // add 1 to counter +PC : 0609FC6C: MOV.L R1,@R13 // write it back +PC : 0609FC6E: MOV.L @($3C,PC),R3 // 609fdac into r3 +PC : 0609FC70: MOV.L @R3,R0 // whats there into r0 +PC : 0609FC72: TST R0,R0 // test +PC : 0609FC74: BT $0609FC68 +*/ + if (activecpu_get_pc()==0x609FC6A) cpu_spinuntil_int(); // Title Screens + if (activecpu_get_pc()==0x609FED4) cpu_spinuntil_int(); // In Game + if (activecpu_get_pc()==0x60A0172) cpu_spinuntil_int(); // Attract Demo + + return psh_ram[0x00000C/4]; +} + +static READ32_HANDLER( daraku_speedup_r ) +{ +/* +PC : 00047618: MOV.L @($BC,PC),R0 +PC : 0004761A: MOV.L @R0,R1 +PC : 0004761C: ADD #$01,R1 +PC : 0004761E: MOV.L R1,@R0 +PC : 00047620: MOV.L @($BC,PC),R3 +PC : 00047622: MOV.L @R3,R0 +PC : 00047624: TST R0,R0 +PC : 00047626: BT $00047618 +*/ + if (activecpu_get_pc()==0x0004761C) cpu_spinuntil_int(); // title + if (activecpu_get_pc()==0x00047978) cpu_spinuntil_int(); // ingame + + return psh_ram[0x00000C/4]; +} + +static READ32_HANDLER( sbomberb_speedup_r ) +{ +/* +PC : 060A10EC: MOV.L @R13,R3 +PC : 060A10EE: ADD #$01,R3 +PC : 060A10F0: MOV.L R3,@R13 +PC : 060A10F2: MOV.L @($34,PC),R1 +PC : 060A10F4: MOV.L @R1,R2 +PC : 060A10F6: TST R2,R2 +PC : 060A10F8: BT $060A10EC +*/ + if (activecpu_get_pc()==0x060A10EE) cpu_spinuntil_int(); // title + if (activecpu_get_pc()==0x060A165A) cpu_spinuntil_int(); // attract + if (activecpu_get_pc()==0x060A1382) cpu_spinuntil_int(); // game + + return psh_ram[0x00000C/4]; +} + +static READ32_HANDLER( gunbird2_speedup_r ) +{ +/* +PC : 06028972: MOV.L @R14,R3 // r14 is 604000c on this one +PC : 06028974: MOV.L @($D4,PC),R1 +PC : 06028976: ADD #$01,R3 +PC : 06028978: MOV.L R3,@R14 +PC : 0602897A: MOV.L @R1,R2 +PC : 0602897C: TST R2,R2 +PC : 0602897E: BT $06028972 +*/ + if (activecpu_get_pc()==0x06028974) cpu_spinuntil_int(); + if (activecpu_get_pc()==0x06028E64) cpu_spinuntil_int(); + if (activecpu_get_pc()==0x06028BE6) cpu_spinuntil_int(); + + return psh_ram[0x04000C/4]; +} + +static READ32_HANDLER( s1945iii_speedup_r ) +{ + if (activecpu_get_pc()==0x0602B464) cpu_spinuntil_int(); // start up text + if (activecpu_get_pc()==0x0602B6E2) cpu_spinuntil_int(); // intro attract + if (activecpu_get_pc()==0x0602BC1E) cpu_spinuntil_int(); // game attract + if (activecpu_get_pc()==0x0602B97C) cpu_spinuntil_int(); // game + + return psh_ram[0x06000C/4]; +} + + +static READ32_HANDLER( dragnblz_speedup_r ) +{ + if (activecpu_get_pc()==0x06027440) cpu_spinuntil_int(); // startup texts + if (activecpu_get_pc()==0x060276E6) cpu_spinuntil_int(); // attract intro + if (activecpu_get_pc()==0x06027C74) cpu_spinuntil_int(); // attract game + if (activecpu_get_pc()==0x060279A8) cpu_spinuntil_int(); // game + + return psh_ram[0x006000C/4]; +} + +static READ32_HANDLER( gnbarich_speedup_r ) +{ +/* +PC :0602CAE6: MOV.L @R14,R3 // R14 = 0x606000C +PC :0602CAE8: MOV.L @($F4,PC),R1 +PC :0602CAEA: ADD #$01,R3 +PC :0602CAEC: MOV.L R3,@R14 // R14 = 0x606000C +PC :0602CAEE: MOV.L @R1,R2 +PC :0602CAF0: TST R2,R2 +PC :0602CAF2: BT $0602CAE6 +*/ + + if (activecpu_get_pc()==0x0602CAE8) cpu_spinuntil_int(); // title logos + if (activecpu_get_pc()==0x0602CD88) cpu_spinuntil_int(); // attract intro + if (activecpu_get_pc()==0x0602D2F0) cpu_spinuntil_int(); // game attract + if (activecpu_get_pc()==0x0602D042) cpu_spinuntil_int(); // game play + + return psh_ram[0x006000C/4]; +} + +static READ32_HANDLER( mjgtaste_speedup_r ) +{ + + if (activecpu_get_pc()==0x6031f04) {cpu_spinuntil_int();return psh_ram[0x006000C/4];} // title logos + if (activecpu_get_pc()==0x603214c) {cpu_spinuntil_int();return psh_ram[0x006000C/4];} // attract game + +// mame_printf_debug("at %08x\n",activecpu_get_pc()); + + return psh_ram[0x006000C/4]; +} + + + +static DRIVER_INIT( soldivid ) +{ + memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x600000c, 0x600000f, 0, 0, soldivid_speedup_r ); + use_factory_eeprom=EEPROM_0; +} + +static DRIVER_INIT( s1945ii ) +{ + memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x600000c, 0x600000f, 0, 0, s1945ii_speedup_r ); + use_factory_eeprom=EEPROM_DEFAULT; +} + +static DRIVER_INIT( daraku ) +{ + UINT8 *RAM = memory_region(REGION_CPU1); + memory_set_bankptr(1,&RAM[0x100000]); + memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x600000c, 0x600000f, 0, 0, daraku_speedup_r ); + use_factory_eeprom=EEPROM_DARAKU; +} + +static DRIVER_INIT( sbomberb ) +{ + memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x600000c, 0x600000f, 0, 0, sbomberb_speedup_r ); + use_factory_eeprom=EEPROM_DEFAULT; +} + +static DRIVER_INIT( gunbird2 ) +{ + UINT8 *RAM = memory_region(REGION_CPU1); + memory_set_bankptr(1,&RAM[0x100000]); + memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x604000c, 0x604000f, 0, 0, gunbird2_speedup_r ); + use_factory_eeprom=EEPROM_DEFAULT; +} + +static DRIVER_INIT( s1945iii ) +{ + UINT8 *RAM = memory_region(REGION_CPU1); + memory_set_bankptr(1,&RAM[0x100000]); + memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x606000c, 0x606000f, 0, 0, s1945iii_speedup_r ); + use_factory_eeprom=EEPROM_S1945III; +} + +static DRIVER_INIT( dragnblz ) +{ + memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x606000c, 0x606000f, 0, 0, dragnblz_speedup_r ); + use_factory_eeprom=EEPROM_DRAGNBLZ; +} + +static DRIVER_INIT( gnbarich ) +{ + memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x606000c, 0x606000f, 0, 0, gnbarich_speedup_r ); + use_factory_eeprom=EEPROM_GNBARICH; +} + +static DRIVER_INIT( mjgtaste ) +{ + memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x606000c, 0x606000f, 0, 0, mjgtaste_speedup_r ); + use_factory_eeprom=EEPROM_MJGTASTE; + /* needs to install mahjong controls too (can select joystick in test mode tho) */ +} + + +/* YEAR NAME PARENT MACHINE INPUT INIT MONITOR COMPANY FULLNAME FLAGS */ + +/* ps3-v1 */ +GAME( 1997, soldivid, 0, psikyo3v1, soldivid, soldivid, ROT0, "Psikyo", "Sol Divide - The Sword Of Darkness", GAME_IMPERFECT_SOUND ) // Music Tempo +GAME( 1997, s1945ii, 0, psikyo3v1, s1945ii, s1945ii, ROT270, "Psikyo", "Strikers 1945 II", GAME_IMPERFECT_GRAPHICS ) // linescroll/zoom +GAME( 1998, daraku, 0, psikyo3v1, daraku, daraku, ROT0, "Psikyo", "Daraku Tenshi - The Fallen Angels", 0 ) +GAME( 1998, sbomberb, 0, psikyo3v1, sbomberb, sbomberb, ROT270, "Psikyo", "Space Bomber (ver. B)", 0 ) + +/* ps5 */ +GAME( 1998, gunbird2, 0, psikyo5, gunbird2, gunbird2, ROT270, "Psikyo", "Gunbird 2", 0 ) +GAME( 1999, s1945iii, 0, psikyo5, s1945iii, s1945iii, ROT270, "Psikyo", "Strikers 1945 III (World) / Strikers 1999 (Japan)", GAME_IMPERFECT_GRAPHICS ) // linescroll/zoom + +/* ps5v2 */ +GAME( 2000, dragnblz, 0, psikyo5, dragnblz, dragnblz, ROT270, "Psikyo", "Dragon Blaze", 0 ) +GAME( 2001, gnbarich, 0, psikyo5, gnbarich, gnbarich, ROT270, "Psikyo", "Gunbarich", 0 ) +GAME( 2002, mjgtaste, 0, psikyo5, mjgtaste, mjgtaste, ROT0, "Psikyo", "Mahjong G-Taste", 0 ) |