mirror of
https://github.com/holub/mame
synced 2025-10-05 16:50:57 +03:00
modernised YMF278B [smf]
This commit is contained in:
parent
cb9b6677a0
commit
2f981bc167
File diff suppressed because it is too large
Load Diff
@ -3,39 +3,129 @@
|
||||
#ifndef __YMF278B_H__
|
||||
#define __YMF278B_H__
|
||||
|
||||
#include "devlegcy.h"
|
||||
#include "emu.h"
|
||||
|
||||
#define YMF278B_STD_CLOCK (33868800) /* standard clock for OPL4 */
|
||||
|
||||
|
||||
struct ymf278b_interface
|
||||
{
|
||||
devcb_write_line irq_callback; /* irq callback */
|
||||
};
|
||||
|
||||
DECLARE_READ8_DEVICE_HANDLER( ymf278b_r );
|
||||
DECLARE_WRITE8_DEVICE_HANDLER( ymf278b_w );
|
||||
#define MCFG_YMF278B_IRQ_HANDLER(_devcb) \
|
||||
devcb = &ymf278b_device::set_irq_handler(*device, DEVCB2_##_devcb);
|
||||
|
||||
class ymf278b_device : public device_t,
|
||||
public device_sound_interface
|
||||
{
|
||||
public:
|
||||
ymf278b_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
~ymf278b_device() { global_free(m_token); }
|
||||
|
||||
// access to legacy token
|
||||
void *token() const { assert(m_token != NULL); return m_token; }
|
||||
// static configuration helpers
|
||||
template<class _Object> static devcb2_base &set_irq_handler(device_t &device, _Object object) { return downcast<ymf278b_device &>(device).m_irq_handler.set_callback(object); }
|
||||
|
||||
DECLARE_READ8_MEMBER( read );
|
||||
DECLARE_WRITE8_MEMBER( write );
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_config_complete();
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
|
||||
|
||||
// sound stream update overrides
|
||||
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
|
||||
|
||||
private:
|
||||
struct YMF278BSlot
|
||||
{
|
||||
INT16 wave; /* wavetable number */
|
||||
INT16 F_NUMBER; /* frequency */
|
||||
INT8 octave; /* octave */
|
||||
INT8 preverb; /* pseudo-reverb */
|
||||
INT8 DAMP; /* damping */
|
||||
INT8 CH; /* output channel */
|
||||
INT8 LD; /* level direct */
|
||||
INT8 TL; /* total level */
|
||||
INT8 pan; /* panpot */
|
||||
INT8 LFO; /* LFO */
|
||||
INT8 VIB; /* vibrato */
|
||||
INT8 AM; /* tremolo */
|
||||
|
||||
INT8 AR; /* attack rate */
|
||||
INT8 D1R; /* decay 1 rate */
|
||||
INT8 DL; /* decay level */
|
||||
INT8 D2R; /* decay 2 rate */
|
||||
INT8 RC; /* rate correction */
|
||||
INT8 RR; /* release rate */
|
||||
|
||||
UINT32 step; /* fixed-point frequency step */
|
||||
UINT64 stepptr; /* fixed-point pointer into the sample */
|
||||
|
||||
INT8 active; /* channel is playing */
|
||||
INT8 KEY_ON; /* slot keyed on */
|
||||
INT8 bits; /* width of the samples */
|
||||
UINT32 startaddr;
|
||||
UINT32 loopaddr;
|
||||
UINT32 endaddr;
|
||||
|
||||
int env_step;
|
||||
UINT32 env_vol;
|
||||
UINT32 env_vol_step;
|
||||
UINT32 env_vol_lim;
|
||||
INT8 env_preverb;
|
||||
|
||||
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);
|
||||
void compute_envelope(YMF278BSlot *slot);
|
||||
void irq_check();
|
||||
void A_w(UINT8 reg, UINT8 data);
|
||||
void B_w(UINT8 reg, UINT8 data);
|
||||
void retrigger_note(YMF278BSlot *slot);
|
||||
void C_w(UINT8 reg, UINT8 data, int init);
|
||||
void timer_busy_start(int is_pcm);
|
||||
void precompute_rate_tables();
|
||||
void register_save_state();
|
||||
|
||||
// internal state
|
||||
void *m_token;
|
||||
UINT8 m_pcmregs[256];
|
||||
YMF278BSlot m_slots[24];
|
||||
INT8 m_wavetblhdr;
|
||||
INT8 m_memmode;
|
||||
INT32 m_memadr;
|
||||
|
||||
UINT8 m_status_busy, m_status_ld;
|
||||
emu_timer *m_timer_busy;
|
||||
emu_timer *m_timer_ld;
|
||||
UINT8 m_exp;
|
||||
|
||||
INT32 m_fm_l, m_fm_r;
|
||||
INT32 m_pcm_l, m_pcm_r;
|
||||
|
||||
attotime m_timer_base;
|
||||
UINT8 m_timer_a_count, m_timer_b_count;
|
||||
UINT8 m_enable, m_current_irq;
|
||||
int m_irq_line;
|
||||
|
||||
UINT8 m_port_C, m_port_AB, m_lastport;
|
||||
|
||||
// precomputed tables
|
||||
UINT32 m_lut_ar[64]; // attack rate
|
||||
UINT32 m_lut_dr[64]; // decay rate
|
||||
INT32 m_volume[256*4]; // precalculated attenuation values with some margin for envelope and pan levels
|
||||
int m_pan_left[16],m_pan_right[16]; // pan volume offsets
|
||||
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;
|
||||
devcb2_write_line m_irq_handler;
|
||||
};
|
||||
|
||||
extern const device_type YMF278B;
|
||||
|
@ -282,7 +282,7 @@ WRITE8_MEMBER(fuuki32_state::snd_z80_w)
|
||||
|
||||
WRITE8_MEMBER(fuuki32_state::snd_ymf278b_w)
|
||||
{
|
||||
ymf278b_w(machine().device("ymf1"), space, offset, data);
|
||||
machine().device<ymf278b_device>("ymf1")->write(space, offset, data);
|
||||
|
||||
// also write to ymf262
|
||||
if (offset < 4)
|
||||
@ -300,7 +300,7 @@ static ADDRESS_MAP_START( fuuki32_sound_io_map, AS_IO, 8, fuuki32_state )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_WRITE(fuuki32_sound_bw_w)
|
||||
AM_RANGE(0x30, 0x30) AM_WRITENOP // leftover/unused nmi handler related
|
||||
AM_RANGE(0x40, 0x45) AM_DEVREAD_LEGACY("ymf1", ymf278b_r) AM_WRITE(snd_ymf278b_w)
|
||||
AM_RANGE(0x40, 0x45) AM_DEVREAD("ymf1", ymf278b_device, read) AM_WRITE(snd_ymf278b_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/***************************************************************************
|
||||
@ -571,11 +571,6 @@ WRITE_LINE_MEMBER(fuuki32_state::irqhandler)
|
||||
m_soundcpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
static const ymf278b_interface fuuki32_ymf278b_interface =
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(fuuki32_state,irqhandler) /* irq */
|
||||
};
|
||||
|
||||
static MACHINE_CONFIG_START( fuuki32, fuuki32_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -603,7 +598,7 @@ static MACHINE_CONFIG_START( fuuki32, fuuki32_state )
|
||||
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
|
||||
MCFG_SOUND_ADD("ymf1", YMF278B, YMF278B_STD_CLOCK) // 33.8688MHz
|
||||
MCFG_SOUND_CONFIG(fuuki32_ymf278b_interface)
|
||||
MCFG_YMF278B_IRQ_HANDLER(WRITELINE(fuuki32_state, irqhandler))
|
||||
MCFG_SOUND_ROUTE(0, "lspeaker", 0.50)
|
||||
MCFG_SOUND_ROUTE(1, "rspeaker", 0.50)
|
||||
|
||||
|
@ -367,8 +367,8 @@ static ADDRESS_MAP_START( aliencha_soundio_map, AS_IO, 8, lordgun_state )
|
||||
AM_RANGE(0x3000, 0x3000) AM_READ(soundlatch2_byte_r )
|
||||
AM_RANGE(0x4000, 0x4000) AM_READ(soundlatch_byte_r )
|
||||
AM_RANGE(0x5000, 0x5000) AM_WRITENOP // writes 03 then 07 at end of NMI
|
||||
AM_RANGE(0x7000, 0x7000) AM_DEVREAD_LEGACY("ymf", ymf278b_r)
|
||||
AM_RANGE(0x7000, 0x7005) AM_DEVWRITE_LEGACY("ymf", ymf278b_w)
|
||||
AM_RANGE(0x7000, 0x7000) AM_DEVREAD("ymf", ymf278b_device, read)
|
||||
AM_RANGE(0x7000, 0x7005) AM_DEVWRITE("ymf", ymf278b_device, write)
|
||||
AM_RANGE(0x7400, 0x7400) AM_DEVREADWRITE("oki", okim6295_device, read, write)
|
||||
AM_RANGE(0x7800, 0x7800) AM_DEVREADWRITE("oki2", okim6295_device, read, write)
|
||||
ADDRESS_MAP_END
|
||||
@ -701,11 +701,6 @@ static MACHINE_CONFIG_START( lordgun, lordgun_state )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
static const ymf278b_interface ymf278b_config =
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(lordgun_state,soundirq)
|
||||
};
|
||||
|
||||
static MACHINE_CONFIG_START( aliencha, lordgun_state )
|
||||
MCFG_CPU_ADD("maincpu", M68000, XTAL_20MHz / 2)
|
||||
MCFG_CPU_PROGRAM_MAP(aliencha_map)
|
||||
@ -734,7 +729,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_SOUND_CONFIG(ymf278b_config)
|
||||
MCFG_YMF278B_IRQ_HANDLER(WRITELINE(lordgun_state, soundirq))
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5)
|
||||
|
||||
MCFG_OKIM6295_ADD("oki", XTAL_20MHz / 20, OKIM6295_PIN7_HIGH) // ? 5MHz can't be right
|
||||
|
@ -437,11 +437,6 @@ WRITE8_MEMBER(metro_state::daitorid_portb_w)
|
||||
m_portb = data;
|
||||
}
|
||||
|
||||
static const ymf278b_interface ymf278b_config =
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(metro_state,ymf278b_interrupt)
|
||||
};
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
@ -770,8 +765,8 @@ READ16_MEMBER(metro_state::balcube_dsw_r)
|
||||
|
||||
static ADDRESS_MAP_START( balcube_map, AS_PROGRAM, 16, metro_state )
|
||||
AM_RANGE(0x000000, 0x07ffff) AM_ROM // ROM
|
||||
AM_RANGE(0x300000, 0x300001) AM_DEVREAD8_LEGACY("ymf", ymf278b_r, 0x00ff) // Sound
|
||||
AM_RANGE(0x300000, 0x30000b) AM_DEVWRITE8_LEGACY("ymf", ymf278b_w, 0x00ff) // Sound
|
||||
AM_RANGE(0x300000, 0x300001) AM_DEVREAD8("ymf", ymf278b_device, read, 0x00ff) // Sound
|
||||
AM_RANGE(0x300000, 0x30000b) AM_DEVWRITE8("ymf", ymf278b_device, write, 0x00ff) // Sound
|
||||
AM_RANGE(0x400000, 0x41ffff) AM_READ(balcube_dsw_r) // DSW x 3
|
||||
AM_RANGE(0x500000, 0x500001) AM_READ_PORT("IN0") // Inputs
|
||||
AM_RANGE(0x500002, 0x500003) AM_READ_PORT("IN1") //
|
||||
@ -829,8 +824,8 @@ static ADDRESS_MAP_START( daitoa_map, AS_PROGRAM, 16, metro_state )
|
||||
AM_RANGE(0x200006, 0x200007) AM_READNOP //
|
||||
AM_RANGE(0x200002, 0x200009) AM_WRITE(metro_coin_lockout_4words_w) // Coin Lockout
|
||||
AM_RANGE(0x300000, 0x31ffff) AM_READ(balcube_dsw_r) // DSW x 3
|
||||
AM_RANGE(0x400000, 0x400001) AM_DEVREAD8_LEGACY("ymf", ymf278b_r, 0x00ff) // Sound
|
||||
AM_RANGE(0x400000, 0x40000b) AM_DEVWRITE8_LEGACY("ymf", ymf278b_w, 0x00ff) // Sound
|
||||
AM_RANGE(0x400000, 0x400001) AM_DEVREAD8("ymf", ymf278b_device, read, 0x00ff) // Sound
|
||||
AM_RANGE(0x400000, 0x40000b) AM_DEVWRITE8("ymf", ymf278b_device, write, 0x00ff) // Sound
|
||||
AM_RANGE(0xf00000, 0xf0ffff) AM_RAM AM_MIRROR(0x0f0000) // RAM (mirrored)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -841,8 +836,8 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( bangball_map, AS_PROGRAM, 16, metro_state )
|
||||
AM_RANGE(0x000000, 0x07ffff) AM_ROM // ROM
|
||||
AM_RANGE(0xb00000, 0xb00001) AM_DEVREAD8_LEGACY("ymf", ymf278b_r, 0x00ff) // Sound
|
||||
AM_RANGE(0xb00000, 0xb0000b) AM_DEVWRITE8_LEGACY("ymf", ymf278b_w, 0x00ff) // Sound
|
||||
AM_RANGE(0xb00000, 0xb00001) AM_DEVREAD8("ymf", ymf278b_device, read, 0x00ff) // Sound
|
||||
AM_RANGE(0xb00000, 0xb0000b) AM_DEVWRITE8("ymf", ymf278b_device, write, 0x00ff) // Sound
|
||||
AM_RANGE(0xc00000, 0xc1ffff) AM_READ(balcube_dsw_r) // DSW x 3
|
||||
AM_RANGE(0xd00000, 0xd00001) AM_READ_PORT("IN0") // Inputs
|
||||
AM_RANGE(0xd00002, 0xd00003) AM_READ_PORT("IN1") //
|
||||
@ -900,8 +895,8 @@ static ADDRESS_MAP_START( batlbubl_map, AS_PROGRAM, 16, metro_state )
|
||||
AM_RANGE(0x200006, 0x200007) AM_READ_PORT("IN2") //
|
||||
AM_RANGE(0x200002, 0x200009) AM_WRITE(metro_coin_lockout_4words_w) // Coin Lockout
|
||||
AM_RANGE(0x300000, 0x31ffff) AM_READ(balcube_dsw_r) // read but ignored?
|
||||
AM_RANGE(0x400000, 0x400001) AM_DEVREAD8_LEGACY("ymf", ymf278b_r, 0x00ff) // Sound
|
||||
AM_RANGE(0x400000, 0x40000b) AM_DEVWRITE8_LEGACY("ymf", ymf278b_w, 0x00ff) //
|
||||
AM_RANGE(0x400000, 0x400001) AM_DEVREAD8("ymf", ymf278b_device, read, 0x00ff) // Sound
|
||||
AM_RANGE(0x400000, 0x40000b) AM_DEVWRITE8("ymf", ymf278b_device, write, 0x00ff) //
|
||||
AM_RANGE(0xf00000, 0xf0ffff) AM_RAM AM_MIRROR(0x0f0000) // RAM (mirrored)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -935,8 +930,8 @@ static ADDRESS_MAP_START( msgogo_map, AS_PROGRAM, 16, metro_state )
|
||||
AM_RANGE(0x200006, 0x200007) AM_READNOP //
|
||||
AM_RANGE(0x200002, 0x200009) AM_WRITE(metro_coin_lockout_4words_w) // Coin Lockout
|
||||
AM_RANGE(0x300000, 0x31ffff) AM_READ(balcube_dsw_r) // 3 x DSW
|
||||
AM_RANGE(0x400000, 0x400001) AM_DEVREAD8_LEGACY("ymf", ymf278b_r, 0x00ff) // Sound
|
||||
AM_RANGE(0x400000, 0x40000b) AM_DEVWRITE8_LEGACY("ymf", ymf278b_w, 0x00ff) //
|
||||
AM_RANGE(0x400000, 0x400001) AM_DEVREAD8("ymf", ymf278b_device, read, 0x00ff) // Sound
|
||||
AM_RANGE(0x400000, 0x40000b) AM_DEVWRITE8("ymf", ymf278b_device, write, 0x00ff) //
|
||||
AM_RANGE(0xf00000, 0xf0ffff) AM_RAM AM_MIRROR(0x0f0000) // RAM (mirrored)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -3593,7 +3588,7 @@ static MACHINE_CONFIG_START( balcube, metro_state )
|
||||
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
|
||||
MCFG_SOUND_ADD("ymf", YMF278B, YMF278B_STD_CLOCK)
|
||||
MCFG_SOUND_CONFIG(ymf278b_config)
|
||||
MCFG_YMF278B_IRQ_HANDLER(WRITELINE(metro_state, ymf278b_interrupt))
|
||||
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
|
||||
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
|
||||
MACHINE_CONFIG_END
|
||||
@ -3626,7 +3621,7 @@ static MACHINE_CONFIG_START( daitoa, metro_state )
|
||||
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
|
||||
MCFG_SOUND_ADD("ymf", YMF278B, YMF278B_STD_CLOCK)
|
||||
MCFG_SOUND_CONFIG(ymf278b_config)
|
||||
MCFG_YMF278B_IRQ_HANDLER(WRITELINE(metro_state, ymf278b_interrupt))
|
||||
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
|
||||
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
|
||||
MACHINE_CONFIG_END
|
||||
@ -3659,7 +3654,7 @@ static MACHINE_CONFIG_START( msgogo, metro_state )
|
||||
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
|
||||
MCFG_SOUND_ADD("ymf", YMF278B, YMF278B_STD_CLOCK)
|
||||
MCFG_SOUND_CONFIG(ymf278b_config)
|
||||
MCFG_YMF278B_IRQ_HANDLER(WRITELINE(metro_state, ymf278b_interrupt))
|
||||
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
|
||||
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
|
||||
MACHINE_CONFIG_END
|
||||
@ -3692,7 +3687,7 @@ static MACHINE_CONFIG_START( bangball, metro_state )
|
||||
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
|
||||
MCFG_SOUND_ADD("ymf", YMF278B, YMF278B_STD_CLOCK)
|
||||
MCFG_SOUND_CONFIG(ymf278b_config)
|
||||
MCFG_YMF278B_IRQ_HANDLER(WRITELINE(metro_state, ymf278b_interrupt))
|
||||
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
|
||||
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
|
||||
MACHINE_CONFIG_END
|
||||
@ -3725,7 +3720,7 @@ static MACHINE_CONFIG_START( batlbubl, metro_state )
|
||||
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
|
||||
MCFG_SOUND_ADD("ymf", YMF278B, YMF278B_STD_CLOCK)
|
||||
MCFG_SOUND_CONFIG(ymf278b_config)
|
||||
MCFG_YMF278B_IRQ_HANDLER(WRITELINE(metro_state, ymf278b_interrupt))
|
||||
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
|
||||
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
|
||||
MACHINE_CONFIG_END
|
||||
|
@ -447,7 +447,7 @@ static ADDRESS_MAP_START( s1945_sound_io_map, AS_IO, 8, psikyo_state )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_WRITE(gunbird_sound_bankswitch_w)
|
||||
AM_RANGE(0x02, 0x03) AM_WRITENOP
|
||||
AM_RANGE(0x08, 0x0d) AM_DEVREADWRITE_LEGACY("ymf", ymf278b_r, ymf278b_w)
|
||||
AM_RANGE(0x08, 0x0d) AM_DEVREADWRITE("ymf", ymf278b_device, read, write)
|
||||
AM_RANGE(0x10, 0x10) AM_READ(psikyo_soundlatch_r)
|
||||
AM_RANGE(0x18, 0x18) AM_WRITE(psikyo_clear_nmi_w)
|
||||
ADDRESS_MAP_END
|
||||
@ -1153,11 +1153,6 @@ WRITE_LINE_MEMBER(psikyo_state::irqhandler)
|
||||
m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
static const ymf278b_interface ymf278b_config =
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(psikyo_state,irqhandler)
|
||||
};
|
||||
|
||||
static MACHINE_CONFIG_START( s1945, psikyo_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -1190,7 +1185,7 @@ static MACHINE_CONFIG_START( s1945, psikyo_state )
|
||||
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
|
||||
MCFG_SOUND_ADD("ymf", YMF278B, YMF278B_STD_CLOCK)
|
||||
MCFG_SOUND_CONFIG(ymf278b_config)
|
||||
MCFG_YMF278B_IRQ_HANDLER(WRITELINE(psikyo_state, irqhandler))
|
||||
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
|
||||
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
|
||||
MACHINE_CONFIG_END
|
||||
|
@ -362,7 +362,7 @@ static ADDRESS_MAP_START( ps4_map, AS_PROGRAM, 32, psikyo4_state )
|
||||
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(0x05000000, 0x05000007) AM_DEVREADWRITE8_LEGACY("ymf", ymf278b_r, ymf278b_w, 0xffffffff)
|
||||
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)
|
||||
@ -648,11 +648,6 @@ WRITE_LINE_MEMBER(psikyo4_state::irqhandler)
|
||||
m_maincpu->set_input_line(12, state ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
static const ymf278b_interface ymf278b_config =
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(psikyo4_state,irqhandler)
|
||||
};
|
||||
|
||||
|
||||
void psikyo4_state::machine_start()
|
||||
{
|
||||
@ -701,7 +696,7 @@ static MACHINE_CONFIG_START( ps4big, psikyo4_state )
|
||||
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
|
||||
MCFG_SOUND_ADD("ymf", YMF278B, MASTER_CLOCK/2)
|
||||
MCFG_SOUND_CONFIG(ymf278b_config)
|
||||
MCFG_YMF278B_IRQ_HANDLER(WRITELINE(psikyo4_state, irqhandler))
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
|
||||
MACHINE_CONFIG_END
|
||||
|
@ -522,7 +522,7 @@ static ADDRESS_MAP_START( ps3v1_map, AS_PROGRAM, 32, psikyosh_state )
|
||||
// rom mapping
|
||||
AM_RANGE(0x04060000, 0x0407ffff) AM_ROMBANK("bank2") // data for rom tests (gfx) (Mirrored?)
|
||||
// sound chip
|
||||
AM_RANGE(0x05000000, 0x05000007) AM_DEVREADWRITE8_LEGACY("ymf", ymf278b_r, ymf278b_w, 0xffffffff)
|
||||
AM_RANGE(0x05000000, 0x05000007) AM_DEVREADWRITE8("ymf", ymf278b_device, read, write, 0xffffffff)
|
||||
// inputs/eeprom
|
||||
AM_RANGE(0x05800000, 0x05800003) AM_READ_PORT("INPUTS")
|
||||
AM_RANGE(0x05800004, 0x05800007) AM_READWRITE(psh_eeprom_r, psh_eeprom_w)
|
||||
@ -538,7 +538,7 @@ static ADDRESS_MAP_START( ps5_map, AS_PROGRAM, 32, psikyosh_state )
|
||||
AM_RANGE(0x03000000, 0x03000003) AM_READ_PORT("INPUTS")
|
||||
AM_RANGE(0x03000004, 0x03000007) AM_READWRITE(psh_eeprom_r, psh_eeprom_w)
|
||||
// sound chip
|
||||
AM_RANGE(0x03100000, 0x03100007) AM_DEVREADWRITE8_LEGACY("ymf", ymf278b_r, ymf278b_w, 0xffffffff)
|
||||
AM_RANGE(0x03100000, 0x03100007) AM_DEVREADWRITE8("ymf", ymf278b_device, read, write, 0xffffffff)
|
||||
// video chip
|
||||
AM_RANGE(0x04000000, 0x04003fff) AM_RAM AM_SHARE("spriteram") // video banks0-7 (sprites and sprite list)
|
||||
AM_RANGE(0x04004000, 0x0400ffff) AM_RAM AM_SHARE("bgram") // video banks 7-0x1f (backgrounds and other effects)
|
||||
@ -785,11 +785,6 @@ WRITE_LINE_MEMBER(psikyosh_state::irqhandler)
|
||||
m_maincpu->set_input_line(12, state ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
static const ymf278b_interface ymf278b_config =
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(psikyosh_state,irqhandler)
|
||||
};
|
||||
|
||||
|
||||
void psikyosh_state::machine_start()
|
||||
{
|
||||
@ -827,7 +822,7 @@ static MACHINE_CONFIG_START( psikyo3v1, psikyosh_state )
|
||||
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
|
||||
MCFG_SOUND_ADD("ymf", YMF278B, MASTER_CLOCK/2)
|
||||
MCFG_SOUND_CONFIG(ymf278b_config)
|
||||
MCFG_YMF278B_IRQ_HANDLER(WRITELINE(psikyosh_state, irqhandler))
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
|
||||
MACHINE_CONFIG_END
|
||||
|
Loading…
Reference in New Issue
Block a user