mirror of
https://github.com/holub/mame
synced 2025-04-25 09:50:04 +03:00
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:
parent
0be0a2c9ae
commit
aa3d8f5cdd
@ -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);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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 ) /* */
|
||||
|
@ -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 )
|
||||
|
@ -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 )
|
||||
|
@ -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);
|
||||
};
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user