modernised YMF278B [smf]

This commit is contained in:
smf- 2013-05-13 15:19:43 +00:00
parent cb9b6677a0
commit 2f981bc167
8 changed files with 407 additions and 466 deletions

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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