diff --git a/src/emu/sound/ymf278b.c b/src/emu/sound/ymf278b.c index c869a6f689a..93ea2d58c10 100644 --- a/src/emu/sound/ymf278b.c +++ b/src/emu/sound/ymf278b.c @@ -63,6 +63,7 @@ - LFO (vibrato, tremolo) - integrate YMF262 (used by Fuuki games, not used by Psikyo and Metro games) - able to hook up "Moonsound", supporting mixed ROM+RAM (for MSX driver in MESS) + (this should be possible now by using a custom address map?) */ #include "emu.h" @@ -71,20 +72,11 @@ #define VERBOSE 0 #define LOG(x) do { if (VERBOSE) logerror x; } while (0) -void ymf278b_device::write_memory(UINT32 offset, UINT8 data) -{ - logerror("YMF278B: Memory write %02x to %x\n", data, offset); -} -UINT8 ymf278b_device::read_memory(UINT32 offset) -{ - if (offset >= m_romsize) - { - // logerror("YMF278B: Memory read overflow %x\n", offset); - return 0xff; - } - return m_rom[offset]; -} +// default address map +static ADDRESS_MAP_START( ymf278b, AS_0, 8, ymf278b_device ) + AM_RANGE(0x000000, 0x3fffff) AM_ROM +ADDRESS_MAP_END /**************************************************************************/ @@ -276,23 +268,23 @@ void ymf278b_device::sound_stream_update(sound_stream &stream, stream_sample_t * { // 8 bit case 0: - sample = read_memory(slot->startaddr + (slot->stepptr>>16))<<8; + sample = m_direct->read_raw_byte(slot->startaddr + (slot->stepptr>>16))<<8; break; // 12 bit case 1: if (slot->stepptr & 0x10000) - sample = read_memory(slot->startaddr + (slot->stepptr>>17)*3+2)<<8 | - (read_memory(slot->startaddr + (slot->stepptr>>17)*3+1) << 4 & 0xf0); + sample = m_direct->read_raw_byte(slot->startaddr + (slot->stepptr>>17)*3+2)<<8 | + (m_direct->read_raw_byte(slot->startaddr + (slot->stepptr>>17)*3+1) << 4 & 0xf0); else - sample = read_memory(slot->startaddr + (slot->stepptr>>17)*3)<<8 | - (read_memory(slot->startaddr + (slot->stepptr>>17)*3+1) & 0xf0); + sample = m_direct->read_raw_byte(slot->startaddr + (slot->stepptr>>17)*3)<<8 | + (m_direct->read_raw_byte(slot->startaddr + (slot->stepptr>>17)*3+1) & 0xf0); break; // 16 bit case 2: - sample = read_memory(slot->startaddr + ((slot->stepptr>>16)*2))<<8 | - read_memory(slot->startaddr + ((slot->stepptr>>16)*2)+1); + sample = m_direct->read_raw_byte(slot->startaddr + ((slot->stepptr>>16)*2))<<8 | + m_direct->read_raw_byte(slot->startaddr + ((slot->stepptr>>16)*2)+1); break; // ?? bit, effect is unknown, datasheet says it's prohibited @@ -506,7 +498,7 @@ void ymf278b_device::C_w(UINT8 reg, UINT8 data) else offset = m_wavetblhdr*0x80000 + (slot->wave - 384) * 12; for (i = 0; i < 12; i++) - p[i] = read_memory(offset+i); + p[i] = m_direct->read_raw_byte(offset+i); slot->bits = (p[0]&0xc0)>>6; slot->startaddr = (p[2] | (p[1]<<8) | ((p[0]&0x3f)<<16)); @@ -666,8 +658,8 @@ void ymf278b_device::C_w(UINT8 reg, UINT8 data) break; case 0x06: - // memory data (ignored, we don't support RAM) - write_memory(m_memadr, data); + // memory data + m_addrspace[0]->write_byte(m_memadr, data); m_memadr = (m_memadr + 1) & 0x3fffff; break; @@ -778,7 +770,7 @@ READ8_MEMBER( ymf278b_device::read ) ret = (m_pcmregs[m_port_C] & 0x1f) | 0x20; // device ID in upper bits break; case 6: - ret = read_memory(m_memadr); + ret = m_direct->read_raw_byte(m_memadr); m_memadr = (m_memadr + 1) & 0x3fffff; break; @@ -954,8 +946,7 @@ void ymf278b_device::device_start() { int i; - m_rom = *region(); - m_romsize = region()->bytes(); + m_direct = &space().direct(); m_clock = clock(); m_irq_handler.resolve(); @@ -1004,8 +995,11 @@ const device_type YMF278B = &device_creator; ymf278b_device::ymf278b_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, YMF278B, "YMF278B", tag, owner, clock, "ymf278b", __FILE__), device_sound_interface(mconfig, *this), + device_memory_interface(mconfig, *this), + m_space_config("samples", ENDIANNESS_BIG, 8, 22, 0, NULL), m_irq_handler(*this) { + m_address_map[0] = *ADDRESS_MAP_NAME(ymf278b); } //------------------------------------------------- diff --git a/src/emu/sound/ymf278b.h b/src/emu/sound/ymf278b.h index 6367627aea9..0cfc1cfbe9a 100644 --- a/src/emu/sound/ymf278b.h +++ b/src/emu/sound/ymf278b.h @@ -11,7 +11,8 @@ devcb = &ymf278b_device::set_irq_handler(*device, DEVCB_##_devcb); class ymf278b_device : public device_t, - public device_sound_interface + public device_sound_interface, + public device_memory_interface { public: ymf278b_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); @@ -30,6 +31,9 @@ protected: virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); + // device_memory_interface overrides + virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return (spacenum == AS_0) ? &m_space_config : NULL; } + // sound stream update overrides virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples); @@ -75,8 +79,6 @@ private: int num; /* slot number (for debug only) */ }; - void write_memory(UINT32 offset, UINT8 data); - UINT8 read_memory(UINT32 offset); int compute_rate(YMF278BSlot *slot, int val); UINT32 compute_decay_env_vol_step(YMF278BSlot *slot, int val); void compute_freq_step(YMF278BSlot *slot); @@ -120,12 +122,12 @@ private: INT32 m_mix_level[8]; emu_timer *m_timer_a, *m_timer_b; - const UINT8 *m_rom; - UINT32 m_romsize; int m_clock; sound_stream * m_stream; INT32 *m_mix_buffer; + direct_read_data * m_direct; + const address_space_config m_space_config; devcb_write_line m_irq_handler; }; diff --git a/src/mame/drivers/lordgun.c b/src/mame/drivers/lordgun.c index 5d64ad31248..6187d15102b 100644 --- a/src/mame/drivers/lordgun.c +++ b/src/mame/drivers/lordgun.c @@ -334,6 +334,9 @@ static ADDRESS_MAP_START( aliencha_map, AS_PROGRAM, 16, lordgun_state ) AM_RANGE(0x50b900, 0x50b9ff) AM_READWRITE(aliencha_protection_r, aliencha_protection_w) ADDRESS_MAP_END +static ADDRESS_MAP_START( ymf278_map, AS_0, 8, lordgun_state) + AM_RANGE(0x000000, 0x1fffff) AM_ROM +ADDRESS_MAP_END /*************************************************************************** @@ -714,6 +717,7 @@ static MACHINE_CONFIG_START( aliencha, lordgun_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymf", YMF278B, 26000000) // ? 26MHz matches video (decrease for faster music tempo) + MCFG_DEVICE_ADDRESS_MAP(AS_0, ymf278_map) MCFG_YMF278B_IRQ_HANDLER(WRITELINE(lordgun_state, soundirq)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) diff --git a/src/mame/drivers/metro.c b/src/mame/drivers/metro.c index b7eae6ccb98..0364b241a0f 100644 --- a/src/mame/drivers/metro.c +++ b/src/mame/drivers/metro.c @@ -729,6 +729,14 @@ static ADDRESS_MAP_START( daitorid_sound_io_map, AS_IO, 8, metro_state ) AM_RANGE(UPD7810_PORTC, UPD7810_PORTC) AM_WRITE(daitorid_sound_rombank_w) ADDRESS_MAP_END +/*****************/ + + +static ADDRESS_MAP_START( ymf278_map, AS_IO, 8, metro_state ) + AM_RANGE(0x000000, 0x27ffff) AM_ROM +ADDRESS_MAP_END + + /*************************************************************************** Bal Cube ***************************************************************************/ @@ -3651,6 +3659,7 @@ static MACHINE_CONFIG_START( msgogo, metro_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SOUND_ADD("ymf", YMF278B, YMF278B_STD_CLOCK) + MCFG_DEVICE_ADDRESS_MAP(AS_0, ymf278_map) MCFG_YMF278B_IRQ_HANDLER(WRITELINE(metro_state, ymf278b_interrupt)) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) diff --git a/src/mame/drivers/psikyo.c b/src/mame/drivers/psikyo.c index 7024ccf9cb2..8418253c20a 100644 --- a/src/mame/drivers/psikyo.c +++ b/src/mame/drivers/psikyo.c @@ -1590,7 +1590,7 @@ ROM_START( s1945 ) ROM_REGION( 0x200000, "gfx2", 0 ) /* Layer 0 + 1 */ ROM_LOAD( "u34.bin", 0x000000, 0x200000, CRC(aaf83e23) SHA1(1c75d09ff42c0c215f8c66c699ca75688c95a05e) ) - ROM_REGION( 0x200000, "ymf", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */ ROM_LOAD( "u61.bin", 0x000000, 0x200000, CRC(a839cf47) SHA1(e179eb505c80d5bb3ccd9e228f2cf428c62b72ee) ) // 8 bit signed pcm (16KHz) ROM_REGION( 0x040000, "spritelut", 0 ) /* */ @@ -1620,7 +1620,7 @@ ROM_START( s1945a ) ROM_REGION( 0x200000, "gfx2", 0 ) /* Layer 0 + 1 */ ROM_LOAD( "u34.bin", 0x000000, 0x200000, CRC(aaf83e23) SHA1(1c75d09ff42c0c215f8c66c699ca75688c95a05e) ) - ROM_REGION( 0x200000, "ymf", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */ ROM_LOAD( "u61.bin", 0x000000, 0x200000, CRC(a839cf47) SHA1(e179eb505c80d5bb3ccd9e228f2cf428c62b72ee) ) // 8 bit signed pcm (16KHz) ROM_REGION( 0x040000, "spritelut", 0 ) /* */ @@ -1650,7 +1650,7 @@ ROM_START( s1945j ) ROM_REGION( 0x200000, "gfx2", 0 ) /* Layer 0 + 1 */ ROM_LOAD( "u34.bin", 0x000000, 0x200000, CRC(aaf83e23) SHA1(1c75d09ff42c0c215f8c66c699ca75688c95a05e) ) - ROM_REGION( 0x200000, "ymf", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */ ROM_LOAD( "u61.bin", 0x000000, 0x200000, CRC(a839cf47) SHA1(e179eb505c80d5bb3ccd9e228f2cf428c62b72ee) ) // 8 bit signed pcm (16KHz) ROM_REGION( 0x040000, "spritelut", 0 ) /* */ @@ -1680,7 +1680,7 @@ ROM_START( s1945k ) /* Same MCU as the current parent set, region dip has no eff ROM_REGION( 0x200000, "gfx2", 0 ) /* Layer 0 + 1 */ ROM_LOAD( "u34.bin", 0x000000, 0x200000, CRC(aaf83e23) SHA1(1c75d09ff42c0c215f8c66c699ca75688c95a05e) ) - ROM_REGION( 0x200000, "ymf", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */ ROM_LOAD( "u61.bin", 0x000000, 0x200000, CRC(a839cf47) SHA1(e179eb505c80d5bb3ccd9e228f2cf428c62b72ee) ) // 8 bit signed pcm (16KHz) ROM_REGION( 0x040000, "spritelut", 0 ) /* */ diff --git a/src/mame/drivers/psikyo4.c b/src/mame/drivers/psikyo4.c index 3a5be2d9efe..4df171d3115 100644 --- a/src/mame/drivers/psikyo4.c +++ b/src/mame/drivers/psikyo4.c @@ -31,8 +31,7 @@ YMF278B-F (80 pin PQFP) & YAC513 (16 pin SOIC) To Do: Sprite List format not 100% understood. - The sound rom banking is wrong, at least for the ROM tests (see hotgm4ev), all the roms - are good, but it tests sound rom 0 twice due to the banking issues. + Lode Runner still fails the sound ROM test for some reason (different banking from the other games?) *-----------------------------------* | Tips and Tricks | @@ -40,8 +39,10 @@ To Do: Hold Button during booting to test roms (Checksum 16-bit) for: -Lode Runner - The Dig Fight: PL1 Start (passes gfx, sample result:05A5, expects:0BB0 [both sets]) (banking?) -Quiz de Idol! Hot Debut: PL1 Start (passes) +Hot Gimmick 4 Ever: PL1 Start+PL2 Start (passes) +Hot Gimmick Integral: PL1 Start+PL2 Start (passes) +Lode Runner - The Dig Fight: PL1 Start (debug DSW must be set; passes gfx, sample result:05A5, expects:0BB0 [both sets]) +Quiz de Idol! Hot Debut: PL1 Start (debug DSW must be set; passes) --- Lode Runner: The Dig Fight --- @@ -120,7 +121,7 @@ ROMs - The remaining ROMs are surface mounted TSOP48 Type II MASKROMs, either OKI MSM27C3252 (32MBit) or OKI MSM27C1652 (16MBit). - These MASKROMs are non-standard are require a custom adapter + These MASKROMs are non-standard and require a custom adapter to read them. Not all positions are populated for each game. See the source below for specifics. @@ -129,20 +130,10 @@ ROMs - #include "includes/psikyo4.h" #include "rendlay.h" - -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 GFXLAYOUT_RAW( layout_16x16x8, 16, 16, 16*8, 16*16*8 ) static GFXDECODE_START( ps4 ) - GFXDECODE_ENTRY( "gfx1", 0, layout_16x16x8, 0x000, 0x80 ) // 8bpp tiles + GFXDECODE_ENTRY( "gfx1", 0, layout_16x16x8, 0x000, 0x40 ) // 8bpp tiles GFXDECODE_END WRITE32_MEMBER(psikyo4_state::ps4_eeprom_w) @@ -176,21 +167,15 @@ INTERRUPT_GEN_MEMBER(psikyo4_state::psikyosh_interrupt) device.execute().set_input_line(4, HOLD_LINE); } -CUSTOM_INPUT_MEMBER(psikyo4_state::system_port_r) -{ - return ioport("SYSTEM")->read(); -} - CUSTOM_INPUT_MEMBER(psikyo4_state::mahjong_ctrl_r)/* used by hotgmck/hgkairak */ { int player = (FPTR)param; - int sel = (m_io_select[0] & 0x0000ff00) >> 8; int ret = 0xff; - if (sel & 1) ret &= ioport(player ? "KEY4" : "KEY0" )->read(); - if (sel & 2) ret &= ioport(player ? "KEY5" : "KEY1" )->read(); - if (sel & 4) ret &= ioport(player ? "KEY6" : "KEY2" )->read(); - if (sel & 8) ret &= ioport(player ? "KEY7" : "KEY3" )->read(); + if (m_io_select & 1) ret &= m_keys[player+0]->read(); + if (m_io_select & 2) ret &= m_keys[player+1]->read(); + if (m_io_select & 4) ret &= m_keys[player+2]->read(); + if (m_io_select & 8) ret &= m_keys[player+3]->read(); return ret; } @@ -298,41 +283,41 @@ WRITE32_MEMBER(psikyo4_state::ps4_vidregs_w) if (offset == 2) /* Configure bank for gfx test */ { if (ACCESSING_BITS_0_15) // Bank - membank("bank2")->set_base(memregion("gfx1")->base() + 0x2000 * (m_vidregs[offset] & 0x1fff)); /* Bank comes from vidregs */ + membank("gfxbank")->set_base(memregion("gfx1")->base() + 0x2000 * (m_vidregs[offset] & 0x1fff)); /* Bank comes from vidregs */ } } -#define PCM_BANK_NO_LEGACY(n) ((m_io_select[0] >> (n * 4 + 24)) & 0x07) - -void psikyo4_state::set_hotgmck_pcm_bank( int n ) +WRITE32_MEMBER(psikyo4_state::io_select_w) { - UINT8 *ymf_pcmbank = memregion("ymf")->base() + 0x200000; - UINT8 *pcm_rom = memregion("ymfsource")->base(); + // YMF banking + if (ACCESSING_BITS_16_31) + { + UINT32 bankdata = data >> 16; + UINT32 bankmask = mem_mask >> 16; + for (int i = 0; i < 4; i++) + { + if (bankmask & 0x0f) + { + int banknum = bankdata & 0x0f; + if (banknum < m_ymf_max_bank) + m_ymf_bank[i]->set_entry(banknum); + } + bankdata >>= 4; + bankmask >>= 4; + } + } - memcpy(ymf_pcmbank + n * 0x100000, pcm_rom + PCM_BANK_NO_LEGACY(n) * 0x100000, 0x100000); -} -#define PCM_BANK_NO(n) ((m_io_select[0] >> (n * 4 + 24)) & 0x07) -WRITE32_MEMBER(psikyo4_state::hotgmck_pcm_bank_w) -{ - int old_bank0 = PCM_BANK_NO(0); - int old_bank1 = PCM_BANK_NO(1); - int new_bank0, new_bank1; + // mahjong input multiplexing + if (ACCESSING_BITS_8_15) + m_io_select = data >> 8; - COMBINE_DATA(&m_io_select[0]); - - new_bank0 = PCM_BANK_NO(0); - new_bank1 = PCM_BANK_NO(1); - - if (old_bank0 != new_bank0) - set_hotgmck_pcm_bank(0); - - if (old_bank1 != new_bank1) - set_hotgmck_pcm_bank(1); + if (ACCESSING_BITS_0_7) + logerror("Unk ioselect write %x mask %x\n", data, mem_mask); } static ADDRESS_MAP_START( ps4_map, AS_PROGRAM, 32, psikyo4_state ) AM_RANGE(0x00000000, 0x000fffff) AM_ROM // program ROM (1 meg) - AM_RANGE(0x02000000, 0x021fffff) AM_ROMBANK("bank1") // data ROM + AM_RANGE(0x02000000, 0x021fffff) AM_ROM AM_REGION("maincpu", 0x100000) // data ROM AM_RANGE(0x03000000, 0x030037ff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x03003fe0, 0x03003fe3) AM_READWRITE(ps4_eeprom_r,ps4_eeprom_w) AM_RANGE(0x03003fe4, 0x03003fe7) AM_READNOP // also writes to this address - might be vblank? @@ -343,27 +328,33 @@ static ADDRESS_MAP_START( ps4_map, AS_PROGRAM, 32, psikyo4_state ) AM_RANGE(0x03003ff8, 0x03003ffb) AM_WRITE(ps4_screen2_brt_w) // screen 2 brightness AM_RANGE(0x03003ffc, 0x03003fff) AM_WRITE(ps4_bgpen_2_dword_w) AM_SHARE("bgpen_2") // screen 2 clear colour AM_RANGE(0x03004000, 0x03005fff) AM_RAM_WRITE(ps4_paletteram32_RRRRRRRRGGGGGGGGBBBBBBBBxxxxxxxx_dword_w) AM_SHARE("paletteram") // palette - AM_RANGE(0x03006000, 0x03007fff) AM_ROMBANK("bank2") // data for rom tests (gfx), data is controlled by vidreg + AM_RANGE(0x03006000, 0x03007fff) AM_ROMBANK("gfxbank") // data for rom tests (gfx), data is controlled by vidreg AM_RANGE(0x05000000, 0x05000007) AM_DEVREADWRITE8("ymf", ymf278b_device, read, write, 0xffffffff) AM_RANGE(0x05800000, 0x05800003) AM_READ_PORT("P1_P2") AM_RANGE(0x05800004, 0x05800007) AM_READ_PORT("P3_P4") - AM_RANGE(0x05800008, 0x0580000b) AM_WRITEONLY AM_SHARE("io_select") // Used by Mahjong games to choose input (also maps normal loderndf inputs to offsets) + AM_RANGE(0x05800008, 0x0580000b) AM_WRITE(io_select_w) // Used by Mahjong games to choose input (also maps normal loderndf inputs to offsets) AM_RANGE(0x06000000, 0x060fffff) AM_RAM AM_SHARE("ram") // main RAM (1 meg) +ADDRESS_MAP_END +static ADDRESS_MAP_START( ps4_ymf_map, AS_0, 8, psikyo4_state ) + AM_RANGE(0x000000, 0x0fffff) AM_ROMBANK("ymfbank0") + AM_RANGE(0x100000, 0x1fffff) AM_ROMBANK("ymfbank1") + AM_RANGE(0x200000, 0x2fffff) AM_ROMBANK("ymfbank2") + AM_RANGE(0x300000, 0x3fffff) AM_ROMBANK("ymfbank3") ADDRESS_MAP_END static INPUT_PORTS_START( hotgmck ) PORT_START("P1_P2") - PORT_BIT( 0x000000ff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_CUSTOM_MEMBER(DEVICE_SELF, psikyo4_state,system_port_r, NULL) + PORT_BIT( 0x000000ff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_CUSTOM_MEMBER(DEVICE_SELF, driver_device,custom_port_read, "SYSTEM") PORT_BIT( 0x00ffff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0xff000000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_CUSTOM_MEMBER(DEVICE_SELF, psikyo4_state,mahjong_ctrl_r, (void *)0) PORT_START("P3_P4") - PORT_BIT( 0x000000ff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_CUSTOM_MEMBER(DEVICE_SELF, psikyo4_state,system_port_r, NULL) + PORT_BIT( 0x000000ff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_CUSTOM_MEMBER(DEVICE_SELF, driver_device,custom_port_read, "SYSTEM") PORT_BIT( 0x00ffff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0xff000000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_CUSTOM_MEMBER(DEVICE_SELF, psikyo4_state,mahjong_ctrl_r, (void *)1) + PORT_BIT( 0xff000000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_CUSTOM_MEMBER(DEVICE_SELF, psikyo4_state,mahjong_ctrl_r, (void *)4) PORT_START("JP4")/* jumper pads 'JP4' on the PCB */ /* EEPROM is read here */ @@ -381,7 +372,7 @@ static INPUT_PORTS_START( hotgmck ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE2 ) // Screen 2 - PORT_START("KEY0") /* fake player 1 controls 1st bank */ + PORT_START("KEY.0") /* fake player 1 controls 1st bank */ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) @@ -391,7 +382,7 @@ static INPUT_PORTS_START( hotgmck ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("KEY1") /* fake player 1 controls 2nd bank */ + PORT_START("KEY.1") /* fake player 1 controls 2nd bank */ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) @@ -401,7 +392,7 @@ static INPUT_PORTS_START( hotgmck ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("KEY2") /* fake player 1 controls 3rd bank */ + PORT_START("KEY.2") /* fake player 1 controls 3rd bank */ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) @@ -411,7 +402,7 @@ static INPUT_PORTS_START( hotgmck ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("KEY3") /* fake player 1 controls 4th bank */ + PORT_START("KEY.3") /* fake player 1 controls 4th bank */ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) @@ -421,7 +412,7 @@ static INPUT_PORTS_START( hotgmck ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("KEY4") /* fake player 2 controls 1st bank */ + PORT_START("KEY.4") /* fake player 2 controls 1st bank */ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_PLAYER(2) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_PLAYER(2) @@ -431,7 +422,7 @@ static INPUT_PORTS_START( hotgmck ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("KEY5") /* fake player 2 controls 2nd bank */ + PORT_START("KEY.5") /* fake player 2 controls 2nd bank */ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_PLAYER(2) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_PLAYER(2) @@ -441,7 +432,7 @@ static INPUT_PORTS_START( hotgmck ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("KEY6") /* fake player 2 controls 3rd bank */ + PORT_START("KEY.6") /* fake player 2 controls 3rd bank */ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_PLAYER(2) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_PLAYER(2) @@ -451,7 +442,7 @@ static INPUT_PORTS_START( hotgmck ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("KEY7") /* fake player 2 controls 4th bank */ + PORT_START("KEY.7") /* fake player 2 controls 4th bank */ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_PLAYER(2) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_PLAYER(2) @@ -470,7 +461,7 @@ static INPUT_PORTS_START( loderndf ) PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_COIN4 ) // Screen 2 - 2nd slot PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_SERVICE1 ) // Screen 1 PORT_SERVICE_NO_TOGGLE( 0x00000020, IP_ACTIVE_LOW) - PORT_DIPNAME( 0x00000040, 0x00000040, "Debug" ) /* Must be high for rom test, unknown other side-effects */ + PORT_DIPNAME( 0x00000040, 0x00000040, "Debug" ) /* Must be on for rom test, unknown other side-effects */ PORT_DIPSETTING( 0x00000040, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_SERVICE2 ) // Screen 2 @@ -633,6 +624,24 @@ WRITE_LINE_MEMBER(psikyo4_state::irqhandler) void psikyo4_state::machine_start() { + // configure YMF ROM banks + memory_region *YMFROM = memregion("ymf"); + m_ymf_max_bank = YMFROM->bytes() / 0x100000; + for (int i = 0; i < 4; i++) + { + char banktag[16]; + sprintf(banktag, "ymfbank%d", i); + m_ymf_bank[i] = membank(banktag); + m_ymf_bank[i]->configure_entries(0, m_ymf_max_bank, YMFROM->base(), 0x100000); + m_ymf_bank[i]->set_entry(i); + } + + // configure SH2 DRC + m_maincpu->sh2drc_add_fastram(0x00000000, 0x000fffff, 1, memregion("maincpu")->base()); + m_maincpu->sh2drc_add_fastram(0x03000000, 0x030037ff, 0, memshare("spriteram")->ptr()); + m_maincpu->sh2drc_add_fastram(0x06000000, 0x060fffff, 0, memshare("ram")->ptr()); + + save_item(NAME(m_io_select)); save_item(NAME(m_oldbrt1)); save_item(NAME(m_oldbrt2)); } @@ -683,6 +692,7 @@ static MACHINE_CONFIG_START( ps4big, psikyo4_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SOUND_ADD("ymf", YMF278B, MASTER_CLOCK/2) + MCFG_DEVICE_ADDRESS_MAP(AS_0, ps4_ymf_map) MCFG_YMF278B_IRQ_HANDLER(WRITELINE(psikyo4_state, irqhandler)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) @@ -718,9 +728,7 @@ ROM_START( hotgmck ) ROM_LOAD32_WORD( "3l.bin", 0x1800000, 0x400000, CRC(a8a646f7) SHA1(be96626f3a4c8eb81f0bb7d8ac1c4e6619be50c8) ) ROM_LOAD32_WORD( "3h.bin", 0x1800002, 0x400000, CRC(8c32becd) SHA1(9a8ddda4c6c007bb5cd4abb11859a4b7f1b1d578) ) - ROM_REGION( 0x400000, "ymf", ROMREGION_ERASE00 ) - - ROM_REGION( 0x800000, "ymfsource", 0 ) + ROM_REGION( 0x800000, "ymf", 0 ) ROM_LOAD( "snd0.bin", 0x000000, 0x400000, CRC(c090d51a) SHA1(d229753b536209fe0da1985ca694fd1a73bc0f39) ) ROM_LOAD( "snd1.bin", 0x400000, 0x400000, CRC(c24243b5) SHA1(2100d5d7d2e4b9ed90bde38cb61a5da09f00ce21) ) ROM_END @@ -745,9 +753,7 @@ ROM_START( hgkairak ) ROM_LOAD32_WORD( "5l.u7", 0x2800000, 0x400000, CRC(4639ef36) SHA1(324ffcfa1b1b9def00c15f628c59cea1d09b031d) ) ROM_LOAD32_WORD( "5h.u16", 0x2800002, 0x400000, CRC(549e9e9e) SHA1(90c1695c89c059852f8b4f714b3dfee006839b44) ) - ROM_REGION( 0x400000, "ymf", ROMREGION_ERASE00 ) - - ROM_REGION( 0x800000, "ymfsource", 0 ) + ROM_REGION( 0x800000, "ymf", 0 ) ROM_LOAD( "snd0.u10", 0x000000, 0x400000, CRC(0e8e5fdf) SHA1(041e3118f7a838dcc9fb99a1028fb48a452ba1d9) ) ROM_LOAD( "snd1.u19", 0x400000, 0x400000, CRC(d8057d2f) SHA1(51d96cc4e9da81cbd1e815c652707407e6c7c3ae) ) ROM_END @@ -777,9 +783,7 @@ ROM_START( hotgmck3 ) ROM_LOAD32_WORD( "7l.u9", 0x3800000, 0x400000, CRC(2ec78fb2) SHA1(194e9833ab7057c2f83c581e722b41631d99fccc) ) ROM_LOAD32_WORD( "7h.u18", 0x3800002, 0x400000, CRC(c1735612) SHA1(84e32d3249d57cdc8ea91780801eaa196c439895) ) - ROM_REGION( 0x400000, "ymf", ROMREGION_ERASE00 ) - - ROM_REGION( 0x800000, "ymfsource", 0 ) + ROM_REGION( 0x800000, "ymf", 0 ) ROM_LOAD( "snd0.u10", 0x000000, 0x400000, CRC(d62a0dba) SHA1(d81e2e1251b62eca8cd4d8eec2515b2cf7d7ff0a) ) ROM_LOAD( "snd1.u19", 0x400000, 0x400000, CRC(1df91fb4) SHA1(f0f2d2d717fbd16a67da9f0e21f288ceedef839f) ) ROM_END @@ -789,7 +793,7 @@ ROM_START( hotgm4ev ) ROM_REGION( 0x500000, "maincpu", 0) ROM_LOAD32_WORD_SWAP( "2.u22", 0x000000, 0x080000, CRC(3334c21e) SHA1(8d825448e40bc50d670ab8587a40df6b27ac918e) ) ROM_LOAD32_WORD_SWAP( "1.u23", 0x000002, 0x080000, CRC(b1a1c643) SHA1(1912a2d231e97ffbe9b668ca7f25cf406664f3ba) ) - ROM_LOAD16_WORD_SWAP( "prog.u1", 0x100000, 0x400000, CRC(ad556d8e) SHA1(d3dc3c5cbe939b6fc28f861e4132c5485ba89f50) ) // no test + ROM_LOAD16_WORD_SWAP( "prog.u1", 0x100000, 0x400000, CRC(ad556d8e) SHA1(d3dc3c5cbe939b6fc28f861e4132c5485ba89f50) ) // no test; second half empty ROM_REGION( 0x8000000, "gfx1", 0 ) /* Sprites */ ROM_LOAD32_WORD( "0l.u2", 0x0000000, 0x400000, CRC(f65986f7) SHA1(3824a7ea7f14ef3f319b07bd1224847131f6cac0) ) // ok @@ -809,19 +813,16 @@ ROM_START( hotgm4ev ) ROM_LOAD32_WORD( "7l.u9", 0x3800000, 0x400000, CRC(022a8a31) SHA1(a21dbf36f56e144f9817c7255866546367dda2f6) ) // ok ROM_LOAD32_WORD( "7h.u18", 0x3800002, 0x400000, CRC(77e47409) SHA1(0e1deb01dd1250c90fc3eed776becd51899f0b5f) ) // ok - ROM_REGION( 0x400000, "ymf", ROMREGION_ERASE00 ) - - ROM_REGION( 0x800000, "ymfsource", 0 ) + ROM_REGION( 0x800000, "ymf", 0 ) ROM_LOAD( "snd0.u10", 0x000000, 0x400000, CRC(051e2fed) SHA1(ee8073332801982549b3c142fba114e27733a756) ) // ok - ROM_LOAD( "snd1.u19", 0x400000, 0x400000, CRC(0de0232d) SHA1(c600fe1d3c6c05e451ae7ef249bb92e8fc9cec3a) ) // ok (but fails rom test due to banking error in emulation) + ROM_LOAD( "snd1.u19", 0x400000, 0x400000, CRC(0de0232d) SHA1(c600fe1d3c6c05e451ae7ef249bb92e8fc9cec3a) ) // ok ROM_END ROM_START( hotgmcki ) - ROM_REGION( 0x500000, "maincpu", 0) + ROM_REGION( 0x300000, "maincpu", 0) ROM_LOAD32_WORD_SWAP( "2.u22", 0x000000, 0x080000, CRC(abc192dd) SHA1(674c2b8814319605c1b6221bbe18588a98dda093) ) ROM_LOAD32_WORD_SWAP( "1.u23", 0x000002, 0x080000, CRC(8be896d0) SHA1(5d677dede4ec18cbfc54acae95fe0f10bfc4d566) ) ROM_LOAD16_WORD_SWAP( "prog.u1", 0x100000, 0x200000, CRC(9017ae8e) SHA1(0879198606095a2d209df059538ce1c73460b30e) ) // no test - ROM_RELOAD(0x300000,0x200000) /* Roms have to be mirrored with ROM_RELOAD for rom tests to pass */ ROM_REGION( 0x4000000, "gfx1", ROMREGION_ERASEFF | 0 ) /* Sprites */ @@ -858,16 +859,14 @@ ROM_START( hotgmcki ) ROM_LOAD32_WORD( "7h.u18", 0x3800002, 0x200000, CRC(a3fd4ae5) SHA1(31056e5f645984b85e9bc3767016a856ac0175f9) ) // ok ROM_RELOAD( 0x3c00002, 0x200000 ) - ROM_REGION( 0x400000, "ymf", ROMREGION_ERASE00 ) - - ROM_REGION( 0x800000, "ymfsource", 0 ) + ROM_REGION( 0x800000, "ymf", 0 ) ROM_LOAD( "snd0.u10", 0x000000, 0x400000, CRC(5f275f35) SHA1(c5952a16e9f0cee6fc990c234ccaa7ca577741bd) ) // ok - ROM_LOAD( "snd1.u19", 0x400000, 0x400000, CRC(98608779) SHA1(a73c21f0f66c2af903e44a0a6a9f821b00615e7b) ) // ok (but fails rom test due to bad banking in service mode) + ROM_LOAD( "snd1.u19", 0x400000, 0x400000, CRC(98608779) SHA1(a73c21f0f66c2af903e44a0a6a9f821b00615e7b) ) // ok ROM_END ROM_START( loderndf ) - ROM_REGION( 0x100000, "maincpu", 0) + ROM_REGION( 0x300000, "maincpu", 0) ROM_LOAD32_WORD_SWAP( "1b.u23", 0x000002, 0x080000, CRC(fae92286) SHA1(c3d3a50514fb9c0bbd3ffb5c4bfcc853dc1893d2) ) ROM_LOAD32_WORD_SWAP( "2b.u22", 0x000000, 0x080000, CRC(fe2424c0) SHA1(48a329cfdf98da1a8701b430c159d470c0f5eca1) ) @@ -882,7 +881,7 @@ ROM_START( loderndf ) ROM_END ROM_START( loderndfa ) - ROM_REGION( 0x100000, "maincpu", 0) + ROM_REGION( 0x300000, "maincpu", 0) ROM_LOAD32_WORD_SWAP( "12.u23", 0x000002, 0x080000, CRC(661d372e) SHA1(c509c3ad9ca01e0f58bfc319b2738ecc36865ffd) ) ROM_LOAD32_WORD_SWAP( "3.u22", 0x000000, 0x080000, CRC(0a63529f) SHA1(05dd7877041b69d46e41c5bddb877c083620294b) ) @@ -897,7 +896,7 @@ ROM_START( loderndfa ) ROM_END ROM_START( hotdebut ) - ROM_REGION( 0x100000, "maincpu", 0) + ROM_REGION( 0x300000, "maincpu", 0) ROM_LOAD32_WORD_SWAP( "1.u23", 0x000002, 0x080000, CRC(0b0d0027) SHA1(f62c487a725439af035d2904d453d3c2f7a5649b) ) ROM_LOAD32_WORD_SWAP( "2.u22", 0x000000, 0x080000, CRC(c3b5180b) SHA1(615cc1fd99a1e4634b04bb92a3c41f914644e903) ) @@ -914,46 +913,12 @@ ROM_START( hotdebut ) ROM_END -void psikyo4_state::hotgmck_pcm_bank_postload() -{ - set_hotgmck_pcm_bank(0); - set_hotgmck_pcm_bank(1); -} - -void psikyo4_state::install_hotgmck_pcm_bank() -{ - UINT8 *ymf_pcm = memregion("ymf")->base(); - UINT8 *pcm_rom = memregion("ymfsource")->base(); - - memcpy(ymf_pcm, pcm_rom, 0x200000); - - m_io_select[0] = (m_io_select[0] & 0x00ffffff) | 0x32000000; - set_hotgmck_pcm_bank(0); - set_hotgmck_pcm_bank(1); - - m_maincpu->space(AS_PROGRAM).install_write_handler(0x5800008, 0x580000b, write32_delegate(FUNC(psikyo4_state::hotgmck_pcm_bank_w),this)); - machine().save().register_postload(save_prepost_delegate(FUNC(psikyo4_state::hotgmck_pcm_bank_postload), this)); -} - -DRIVER_INIT_MEMBER(psikyo4_state,hotgmck) -{ - UINT8 *RAM = memregion("maincpu")->base(); - membank("bank1")->set_base(&RAM[0x100000]); - install_hotgmck_pcm_bank(); // Banked PCM ROM - - UINT32 *rom = (UINT32 *)memregion("maincpu")->base(); - m_maincpu->sh2drc_add_fastram(0x00000000, 0x000fffff, 1, rom); - m_maincpu->sh2drc_add_fastram(0x03000000, 0x030037ff, 0, &m_spriteram[0]); - m_maincpu->sh2drc_add_fastram(0x06000000, 0x060fffff, 0, &m_ram[0]); -} - - -/* YEAR NAME PARENT MACHINE INPUT INIT MONITOR COMPANY FULLNAME FLAGS */ -GAME( 1997, hotgmck, 0, ps4big, hotgmck, psikyo4_state, hotgmck, ROT0, "Psikyo", "Taisen Hot Gimmick (Japan)", GAME_SUPPORTS_SAVE ) -GAME( 1998, hgkairak, 0, ps4big, hotgmck, psikyo4_state, hotgmck, ROT0, "Psikyo", "Taisen Hot Gimmick Kairakuten (Japan)", GAME_SUPPORTS_SAVE ) -GAME( 1999, hotgmck3, 0, ps4big, hotgmck, psikyo4_state, hotgmck, ROT0, "Psikyo", "Taisen Hot Gimmick 3 Digital Surfing (Japan)", GAME_SUPPORTS_SAVE ) -GAME( 2000, hotgm4ev, 0, ps4big, hotgmck, psikyo4_state, hotgmck, ROT0, "Psikyo", "Taisen Hot Gimmick 4 Ever (Japan)", GAME_SUPPORTS_SAVE ) -GAME( 2001, hotgmcki, 0, ps4big, hotgmck, psikyo4_state, hotgmck, ROT0, "Psikyo", "Mahjong Hot Gimmick Integral (Japan)", GAME_SUPPORTS_SAVE ) -GAME( 2000, loderndf, 0, ps4small, loderndf, driver_device, 0, ROT0, "Psikyo", "Lode Runner - The Dig Fight (ver. B)", GAME_SUPPORTS_SAVE ) -GAME( 2000, loderndfa,loderndf, ps4small, loderndf, driver_device, 0, ROT0, "Psikyo", "Lode Runner - The Dig Fight (ver. A)", GAME_SUPPORTS_SAVE ) -GAME( 2000, hotdebut, 0, ps4small, hotdebut, driver_device, 0, ROT0, "MOSS / Psikyo", "Quiz de Idol! Hot Debut (Japan)", GAME_SUPPORTS_SAVE ) +/* YEAR NAME PARENT MACHINE INPUT INIT MONITOR COMPANY FULLNAME FLAGS */ +GAME( 1997, hotgmck, 0, ps4big, hotgmck, driver_device, 0, ROT0, "Psikyo", "Taisen Hot Gimmick (Japan)", GAME_SUPPORTS_SAVE ) +GAME( 1998, hgkairak, 0, ps4big, hotgmck, driver_device, 0, ROT0, "Psikyo", "Taisen Hot Gimmick Kairakuten (Japan)", GAME_SUPPORTS_SAVE ) +GAME( 1999, hotgmck3, 0, ps4big, hotgmck, driver_device, 0, ROT0, "Psikyo", "Taisen Hot Gimmick 3 Digital Surfing (Japan)", GAME_SUPPORTS_SAVE ) +GAME( 2000, hotgm4ev, 0, ps4big, hotgmck, driver_device, 0, ROT0, "Psikyo", "Taisen Hot Gimmick 4 Ever (Japan)", GAME_SUPPORTS_SAVE ) +GAME( 2001, hotgmcki, 0, ps4big, hotgmck, driver_device, 0, ROT0, "Psikyo", "Mahjong Hot Gimmick Integral (Japan)", GAME_SUPPORTS_SAVE ) +GAME( 2000, loderndf, 0, ps4small, loderndf, driver_device, 0, ROT0, "Psikyo", "Lode Runner - The Dig Fight (ver. B)", GAME_SUPPORTS_SAVE ) +GAME( 2000, loderndfa,loderndf, ps4small, loderndf, driver_device, 0, ROT0, "Psikyo", "Lode Runner - The Dig Fight (ver. A)", GAME_SUPPORTS_SAVE ) +GAME( 2000, hotdebut, 0, ps4small, hotdebut, driver_device, 0, ROT0, "MOSS / Psikyo", "Quiz de Idol! Hot Debut (Japan)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/psikyosh.c b/src/mame/drivers/psikyosh.c index 4b6701c8f34..d8dc9cf71d7 100644 --- a/src/mame/drivers/psikyosh.c +++ b/src/mame/drivers/psikyosh.c @@ -355,7 +355,7 @@ WRITE32_MEMBER(psikyosh_state::psikyosh_vidregs_w) if (offset == 4) /* Configure bank for gfx test */ { if (ACCESSING_BITS_0_15) // Bank - membank("bank2")->set_entry(m_vidregs[offset] & 0xfff); + membank("gfxbank")->set_entry(m_vidregs[offset] & 0xfff); } } @@ -486,7 +486,7 @@ P1KEY11 29|30 P2KEY11 static ADDRESS_MAP_START( ps3v1_map, AS_PROGRAM, 32, psikyosh_state ) // rom mapping AM_RANGE(0x00000000, 0x000fffff) AM_ROM // program ROM (1 meg) - AM_RANGE(0x02000000, 0x021fffff) AM_ROMBANK("bank1") // data ROM + AM_RANGE(0x02000000, 0x020fffff) AM_ROM AM_REGION("maincpu", 0x100000) // data ROM // video chip AM_RANGE(0x03000000, 0x03003fff) AM_RAM AM_SHARE("spriteram") // video banks0-7 (sprites and sprite list) AM_RANGE(0x03004000, 0x0300ffff) AM_RAM AM_SHARE("bgram") // video banks 7-0x1f (backgrounds and other effects) @@ -494,9 +494,9 @@ static ADDRESS_MAP_START( ps3v1_map, AS_PROGRAM, 32, psikyosh_state ) AM_RANGE(0x03050000, 0x030501ff) AM_RAM AM_SHARE("zoomram") // sprite zoom lookup table AM_RANGE(0x0305ffdc, 0x0305ffdf) AM_READNOP AM_WRITE(psikyosh_irqctrl_w) // also writes to this address - might be vblank reads? AM_RANGE(0x0305ffe0, 0x0305ffff) AM_RAM_WRITE(psikyosh_vidregs_w) AM_SHARE("vidregs") // video registers - AM_RANGE(0x03060000, 0x0307ffff) AM_ROMBANK("bank2") // data for rom tests (gfx), data is controlled by vidreg + AM_RANGE(0x03060000, 0x0307ffff) AM_ROMBANK("gfxbank") // data for rom tests (gfx), data is controlled by vidreg // rom mapping - AM_RANGE(0x04060000, 0x0407ffff) AM_ROMBANK("bank2") // data for rom tests (gfx) (Mirrored?) + AM_RANGE(0x04060000, 0x0407ffff) AM_ROMBANK("gfxbank") // data for rom tests (gfx) (Mirrored?) // sound chip AM_RANGE(0x05000000, 0x05000007) AM_DEVREADWRITE8("ymf", ymf278b_device, read, write, 0xffffffff) // inputs/eeprom @@ -522,9 +522,9 @@ static ADDRESS_MAP_START( ps5_map, AS_PROGRAM, 32, psikyosh_state ) AM_RANGE(0x04050000, 0x040501ff) AM_RAM AM_SHARE("zoomram") // sprite zoom lookup table AM_RANGE(0x0405ffdc, 0x0405ffdf) AM_READNOP AM_WRITE(psikyosh_irqctrl_w) // also writes to this address - might be vblank reads? AM_RANGE(0x0405ffe0, 0x0405ffff) AM_RAM_WRITE(psikyosh_vidregs_w) AM_SHARE("vidregs") // video registers - AM_RANGE(0x04060000, 0x0407ffff) AM_ROMBANK("bank2") // data for rom tests (gfx), data is controlled by vidreg + AM_RANGE(0x04060000, 0x0407ffff) AM_ROMBANK("gfxbank") // data for rom tests (gfx), data is controlled by vidreg // rom mapping - AM_RANGE(0x05000000, 0x0507ffff) AM_ROMBANK("bank1") // data ROM + AM_RANGE(0x05000000, 0x0507ffff) AM_ROM AM_REGION("maincpu", 0x100000) // data ROM // ram AM_RANGE(0x06000000, 0x060fffff) AM_RAM AM_SHARE("ram") ADDRESS_MAP_END @@ -764,7 +764,7 @@ WRITE_LINE_MEMBER(psikyosh_state::irqhandler) void psikyosh_state::machine_start() { - membank("bank2")->configure_entries(0, 0x1000, memregion("gfx1")->base(), 0x20000); + membank("gfxbank")->configure_entries(0, 0x1000, memregion("gfx1")->base(), 0x20000); } @@ -828,7 +828,7 @@ MACHINE_CONFIG_END /* PS3 */ ROM_START( soldivid ) - ROM_REGION( 0x100000, "maincpu", 0) + ROM_REGION( 0x200000, "maincpu", 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) ) @@ -846,7 +846,7 @@ ROM_START( soldivid ) ROM_END ROM_START( s1945ii ) - ROM_REGION( 0x100000, "maincpu", 0) /* Code */ + ROM_REGION( 0x200000, "maincpu", 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) ) @@ -898,7 +898,7 @@ ROM_START( daraku ) ROM_END ROM_START( sbomber ) /* Version B - Only shows "Version B" when set to Japan region */ - ROM_REGION( 0x100000, "maincpu", 0) + ROM_REGION( 0x200000, "maincpu", 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) ) @@ -922,7 +922,7 @@ ROM_START( sbomber ) /* Version B - Only shows "Version B" when set to Japan reg ROM_END ROM_START( sbombera ) /* Original version */ - ROM_REGION( 0x100000, "maincpu", 0) + ROM_REGION( 0x200000, "maincpu", 0) ROM_LOAD32_WORD_SWAP( "2.u18", 0x000002, 0x080000, CRC(57819a26) SHA1(d7a6fc957e39adf97762ab0a35b91aa17ec026e0) ) ROM_LOAD32_WORD_SWAP( "1.u17", 0x000000, 0x080000, CRC(c388e847) SHA1(cbf4f2e191894160bdf0290d72cf20c222aaf7a7) ) @@ -996,7 +996,7 @@ ROM_END /* PS5v2 */ ROM_START( dragnblz ) - ROM_REGION( 0x100000, "maincpu", 0) + ROM_REGION( 0x180000, "maincpu", 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) ) @@ -1022,7 +1022,7 @@ ROM_START( dragnblz ) ROM_LOAD32_WORD( "10l.u58",0x2800000, 0x200000, CRC(a3f5c7f8) SHA1(d17478ca3e7ef46270f350ffa35d43acb05b1185) ) ROM_LOAD32_WORD( "10h.u59",0x2800002, 0x200000, CRC(30e304c4) SHA1(1d866276bfe7f7524306a880d225aaf11ac2e5dd) ) - ROM_REGION( 0x200000, "ymf", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */ ROM_LOAD( "snd0.u52", 0x000000, 0x200000, CRC(7fd1b225) SHA1(6aa61021ada51393bbb34fd1aea00b8feccc8197) ) ROM_REGION( 0x100, "eeprom", 0 ) @@ -1038,7 +1038,7 @@ Starting with Gunbarich and including Mahjong G-Taste, Psikyo started to "recycl */ ROM_START( gnbarich ) - ROM_REGION( 0x100000, "maincpu", 0) + ROM_REGION( 0x180000, "maincpu", 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) ) @@ -1064,7 +1064,7 @@ ROM_START( gnbarich ) // 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( 0x200000, "ymf", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */ ROM_LOAD( "snd0.u52", 0x000000, 0x200000, CRC(7b10436b) SHA1(c731fcce024e286a677ca10a91761c1ee06094a5) ) ROM_REGION( 0x100, "eeprom", 0 ) @@ -1072,7 +1072,7 @@ ROM_START( gnbarich ) ROM_END ROM_START( mjgtaste ) - ROM_REGION( 0x100000, "maincpu", 0) + ROM_REGION( 0x180000, "maincpu", 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) ) @@ -1098,7 +1098,7 @@ ROM_START( mjgtaste ) // 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, "ymf", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */ ROM_LOAD( "snd0.u52", 0x000000, 0x400000, CRC(0179f018) SHA1(16ae63e021230356777342ed902e02407a1a1b82) ) ROM_REGION( 0x100, "eeprom", 0 ) @@ -1106,7 +1106,7 @@ ROM_START( mjgtaste ) ROM_END ROM_START( tgm2 ) - ROM_REGION( 0x100000, "maincpu", 0) + ROM_REGION( 0x180000, "maincpu", 0) ROM_LOAD32_WORD_SWAP( "2.u21", 0x000000, 0x080000, CRC(b19f6c31) SHA1(c58346c575db71262aebc3993743cb031c41e4af) ) ROM_LOAD32_WORD_SWAP( "1.u22", 0x000002, 0x080000, CRC(c521bf24) SHA1(0ee5b9f74b6b8bcc01b2270c53f30d99e877ed64) ) @@ -1129,7 +1129,7 @@ ROM_START( tgm2 ) ROM_LOAD32_WORD( "95ts_10l.u58", 0x2800000, 0x200000, CRC(303a5240) SHA1(5816d1922e85bc27a2a13cdd183d9e67c7ddb2e1) ) ROM_LOAD32_WORD( "96ts_10h.u59", 0x2800002, 0x200000, CRC(2240ebf6) SHA1(b61f93a18dd9d94fb57d95745d4df2e41a0371ff) ) - ROM_REGION( 0x800000, "ymf", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */ ROM_LOAD( "97ts_snd.u52", 0x000000, 0x400000, CRC(9155eca6) SHA1(f0b4f68462d8a465c39815d3b7fd9818788132ae) ) ROM_REGION( 0x100, "eeprom", 0 ) /* Default Eeprom (contains scores etc.) */ @@ -1138,7 +1138,7 @@ ROM_START( tgm2 ) ROM_END ROM_START( tgm2p ) - ROM_REGION( 0x100000, "maincpu", 0) + ROM_REGION( 0x180000, "maincpu", 0) ROM_LOAD32_WORD_SWAP( "2b.u21", 0x000000, 0x080000, CRC(38bc626c) SHA1(783e8413b11f1fa08d331b09ef4ed63f62b87ead) ) ROM_LOAD32_WORD_SWAP( "1b.u22", 0x000002, 0x080000, CRC(7599fb19) SHA1(3f7e81756470c173cc17a7e7dee91437571fd0c3) ) @@ -1161,7 +1161,7 @@ ROM_START( tgm2p ) ROM_LOAD32_WORD( "95ts_10l.u58", 0x2800000, 0x200000, CRC(303a5240) SHA1(5816d1922e85bc27a2a13cdd183d9e67c7ddb2e1) ) ROM_LOAD32_WORD( "96ts_10h.u59", 0x2800002, 0x200000, CRC(2240ebf6) SHA1(b61f93a18dd9d94fb57d95745d4df2e41a0371ff) ) - ROM_REGION( 0x800000, "ymf", 0 ) /* Samples */ + ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */ ROM_LOAD( "97ts_snd.u52", 0x000000, 0x400000, CRC(9155eca6) SHA1(f0b4f68462d8a465c39815d3b7fd9818788132ae) ) ROM_REGION( 0x100, "eeprom", 0 ) /* Default Eeprom (contains scores etc.) */ @@ -1169,105 +1169,46 @@ ROM_START( tgm2p ) ROM_LOAD( "tgm2p.default.nv", 0x000, 0x100, CRC(b2328b40) SHA1(e6cda4d6f4e91b9f78d2ca84a5eee6c3bd03fe02) ) ROM_END -void psikyosh_state::ps3_init() +DRIVER_INIT_MEMBER(psikyosh_state,ps3) { + m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS); m_maincpu->sh2drc_add_fastram(0x03004000, 0x0300ffff, 0, &m_bgram[0]); m_maincpu->sh2drc_add_fastram(0x03050000, 0x030501ff, 0, &m_zoomram[0]); m_maincpu->sh2drc_add_fastram(0x06000000, 0x060fffff, 0, &m_ram[0]); } -void psikyosh_state::ps5_init() +DRIVER_INIT_MEMBER(psikyosh_state,ps5) { + m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS); m_maincpu->sh2drc_add_fastram(0x04004000, 0x0400ffff, 0, &m_bgram[0]); m_maincpu->sh2drc_add_fastram(0x04050000, 0x040501ff, 0, &m_zoomram[0]); m_maincpu->sh2drc_add_fastram(0x06000000, 0x060fffff, 0, &m_ram[0]); } -DRIVER_INIT_MEMBER(psikyosh_state,soldivid) -{ - m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS); - ps3_init(); -} - -DRIVER_INIT_MEMBER(psikyosh_state,s1945ii) -{ - m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS); - ps3_init(); -} - -DRIVER_INIT_MEMBER(psikyosh_state,daraku) -{ - UINT8 *RAM = memregion("maincpu")->base(); - membank("bank1")->set_base(&RAM[0x100000]); - m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS); - ps3_init(); -} - -DRIVER_INIT_MEMBER(psikyosh_state,sbomberb) -{ - m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS); - ps3_init(); -} - -DRIVER_INIT_MEMBER(psikyosh_state,gunbird2) -{ - UINT8 *RAM = memregion("maincpu")->base(); - membank("bank1")->set_base(&RAM[0x100000]); - m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS); - ps5_init(); -} - -DRIVER_INIT_MEMBER(psikyosh_state,s1945iii) -{ - UINT8 *RAM = memregion("maincpu")->base(); - membank("bank1")->set_base(&RAM[0x100000]); - m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS); - ps5_init(); -} - -DRIVER_INIT_MEMBER(psikyosh_state,dragnblz) -{ - m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS); - ps5_init(); -} - -DRIVER_INIT_MEMBER(psikyosh_state,gnbarich) -{ - m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS); - ps5_init(); -} - -DRIVER_INIT_MEMBER(psikyosh_state,tgm2) -{ - m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS); - ps5_init(); -} - DRIVER_INIT_MEMBER(psikyosh_state,mjgtaste) { - m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS); /* needs to install mahjong controls too (can select joystick in test mode tho) */ m_maincpu->space(AS_PROGRAM).install_read_handler(0x03000000, 0x03000003, read32_delegate(FUNC(psikyosh_state::mjgtaste_input_r),this)); - ps5_init(); + DRIVER_INIT_CALL(ps5); } /* YEAR NAME PARENT MACHINE INPUT INIT MONITOR COMPANY FULLNAME FLAGS */ /* ps3-v1 */ -GAME( 1997, soldivid, 0, psikyo3v1, soldivid, psikyosh_state, soldivid, ROT0, "Psikyo", "Sol Divide - The Sword Of Darkness", GAME_SUPPORTS_SAVE ) -GAME( 1997, s1945ii, 0, psikyo3v1, s1945ii, psikyosh_state, s1945ii, ROT270, "Psikyo", "Strikers 1945 II", GAME_SUPPORTS_SAVE ) -GAME( 1998, daraku, 0, psikyo3v1, daraku, psikyosh_state, daraku, ROT0, "Psikyo", "Daraku Tenshi - The Fallen Angels", GAME_SUPPORTS_SAVE ) -GAME( 1998, sbomber, 0, psikyo3v1, sbomberb, psikyosh_state, sbomberb, ROT270, "Psikyo", "Space Bomber (ver. B)", GAME_SUPPORTS_SAVE ) -GAME( 1998, sbombera, sbomber, psikyo3v1, sbomberb, psikyosh_state, sbomberb, ROT270, "Psikyo", "Space Bomber", GAME_SUPPORTS_SAVE ) +GAME( 1997, soldivid, 0, psikyo3v1, soldivid, psikyosh_state, ps3, ROT0, "Psikyo", "Sol Divide - The Sword Of Darkness", GAME_SUPPORTS_SAVE ) +GAME( 1997, s1945ii, 0, psikyo3v1, s1945ii, psikyosh_state, ps3, ROT270, "Psikyo", "Strikers 1945 II", GAME_SUPPORTS_SAVE ) +GAME( 1998, daraku, 0, psikyo3v1, daraku, psikyosh_state, ps3, ROT0, "Psikyo", "Daraku Tenshi - The Fallen Angels", GAME_SUPPORTS_SAVE ) +GAME( 1998, sbomber, 0, psikyo3v1, sbomberb, psikyosh_state, ps3, ROT270, "Psikyo", "Space Bomber (ver. B)", GAME_SUPPORTS_SAVE ) +GAME( 1998, sbombera, sbomber, psikyo3v1, sbomberb, psikyosh_state, ps3, ROT270, "Psikyo", "Space Bomber", GAME_SUPPORTS_SAVE ) /* ps5 */ -GAME( 1998, gunbird2, 0, psikyo5, gunbird2, psikyosh_state, gunbird2, ROT270, "Psikyo", "Gunbird 2", GAME_SUPPORTS_SAVE ) -GAME( 1999, s1945iii, 0, psikyo5, s1945iii, psikyosh_state, s1945iii, ROT270, "Psikyo", "Strikers 1945 III (World) / Strikers 1999 (Japan)", GAME_SUPPORTS_SAVE ) +GAME( 1998, gunbird2, 0, psikyo5, gunbird2, psikyosh_state, ps5, ROT270, "Psikyo", "Gunbird 2", GAME_SUPPORTS_SAVE ) +GAME( 1999, s1945iii, 0, psikyo5, s1945iii, psikyosh_state, ps5, ROT270, "Psikyo", "Strikers 1945 III (World) / Strikers 1999 (Japan)", GAME_SUPPORTS_SAVE ) /* ps5v2 */ -GAME( 2000, dragnblz, 0, psikyo5, dragnblz, psikyosh_state, dragnblz, ROT270, "Psikyo", "Dragon Blaze", GAME_SUPPORTS_SAVE ) -GAME( 2000, tgm2, 0, psikyo5_240, tgm2, psikyosh_state, tgm2, ROT0, "Arika", "Tetris the Absolute The Grand Master 2", GAME_SUPPORTS_SAVE ) -GAME( 2000, tgm2p, tgm2, psikyo5_240, tgm2, psikyosh_state, tgm2, ROT0, "Arika", "Tetris the Absolute The Grand Master 2 Plus", GAME_SUPPORTS_SAVE ) -GAME( 2001, gnbarich, 0, psikyo5, gnbarich, psikyosh_state, gnbarich, ROT270, "Psikyo", "Gunbarich", GAME_SUPPORTS_SAVE ) +GAME( 2000, dragnblz, 0, psikyo5, dragnblz, psikyosh_state, ps5, ROT270, "Psikyo", "Dragon Blaze", GAME_SUPPORTS_SAVE ) +GAME( 2000, tgm2, 0, psikyo5_240, tgm2, psikyosh_state, ps5, ROT0, "Arika", "Tetris the Absolute The Grand Master 2", GAME_SUPPORTS_SAVE ) +GAME( 2000, tgm2p, tgm2, psikyo5_240, tgm2, psikyosh_state, ps5, ROT0, "Arika", "Tetris the Absolute The Grand Master 2 Plus", GAME_SUPPORTS_SAVE ) +GAME( 2001, gnbarich, 0, psikyo5, gnbarich, psikyosh_state, ps5, ROT270, "Psikyo", "Gunbarich", GAME_SUPPORTS_SAVE ) GAME( 2002, mjgtaste, 0, psikyo5, mjgtaste, psikyosh_state, mjgtaste, ROT0, "Psikyo", "Mahjong G-Taste", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/includes/psikyo4.h b/src/mame/includes/psikyo4.h index 672e971417a..c7da3f340af 100644 --- a/src/mame/includes/psikyo4.h +++ b/src/mame/includes/psikyo4.h @@ -21,15 +21,14 @@ public: m_bgpen_1(*this, "bgpen_1"), m_bgpen_2(*this, "bgpen_2"), m_paletteram(*this, "paletteram"), - m_io_select(*this, "io_select"), - m_ram(*this, "ram"), m_maincpu(*this, "maincpu"), m_eeprom(*this, "eeprom"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "lpalette"), m_palette2(*this, "rpalette"), m_lscreen(*this, "lscreen"), - m_rscreen(*this, "rscreen") + m_rscreen(*this, "rscreen"), + m_keys(*this, "KEY") { } /* memory pointers */ @@ -38,8 +37,10 @@ public: required_shared_ptr m_bgpen_1; required_shared_ptr m_bgpen_2; required_shared_ptr m_paletteram; - required_shared_ptr m_io_select; - required_shared_ptr m_ram; + + memory_bank *m_ymf_bank[4]; + UINT8 m_ymf_max_bank; + UINT8 m_io_select; /* video-related */ double m_oldbrt1; @@ -53,6 +54,7 @@ public: required_device m_palette2; required_device m_lscreen; required_device m_rscreen; + optional_ioport_array<8> m_keys; DECLARE_WRITE32_MEMBER(ps4_paletteram32_RRRRRRRRGGGGGGGGBBBBBBBBxxxxxxxx_dword_w); DECLARE_WRITE32_MEMBER(ps4_bgpen_1_dword_w); @@ -60,21 +62,16 @@ public: DECLARE_WRITE32_MEMBER(ps4_screen1_brt_w); DECLARE_WRITE32_MEMBER(ps4_screen2_brt_w); DECLARE_WRITE32_MEMBER(ps4_vidregs_w); - DECLARE_WRITE32_MEMBER(hotgmck_pcm_bank_w); - DECLARE_CUSTOM_INPUT_MEMBER(system_port_r); + DECLARE_WRITE32_MEMBER(io_select_w); DECLARE_CUSTOM_INPUT_MEMBER(mahjong_ctrl_r); DECLARE_WRITE32_MEMBER(ps4_eeprom_w); DECLARE_READ32_MEMBER(ps4_eeprom_r); - DECLARE_DRIVER_INIT(hotgmck); virtual void machine_start(); virtual void machine_reset(); virtual void video_start(); UINT32 screen_update_psikyo4_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_psikyo4_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); INTERRUPT_GEN_MEMBER(psikyosh_interrupt); - void hotgmck_pcm_bank_postload(); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, UINT32 scr); - void set_hotgmck_pcm_bank( int n ); - void install_hotgmck_pcm_bank(); DECLARE_WRITE_LINE_MEMBER(irqhandler); }; diff --git a/src/mame/includes/psikyosh.h b/src/mame/includes/psikyosh.h index 21a9c5cfac2..71e3f4d599d 100644 --- a/src/mame/includes/psikyosh.h +++ b/src/mame/includes/psikyosh.h @@ -62,16 +62,9 @@ public: DECLARE_READ32_MEMBER(mjgtaste_input_r); DECLARE_WRITE32_MEMBER(psh_eeprom_w); DECLARE_READ32_MEMBER(psh_eeprom_r); - DECLARE_DRIVER_INIT(gnbarich); - DECLARE_DRIVER_INIT(daraku); - DECLARE_DRIVER_INIT(soldivid); - DECLARE_DRIVER_INIT(s1945iii); + DECLARE_DRIVER_INIT(ps3); + DECLARE_DRIVER_INIT(ps5); DECLARE_DRIVER_INIT(mjgtaste); - DECLARE_DRIVER_INIT(tgm2); - DECLARE_DRIVER_INIT(sbomberb); - DECLARE_DRIVER_INIT(dragnblz); - DECLARE_DRIVER_INIT(gunbird2); - DECLARE_DRIVER_INIT(s1945ii); virtual void machine_start(); virtual void video_start(); void ps3_init(); diff --git a/src/mame/video/psikyo4.c b/src/mame/video/psikyo4.c index 59bedcb8f43..1a2eb6553fc 100644 --- a/src/mame/video/psikyo4.c +++ b/src/mame/video/psikyo4.c @@ -55,23 +55,18 @@ void psikyo4_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprec UINT32 *source = m_spriteram; UINT16 *list = (UINT16 *)m_spriteram.target() + 0x2c00/2 + 0x04/2; /* 0x2c00/0x2c02 what are these for, pointers? one for each screen */ UINT16 listlen = (0xc00/2 - 0x04/2), listcntr = 0; - int flipscreen1, flipscreen2; - - flipscreen1 = (((m_vidregs[1] >> 30) & 2) == 2) ? 1 : 0; - flipscreen2 = (((m_vidregs[1] >> 22) & 2) == 2) ? 1 : 0; + bool flipscreen = BIT(m_vidregs[1], (scr == 0 ? 31 : 23)); + int screen_height = (scr == 0 ? m_lscreen : m_rscreen)->visible_area().max_y + 1; while (listcntr < listlen) { - UINT16 listdat, sprnum, thisscreen; + UINT16 listdat, sprnum; listdat = list[BYTE_XOR_BE(listcntr)]; sprnum = (listdat & 0x03ff) * 2; - thisscreen = 0; - if ((listdat & 0x2000) == scr) thisscreen = 1; - /* start drawing */ - if (!(listdat & 0x8000) && thisscreen) /* draw only selected screen */ + if ((listdat & 0x8000) == 0 && (listdat & 0x2000) == scr) /* draw only selected screen */ { int loopnum = 0, i, j; UINT32 xpos, ypos, tnum, wide, high, colr, flipx, flipy; @@ -93,10 +88,10 @@ void psikyo4_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprec if (ypos & 0x200) ypos -= 0x400; if (xpos & 0x200) xpos -= 0x400; - if ((!scr && flipscreen1) || (scr && flipscreen2)) + if (flipscreen) { /* Screen Height depends on game */ - (!scr && flipscreen1) ? ypos = m_lscreen->visible_area().max_y + 1 - ypos - high * 16 : ypos = m_rscreen->visible_area().max_y + 1 - ypos - high * 16; + ypos = screen_height - ypos - high * 16; xpos = 40 * 8 - xpos - wide * 16; flipx = !flipx; flipy = !flipy;