ymf278b: Use the memory system to access wavetable data. This should make it

possible to hook up RAM as well as ROM to the device, e.g. for computer
  sound cards in MESS.

psikyo4: Improve and clean up wavetable ROM banking. The mask ROM tests in
  hotgm4ev and hotgmcki pass now. loderndf still fails for unknown reasons.
  Miscellaneous cleanups as well. [Alex Jackson]

(nw) I'm using the multipcm workaround for default address maps for now.
The core change I discussed will go in a separate commit, in case it causes
more problems than anticipated.
This commit is contained in:
Alex W. Jackson 2014-08-27 10:44:55 +00:00
parent 0be0a2c9ae
commit aa3d8f5cdd
10 changed files with 194 additions and 294 deletions

View File

@ -63,6 +63,7 @@
- LFO (vibrato, tremolo) - LFO (vibrato, tremolo)
- integrate YMF262 (used by Fuuki games, not used by Psikyo and Metro games) - 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) - 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" #include "emu.h"
@ -71,20 +72,11 @@
#define VERBOSE 0 #define VERBOSE 0
#define LOG(x) do { if (VERBOSE) logerror x; } while (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) // default address map
{ static ADDRESS_MAP_START( ymf278b, AS_0, 8, ymf278b_device )
if (offset >= m_romsize) AM_RANGE(0x000000, 0x3fffff) AM_ROM
{ ADDRESS_MAP_END
// logerror("YMF278B: Memory read overflow %x\n", offset);
return 0xff;
}
return m_rom[offset];
}
/**************************************************************************/ /**************************************************************************/
@ -276,23 +268,23 @@ void ymf278b_device::sound_stream_update(sound_stream &stream, stream_sample_t *
{ {
// 8 bit // 8 bit
case 0: case 0:
sample = read_memory(slot->startaddr + (slot->stepptr>>16))<<8; sample = m_direct->read_raw_byte(slot->startaddr + (slot->stepptr>>16))<<8;
break; break;
// 12 bit // 12 bit
case 1: case 1:
if (slot->stepptr & 0x10000) if (slot->stepptr & 0x10000)
sample = read_memory(slot->startaddr + (slot->stepptr>>17)*3+2)<<8 | sample = m_direct->read_raw_byte(slot->startaddr + (slot->stepptr>>17)*3+2)<<8 |
(read_memory(slot->startaddr + (slot->stepptr>>17)*3+1) << 4 & 0xf0); (m_direct->read_raw_byte(slot->startaddr + (slot->stepptr>>17)*3+1) << 4 & 0xf0);
else else
sample = read_memory(slot->startaddr + (slot->stepptr>>17)*3)<<8 | sample = m_direct->read_raw_byte(slot->startaddr + (slot->stepptr>>17)*3)<<8 |
(read_memory(slot->startaddr + (slot->stepptr>>17)*3+1) & 0xf0); (m_direct->read_raw_byte(slot->startaddr + (slot->stepptr>>17)*3+1) & 0xf0);
break; break;
// 16 bit // 16 bit
case 2: case 2:
sample = read_memory(slot->startaddr + ((slot->stepptr>>16)*2))<<8 | sample = m_direct->read_raw_byte(slot->startaddr + ((slot->stepptr>>16)*2))<<8 |
read_memory(slot->startaddr + ((slot->stepptr>>16)*2)+1); m_direct->read_raw_byte(slot->startaddr + ((slot->stepptr>>16)*2)+1);
break; break;
// ?? bit, effect is unknown, datasheet says it's prohibited // ?? bit, effect is unknown, datasheet says it's prohibited
@ -506,7 +498,7 @@ void ymf278b_device::C_w(UINT8 reg, UINT8 data)
else else
offset = m_wavetblhdr*0x80000 + (slot->wave - 384) * 12; offset = m_wavetblhdr*0x80000 + (slot->wave - 384) * 12;
for (i = 0; i < 12; i++) 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->bits = (p[0]&0xc0)>>6;
slot->startaddr = (p[2] | (p[1]<<8) | ((p[0]&0x3f)<<16)); 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; break;
case 0x06: case 0x06:
// memory data (ignored, we don't support RAM) // memory data
write_memory(m_memadr, data); m_addrspace[0]->write_byte(m_memadr, data);
m_memadr = (m_memadr + 1) & 0x3fffff; m_memadr = (m_memadr + 1) & 0x3fffff;
break; break;
@ -778,7 +770,7 @@ READ8_MEMBER( ymf278b_device::read )
ret = (m_pcmregs[m_port_C] & 0x1f) | 0x20; // device ID in upper bits ret = (m_pcmregs[m_port_C] & 0x1f) | 0x20; // device ID in upper bits
break; break;
case 6: case 6:
ret = read_memory(m_memadr); ret = m_direct->read_raw_byte(m_memadr);
m_memadr = (m_memadr + 1) & 0x3fffff; m_memadr = (m_memadr + 1) & 0x3fffff;
break; break;
@ -954,8 +946,7 @@ void ymf278b_device::device_start()
{ {
int i; int i;
m_rom = *region(); m_direct = &space().direct();
m_romsize = region()->bytes();
m_clock = clock(); m_clock = clock();
m_irq_handler.resolve(); m_irq_handler.resolve();
@ -1004,8 +995,11 @@ const device_type YMF278B = &device_creator<ymf278b_device>;
ymf278b_device::ymf278b_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) 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_t(mconfig, YMF278B, "YMF278B", tag, owner, clock, "ymf278b", __FILE__),
device_sound_interface(mconfig, *this), 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_irq_handler(*this)
{ {
m_address_map[0] = *ADDRESS_MAP_NAME(ymf278b);
} }
//------------------------------------------------- //-------------------------------------------------

View File

@ -11,7 +11,8 @@
devcb = &ymf278b_device::set_irq_handler(*device, DEVCB_##_devcb); devcb = &ymf278b_device::set_irq_handler(*device, DEVCB_##_devcb);
class ymf278b_device : public device_t, class ymf278b_device : public device_t,
public device_sound_interface public device_sound_interface,
public device_memory_interface
{ {
public: public:
ymf278b_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); 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); 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 // sound stream update overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples); 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) */ 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); int compute_rate(YMF278BSlot *slot, int val);
UINT32 compute_decay_env_vol_step(YMF278BSlot *slot, int val); UINT32 compute_decay_env_vol_step(YMF278BSlot *slot, int val);
void compute_freq_step(YMF278BSlot *slot); void compute_freq_step(YMF278BSlot *slot);
@ -120,12 +122,12 @@ private:
INT32 m_mix_level[8]; INT32 m_mix_level[8];
emu_timer *m_timer_a, *m_timer_b; emu_timer *m_timer_a, *m_timer_b;
const UINT8 *m_rom;
UINT32 m_romsize;
int m_clock; int m_clock;
sound_stream * m_stream; sound_stream * m_stream;
INT32 *m_mix_buffer; INT32 *m_mix_buffer;
direct_read_data * m_direct;
const address_space_config m_space_config;
devcb_write_line m_irq_handler; devcb_write_line m_irq_handler;
}; };

View File

@ -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) AM_RANGE(0x50b900, 0x50b9ff) AM_READWRITE(aliencha_protection_r, aliencha_protection_w)
ADDRESS_MAP_END 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_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ymf", YMF278B, 26000000) // ? 26MHz matches video (decrease for faster music tempo) 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_YMF278B_IRQ_HANDLER(WRITELINE(lordgun_state, soundirq))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5)

View File

@ -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) AM_RANGE(UPD7810_PORTC, UPD7810_PORTC) AM_WRITE(daitorid_sound_rombank_w)
ADDRESS_MAP_END 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 Bal Cube
***************************************************************************/ ***************************************************************************/
@ -3651,6 +3659,7 @@ static MACHINE_CONFIG_START( msgogo, metro_state )
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_SOUND_ADD("ymf", YMF278B, YMF278B_STD_CLOCK) 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_YMF278B_IRQ_HANDLER(WRITELINE(metro_state, ymf278b_interrupt))
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)

View File

@ -1590,7 +1590,7 @@ ROM_START( s1945 )
ROM_REGION( 0x200000, "gfx2", 0 ) /* Layer 0 + 1 */ ROM_REGION( 0x200000, "gfx2", 0 ) /* Layer 0 + 1 */
ROM_LOAD( "u34.bin", 0x000000, 0x200000, CRC(aaf83e23) SHA1(1c75d09ff42c0c215f8c66c699ca75688c95a05e) ) 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_LOAD( "u61.bin", 0x000000, 0x200000, CRC(a839cf47) SHA1(e179eb505c80d5bb3ccd9e228f2cf428c62b72ee) ) // 8 bit signed pcm (16KHz)
ROM_REGION( 0x040000, "spritelut", 0 ) /* */ ROM_REGION( 0x040000, "spritelut", 0 ) /* */
@ -1620,7 +1620,7 @@ ROM_START( s1945a )
ROM_REGION( 0x200000, "gfx2", 0 ) /* Layer 0 + 1 */ ROM_REGION( 0x200000, "gfx2", 0 ) /* Layer 0 + 1 */
ROM_LOAD( "u34.bin", 0x000000, 0x200000, CRC(aaf83e23) SHA1(1c75d09ff42c0c215f8c66c699ca75688c95a05e) ) 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_LOAD( "u61.bin", 0x000000, 0x200000, CRC(a839cf47) SHA1(e179eb505c80d5bb3ccd9e228f2cf428c62b72ee) ) // 8 bit signed pcm (16KHz)
ROM_REGION( 0x040000, "spritelut", 0 ) /* */ ROM_REGION( 0x040000, "spritelut", 0 ) /* */
@ -1650,7 +1650,7 @@ ROM_START( s1945j )
ROM_REGION( 0x200000, "gfx2", 0 ) /* Layer 0 + 1 */ ROM_REGION( 0x200000, "gfx2", 0 ) /* Layer 0 + 1 */
ROM_LOAD( "u34.bin", 0x000000, 0x200000, CRC(aaf83e23) SHA1(1c75d09ff42c0c215f8c66c699ca75688c95a05e) ) 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_LOAD( "u61.bin", 0x000000, 0x200000, CRC(a839cf47) SHA1(e179eb505c80d5bb3ccd9e228f2cf428c62b72ee) ) // 8 bit signed pcm (16KHz)
ROM_REGION( 0x040000, "spritelut", 0 ) /* */ 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_REGION( 0x200000, "gfx2", 0 ) /* Layer 0 + 1 */
ROM_LOAD( "u34.bin", 0x000000, 0x200000, CRC(aaf83e23) SHA1(1c75d09ff42c0c215f8c66c699ca75688c95a05e) ) 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_LOAD( "u61.bin", 0x000000, 0x200000, CRC(a839cf47) SHA1(e179eb505c80d5bb3ccd9e228f2cf428c62b72ee) ) // 8 bit signed pcm (16KHz)
ROM_REGION( 0x040000, "spritelut", 0 ) /* */ ROM_REGION( 0x040000, "spritelut", 0 ) /* */

View File

@ -31,8 +31,7 @@ YMF278B-F (80 pin PQFP) & YAC513 (16 pin SOIC)
To Do: To Do:
Sprite List format not 100% understood. Sprite List format not 100% understood.
The sound rom banking is wrong, at least for the ROM tests (see hotgm4ev), all the roms Lode Runner still fails the sound ROM test for some reason (different banking from the other games?)
are good, but it tests sound rom 0 twice due to the banking issues.
*-----------------------------------* *-----------------------------------*
| Tips and Tricks | | Tips and Tricks |
@ -40,8 +39,10 @@ To Do:
Hold Button during booting to test roms (Checksum 16-bit) for: 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?) Hot Gimmick 4 Ever: PL1 Start+PL2 Start (passes)
Quiz de Idol! Hot Debut: PL1 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 --- --- Lode Runner: The Dig Fight ---
@ -120,7 +121,7 @@ ROMs -
The remaining ROMs are surface mounted TSOP48 Type II MASKROMs, The remaining ROMs are surface mounted TSOP48 Type II MASKROMs,
either OKI MSM27C3252 (32MBit) or OKI MSM27C1652 (16MBit). 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 to read them. Not all positions are populated for each game. See
the source below for specifics. the source below for specifics.
@ -129,20 +130,10 @@ ROMs -
#include "includes/psikyo4.h" #include "includes/psikyo4.h"
#include "rendlay.h" #include "rendlay.h"
static GFXLAYOUT_RAW( layout_16x16x8, 16, 16, 16*8, 16*16*8 )
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( ps4 ) 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 GFXDECODE_END
WRITE32_MEMBER(psikyo4_state::ps4_eeprom_w) 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); 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 */ CUSTOM_INPUT_MEMBER(psikyo4_state::mahjong_ctrl_r)/* used by hotgmck/hgkairak */
{ {
int player = (FPTR)param; int player = (FPTR)param;
int sel = (m_io_select[0] & 0x0000ff00) >> 8;
int ret = 0xff; int ret = 0xff;
if (sel & 1) ret &= ioport(player ? "KEY4" : "KEY0" )->read(); if (m_io_select & 1) ret &= m_keys[player+0]->read();
if (sel & 2) ret &= ioport(player ? "KEY5" : "KEY1" )->read(); if (m_io_select & 2) ret &= m_keys[player+1]->read();
if (sel & 4) ret &= ioport(player ? "KEY6" : "KEY2" )->read(); if (m_io_select & 4) ret &= m_keys[player+2]->read();
if (sel & 8) ret &= ioport(player ? "KEY7" : "KEY3" )->read(); if (m_io_select & 8) ret &= m_keys[player+3]->read();
return ret; return ret;
} }
@ -298,41 +283,41 @@ WRITE32_MEMBER(psikyo4_state::ps4_vidregs_w)
if (offset == 2) /* Configure bank for gfx test */ if (offset == 2) /* Configure bank for gfx test */
{ {
if (ACCESSING_BITS_0_15) // Bank 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) WRITE32_MEMBER(psikyo4_state::io_select_w)
void psikyo4_state::set_hotgmck_pcm_bank( int n )
{ {
UINT8 *ymf_pcmbank = memregion("ymf")->base() + 0x200000; // YMF banking
UINT8 *pcm_rom = memregion("ymfsource")->base(); 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); // mahjong input multiplexing
} if (ACCESSING_BITS_8_15)
#define PCM_BANK_NO(n) ((m_io_select[0] >> (n * 4 + 24)) & 0x07) m_io_select = data >> 8;
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;
COMBINE_DATA(&m_io_select[0]); if (ACCESSING_BITS_0_7)
logerror("Unk ioselect write %x mask %x\n", data, mem_mask);
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);
} }
static ADDRESS_MAP_START( ps4_map, AS_PROGRAM, 32, psikyo4_state ) static ADDRESS_MAP_START( ps4_map, AS_PROGRAM, 32, psikyo4_state )
AM_RANGE(0x00000000, 0x000fffff) AM_ROM // program ROM (1 meg) 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(0x03000000, 0x030037ff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x03003fe0, 0x03003fe3) AM_READWRITE(ps4_eeprom_r,ps4_eeprom_w) 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? 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(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(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(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(0x05000000, 0x05000007) AM_DEVREADWRITE8("ymf", ymf278b_device, read, write, 0xffffffff)
AM_RANGE(0x05800000, 0x05800003) AM_READ_PORT("P1_P2") AM_RANGE(0x05800000, 0x05800003) AM_READ_PORT("P1_P2")
AM_RANGE(0x05800004, 0x05800007) AM_READ_PORT("P3_P4") 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) 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 ADDRESS_MAP_END
static INPUT_PORTS_START( hotgmck ) static INPUT_PORTS_START( hotgmck )
PORT_START("P1_P2") 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( 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_BIT( 0xff000000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_CUSTOM_MEMBER(DEVICE_SELF, psikyo4_state,mahjong_ctrl_r, (void *)0)
PORT_START("P3_P4") 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( 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 */ PORT_START("JP4")/* jumper pads 'JP4' on the PCB */
/* EEPROM is read here */ /* EEPROM is read here */
@ -381,7 +372,7 @@ static INPUT_PORTS_START( hotgmck )
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE2 ) // Screen 2 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( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) 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( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, 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( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) 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( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, 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( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) 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( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, 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( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) 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( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, 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( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) 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) 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( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, 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( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) 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) 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( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, 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( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) 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) 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( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, 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( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) 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) 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( 0x00000008, IP_ACTIVE_LOW, IPT_COIN4 ) // Screen 2 - 2nd slot
PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_SERVICE1 ) // Screen 1 PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_SERVICE1 ) // Screen 1
PORT_SERVICE_NO_TOGGLE( 0x00000020, IP_ACTIVE_LOW) 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( 0x00000040, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_SERVICE2 ) // Screen 2 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() 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_oldbrt1));
save_item(NAME(m_oldbrt2)); save_item(NAME(m_oldbrt2));
} }
@ -683,6 +692,7 @@ static MACHINE_CONFIG_START( ps4big, psikyo4_state )
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_SOUND_ADD("ymf", YMF278B, MASTER_CLOCK/2) 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_YMF278B_IRQ_HANDLER(WRITELINE(psikyo4_state, irqhandler))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 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( "3l.bin", 0x1800000, 0x400000, CRC(a8a646f7) SHA1(be96626f3a4c8eb81f0bb7d8ac1c4e6619be50c8) )
ROM_LOAD32_WORD( "3h.bin", 0x1800002, 0x400000, CRC(8c32becd) SHA1(9a8ddda4c6c007bb5cd4abb11859a4b7f1b1d578) ) ROM_LOAD32_WORD( "3h.bin", 0x1800002, 0x400000, CRC(8c32becd) SHA1(9a8ddda4c6c007bb5cd4abb11859a4b7f1b1d578) )
ROM_REGION( 0x400000, "ymf", ROMREGION_ERASE00 ) ROM_REGION( 0x800000, "ymf", 0 )
ROM_REGION( 0x800000, "ymfsource", 0 )
ROM_LOAD( "snd0.bin", 0x000000, 0x400000, CRC(c090d51a) SHA1(d229753b536209fe0da1985ca694fd1a73bc0f39) ) ROM_LOAD( "snd0.bin", 0x000000, 0x400000, CRC(c090d51a) SHA1(d229753b536209fe0da1985ca694fd1a73bc0f39) )
ROM_LOAD( "snd1.bin", 0x400000, 0x400000, CRC(c24243b5) SHA1(2100d5d7d2e4b9ed90bde38cb61a5da09f00ce21) ) ROM_LOAD( "snd1.bin", 0x400000, 0x400000, CRC(c24243b5) SHA1(2100d5d7d2e4b9ed90bde38cb61a5da09f00ce21) )
ROM_END ROM_END
@ -745,9 +753,7 @@ ROM_START( hgkairak )
ROM_LOAD32_WORD( "5l.u7", 0x2800000, 0x400000, CRC(4639ef36) SHA1(324ffcfa1b1b9def00c15f628c59cea1d09b031d) ) ROM_LOAD32_WORD( "5l.u7", 0x2800000, 0x400000, CRC(4639ef36) SHA1(324ffcfa1b1b9def00c15f628c59cea1d09b031d) )
ROM_LOAD32_WORD( "5h.u16", 0x2800002, 0x400000, CRC(549e9e9e) SHA1(90c1695c89c059852f8b4f714b3dfee006839b44) ) ROM_LOAD32_WORD( "5h.u16", 0x2800002, 0x400000, CRC(549e9e9e) SHA1(90c1695c89c059852f8b4f714b3dfee006839b44) )
ROM_REGION( 0x400000, "ymf", ROMREGION_ERASE00 ) ROM_REGION( 0x800000, "ymf", 0 )
ROM_REGION( 0x800000, "ymfsource", 0 )
ROM_LOAD( "snd0.u10", 0x000000, 0x400000, CRC(0e8e5fdf) SHA1(041e3118f7a838dcc9fb99a1028fb48a452ba1d9) ) ROM_LOAD( "snd0.u10", 0x000000, 0x400000, CRC(0e8e5fdf) SHA1(041e3118f7a838dcc9fb99a1028fb48a452ba1d9) )
ROM_LOAD( "snd1.u19", 0x400000, 0x400000, CRC(d8057d2f) SHA1(51d96cc4e9da81cbd1e815c652707407e6c7c3ae) ) ROM_LOAD( "snd1.u19", 0x400000, 0x400000, CRC(d8057d2f) SHA1(51d96cc4e9da81cbd1e815c652707407e6c7c3ae) )
ROM_END ROM_END
@ -777,9 +783,7 @@ ROM_START( hotgmck3 )
ROM_LOAD32_WORD( "7l.u9", 0x3800000, 0x400000, CRC(2ec78fb2) SHA1(194e9833ab7057c2f83c581e722b41631d99fccc) ) ROM_LOAD32_WORD( "7l.u9", 0x3800000, 0x400000, CRC(2ec78fb2) SHA1(194e9833ab7057c2f83c581e722b41631d99fccc) )
ROM_LOAD32_WORD( "7h.u18", 0x3800002, 0x400000, CRC(c1735612) SHA1(84e32d3249d57cdc8ea91780801eaa196c439895) ) ROM_LOAD32_WORD( "7h.u18", 0x3800002, 0x400000, CRC(c1735612) SHA1(84e32d3249d57cdc8ea91780801eaa196c439895) )
ROM_REGION( 0x400000, "ymf", ROMREGION_ERASE00 ) ROM_REGION( 0x800000, "ymf", 0 )
ROM_REGION( 0x800000, "ymfsource", 0 )
ROM_LOAD( "snd0.u10", 0x000000, 0x400000, CRC(d62a0dba) SHA1(d81e2e1251b62eca8cd4d8eec2515b2cf7d7ff0a) ) ROM_LOAD( "snd0.u10", 0x000000, 0x400000, CRC(d62a0dba) SHA1(d81e2e1251b62eca8cd4d8eec2515b2cf7d7ff0a) )
ROM_LOAD( "snd1.u19", 0x400000, 0x400000, CRC(1df91fb4) SHA1(f0f2d2d717fbd16a67da9f0e21f288ceedef839f) ) ROM_LOAD( "snd1.u19", 0x400000, 0x400000, CRC(1df91fb4) SHA1(f0f2d2d717fbd16a67da9f0e21f288ceedef839f) )
ROM_END ROM_END
@ -789,7 +793,7 @@ ROM_START( hotgm4ev )
ROM_REGION( 0x500000, "maincpu", 0) ROM_REGION( 0x500000, "maincpu", 0)
ROM_LOAD32_WORD_SWAP( "2.u22", 0x000000, 0x080000, CRC(3334c21e) SHA1(8d825448e40bc50d670ab8587a40df6b27ac918e) ) 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_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_REGION( 0x8000000, "gfx1", 0 ) /* Sprites */
ROM_LOAD32_WORD( "0l.u2", 0x0000000, 0x400000, CRC(f65986f7) SHA1(3824a7ea7f14ef3f319b07bd1224847131f6cac0) ) // ok 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( "7l.u9", 0x3800000, 0x400000, CRC(022a8a31) SHA1(a21dbf36f56e144f9817c7255866546367dda2f6) ) // ok
ROM_LOAD32_WORD( "7h.u18", 0x3800002, 0x400000, CRC(77e47409) SHA1(0e1deb01dd1250c90fc3eed776becd51899f0b5f) ) // ok ROM_LOAD32_WORD( "7h.u18", 0x3800002, 0x400000, CRC(77e47409) SHA1(0e1deb01dd1250c90fc3eed776becd51899f0b5f) ) // ok
ROM_REGION( 0x400000, "ymf", ROMREGION_ERASE00 ) ROM_REGION( 0x800000, "ymf", 0 )
ROM_REGION( 0x800000, "ymfsource", 0 )
ROM_LOAD( "snd0.u10", 0x000000, 0x400000, CRC(051e2fed) SHA1(ee8073332801982549b3c142fba114e27733a756) ) // ok 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_END
ROM_START( hotgmcki ) 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( "2.u22", 0x000000, 0x080000, CRC(abc192dd) SHA1(674c2b8814319605c1b6221bbe18588a98dda093) )
ROM_LOAD32_WORD_SWAP( "1.u23", 0x000002, 0x080000, CRC(8be896d0) SHA1(5d677dede4ec18cbfc54acae95fe0f10bfc4d566) ) 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_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 */ /* Roms have to be mirrored with ROM_RELOAD for rom tests to pass */
ROM_REGION( 0x4000000, "gfx1", ROMREGION_ERASEFF | 0 ) /* Sprites */ 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_LOAD32_WORD( "7h.u18", 0x3800002, 0x200000, CRC(a3fd4ae5) SHA1(31056e5f645984b85e9bc3767016a856ac0175f9) ) // ok
ROM_RELOAD( 0x3c00002, 0x200000 ) ROM_RELOAD( 0x3c00002, 0x200000 )
ROM_REGION( 0x400000, "ymf", ROMREGION_ERASE00 ) ROM_REGION( 0x800000, "ymf", 0 )
ROM_REGION( 0x800000, "ymfsource", 0 )
ROM_LOAD( "snd0.u10", 0x000000, 0x400000, CRC(5f275f35) SHA1(c5952a16e9f0cee6fc990c234ccaa7ca577741bd) ) // ok 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_END
ROM_START( loderndf ) 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( "1b.u23", 0x000002, 0x080000, CRC(fae92286) SHA1(c3d3a50514fb9c0bbd3ffb5c4bfcc853dc1893d2) )
ROM_LOAD32_WORD_SWAP( "2b.u22", 0x000000, 0x080000, CRC(fe2424c0) SHA1(48a329cfdf98da1a8701b430c159d470c0f5eca1) ) ROM_LOAD32_WORD_SWAP( "2b.u22", 0x000000, 0x080000, CRC(fe2424c0) SHA1(48a329cfdf98da1a8701b430c159d470c0f5eca1) )
@ -882,7 +881,7 @@ ROM_START( loderndf )
ROM_END ROM_END
ROM_START( loderndfa ) 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( "12.u23", 0x000002, 0x080000, CRC(661d372e) SHA1(c509c3ad9ca01e0f58bfc319b2738ecc36865ffd) )
ROM_LOAD32_WORD_SWAP( "3.u22", 0x000000, 0x080000, CRC(0a63529f) SHA1(05dd7877041b69d46e41c5bddb877c083620294b) ) ROM_LOAD32_WORD_SWAP( "3.u22", 0x000000, 0x080000, CRC(0a63529f) SHA1(05dd7877041b69d46e41c5bddb877c083620294b) )
@ -897,7 +896,7 @@ ROM_START( loderndfa )
ROM_END ROM_END
ROM_START( hotdebut ) 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( "1.u23", 0x000002, 0x080000, CRC(0b0d0027) SHA1(f62c487a725439af035d2904d453d3c2f7a5649b) )
ROM_LOAD32_WORD_SWAP( "2.u22", 0x000000, 0x080000, CRC(c3b5180b) SHA1(615cc1fd99a1e4634b04bb92a3c41f914644e903) ) ROM_LOAD32_WORD_SWAP( "2.u22", 0x000000, 0x080000, CRC(c3b5180b) SHA1(615cc1fd99a1e4634b04bb92a3c41f914644e903) )
@ -914,46 +913,12 @@ ROM_START( hotdebut )
ROM_END ROM_END
void psikyo4_state::hotgmck_pcm_bank_postload() /* 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 )
set_hotgmck_pcm_bank(0); GAME( 1998, hgkairak, 0, ps4big, hotgmck, driver_device, 0, ROT0, "Psikyo", "Taisen Hot Gimmick Kairakuten (Japan)", GAME_SUPPORTS_SAVE )
set_hotgmck_pcm_bank(1); 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 )
void psikyo4_state::install_hotgmck_pcm_bank() 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 )
UINT8 *ymf_pcm = memregion("ymf")->base(); GAME( 2000, hotdebut, 0, ps4small, hotdebut, driver_device, 0, ROT0, "MOSS / Psikyo", "Quiz de Idol! Hot Debut (Japan)", GAME_SUPPORTS_SAVE )
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 )

View File

@ -355,7 +355,7 @@ WRITE32_MEMBER(psikyosh_state::psikyosh_vidregs_w)
if (offset == 4) /* Configure bank for gfx test */ if (offset == 4) /* Configure bank for gfx test */
{ {
if (ACCESSING_BITS_0_15) // Bank 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 ) static ADDRESS_MAP_START( ps3v1_map, AS_PROGRAM, 32, psikyosh_state )
// rom mapping // rom mapping
AM_RANGE(0x00000000, 0x000fffff) AM_ROM // program ROM (1 meg) 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 // video chip
AM_RANGE(0x03000000, 0x03003fff) AM_RAM AM_SHARE("spriteram") // video banks0-7 (sprites and sprite list) 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) 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(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(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(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 // 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 // sound chip
AM_RANGE(0x05000000, 0x05000007) AM_DEVREADWRITE8("ymf", ymf278b_device, read, write, 0xffffffff) AM_RANGE(0x05000000, 0x05000007) AM_DEVREADWRITE8("ymf", ymf278b_device, read, write, 0xffffffff)
// inputs/eeprom // 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(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(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(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 // rom mapping
AM_RANGE(0x05000000, 0x0507ffff) AM_ROMBANK("bank1") // data ROM AM_RANGE(0x05000000, 0x0507ffff) AM_ROM AM_REGION("maincpu", 0x100000) // data ROM
// ram // ram
AM_RANGE(0x06000000, 0x060fffff) AM_RAM AM_SHARE("ram") AM_RANGE(0x06000000, 0x060fffff) AM_RAM AM_SHARE("ram")
ADDRESS_MAP_END ADDRESS_MAP_END
@ -764,7 +764,7 @@ WRITE_LINE_MEMBER(psikyosh_state::irqhandler)
void psikyosh_state::machine_start() 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 */ /* PS3 */
ROM_START( soldivid ) 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( "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_LOAD32_WORD_SWAP( "1-prog_h.u17", 0x000000, 0x080000, CRC(f467d1c4) SHA1(a011e6f310a54f09efa0bf4597783cd78c05ad6f) )
@ -846,7 +846,7 @@ ROM_START( soldivid )
ROM_END ROM_END
ROM_START( s1945ii ) 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( "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_LOAD32_WORD_SWAP( "1_prog_h.u17", 0x000000, 0x080000, CRC(4c0fe85e) SHA1(74f810a1c3e9d629c8b190f68d73ce07b11f77b7) )
@ -898,7 +898,7 @@ ROM_START( daraku )
ROM_END ROM_END
ROM_START( sbomber ) /* Version B - Only shows "Version B" when set to Japan region */ 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_l.u18", 0x000002, 0x080000, CRC(52d12225) SHA1(0a31a5d557414e7bf51dc6f7fbdd417a20b78df1) )
ROM_LOAD32_WORD_SWAP( "1-b_pr_h.u17", 0x000000, 0x080000, CRC(1bbd0345) SHA1(c6ccb7c97cc9e9ea298c1883d1dd5563907a7255) ) 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_END
ROM_START( sbombera ) /* Original version */ 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( "2.u18", 0x000002, 0x080000, CRC(57819a26) SHA1(d7a6fc957e39adf97762ab0a35b91aa17ec026e0) )
ROM_LOAD32_WORD_SWAP( "1.u17", 0x000000, 0x080000, CRC(c388e847) SHA1(cbf4f2e191894160bdf0290d72cf20c222aaf7a7) ) ROM_LOAD32_WORD_SWAP( "1.u17", 0x000000, 0x080000, CRC(c388e847) SHA1(cbf4f2e191894160bdf0290d72cf20c222aaf7a7) )
@ -996,7 +996,7 @@ ROM_END
/* PS5v2 */ /* PS5v2 */
ROM_START( dragnblz ) 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( "2prog_h.u21", 0x000000, 0x080000, CRC(fc5eade8) SHA1(e5d05543641e4a3900b0d42e0d5f75734683d635) )
ROM_LOAD32_WORD_SWAP( "1prog_l.u22", 0x000002, 0x080000, CRC(95d6fd02) SHA1(2b2830e7fa66cbd13666191762bfddc40571caec) ) 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( "10l.u58",0x2800000, 0x200000, CRC(a3f5c7f8) SHA1(d17478ca3e7ef46270f350ffa35d43acb05b1185) )
ROM_LOAD32_WORD( "10h.u59",0x2800002, 0x200000, CRC(30e304c4) SHA1(1d866276bfe7f7524306a880d225aaf11ac2e5dd) ) 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_LOAD( "snd0.u52", 0x000000, 0x200000, CRC(7fd1b225) SHA1(6aa61021ada51393bbb34fd1aea00b8feccc8197) )
ROM_REGION( 0x100, "eeprom", 0 ) 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_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( "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_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( "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_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_LOAD( "snd0.u52", 0x000000, 0x200000, CRC(7b10436b) SHA1(c731fcce024e286a677ca10a91761c1ee06094a5) )
ROM_REGION( 0x100, "eeprom", 0 ) ROM_REGION( 0x100, "eeprom", 0 )
@ -1072,7 +1072,7 @@ ROM_START( gnbarich )
ROM_END ROM_END
ROM_START( mjgtaste ) 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( "2.u21", 0x000000, 0x080000, CRC(5f2041dc) SHA1(f3862ffdb8df0cf921ce1cb0236935731e7729a7) )
ROM_LOAD32_WORD_SWAP( "1.u22", 0x000002, 0x080000, CRC(f5ff7876) SHA1(4c909db9c97f29fd79df6dacd29762688701b973) ) 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( "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_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_LOAD( "snd0.u52", 0x000000, 0x400000, CRC(0179f018) SHA1(16ae63e021230356777342ed902e02407a1a1b82) )
ROM_REGION( 0x100, "eeprom", 0 ) ROM_REGION( 0x100, "eeprom", 0 )
@ -1106,7 +1106,7 @@ ROM_START( mjgtaste )
ROM_END ROM_END
ROM_START( tgm2 ) 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( "2.u21", 0x000000, 0x080000, CRC(b19f6c31) SHA1(c58346c575db71262aebc3993743cb031c41e4af) )
ROM_LOAD32_WORD_SWAP( "1.u22", 0x000002, 0x080000, CRC(c521bf24) SHA1(0ee5b9f74b6b8bcc01b2270c53f30d99e877ed64) ) 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( "95ts_10l.u58", 0x2800000, 0x200000, CRC(303a5240) SHA1(5816d1922e85bc27a2a13cdd183d9e67c7ddb2e1) )
ROM_LOAD32_WORD( "96ts_10h.u59", 0x2800002, 0x200000, CRC(2240ebf6) SHA1(b61f93a18dd9d94fb57d95745d4df2e41a0371ff) ) 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_LOAD( "97ts_snd.u52", 0x000000, 0x400000, CRC(9155eca6) SHA1(f0b4f68462d8a465c39815d3b7fd9818788132ae) )
ROM_REGION( 0x100, "eeprom", 0 ) /* Default Eeprom (contains scores etc.) */ ROM_REGION( 0x100, "eeprom", 0 ) /* Default Eeprom (contains scores etc.) */
@ -1138,7 +1138,7 @@ ROM_START( tgm2 )
ROM_END ROM_END
ROM_START( tgm2p ) 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( "2b.u21", 0x000000, 0x080000, CRC(38bc626c) SHA1(783e8413b11f1fa08d331b09ef4ed63f62b87ead) )
ROM_LOAD32_WORD_SWAP( "1b.u22", 0x000002, 0x080000, CRC(7599fb19) SHA1(3f7e81756470c173cc17a7e7dee91437571fd0c3) ) 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( "95ts_10l.u58", 0x2800000, 0x200000, CRC(303a5240) SHA1(5816d1922e85bc27a2a13cdd183d9e67c7ddb2e1) )
ROM_LOAD32_WORD( "96ts_10h.u59", 0x2800002, 0x200000, CRC(2240ebf6) SHA1(b61f93a18dd9d94fb57d95745d4df2e41a0371ff) ) 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_LOAD( "97ts_snd.u52", 0x000000, 0x400000, CRC(9155eca6) SHA1(f0b4f68462d8a465c39815d3b7fd9818788132ae) )
ROM_REGION( 0x100, "eeprom", 0 ) /* Default Eeprom (contains scores etc.) */ 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_LOAD( "tgm2p.default.nv", 0x000, 0x100, CRC(b2328b40) SHA1(e6cda4d6f4e91b9f78d2ca84a5eee6c3bd03fe02) )
ROM_END 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(0x03004000, 0x0300ffff, 0, &m_bgram[0]);
m_maincpu->sh2drc_add_fastram(0x03050000, 0x030501ff, 0, &m_zoomram[0]); m_maincpu->sh2drc_add_fastram(0x03050000, 0x030501ff, 0, &m_zoomram[0]);
m_maincpu->sh2drc_add_fastram(0x06000000, 0x060fffff, 0, &m_ram[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(0x04004000, 0x0400ffff, 0, &m_bgram[0]);
m_maincpu->sh2drc_add_fastram(0x04050000, 0x040501ff, 0, &m_zoomram[0]); m_maincpu->sh2drc_add_fastram(0x04050000, 0x040501ff, 0, &m_zoomram[0]);
m_maincpu->sh2drc_add_fastram(0x06000000, 0x060fffff, 0, &m_ram[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) 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) */ /* 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)); 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 */ /* YEAR NAME PARENT MACHINE INPUT INIT MONITOR COMPANY FULLNAME FLAGS */
/* ps3-v1 */ /* ps3-v1 */
GAME( 1997, soldivid, 0, psikyo3v1, soldivid, psikyosh_state, soldivid, ROT0, "Psikyo", "Sol Divide - The Sword Of Darkness", 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, s1945ii, ROT270, "Psikyo", "Strikers 1945 II", 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, daraku, ROT0, "Psikyo", "Daraku Tenshi - The Fallen Angels", 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, sbomberb, ROT270, "Psikyo", "Space Bomber (ver. B)", 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, sbomberb, ROT270, "Psikyo", "Space Bomber", GAME_SUPPORTS_SAVE ) GAME( 1998, sbombera, sbomber, psikyo3v1, sbomberb, psikyosh_state, ps3, ROT270, "Psikyo", "Space Bomber", GAME_SUPPORTS_SAVE )
/* ps5 */ /* ps5 */
GAME( 1998, gunbird2, 0, psikyo5, gunbird2, psikyosh_state, gunbird2, ROT270, "Psikyo", "Gunbird 2", 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, s1945iii, ROT270, "Psikyo", "Strikers 1945 III (World) / Strikers 1999 (Japan)", 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 */ /* ps5v2 */
GAME( 2000, dragnblz, 0, psikyo5, dragnblz, psikyosh_state, dragnblz, ROT270, "Psikyo", "Dragon Blaze", 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, tgm2, ROT0, "Arika", "Tetris the Absolute The Grand Master 2", 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, tgm2, ROT0, "Arika", "Tetris the Absolute The Grand Master 2 Plus", 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, gnbarich, ROT270, "Psikyo", "Gunbarich", 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 ) GAME( 2002, mjgtaste, 0, psikyo5, mjgtaste, psikyosh_state, mjgtaste, ROT0, "Psikyo", "Mahjong G-Taste", GAME_SUPPORTS_SAVE )

View File

@ -21,15 +21,14 @@ public:
m_bgpen_1(*this, "bgpen_1"), m_bgpen_1(*this, "bgpen_1"),
m_bgpen_2(*this, "bgpen_2"), m_bgpen_2(*this, "bgpen_2"),
m_paletteram(*this, "paletteram"), m_paletteram(*this, "paletteram"),
m_io_select(*this, "io_select"),
m_ram(*this, "ram"),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_eeprom(*this, "eeprom"), m_eeprom(*this, "eeprom"),
m_gfxdecode(*this, "gfxdecode"), m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "lpalette"), m_palette(*this, "lpalette"),
m_palette2(*this, "rpalette"), m_palette2(*this, "rpalette"),
m_lscreen(*this, "lscreen"), m_lscreen(*this, "lscreen"),
m_rscreen(*this, "rscreen") m_rscreen(*this, "rscreen"),
m_keys(*this, "KEY")
{ } { }
/* memory pointers */ /* memory pointers */
@ -38,8 +37,10 @@ public:
required_shared_ptr<UINT32> m_bgpen_1; required_shared_ptr<UINT32> m_bgpen_1;
required_shared_ptr<UINT32> m_bgpen_2; required_shared_ptr<UINT32> m_bgpen_2;
required_shared_ptr<UINT32> m_paletteram; required_shared_ptr<UINT32> m_paletteram;
required_shared_ptr<UINT32> m_io_select;
required_shared_ptr<UINT32> m_ram; memory_bank *m_ymf_bank[4];
UINT8 m_ymf_max_bank;
UINT8 m_io_select;
/* video-related */ /* video-related */
double m_oldbrt1; double m_oldbrt1;
@ -53,6 +54,7 @@ public:
required_device<palette_device> m_palette2; required_device<palette_device> m_palette2;
required_device<screen_device> m_lscreen; required_device<screen_device> m_lscreen;
required_device<screen_device> m_rscreen; required_device<screen_device> m_rscreen;
optional_ioport_array<8> m_keys;
DECLARE_WRITE32_MEMBER(ps4_paletteram32_RRRRRRRRGGGGGGGGBBBBBBBBxxxxxxxx_dword_w); DECLARE_WRITE32_MEMBER(ps4_paletteram32_RRRRRRRRGGGGGGGGBBBBBBBBxxxxxxxx_dword_w);
DECLARE_WRITE32_MEMBER(ps4_bgpen_1_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_screen1_brt_w);
DECLARE_WRITE32_MEMBER(ps4_screen2_brt_w); DECLARE_WRITE32_MEMBER(ps4_screen2_brt_w);
DECLARE_WRITE32_MEMBER(ps4_vidregs_w); DECLARE_WRITE32_MEMBER(ps4_vidregs_w);
DECLARE_WRITE32_MEMBER(hotgmck_pcm_bank_w); DECLARE_WRITE32_MEMBER(io_select_w);
DECLARE_CUSTOM_INPUT_MEMBER(system_port_r);
DECLARE_CUSTOM_INPUT_MEMBER(mahjong_ctrl_r); DECLARE_CUSTOM_INPUT_MEMBER(mahjong_ctrl_r);
DECLARE_WRITE32_MEMBER(ps4_eeprom_w); DECLARE_WRITE32_MEMBER(ps4_eeprom_w);
DECLARE_READ32_MEMBER(ps4_eeprom_r); DECLARE_READ32_MEMBER(ps4_eeprom_r);
DECLARE_DRIVER_INIT(hotgmck);
virtual void machine_start(); virtual void machine_start();
virtual void machine_reset(); virtual void machine_reset();
virtual void video_start(); virtual void video_start();
UINT32 screen_update_psikyo4_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 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); UINT32 screen_update_psikyo4_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(psikyosh_interrupt); INTERRUPT_GEN_MEMBER(psikyosh_interrupt);
void hotgmck_pcm_bank_postload();
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, UINT32 scr); 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); DECLARE_WRITE_LINE_MEMBER(irqhandler);
}; };

View File

@ -62,16 +62,9 @@ public:
DECLARE_READ32_MEMBER(mjgtaste_input_r); DECLARE_READ32_MEMBER(mjgtaste_input_r);
DECLARE_WRITE32_MEMBER(psh_eeprom_w); DECLARE_WRITE32_MEMBER(psh_eeprom_w);
DECLARE_READ32_MEMBER(psh_eeprom_r); DECLARE_READ32_MEMBER(psh_eeprom_r);
DECLARE_DRIVER_INIT(gnbarich); DECLARE_DRIVER_INIT(ps3);
DECLARE_DRIVER_INIT(daraku); DECLARE_DRIVER_INIT(ps5);
DECLARE_DRIVER_INIT(soldivid);
DECLARE_DRIVER_INIT(s1945iii);
DECLARE_DRIVER_INIT(mjgtaste); 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 machine_start();
virtual void video_start(); virtual void video_start();
void ps3_init(); void ps3_init();

View File

@ -55,23 +55,18 @@ void psikyo4_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprec
UINT32 *source = m_spriteram; 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 *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; UINT16 listlen = (0xc00/2 - 0x04/2), listcntr = 0;
int flipscreen1, flipscreen2; bool flipscreen = BIT(m_vidregs[1], (scr == 0 ? 31 : 23));
int screen_height = (scr == 0 ? m_lscreen : m_rscreen)->visible_area().max_y + 1;
flipscreen1 = (((m_vidregs[1] >> 30) & 2) == 2) ? 1 : 0;
flipscreen2 = (((m_vidregs[1] >> 22) & 2) == 2) ? 1 : 0;
while (listcntr < listlen) while (listcntr < listlen)
{ {
UINT16 listdat, sprnum, thisscreen; UINT16 listdat, sprnum;
listdat = list[BYTE_XOR_BE(listcntr)]; listdat = list[BYTE_XOR_BE(listcntr)];
sprnum = (listdat & 0x03ff) * 2; sprnum = (listdat & 0x03ff) * 2;
thisscreen = 0;
if ((listdat & 0x2000) == scr) thisscreen = 1;
/* start drawing */ /* 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; int loopnum = 0, i, j;
UINT32 xpos, ypos, tnum, wide, high, colr, flipx, flipy; 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 (ypos & 0x200) ypos -= 0x400;
if (xpos & 0x200) xpos -= 0x400; if (xpos & 0x200) xpos -= 0x400;
if ((!scr && flipscreen1) || (scr && flipscreen2)) if (flipscreen)
{ {
/* Screen Height depends on game */ /* 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; xpos = 40 * 8 - xpos - wide * 16;
flipx = !flipx; flipx = !flipx;
flipy = !flipy; flipy = !flipy;