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)
- 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::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);
}
//-------------------------------------------------

View File

@ -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;
};

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)
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)

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)
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)

View File

@ -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 ) /* */

View File

@ -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 )

View File

@ -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 )

View File

@ -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<UINT32> m_bgpen_1;
required_shared_ptr<UINT32> m_bgpen_2;
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 */
double m_oldbrt1;
@ -53,6 +54,7 @@ public:
required_device<palette_device> m_palette2;
required_device<screen_device> m_lscreen;
required_device<screen_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);
};

View File

@ -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();

View File

@ -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;