- Removed difference between handling driver and device address maps

- Updated modern macros to propagate device so it is possible to make modern maps for devices too
- Updated bsmt2000.c and mie.c as examples of modern address map devices
This commit is contained in:
Miodrag Milanovic 2011-05-08 18:07:36 +00:00
parent 91276001f2
commit b734d88389
5 changed files with 67 additions and 77 deletions

View File

@ -50,9 +50,7 @@
inline void map_handler_data::set_tag(const device_t &device, const char *tag)
{
if (tag == NULL)
m_tag = NULL;
else if (strcmp(tag, DEVICE_SELF) == 0)
if (strcmp(tag, DEVICE_SELF) == 0)
m_tag = device.tag();
else if (strcmp(tag, DEVICE_SELF_OWNER) == 0)
{
@ -275,7 +273,7 @@ void address_map_entry::internal_set_handler(const device_t &device, const char
{
assert(!func.isnull());
assert(unitmask_is_appropriate(8, unitmask, func.name()));
m_read.m_type = (tag == NULL) ? AMH_DRIVER_DELEGATE : AMH_DEVICE_DELEGATE;
m_read.m_type = AMH_DEVICE_DELEGATE;
m_read.m_bits = 8;
m_read.m_mask = unitmask;
m_read.m_name = func.name();
@ -288,7 +286,7 @@ void address_map_entry::internal_set_handler(const device_t &device, const char
{
assert(!func.isnull());
assert(unitmask_is_appropriate(8, unitmask, func.name()));
m_write.m_type = (tag == NULL) ? AMH_DRIVER_DELEGATE : AMH_DEVICE_DELEGATE;;
m_write.m_type = AMH_DEVICE_DELEGATE;
m_write.m_bits = 8;
m_write.m_mask = unitmask;
m_write.m_name = func.name();
@ -377,7 +375,7 @@ void address_map_entry::internal_set_handler(const device_t &device, const char
{
assert(!func.isnull());
assert(unitmask_is_appropriate(16, unitmask, func.name()));
m_read.m_type = (tag == NULL) ? AMH_DRIVER_DELEGATE : AMH_DEVICE_DELEGATE;;
m_read.m_type = AMH_DEVICE_DELEGATE;
m_read.m_bits = 16;
m_read.m_mask = unitmask;
m_read.m_name = func.name();
@ -390,7 +388,7 @@ void address_map_entry::internal_set_handler(const device_t &device, const char
{
assert(!func.isnull());
assert(unitmask_is_appropriate(16, unitmask, func.name()));
m_write.m_type = (tag == NULL) ? AMH_DRIVER_DELEGATE : AMH_DEVICE_DELEGATE;;
m_write.m_type = AMH_DEVICE_DELEGATE;
m_write.m_bits = 16;
m_write.m_mask = unitmask;
m_write.m_name = func.name();
@ -479,7 +477,7 @@ void address_map_entry::internal_set_handler(const device_t &device, const char
{
assert(!func.isnull());
assert(unitmask_is_appropriate(32, unitmask, func.name()));
m_read.m_type = (tag == NULL) ? AMH_DRIVER_DELEGATE : AMH_DEVICE_DELEGATE;;
m_read.m_type = AMH_DEVICE_DELEGATE;
m_read.m_bits = 32;
m_read.m_mask = unitmask;
m_read.m_name = func.name();
@ -492,7 +490,7 @@ void address_map_entry::internal_set_handler(const device_t &device, const char
{
assert(!func.isnull());
assert(unitmask_is_appropriate(32, unitmask, func.name()));
m_write.m_type = (tag == NULL) ? AMH_DRIVER_DELEGATE : AMH_DEVICE_DELEGATE;;
m_write.m_type = AMH_DEVICE_DELEGATE;
m_write.m_bits = 32;
m_write.m_mask = unitmask;
m_write.m_name = func.name();
@ -581,7 +579,7 @@ void address_map_entry::internal_set_handler(const device_t &device, const char
{
assert(!func.isnull());
assert(unitmask_is_appropriate(64, unitmask, func.name()));
m_read.m_type = (tag == NULL) ? AMH_DRIVER_DELEGATE : AMH_DEVICE_DELEGATE;;
m_read.m_type = AMH_DEVICE_DELEGATE;
m_read.m_bits = 64;
m_read.m_mask = 0;
m_read.m_name = func.name();
@ -594,7 +592,7 @@ void address_map_entry::internal_set_handler(const device_t &device, const char
{
assert(!func.isnull());
assert(unitmask_is_appropriate(64, unitmask, func.name()));
m_write.m_type = (tag == NULL) ? AMH_DRIVER_DELEGATE : AMH_DEVICE_DELEGATE;;
m_write.m_type = AMH_DEVICE_DELEGATE;
m_write.m_bits = 64;
m_write.m_mask = 0;
m_write.m_name = func.name();

View File

@ -60,7 +60,6 @@ enum map_handler_type
AMH_ROM,
AMH_NOP,
AMH_UNMAP,
AMH_DRIVER_DELEGATE,
AMH_DEVICE_DELEGATE,
AMH_LEGACY_SPACE_HANDLER,
AMH_LEGACY_DEVICE_HANDLER,
@ -858,86 +857,86 @@ void ADDRESS_MAP_NAME(_name)(address_map &map, const device_t &device) \
// driver data base reads
#define AM_READ_BASE(_class, _handler) \
curentry->set_handler(device, NULL, read_delegate(&_class::_handler, "driver_data::" #_handler, (_class *)0)); \
curentry->set_handler(device, DEVICE_SELF, read_delegate(&_class::_handler, "driver_data::" #_handler, (_class *)0)); \
#define AM_READ8_BASE(_class, _handler, _unitmask) \
curentry->set_handler(device, NULL, read8_delegate(&_class::_handler, "driver_data::" #_handler, (_class *)0), _unitmask); \
curentry->set_handler(device, DEVICE_SELF, read8_delegate(&_class::_handler, "driver_data::" #_handler, (_class *)0), _unitmask); \
#define AM_READ16_BASE(_class, _handler, _unitmask) \
curentry->set_handler(device, NULL, read16_delegate(&_class::_handler, "driver_data::" #_handler, (_class *)0), _unitmask); \
curentry->set_handler(device, DEVICE_SELF, read16_delegate(&_class::_handler, "driver_data::" #_handler, (_class *)0), _unitmask); \
#define AM_READ32_BASE(_class, _handler, _unitmask) \
curentry->set_handler(device, NULL, read32_delegate(&_class::_handler, "driver_data::" #_handler, (_class *)0), _unitmask); \
curentry->set_handler(device, DEVICE_SELF, read32_delegate(&_class::_handler, "driver_data::" #_handler, (_class *)0), _unitmask); \
// driver data base writes
#define AM_WRITE_BASE(_class, _handler) \
curentry->set_handler(device, NULL, write_delegate(&_class::_handler, "driver_data::" #_handler, (_class *)0)); \
curentry->set_handler(device, DEVICE_SELF, write_delegate(&_class::_handler, "driver_data::" #_handler, (_class *)0)); \
#define AM_WRITE8_BASE(_class, _handler, _unitmask) \
curentry->set_handler(device, NULL, write8_delegate(&_class::_handler, "driver_data::" #_handler, (_class *)0), _unitmask); \
curentry->set_handler(device, DEVICE_SELF, write8_delegate(&_class::_handler, "driver_data::" #_handler, (_class *)0), _unitmask); \
#define AM_WRITE16_BASE(_class, _handler, _unitmask) \
curentry->set_handler(device, NULL, write16_delegate(&_class::_handler, "driver_data::" #_handler, (_class *)0), _unitmask); \
curentry->set_handler(device, DEVICE_SELF, write16_delegate(&_class::_handler, "driver_data::" #_handler, (_class *)0), _unitmask); \
#define AM_WRITE32_BASE(_class, _handler, _unitmask) \
curentry->set_handler(device, NULL, write32_delegate(&_class::_handler, "driver_data::" #_handler, (_class *)0), _unitmask); \
curentry->set_handler(device, DEVICE_SELF, write32_delegate(&_class::_handler, "driver_data::" #_handler, (_class *)0), _unitmask); \
// driver data base reads/writes
#define AM_READWRITE_BASE(_class, _rhandler, _whandler) \
curentry->set_handler(device, NULL, read_delegate(&_class::_rhandler, "driver_data::" #_rhandler, (_class *)0), write_delegate(&_class::_whandler, "driver_data::" #_whandler, (_class *)0)); \
curentry->set_handler(device, DEVICE_SELF, read_delegate(&_class::_rhandler, "driver_data::" #_rhandler, (_class *)0), write_delegate(&_class::_whandler, "driver_data::" #_whandler, (_class *)0)); \
#define AM_READWRITE8_BASE(_class, _rhandler, _whandler, _unitmask) \
curentry->set_handler(device, NULL, read8_delegate(&_class::_rhandler, "driver_data::" #_rhandler, (_class *)0), write8_delegate(&_class::_whandler, "driver_data::" #_whandler, (_class *)0), _unitmask); \
curentry->set_handler(device, DEVICE_SELF, read8_delegate(&_class::_rhandler, "driver_data::" #_rhandler, (_class *)0), write8_delegate(&_class::_whandler, "driver_data::" #_whandler, (_class *)0), _unitmask); \
#define AM_READWRITE16_BASE(_class, _rhandler, _whandler, _unitmask) \
curentry->set_handler(device, NULL, read16_delegate(&_class::_rhandler, "driver_data::" #_rhandler, (_class *)0), write16_delegate(&_class::_whandler, "driver_data::" #_whandler, (_class *)0), _unitmask); \
curentry->set_handler(device, DEVICE_SELF, read16_delegate(&_class::_rhandler, "driver_data::" #_rhandler, (_class *)0), write16_delegate(&_class::_whandler, "driver_data::" #_whandler, (_class *)0), _unitmask); \
#define AM_READWRITE32_BASE(_class, _rhandler, _whandler, _unitmask) \
curentry->set_handler(device, NULL, read32_delegate(&_class::_rhandler, "driver_data::" #_rhandler, (_class *)0), write32_delegate(&_class::_whandler, "driver_data::" #_whandler, (_class *)0), _unitmask); \
curentry->set_handler(device, DEVICE_SELF, read32_delegate(&_class::_rhandler, "driver_data::" #_rhandler, (_class *)0), write32_delegate(&_class::_whandler, "driver_data::" #_whandler, (_class *)0), _unitmask); \
// driver data reads
#define AM_READ(_handler) \
curentry->set_handler(device, NULL, read_delegate(&drivdata_class::_handler, "driver_data::" #_handler, (drivdata_class *)0)); \
curentry->set_handler(device, DEVICE_SELF, read_delegate(&drivdata_class::_handler, "driver_data::" #_handler, (drivdata_class *)0)); \
#define AM_READ8(_handler, _unitmask) \
curentry->set_handler(device, NULL, read8_delegate(&drivdata_class::_handler, "driver_data::" #_handler, (drivdata_class *)0), _unitmask); \
curentry->set_handler(device, DEVICE_SELF, read8_delegate(&drivdata_class::_handler, "driver_data::" #_handler, (drivdata_class *)0), _unitmask); \
#define AM_READ16(_handler, _unitmask) \
curentry->set_handler(device, NULL, read16_delegate(&drivdata_class::_handler, "driver_data::" #_handler, (drivdata_class *)0), _unitmask); \
curentry->set_handler(device, DEVICE_SELF, read16_delegate(&drivdata_class::_handler, "driver_data::" #_handler, (drivdata_class *)0), _unitmask); \
#define AM_READ32(_handler, _unitmask) \
curentry->set_handler(device, NULL, read32_delegate(&drivdata_class::_handler, "driver_data::" #_handler, (drivdata_class *)0), _unitmask); \
curentry->set_handler(device, DEVICE_SELF, read32_delegate(&drivdata_class::_handler, "driver_data::" #_handler, (drivdata_class *)0), _unitmask); \
// driver data writes
#define AM_WRITE(_handler) \
curentry->set_handler(device, NULL, write_delegate(&drivdata_class::_handler, "driver_data::" #_handler, (drivdata_class *)0)); \
curentry->set_handler(device, DEVICE_SELF, write_delegate(&drivdata_class::_handler, "driver_data::" #_handler, (drivdata_class *)0)); \
#define AM_WRITE8(_handler, _unitmask) \
curentry->set_handler(device, NULL, write8_delegate(&drivdata_class::_handler, "driver_data::" #_handler, (drivdata_class *)0), _unitmask); \
curentry->set_handler(device, DEVICE_SELF, write8_delegate(&drivdata_class::_handler, "driver_data::" #_handler, (drivdata_class *)0), _unitmask); \
#define AM_WRITE16(_handler, _unitmask) \
curentry->set_handler(device, NULL, write16_delegate(&drivdata_class::_handler, "driver_data::" #_handler, (drivdata_class *)0), _unitmask); \
curentry->set_handler(device, DEVICE_SELF, write16_delegate(&drivdata_class::_handler, "driver_data::" #_handler, (drivdata_class *)0), _unitmask); \
#define AM_WRITE32(_handler, _unitmask) \
curentry->set_handler(device, NULL, write32_delegate(&drivdata_class::_handler, "driver_data::" #_handler, (drivdata_class *)0), _unitmask); \
curentry->set_handler(device, DEVICE_SELF, write32_delegate(&drivdata_class::_handler, "driver_data::" #_handler, (drivdata_class *)0), _unitmask); \
// driver data reads/writes
#define AM_READWRITE(_rhandler, _whandler) \
curentry->set_handler(device, NULL, read_delegate(&drivdata_class::_rhandler, "driver_data::" #_rhandler, (drivdata_class *)0), write_delegate(&drivdata_class::_whandler, "driver_data::" #_whandler, (drivdata_class *)0)); \
curentry->set_handler(device, DEVICE_SELF, read_delegate(&drivdata_class::_rhandler, "driver_data::" #_rhandler, (drivdata_class *)0), write_delegate(&drivdata_class::_whandler, "driver_data::" #_whandler, (drivdata_class *)0)); \
#define AM_READWRITE8(_rhandler, _whandler, _unitmask) \
curentry->set_handler(device, NULL, read8_delegate(&drivdata_class::_rhandler, "driver_data::" #_rhandler, (drivdata_class *)0), write8_delegate(&drivdata_class::_whandler, "driver_data::" #_whandler, (drivdata_class *)0), _unitmask); \
curentry->set_handler(device, DEVICE_SELF, read8_delegate(&drivdata_class::_rhandler, "driver_data::" #_rhandler, (drivdata_class *)0), write8_delegate(&drivdata_class::_whandler, "driver_data::" #_whandler, (drivdata_class *)0), _unitmask); \
#define AM_READWRITE16(_rhandler, _whandler, _unitmask) \
curentry->set_handler(device, NULL, read16_delegate(&drivdata_class::_rhandler, "driver_data::" #_rhandler, (drivdata_class *)0), write16_delegate(&drivdata_class::_whandler, "driver_data::" #_whandler, (drivdata_class *)0), _unitmask); \
curentry->set_handler(device, DEVICE_SELF, read16_delegate(&drivdata_class::_rhandler, "driver_data::" #_rhandler, (drivdata_class *)0), write16_delegate(&drivdata_class::_whandler, "driver_data::" #_whandler, (drivdata_class *)0), _unitmask); \
#define AM_READWRITE32(_rhandler, _whandler, _unitmask) \
curentry->set_handler(device, NULL, read32_delegate(&drivdata_class::_rhandler, "driver_data::" #_rhandler, (drivdata_class *)0), write32_delegate(&drivdata_class::_whandler, "driver_data::" #_whandler, (drivdata_class *)0), _unitmask); \
curentry->set_handler(device, DEVICE_SELF, read32_delegate(&drivdata_class::_rhandler, "driver_data::" #_rhandler, (drivdata_class *)0), write32_delegate(&drivdata_class::_whandler, "driver_data::" #_whandler, (drivdata_class *)0), _unitmask); \
// device reads

View File

@ -2066,20 +2066,10 @@ void address_space::populate_map_entry(const address_map_entry &entry, read_or_w
unmap_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, readorwrite, false);
break;
case AMH_DRIVER_DELEGATE:
case AMH_DEVICE_DELEGATE:
if (data.m_type == AMH_DRIVER_DELEGATE)
{
object = machine().driver_data<driver_device>();
if (object == NULL)
throw emu_fatalerror("Attempted to map a driver delegate in space %s of device '%s' when there is no driver data\n", m_name, m_device.tag());
}
else
{
object = machine().device(data.m_tag);
if (object == NULL)
throw emu_fatalerror("Attempted to map a non-existent device '%s' in space %s of device '%s'\n", data.m_tag, m_name, m_device.tag());
}
object = machine().device(data.m_tag);
if (object == NULL)
throw emu_fatalerror("Attempted to map a non-existent device '%s' in space %s of device '%s'\n", data.m_tag, m_name, m_device.tag());
if (readorwrite == ROW_READ)
switch (data.m_bits)

View File

@ -41,6 +41,7 @@
Trivia: BSMT stands for "Brian Schmidt's Mouse Trap"
***************************************************************************/
#define ADDRESS_MAP_MODERN
#include "emu.h"
#include "bsmt2000.h"
@ -55,20 +56,20 @@ const device_type BSMT2000 = &device_creator<bsmt2000_device>;
//**************************************************************************
// program map for the DSP (points to internal ROM)
static ADDRESS_MAP_START( tms_program_map, AS_PROGRAM, 16 )
static ADDRESS_MAP_START( tms_program_map, AS_PROGRAM, 16, bsmt2000_device)
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x000, 0xfff) AM_ROM
ADDRESS_MAP_END
// I/O map for the DSP
static ADDRESS_MAP_START( tms_io_map, AS_IO, 16 )
AM_RANGE(0, 0) AM_DEVREADWRITE_MODERN(DEVICE_SELF, bsmt2000_device, tms_register_r, tms_rom_addr_w)
AM_RANGE(1, 1) AM_DEVREADWRITE_MODERN(DEVICE_SELF, bsmt2000_device, tms_data_r, tms_rom_bank_w)
AM_RANGE(2, 2) AM_DEVREAD_MODERN(DEVICE_SELF, bsmt2000_device, tms_rom_r)
AM_RANGE(3, 3) AM_DEVWRITE_MODERN(DEVICE_SELF, bsmt2000_device, tms_left_w)
AM_RANGE(7, 7) AM_DEVWRITE_MODERN(DEVICE_SELF, bsmt2000_device, tms_right_w)
AM_RANGE(TMS32010_BIO, TMS32010_BIO) AM_DEVREAD_MODERN(DEVICE_SELF, bsmt2000_device, tms_write_pending_r)
static ADDRESS_MAP_START( tms_io_map, AS_IO, 16, bsmt2000_device)
AM_RANGE(0, 0) AM_READWRITE(tms_register_r, tms_rom_addr_w)
AM_RANGE(1, 1) AM_READWRITE(tms_data_r, tms_rom_bank_w)
AM_RANGE(2, 2) AM_READ(tms_rom_r)
AM_RANGE(3, 3) AM_WRITE(tms_left_w)
AM_RANGE(7, 7) AM_WRITE(tms_right_w)
AM_RANGE(TMS32010_BIO, TMS32010_BIO) AM_READ(tms_write_pending_r)
ADDRESS_MAP_END
@ -83,7 +84,7 @@ MACHINE_CONFIG_END
// default address map for the external memory interface
// the BSMT can address a full 32 bits but typically only 24 are used
static ADDRESS_MAP_START( bsmt2000, AS_0, 8 )
static ADDRESS_MAP_START( bsmt2000, AS_0, 8, bsmt2000_device)
AM_RANGE(0x00000, 0xffffff) AM_ROM
ADDRESS_MAP_END

View File

@ -1,3 +1,5 @@
#define ADDRESS_MAP_MODERN
#include "emu.h"
#include "mie.h"
#include "maple-dc.h"
@ -16,30 +18,30 @@
const device_type MIE = &device_creator<mie_device>;
const device_type MIE_JVS = &device_creator<mie_jvs_device>;
static ADDRESS_MAP_START( mie_map, AS_PROGRAM, 8 )
static ADDRESS_MAP_START( mie_map, AS_PROGRAM, 8, mie_device)
AM_RANGE(0x0000, 0x07ff) AM_ROM
AM_RANGE(0x0800, 0x6fff) AM_DEVREAD_MODERN(DEVICE_SELF, mie_device, read_ff)
AM_RANGE(0x7000, 0x7002) AM_DEVREADWRITE_MODERN(DEVICE_SELF, mie_device, control_r, control_w) AM_MIRROR(0x07c0)
AM_RANGE(0x7003, 0x7003) AM_DEVREADWRITE_MODERN(DEVICE_SELF, mie_device, lreg_r, lreg_w) AM_MIRROR(0x07c0)
AM_RANGE(0x7004, 0x7023) AM_DEVREADWRITE_MODERN(DEVICE_SELF, mie_device, tbuf_r, tbuf_w) AM_MIRROR(0x07c0)
AM_RANGE(0x7024, 0x703f) AM_DEVREAD_MODERN(DEVICE_SELF, mie_device, read_00) AM_MIRROR(0x07c0)
AM_RANGE(0x7800, 0x7fff) AM_DEVREAD_MODERN(DEVICE_SELF, mie_device, read_78xx)
AM_RANGE(0x0800, 0x6fff) AM_READ(read_ff)
AM_RANGE(0x7000, 0x7002) AM_READWRITE(control_r, control_w) AM_MIRROR(0x07c0)
AM_RANGE(0x7003, 0x7003) AM_READWRITE(lreg_r, lreg_w) AM_MIRROR(0x07c0)
AM_RANGE(0x7004, 0x7023) AM_READWRITE(tbuf_r, tbuf_w) AM_MIRROR(0x07c0)
AM_RANGE(0x7024, 0x703f) AM_READ(read_00) AM_MIRROR(0x07c0)
AM_RANGE(0x7800, 0x7fff) AM_READ(read_78xx)
AM_RANGE(0x8000, 0xffff) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START( mie_port, AS_IO, 8 )
static ADDRESS_MAP_START( mie_port, AS_IO, 8, mie_device)
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x07) AM_DEVREADWRITE_MODERN(DEVICE_SELF, mie_device, gpio_r, gpio_w)
AM_RANGE(0x08, 0x08) AM_DEVREADWRITE_MODERN(DEVICE_SELF, mie_device, gpiodir_r, gpiodir_w)
AM_RANGE(0x0f, 0x0f) AM_DEVREADWRITE_MODERN(DEVICE_SELF, mie_device, adc_r, adc_w)
AM_RANGE(0x10, 0x10) AM_DEVREADWRITE_MODERN(DEVICE_SELF, mie_device, jvs_r, jvs_w)
AM_RANGE(0x12, 0x12) AM_DEVWRITE_MODERN(DEVICE_SELF, mie_device, jvs_dest_w)
AM_RANGE(0x15, 0x15) AM_DEVREAD_MODERN(DEVICE_SELF, mie_device, jvs_status_r)
AM_RANGE(0x30, 0x30) AM_DEVREADWRITE_MODERN(DEVICE_SELF, mie_device, irq_enable_r, irq_enable_w)
AM_RANGE(0x50, 0x50) AM_DEVREADWRITE_MODERN(DEVICE_SELF, mie_device, maple_irqlevel_r, maple_irqlevel_w)
AM_RANGE(0x70, 0x70) AM_DEVREADWRITE_MODERN(DEVICE_SELF, mie_device, irq_pending_r, irq_pending_w)
AM_RANGE(0x90, 0x90) AM_DEVWRITE_MODERN(DEVICE_SELF, mie_device, jvs_control_w)
AM_RANGE(0x91, 0x91) AM_DEVREAD_MODERN(DEVICE_SELF, mie_device, jvs_sense_r)
AM_RANGE(0x00, 0x07) AM_READWRITE(gpio_r, gpio_w)
AM_RANGE(0x08, 0x08) AM_READWRITE(gpiodir_r, gpiodir_w)
AM_RANGE(0x0f, 0x0f) AM_READWRITE(adc_r, adc_w)
AM_RANGE(0x10, 0x10) AM_READWRITE(jvs_r, jvs_w)
AM_RANGE(0x12, 0x12) AM_WRITE(jvs_dest_w)
AM_RANGE(0x15, 0x15) AM_READ(jvs_status_r)
AM_RANGE(0x30, 0x30) AM_READWRITE(irq_enable_r, irq_enable_w)
AM_RANGE(0x50, 0x50) AM_READWRITE(maple_irqlevel_r, maple_irqlevel_w)
AM_RANGE(0x70, 0x70) AM_READWRITE(irq_pending_r, irq_pending_w)
AM_RANGE(0x90, 0x90) AM_WRITE(jvs_control_w)
AM_RANGE(0x91, 0x91) AM_READ(jvs_sense_r)
ADDRESS_MAP_END
static MACHINE_CONFIG_FRAGMENT( mie )