diff options
author | 2012-04-01 12:57:59 +0000 | |
---|---|---|
committer | 2012-04-01 12:57:59 +0000 | |
commit | 4cb1c788de2cb7e926b109643555cb5b76559125 (patch) | |
tree | 46227569b47e4f4bc9890aedc2f53e77ef0b6699 /src/emu/addrmap.h | |
parent | 03b3d148c47ae3c7595300693fe9293c9d29f270 (diff) |
MAME going modern part 2 (no whatsnew)
Diffstat (limited to 'src/emu/addrmap.h')
-rw-r--r-- | src/emu/addrmap.h | 313 |
1 files changed, 7 insertions, 306 deletions
diff --git a/src/emu/addrmap.h b/src/emu/addrmap.h index 34c4769a35c..fd639f745e8 100644 --- a/src/emu/addrmap.h +++ b/src/emu/addrmap.h @@ -445,312 +445,9 @@ public: // ADDRESS MAP MACROS //************************************************************************** -// -// There are two versions of the macros below -// -// By default, the legacy forms are enabled; however, if ADDRESS_MAP_MODERN is #defined -// prior to including this file, the new format are enabled instead. -// - // so that "0" can be used for unneeded address maps #define construct_address_map_0 NULL - -#ifndef ADDRESS_MAP_MODERN - -// -// Legacy ADDRESS_MAPs -// - -// start/end tags for the address map -#define ADDRESS_MAP_NAME(_name) construct_address_map_##_name - -#define ADDRESS_MAP_START(_name, _space, _bits, _class) \ -ATTR_COLD void ADDRESS_MAP_NAME(_name)(address_map &map, const device_t &device) \ -{ \ - typedef read##_bits##_delegate read_delegate; \ - typedef write##_bits##_delegate write_delegate; \ - address_map_entry##_bits *curentry = NULL; \ - (void)curentry; \ - map.configure(_space, _bits); \ - typedef _class drivdata_class; \ - -#define ADDRESS_MAP_END \ -} - -// use this to declare external references to an address map -#define ADDRESS_MAP_EXTERN(_name, _bits) \ - extern void ADDRESS_MAP_NAME(_name)(address_map &map, const device_t &device) - -// use this to declare an address map as a member of a modern device class -#define DECLARE_ADDRESS_MAP(_name, _bits) \ - void _name(address_map &map, const device_t &device) - - -// global controls -#define ADDRESS_MAP_GLOBAL_MASK(_mask) \ - map.set_global_mask(_mask); \ - -#define ADDRESS_MAP_UNMAP_LOW \ - map.set_unmap_value(0); \ - -#define ADDRESS_MAP_UNMAP_HIGH \ - map.set_unmap_value(~0); \ - - -// importing data from other address maps -#define AM_IMPORT_FROM(_name) \ - ADDRESS_MAP_NAME(_name)(map, device); \ - - -// address ranges -#define AM_RANGE(_start, _end) \ - curentry = map.add(_start, _end, curentry); \ - -#define AM_MASK(_mask) \ - curentry->set_mask(_mask); \ - -#define AM_MIRROR(_mirror) \ - curentry->set_mirror(_mirror); \ - - -// legacy space reads -#define AM_READ(_handler) \ - curentry->set_handler(_handler, #_handler); \ - -#define AM_READ8(_handler, _unitmask) \ - curentry->set_handler(_handler, #_handler, _unitmask); \ - -#define AM_READ16(_handler, _unitmask) \ - curentry->set_handler(_handler, #_handler, _unitmask); \ - -#define AM_READ32(_handler, _unitmask) \ - curentry->set_handler(_handler, #_handler, _unitmask); \ - - -// legacy space writes -#define AM_WRITE(_handler) \ - curentry->set_handler(_handler, #_handler); \ - -#define AM_WRITE8(_handler, _unitmask) \ - curentry->set_handler(_handler, #_handler, _unitmask); \ - -#define AM_WRITE16(_handler, _unitmask) \ - curentry->set_handler(_handler, #_handler, _unitmask); \ - -#define AM_WRITE32(_handler, _unitmask) \ - curentry->set_handler(_handler, #_handler, _unitmask); \ - - -// legacy space reads/writes -#define AM_READWRITE(_rhandler, _whandler) \ - curentry->set_handler(_rhandler, #_rhandler, _whandler, #_whandler); \ - -#define AM_READWRITE8(_rhandler, _whandler, _unitmask) \ - curentry->set_handler(_rhandler, #_rhandler, _whandler, #_whandler, _unitmask); \ - -#define AM_READWRITE16(_rhandler, _whandler, _unitmask) \ - curentry->set_handler(_rhandler, #_rhandler, _whandler, #_whandler, _unitmask); \ - -#define AM_READWRITE32(_rhandler, _whandler, _unitmask) \ - curentry->set_handler(_rhandler, #_rhandler, _whandler, #_whandler, _unitmask); \ - - -// legacy device reads -#define AM_DEVREAD(_tag, _handler) \ - curentry->set_handler(device, _tag, _handler, #_handler); \ - -#define AM_DEVREAD8(_tag, _handler, _unitmask) \ - curentry->set_handler(device, _tag, _handler, #_handler, _unitmask); \ - -#define AM_DEVREAD16(_tag, _handler, _unitmask) \ - curentry->set_handler(device, _tag, _handler, #_handler, _unitmask); \ - -#define AM_DEVREAD32(_tag, _handler, _unitmask) \ - curentry->set_handler(device, _tag, _handler, #_handler, _unitmask); \ - - -// legacy device writes -#define AM_DEVWRITE(_tag, _handler) \ - curentry->set_handler(device, _tag, _handler, #_handler); \ - -#define AM_DEVWRITE8(_tag, _handler, _unitmask) \ - curentry->set_handler(device, _tag, _handler, #_handler, _unitmask); \ - -#define AM_DEVWRITE16(_tag, _handler, _unitmask) \ - curentry->set_handler(device, _tag, _handler, #_handler, _unitmask); \ - -#define AM_DEVWRITE32(_tag, _handler, _unitmask) \ - curentry->set_handler(device, _tag, _handler, #_handler, _unitmask); \ - - -// legacy device reads/writes -#define AM_DEVREADWRITE(_tag, _rhandler, _whandler) \ - curentry->set_handler(device, _tag, _rhandler, #_rhandler, _whandler, #_whandler); \ - -#define AM_DEVREADWRITE8(_tag, _rhandler, _whandler, _unitmask) \ - curentry->set_handler(device, _tag, _rhandler, #_rhandler, _whandler, #_whandler, _unitmask); \ - -#define AM_DEVREADWRITE16(_tag, _rhandler, _whandler, _unitmask) \ - curentry->set_handler(device, _tag, _rhandler, #_rhandler, _whandler, #_whandler, _unitmask); \ - -#define AM_DEVREADWRITE32(_tag, _rhandler, _whandler, _unitmask) \ - curentry->set_handler(device, _tag, _rhandler, #_rhandler, _whandler, #_whandler, _unitmask); \ - - -// device reads -#define AM_DEVREAD_MODERN(_tag, _class, _handler) \ - curentry->set_handler(device, _tag, read_delegate(&_class::_handler, #_class "::" #_handler, (_class *)0)); \ - -#define AM_DEVREAD8_MODERN(_tag, _class, _handler, _unitmask) \ - curentry->set_handler(device, _tag, read8_delegate(&_class::_handler, #_class "::" #_handler, (_class *)0), _unitmask); \ - -#define AM_DEVREAD16_MODERN(_tag, _class, _handler, _unitmask) \ - curentry->set_handler(device, _tag, read16_delegate(&_class::_handler, #_class "::" #_handler, (_class *)0), _unitmask); \ - -#define AM_DEVREAD32_MODERN(_tag, _class, _handler, _unitmask) \ - curentry->set_handler(device, _tag, read32_delegate(&_class::_handler, #_class "::" #_handler, (_class *)0), _unitmask); \ - - -// device writes -#define AM_DEVWRITE_MODERN(_tag, _class, _handler) \ - curentry->set_handler(device, _tag, write_delegate(&_class::_handler, #_class "::" #_handler, (_class *)0)); \ - -#define AM_DEVWRITE8_MODERN(_tag, _class, _handler, _unitmask) \ - curentry->set_handler(device, _tag, write8_delegate(&_class::_handler, #_class "::" #_handler, (_class *)0), _unitmask); \ - -#define AM_DEVWRITE16_MODERN(_tag, _class, _handler, _unitmask) \ - curentry->set_handler(device, _tag, write16_delegate(&_class::_handler, #_class "::" #_handler, (_class *)0), _unitmask); \ - -#define AM_DEVWRITE32_MODERN(_tag, _class, _handler, _unitmask) \ - curentry->set_handler(device, _tag, write32_delegate(&_class::_handler, #_class "::" #_handler, (_class *)0), _unitmask); \ - - -// device reads/writes -#define AM_DEVREADWRITE_MODERN(_tag, _class, _rhandler, _whandler) \ - curentry->set_handler(device, _tag, read_delegate(&_class::_rhandler, #_class "::" #_rhandler, (_class *)0), write_delegate(&_class::_whandler, #_class "::" #_whandler, (_class *)0)); \ - -#define AM_DEVREADWRITE8_MODERN(_tag, _class, _rhandler, _whandler, _unitmask) \ - curentry->set_handler(device, _tag, read8_delegate(&_class::_rhandler, #_class "::" #_rhandler, (_class *)0), write8_delegate(&_class::_whandler, #_class "::" #_whandler, (_class *)0), _unitmask); \ - -#define AM_DEVREADWRITE16_MODERN(_tag, _class, _rhandler, _whandler, _unitmask) \ - curentry->set_handler(device, _tag, read16_delegate(&_class::_rhandler, #_class "::" #_rhandler, (_class *)0), write16_delegate(&_class::_whandler, #_class "::" #_whandler, (_class *)0), _unitmask); \ - -#define AM_DEVREADWRITE32_MODERN(_tag, _class, _rhandler, _whandler, _unitmask) \ - curentry->set_handler(device, _tag, read32_delegate(&_class::_rhandler, #_class "::" #_rhandler, (_class *)0), write32_delegate(&_class::_whandler, #_class "::" #_whandler, (_class *)0), _unitmask); \ - - -// device mapping -#define AM_DEVICE(_tag, _class, _handler) \ - curentry->set_submap(device, _tag, address_map_delegate(&_class::_handler, #_class "::" #_handler, (_class *)0), 0, 0); \ - -#define AM_DEVICE8(_tag, _class, _handler, _unitmask) \ - curentry->set_submap(device, _tag, address_map_delegate(&_class::_handler, #_class "::" #_handler, (_class *)0), 8, _unitmask); \ - -#define AM_DEVICE16(_tag, _class, _handler, _unitmask) \ - curentry->set_submap(device, _tag, address_map_delegate(&_class::_handler, #_class "::" #_handler, (_class *)0), 16, _unitmask); \ - -#define AM_DEVICE32(_tag, _class, _handler, _unitmask) \ - curentry->set_submap(device, _tag, address_map_delegate(&_class::_handler, #_class "::" #_handler, (_class *)0), 32, _unitmask); \ - - - -// special-case accesses -#define AM_ROM \ - curentry->set_read_type(AMH_ROM); \ - -#define AM_RAM \ - curentry->set_read_type(AMH_RAM); \ - curentry->set_write_type(AMH_RAM); \ - -#define AM_READONLY \ - curentry->set_read_type(AMH_RAM); \ - -#define AM_WRITEONLY \ - curentry->set_write_type(AMH_RAM); \ - -#define AM_UNMAP \ - curentry->set_read_type(AMH_UNMAP); \ - curentry->set_write_type(AMH_UNMAP); \ - -#define AM_NOP \ - curentry->set_read_type(AMH_NOP); \ - curentry->set_write_type(AMH_NOP); \ - -#define AM_READNOP \ - curentry->set_read_type(AMH_NOP); \ - -#define AM_WRITENOP \ - curentry->set_write_type(AMH_NOP); \ - - -// port accesses -#define AM_READ_PORT(_tag) \ - curentry->set_read_port(device, _tag); \ - -#define AM_WRITE_PORT(_tag) \ - curentry->set_write_port(device, _tag); \ - -#define AM_READWRITE_PORT(_tag) \ - curentry->set_readwrite_port(device, _tag); \ - - -// bank accesses -#define AM_READ_BANK(_tag) \ - curentry->set_read_bank(device, _tag); \ - -#define AM_WRITE_BANK(_tag) \ - curentry->set_write_bank(device, _tag); \ - -#define AM_READWRITE_BANK(_tag) \ - curentry->set_readwrite_bank(device, _tag); \ - - -// attributes for accesses -#define AM_REGION(_tag, _offs) \ - curentry->set_region(_tag, _offs); \ - -#define AM_SHARE(_tag) \ - curentry->set_share(_tag); \ - -#define AM_BASE(_base) \ - curentry->set_baseptr(_base); \ - -#define myoffsetof(_struct, _member) ((FPTR)&((_struct *)0x1000)->_member - 0x1000) -#define AM_BASE_MEMBER(_struct, _member) \ - curentry->set_member_baseptr(myoffsetof(_struct, _member)); \ - -#define AM_BASE_GENERIC(_member) \ - curentry->set_generic_baseptr(myoffsetof(generic_pointers, _member)); \ - -#define AM_SIZE(_size) \ - curentry->set_sizeptr(_size); \ - -#define AM_SIZE_MEMBER(_struct, _member) \ - curentry->set_member_sizeptr(myoffsetof(_struct, _member)); \ - -#define AM_SIZE_GENERIC(_member) \ - curentry->set_generic_sizeptr(myoffsetof(generic_pointers, _member##_size)); \ - - -// common shortcuts -#define AM_ROMBANK(_bank) AM_READ_BANK(_bank) -#define AM_RAMBANK(_bank) AM_READWRITE_BANK(_bank) -#define AM_RAM_READ(_read) AM_READ(_read) AM_WRITEONLY -#define AM_RAM_WRITE(_write) AM_READONLY AM_WRITE(_write) -#define AM_RAM_DEVREAD(_tag, _read) AM_DEVREAD(_tag, _read) AM_WRITEONLY -#define AM_RAM_DEVWRITE(_tag, _write) AM_READONLY AM_DEVWRITE(_tag, _write) - -#define AM_BASE_SIZE_MEMBER(_struct, _base, _size) AM_BASE_MEMBER(_struct, _base) AM_SIZE_MEMBER(_struct, _size) -#define AM_BASE_SIZE_GENERIC(_member) AM_BASE_GENERIC(_member) AM_SIZE_GENERIC(_member) - - -#else - -// -// Modern ADDRESS_MAPs -// - // start/end tags for the address map #define ADDRESS_MAP_NAME(_name) construct_address_map_##_name @@ -1112,7 +809,7 @@ void _class :: _name(address_map &map, const device_t &device) \ #define AM_SIZE_LEGACY(_size) \ curentry->set_sizeptr(_size); \ -#define AM_SIZE(_struct, _member) \ +#define AM_SIZE(_member) \ curentry->set_member_sizeptr(myoffsetof(drivdata_class, _member)); \ #define AM_SIZE_GENERIC(_member) \ @@ -1127,10 +824,14 @@ void _class :: _name(address_map &map, const device_t &device) \ #define AM_RAM_DEVREAD(_tag, _class, _read) AM_DEVREAD(_tag, _class, _read) AM_WRITEONLY #define AM_RAM_DEVWRITE(_tag, _class, _write) AM_READONLY AM_DEVWRITE(_tag, _class, _write) -#define AM_BASE_SIZE(_base, _size) AM_BASE_MEMBER(_base) AM_SIZE_MEMBER(_size) +#define AM_RAM_READ_LEGACY(_read) AM_READ_LEGACY(_read) AM_WRITEONLY +#define AM_RAM_WRITE_LEGACY(_write) AM_READONLY AM_WRITE_LEGACY(_write) +#define AM_RAM_DEVREAD_LEGACY(_tag, _read) AM_DEVREAD_LEGACY(_tag, _read) AM_WRITEONLY +#define AM_RAM_DEVWRITE_LEGACY(_tag, _write) AM_READONLY AM_DEVWRITE_LEGACY(_tag, _write) + +#define AM_BASE_SIZE(_base, _size) AM_BASE(_base) AM_SIZE(_size) #define AM_BASE_SIZE_GENERIC(_member) AM_BASE_GENERIC(_member) AM_SIZE_GENERIC(_member) -#endif |