Modernized Konami 056800 sound device. [Osso]

This commit is contained in:
Fabio Priuli 2013-06-14 09:03:12 +00:00
parent 52423e5879
commit 5b974786d6
7 changed files with 179 additions and 197 deletions

View File

@ -9,166 +9,12 @@
#include "emu.h"
#include "sound/k056800.h"
struct k056800_state
{
UINT8 host_reg[8];
UINT8 sound_reg[8];
emu_timer *sound_cpu_timer;
UINT8 sound_cpu_irq1_enable;
k056800_irq_cb irq_cb;
};
/*****************************************************************************
INLINE FUNCTIONS
*****************************************************************************/
INLINE k056800_state *k056800_get_safe_token( device_t *device )
{
assert(device != NULL);
assert(device->type() == K056800);
return (k056800_state *)downcast<k056800_device *>(device)->token();
}
INLINE const k056800_interface *k056800_get_interface( device_t *device )
{
assert(device != NULL);
assert((device->type() == K056800));
return (const k056800_interface *) device->static_config();
}
/*****************************************************************************
DEVICE HANDLERS
*****************************************************************************/
static UINT8 k056800_host_reg_r( device_t *device, int reg )
{
k056800_state *k056800 = k056800_get_safe_token(device);
UINT8 value = k056800->host_reg[reg];
if (reg == 2)
value &= ~3; // suppress VOLWR busy flags
return value;
}
static void k056800_host_reg_w( device_t *device, int reg, UINT8 data )
{
k056800_state *k056800 = k056800_get_safe_token(device);
k056800->sound_reg[reg] = data;
if (reg == 7)
k056800->irq_cb(device->machine(), 1);
}
static UINT8 k056800_sound_reg_r( device_t *device, int reg )
{
k056800_state *k056800 = k056800_get_safe_token(device);
return k056800->sound_reg[reg];
}
static void k056800_sound_reg_w( device_t *device, int reg, UINT8 data )
{
k056800_state *k056800 = k056800_get_safe_token(device);
if (reg == 4)
k056800->sound_cpu_irq1_enable = data & 0x01;
k056800->host_reg[reg] = data;
}
static TIMER_CALLBACK( k056800_sound_cpu_timer_tick )
{
k056800_state *k056800 = (k056800_state *)ptr;
if (k056800->sound_cpu_irq1_enable)
k056800->irq_cb(machine, 0);
}
READ32_DEVICE_HANDLER( k056800_host_r )
{
UINT32 r = 0;
if (ACCESSING_BITS_24_31)
r |= k056800_host_reg_r(device, (offset * 4) + 0) << 24;
if (ACCESSING_BITS_16_23)
r |= k056800_host_reg_r(device, (offset * 4) + 1) << 16;
if (ACCESSING_BITS_8_15)
r |= k056800_host_reg_r(device, (offset * 4) + 2) << 8;
if (ACCESSING_BITS_0_7)
r |= k056800_host_reg_r(device, (offset * 4) + 3) << 0;
return r;
}
WRITE32_DEVICE_HANDLER( k056800_host_w )
{
if (ACCESSING_BITS_24_31)
k056800_host_reg_w(device, (offset * 4) + 0, (data >> 24) & 0xff);
if (ACCESSING_BITS_16_23)
k056800_host_reg_w(device, (offset * 4) + 1, (data >> 16) & 0xff);
if (ACCESSING_BITS_8_15)
k056800_host_reg_w(device, (offset * 4) + 2, (data >> 8) & 0xff);
if (ACCESSING_BITS_0_7)
k056800_host_reg_w(device, (offset * 4) + 3, (data >> 0) & 0xff);
}
READ16_DEVICE_HANDLER( k056800_sound_r )
{
return k056800_sound_reg_r(device, offset);
}
WRITE16_DEVICE_HANDLER( k056800_sound_w )
{
k056800_sound_reg_w(device, offset, data);
}
/*****************************************************************************
DEVICE INTERFACE
*****************************************************************************/
static DEVICE_START( k056800 )
{
k056800_state *k056800 = k056800_get_safe_token(device);
const k056800_interface *intf = k056800_get_interface(device);
attotime timer_period = attotime::from_hz(device->clock()) * 14700 * 3;
k056800->irq_cb = intf->irq_cb;
k056800->sound_cpu_timer = device->machine().scheduler().timer_alloc(FUNC(k056800_sound_cpu_timer_tick), k056800);
k056800->sound_cpu_timer->adjust(timer_period, 0, timer_period);
device->save_item(NAME(k056800->host_reg));
device->save_item(NAME(k056800->sound_reg));
device->save_item(NAME(k056800->sound_cpu_irq1_enable));
}
static DEVICE_RESET( k056800 )
{
k056800_state *k056800 = k056800_get_safe_token(device);
memset(k056800->host_reg, 0, sizeof(k056800->host_reg));
memset(k056800->sound_reg, 0, sizeof(k056800->sound_reg));
k056800->sound_cpu_irq1_enable = 0;
}
const device_type K056800 = &device_creator<k056800_device>;
k056800_device::k056800_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, K056800, "Konami 056800 MIRAC", tag, owner, clock)
: device_t(mconfig, K056800, "Konami 056800 MIRAC", tag, owner, clock)
{
m_token = global_alloc_clear(k056800_state);
}
//-------------------------------------------------
@ -179,6 +25,16 @@ k056800_device::k056800_device(const machine_config &mconfig, const char *tag, d
void k056800_device::device_config_complete()
{
// inherit a copy of the static data
const k056800_interface *intf = reinterpret_cast<const k056800_interface *>(static_config());
if (intf != NULL)
*static_cast<k056800_interface *>(this) = *intf;
// or initialize to defaults if none provided
else
{
m_irq_cb = NULL;
}
}
//-------------------------------------------------
@ -187,7 +43,16 @@ void k056800_device::device_config_complete()
void k056800_device::device_start()
{
DEVICE_START_NAME( k056800 )(this);
attotime timer_period = attotime::from_hz(clock()) * 14700 * 3;
m_irq_cb_func = m_irq_cb;
m_sound_cpu_timer = timer_alloc(TIMER_TICK_SOUND_CPU);
m_sound_cpu_timer->adjust(timer_period, 0, timer_period);
save_item(NAME(m_host_reg));
save_item(NAME(m_sound_reg));
save_item(NAME(m_sound_cpu_irq1_enable));
}
//-------------------------------------------------
@ -196,5 +61,104 @@ void k056800_device::device_start()
void k056800_device::device_reset()
{
DEVICE_RESET_NAME( k056800 )(this);
memset(m_host_reg, 0, sizeof(m_host_reg));
memset(m_sound_reg, 0, sizeof(m_sound_reg));
m_sound_cpu_irq1_enable = 0;
}
/*****************************************************************************
DEVICE HANDLERS
*****************************************************************************/
UINT8 k056800_device::host_reg_r( int reg )
{
UINT8 value = m_host_reg[reg];
if (reg == 2)
value &= ~3; // suppress VOLWR busy flags
return value;
}
void k056800_device::host_reg_w( int reg, UINT8 data )
{
m_sound_reg[reg] = data;
if (reg == 7)
m_irq_cb(machine(), 1);
}
UINT8 k056800_device::sound_reg_r( int reg )
{
return m_sound_reg[reg];
}
void k056800_device::sound_reg_w( int reg, UINT8 data )
{
if (reg == 4)
m_sound_cpu_irq1_enable = data & 0x01;
m_host_reg[reg] = data;
}
void k056800_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
switch (id)
{
case TIMER_TICK_SOUND_CPU:
if (m_sound_cpu_irq1_enable)
m_irq_cb_func(machine(), 0);
break;
default:
assert_always(FALSE, "Unknown id in k056800_device::device_timer");
}
}
READ32_MEMBER( k056800_device::host_r )
{
UINT32 r = 0;
if (ACCESSING_BITS_24_31)
r |= host_reg_r((offset * 4) + 0) << 24;
if (ACCESSING_BITS_16_23)
r |= host_reg_r((offset * 4) + 1) << 16;
if (ACCESSING_BITS_8_15)
r |= host_reg_r((offset * 4) + 2) << 8;
if (ACCESSING_BITS_0_7)
r |= host_reg_r((offset * 4) + 3) << 0;
return r;
}
WRITE32_MEMBER( k056800_device::host_w )
{
if (ACCESSING_BITS_24_31)
host_reg_w((offset * 4) + 0, (data >> 24) & 0xff);
if (ACCESSING_BITS_16_23)
host_reg_w((offset * 4) + 1, (data >> 16) & 0xff);
if (ACCESSING_BITS_8_15)
host_reg_w((offset * 4) + 2, (data >> 8) & 0xff);
if (ACCESSING_BITS_0_7)
host_reg_w((offset * 4) + 3, (data >> 0) & 0xff);
}
READ16_MEMBER( k056800_device::sound_r )
{
return sound_reg_r(offset);
}
WRITE16_MEMBER( k056800_device::sound_w )
{
sound_reg_w(offset, data);
}

View File

@ -7,8 +7,6 @@
#ifndef __K056800_H__
#define __K056800_H__
#include "devlegcy.h"
/***************************************************************************
TYPE DEFINITIONS
@ -19,25 +17,47 @@ typedef void (*k056800_irq_cb)(running_machine &, int);
struct k056800_interface
{
k056800_irq_cb irq_cb;
k056800_irq_cb m_irq_cb;
};
class k056800_device : public device_t
class k056800_device : public device_t,
public k056800_interface
{
public:
k056800_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
~k056800_device() { global_free(m_token); }
~k056800_device() {}
enum
{
TIMER_TICK_SOUND_CPU
};
DECLARE_READ32_MEMBER( host_r );
DECLARE_WRITE32_MEMBER( host_w );
DECLARE_READ16_MEMBER( sound_r );
DECLARE_WRITE16_MEMBER( sound_w );
// access to legacy token
void *token() const { assert(m_token != NULL); return m_token; }
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);
private:
// internal state
void *m_token;
UINT8 m_host_reg[8];
UINT8 m_sound_reg[8];
emu_timer *m_sound_cpu_timer;
UINT8 m_sound_cpu_irq1_enable;
k056800_irq_cb m_irq_cb_func;
UINT8 host_reg_r( int reg );
void host_reg_w( int reg, UINT8 data );
UINT8 sound_reg_r( int reg );
void sound_reg_w( int reg, UINT8 data );
};
extern const device_type K056800;
@ -53,14 +73,4 @@ extern const device_type K056800;
MCFG_DEVICE_CONFIG(_interface)
/***************************************************************************
DEVICE I/O FUNCTIONS
***************************************************************************/
DECLARE_READ32_DEVICE_HANDLER( k056800_host_r );
DECLARE_WRITE32_DEVICE_HANDLER( k056800_host_w );
DECLARE_READ16_DEVICE_HANDLER( k056800_sound_r );
DECLARE_WRITE16_DEVICE_HANDLER( k056800_sound_w );
#endif /* __K056800_H__ */

View File

@ -248,6 +248,7 @@ public:
m_work_ram(*this, "work_ram"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_k056800(*this, "k056800"),
m_dsp(*this, "dsp"),
m_dsp2(*this, "dsp2"),
m_adc1038(*this, "adc1038"),
@ -256,6 +257,7 @@ public:
required_shared_ptr<UINT32> m_work_ram;
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<k056800_device> m_k056800;
required_device<cpu_device> m_dsp;
optional_device<cpu_device> m_dsp2;
required_device<adc1038_device> m_adc1038;
@ -449,9 +451,9 @@ static ADDRESS_MAP_START( gticlub_map, AS_PROGRAM, 32, gticlub_state )
AM_RANGE(0x7e000000, 0x7e003fff) AM_READWRITE8(sysreg_r, sysreg_w, 0xffffffff)
AM_RANGE(0x7e008000, 0x7e009fff) AM_DEVREADWRITE8("k056230", k056230_device, k056230_r, k056230_w, 0xffffffff)
AM_RANGE(0x7e00a000, 0x7e00bfff) AM_DEVREADWRITE("k056230", k056230_device, lanc_ram_r, lanc_ram_w)
AM_RANGE(0x7e00c000, 0x7e00c007) AM_DEVWRITE_LEGACY("k056800", k056800_host_w)
AM_RANGE(0x7e00c000, 0x7e00c007) AM_DEVREAD_LEGACY("k056800", k056800_host_r) // Hang Pilot
AM_RANGE(0x7e00c008, 0x7e00c00f) AM_DEVREAD_LEGACY("k056800", k056800_host_r)
AM_RANGE(0x7e00c000, 0x7e00c007) AM_DEVWRITE("k056800", k056800_device, host_w)
AM_RANGE(0x7e00c000, 0x7e00c007) AM_DEVREAD("k056800", k056800_device, host_r) // Hang Pilot
AM_RANGE(0x7e00c008, 0x7e00c00f) AM_DEVREAD("k056800", k056800_device, host_r)
AM_RANGE(0x7f000000, 0x7f3fffff) AM_ROM AM_REGION("user2", 0) /* Data ROM */
AM_RANGE(0x7f800000, 0x7f9fffff) AM_ROM AM_SHARE("share2")
AM_RANGE(0x7fe00000, 0x7fffffff) AM_ROM AM_REGION("user1", 0) AM_SHARE("share2") /* Program ROM */
@ -462,7 +464,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_memmap, AS_PROGRAM, 16, gticlub_state )
AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x200000, 0x20ffff) AM_RAM
AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE_LEGACY("k056800", k056800_sound_r, k056800_sound_w)
AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE("k056800", k056800_device, sound_r, sound_w)
AM_RANGE(0x400000, 0x400fff) AM_DEVREADWRITE("rfsnd", rf5c400_device, rf5c400_r, rf5c400_w) /* Ricoh RF5C400 */
AM_RANGE(0x580000, 0x580001) AM_WRITENOP
AM_RANGE(0x600000, 0x600001) AM_WRITENOP

View File

@ -334,6 +334,7 @@ public:
m_sharc_dataram1(*this, "sharc_dataram1"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_k056800(*this, "k056800"),
m_gn680(*this, "gn680"),
m_dsp(*this, "dsp"),
m_dsp2(*this, "dsp2"),
@ -349,6 +350,7 @@ public:
optional_shared_ptr<UINT32> m_sharc_dataram1;
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<k056800_device> m_k056800;
optional_device<cpu_device> m_gn680;
required_device<cpu_device> m_dsp;
optional_device<cpu_device> m_dsp2;
@ -657,7 +659,7 @@ static ADDRESS_MAP_START( hornet_map, AS_PROGRAM, 32, hornet_state )
AM_RANGE(0x7d000000, 0x7d00ffff) AM_READ8(sysreg_r, 0xffffffff)
AM_RANGE(0x7d010000, 0x7d01ffff) AM_WRITE8(sysreg_w, 0xffffffff)
AM_RANGE(0x7d020000, 0x7d021fff) AM_DEVREADWRITE8("m48t58", timekeeper_device, read, write, 0xffffffff) /* M48T58Y RTC/NVRAM */
AM_RANGE(0x7d030000, 0x7d030007) AM_DEVREADWRITE_LEGACY("k056800", k056800_host_r, k056800_host_w)
AM_RANGE(0x7d030000, 0x7d030007) AM_DEVREADWRITE("k056800", k056800_device, host_r, host_w)
AM_RANGE(0x7d042000, 0x7d043fff) AM_RAM /* COMM BOARD 0 */
AM_RANGE(0x7d044000, 0x7d044007) AM_READ(comm0_unk_r)
AM_RANGE(0x7d048000, 0x7d048003) AM_WRITE(comm1_w)
@ -674,7 +676,7 @@ static ADDRESS_MAP_START( sound_memmap, AS_PROGRAM, 16, hornet_state )
AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x100000, 0x10ffff) AM_RAM /* Work RAM */
AM_RANGE(0x200000, 0x200fff) AM_DEVREADWRITE("rfsnd", rf5c400_device, rf5c400_r, rf5c400_w) /* Ricoh RF5C400 */
AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE_LEGACY("k056800", k056800_sound_r, k056800_sound_w)
AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE("k056800", k056800_device, sound_r, sound_w)
AM_RANGE(0x480000, 0x480001) AM_WRITENOP
AM_RANGE(0x4c0000, 0x4c0001) AM_WRITENOP
AM_RANGE(0x500000, 0x500001) AM_WRITENOP

View File

@ -235,6 +235,7 @@ public:
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_dsp(*this, "dsp"),
m_k056800(*this, "k056800"),
m_k001604(*this, "k001604"),
m_adc12138(*this, "adc12138") { }
@ -244,6 +245,7 @@ public:
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<cpu_device> m_dsp;
required_device<k056800_device> m_k056800;
required_device<k001604_device> m_k001604;
required_device<adc12138_device> m_adc12138;
emu_timer *m_sound_irq_timer;
@ -546,9 +548,9 @@ static ADDRESS_MAP_START( nwktr_map, AS_PROGRAM, 32, nwktr_state )
AM_RANGE(0x7d000000, 0x7d00ffff) AM_READ(sysreg_r)
AM_RANGE(0x7d010000, 0x7d01ffff) AM_WRITE(sysreg_w)
AM_RANGE(0x7d020000, 0x7d021fff) AM_DEVREADWRITE8("m48t58", timekeeper_device, read, write, 0xffffffff) /* M48T58Y RTC/NVRAM */
AM_RANGE(0x7d030000, 0x7d030007) AM_DEVREAD_LEGACY("k056800", k056800_host_r)
AM_RANGE(0x7d030000, 0x7d030007) AM_DEVWRITE_LEGACY("k056800", k056800_host_w)
AM_RANGE(0x7d030008, 0x7d03000f) AM_DEVWRITE_LEGACY("k056800", k056800_host_w)
AM_RANGE(0x7d030000, 0x7d030007) AM_DEVREAD("k056800", k056800_device, host_r)
AM_RANGE(0x7d030000, 0x7d030007) AM_DEVWRITE("k056800", k056800_device, host_w)
AM_RANGE(0x7d030008, 0x7d03000f) AM_DEVWRITE("k056800", k056800_device, host_w)
AM_RANGE(0x7d040000, 0x7d04ffff) AM_READWRITE(lanc1_r, lanc1_w)
AM_RANGE(0x7d050000, 0x7d05ffff) AM_READWRITE(lanc2_r, lanc2_w)
AM_RANGE(0x7e000000, 0x7e7fffff) AM_ROM AM_REGION("user2", 0) /* Data ROM */
@ -562,7 +564,7 @@ static ADDRESS_MAP_START( sound_memmap, AS_PROGRAM, 16, nwktr_state )
AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x100000, 0x10ffff) AM_RAM /* Work RAM */
AM_RANGE(0x200000, 0x200fff) AM_DEVREADWRITE("rfsnd", rf5c400_device, rf5c400_r, rf5c400_w) /* Ricoh RF5C400 */
AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE_LEGACY("k056800", k056800_sound_r, k056800_sound_w)
AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE("k056800", k056800_device, sound_r, sound_w)
AM_RANGE(0x600000, 0x600001) AM_NOP
ADDRESS_MAP_END

View File

@ -125,8 +125,8 @@ static ADDRESS_MAP_START( ultrsprt_map, AS_PROGRAM, 32, ultrsprt_state )
AM_RANGE(0x70000000, 0x70000003) AM_READWRITE(eeprom_r, eeprom_w)
AM_RANGE(0x70000020, 0x70000023) AM_READ_PORT("P1")
AM_RANGE(0x70000040, 0x70000043) AM_READ_PORT("P2")
AM_RANGE(0x70000080, 0x70000087) AM_DEVWRITE_LEGACY("k056800", k056800_host_w)
AM_RANGE(0x70000088, 0x7000008f) AM_DEVREAD_LEGACY("k056800", k056800_host_r)
AM_RANGE(0x70000080, 0x70000087) AM_DEVWRITE("k056800", k056800_device, host_w)
AM_RANGE(0x70000088, 0x7000008f) AM_DEVREAD("k056800", k056800_device, host_r)
AM_RANGE(0x700000e0, 0x700000e3) AM_WRITE(int_ack_w)
AM_RANGE(0x7f000000, 0x7f01ffff) AM_RAM AM_SHARE("workram")
AM_RANGE(0x7f700000, 0x7f703fff) AM_RAM_WRITE(palette_w) AM_SHARE("paletteram")
@ -142,10 +142,10 @@ READ16_MEMBER(ultrsprt_state::K056800_68k_r)
UINT16 r = 0;
if (ACCESSING_BITS_8_15)
r |= k056800_sound_r(m_k056800, space, (offset*2)+0, 0xffff) << 8;
r |= m_k056800->sound_r(space, (offset*2)+0, 0xffff) << 8;
if (ACCESSING_BITS_0_7)
r |= k056800_sound_r(m_k056800, space, (offset*2)+1, 0xffff) << 0;
r |= m_k056800->sound_r(space, (offset*2)+1, 0xffff) << 0;
return r;
}
@ -153,10 +153,10 @@ READ16_MEMBER(ultrsprt_state::K056800_68k_r)
WRITE16_MEMBER(ultrsprt_state::K056800_68k_w)
{
if (ACCESSING_BITS_8_15)
k056800_sound_w(m_k056800, space, (offset*2)+0, (data >> 8) & 0xff, 0x00ff);
m_k056800->sound_w(space, (offset*2)+0, (data >> 8) & 0xff, 0x00ff);
if (ACCESSING_BITS_0_7)
k056800_sound_w(m_k056800, space, (offset*2)+1, (data >> 0) & 0xff, 0x00ff);
m_k056800->sound_w(space, (offset*2)+1, (data >> 0) & 0xff, 0x00ff);
}
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 16, ultrsprt_state )

View File

@ -192,6 +192,7 @@ public:
m_audiocpu(*this, "audiocpu"),
m_dsp(*this, "dsp"),
m_k001604(*this, "k001604"),
m_k056800(*this, "k056800"),
m_k056832(*this, "k056832") { }
UINT8 m_led_reg0;
@ -223,6 +224,7 @@ public:
required_device<cpu_device> m_audiocpu;
required_device<cpu_device> m_dsp;
optional_device<k001604_device> m_k001604;
required_device<k056800_device> m_k056800;
optional_device<k056832_device> m_k056832;
protected:
@ -447,8 +449,8 @@ static ADDRESS_MAP_START( zr107_map, AS_PROGRAM, 32, zr107_state )
AM_RANGE(0x7e000000, 0x7e003fff) AM_READWRITE8(sysreg_r, sysreg_w, 0xffffffff)
AM_RANGE(0x7e008000, 0x7e009fff) AM_DEVREADWRITE8("k056230", k056230_device, k056230_r, k056230_w, 0xffffffff) /* LANC registers */
AM_RANGE(0x7e00a000, 0x7e00bfff) AM_DEVREADWRITE("k056230", k056230_device, lanc_ram_r, lanc_ram_w) /* LANC Buffer RAM (27E) */
AM_RANGE(0x7e00c000, 0x7e00c007) AM_DEVWRITE_LEGACY("k056800", k056800_host_w)
AM_RANGE(0x7e00c008, 0x7e00c00f) AM_DEVREAD_LEGACY("k056800", k056800_host_r)
AM_RANGE(0x7e00c000, 0x7e00c007) AM_DEVWRITE("k056800", k056800_device, host_w)
AM_RANGE(0x7e00c008, 0x7e00c00f) AM_DEVREAD("k056800", k056800_device, host_r)
AM_RANGE(0x7f800000, 0x7f9fffff) AM_ROM AM_SHARE("share2")
AM_RANGE(0x7fe00000, 0x7fffffff) AM_ROM AM_REGION("user1", 0) AM_SHARE("share2") /* Program ROM */
ADDRESS_MAP_END
@ -475,8 +477,8 @@ static ADDRESS_MAP_START( jetwave_map, AS_PROGRAM, 32, zr107_state )
AM_RANGE(0x7e000000, 0x7e003fff) AM_MIRROR(0x80000000) AM_READWRITE8(sysreg_r, sysreg_w, 0xffffffff)
AM_RANGE(0x7e008000, 0x7e009fff) AM_MIRROR(0x80000000) AM_DEVREADWRITE8("k056230", k056230_device, k056230_r, k056230_w, 0xffffffff) /* LANC registers */
AM_RANGE(0x7e00a000, 0x7e00bfff) AM_MIRROR(0x80000000) AM_DEVREADWRITE("k056230", k056230_device, lanc_ram_r, lanc_ram_w) /* LANC Buffer RAM (27E) */
AM_RANGE(0x7e00c000, 0x7e00c007) AM_MIRROR(0x80000000) AM_DEVWRITE_LEGACY("k056800", k056800_host_w)
AM_RANGE(0x7e00c008, 0x7e00c00f) AM_MIRROR(0x80000000) AM_DEVREAD_LEGACY("k056800", k056800_host_r)
AM_RANGE(0x7e00c000, 0x7e00c007) AM_MIRROR(0x80000000) AM_DEVWRITE("k056800", k056800_device, host_w)
AM_RANGE(0x7e00c008, 0x7e00c00f) AM_MIRROR(0x80000000) AM_DEVREAD("k056800", k056800_device, host_r)
AM_RANGE(0x7f000000, 0x7f3fffff) AM_MIRROR(0x80000000) AM_ROM AM_REGION("user2", 0)
AM_RANGE(0x7f800000, 0x7f9fffff) AM_MIRROR(0x80000000) AM_ROM AM_SHARE("share2")
AM_RANGE(0x7fe00000, 0x7fffffff) AM_MIRROR(0x80000000) AM_ROM AM_REGION("user1", 0) AM_SHARE("share2") /* Program ROM */
@ -491,8 +493,8 @@ static ADDRESS_MAP_START( sound_memmap, AS_PROGRAM, 16, zr107_state )
AM_RANGE(0x100000, 0x103fff) AM_RAM /* Work RAM */
AM_RANGE(0x200000, 0x2004ff) AM_DEVREADWRITE8("k054539_1", k054539_device, read, write, 0xff00)
AM_RANGE(0x200000, 0x2004ff) AM_DEVREADWRITE8("k054539_2", k054539_device, read, write, 0x00ff)
AM_RANGE(0x400000, 0x40000f) AM_DEVWRITE_LEGACY("k056800", k056800_sound_w)
AM_RANGE(0x400010, 0x40001f) AM_DEVREAD_LEGACY("k056800", k056800_sound_r)
AM_RANGE(0x400000, 0x40000f) AM_DEVWRITE("k056800", k056800_device, sound_w)
AM_RANGE(0x400010, 0x40001f) AM_DEVREAD("k056800", k056800_device, sound_r)
AM_RANGE(0x580000, 0x580001) AM_WRITENOP
ADDRESS_MAP_END