Switched subhandlers to using masks instead of shifts. Reduced the number

of stub handlers required as a result. Updated all drivers accordingly.
This commit is contained in:
Aaron Giles 2008-04-15 06:39:34 +00:00
parent 35dc5e1da6
commit 71ca9ecec2
6 changed files with 342 additions and 745 deletions

File diff suppressed because it is too large Load Diff

View File

@ -198,13 +198,13 @@ struct _address_map_entry
offs_t addrmask; /* mask bits */
read_handler read; /* read handler callback */
UINT8 read_bits; /* bits for the read handler callback (0=default, 1=8, 2=16, 3=32) */
UINT8 read_shift; /* shift value for the read handler */
UINT8 read_mask; /* mask bits indicating which subunits to process */
const char * read_name; /* read handler callback name */
device_type read_devtype; /* read device type for device references */
const char * read_devtag; /* read tag for the relevant device */
write_handler write; /* write handler callback */
UINT8 write_bits; /* bits for the write handler callback (0=default, 1=8, 2=16, 3=32) */
UINT8 write_shift; /* shift value for the write handler */
UINT8 write_mask; /* mask bits indicating which subunits to process */
const char * write_name; /* write handler callback name */
device_type write_devtype; /* read device type for device references */
const char * write_devtag; /* read tag for the relevant device */
@ -553,6 +553,31 @@ union _addrmap64_token
#define address_map_0 NULL
/* maps a full 64-bit mask down to an 8-bit byte mask */
#define UNITMASK8(x) \
((((UINT64)(x) >> (63-7)) & 0x80) | \
(((UINT64)(x) >> (55-6)) & 0x40) | \
(((UINT64)(x) >> (47-5)) & 0x20) | \
(((UINT64)(x) >> (39-4)) & 0x10) | \
(((UINT64)(x) >> (31-3)) & 0x08) | \
(((UINT64)(x) >> (23-2)) & 0x04) | \
(((UINT64)(x) >> (15-1)) & 0x02) | \
(((UINT64)(x) >> ( 7-0)) & 0x01))
/* maps a full 64-bit mask down to a 4-bit word mask */
#define UNITMASK16(x) \
((((UINT64)(x) >> (63-3)) & 0x08) | \
(((UINT64)(x) >> (47-2)) & 0x04) | \
(((UINT64)(x) >> (31-1)) & 0x02) | \
(((UINT64)(x) >> (15-0)) & 0x01))
/* maps a full 64-bit mask down to a 2-bit dword mask */
#define UNITMASK32(x) \
((((UINT64)(x) >> (63-1)) & 0x02) | \
(((UINT64)(x) >> (31-0)) & 0x01))
/* start/end tags for the address map */
#define ADDRESS_MAP_START(_name, _space, _bits) \
const addrmap##_bits##_token address_map_##_name[] = { \
@ -595,103 +620,103 @@ union _addrmap64_token
TOKEN_UINT64_PACK2(ADDRMAP_TOKEN_MIRROR, 8, _mirror, 32),
#define AM_READ(_handler) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_READ, 8, 0, 2, 0, 6), \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_READ, 8, 0, 8, 0, 8), \
TOKEN_PTR(mread, _handler), \
TOKEN_STRING(#_handler),
#define AM_READ8(_handler, _shift) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_READ, 8, 1, 2, (_shift), 6), \
#define AM_READ8(_handler, _unitmask) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_READ, 8, 8, 8, UNITMASK8(_unitmask), 8), \
TOKEN_PTR(mread8, _handler), \
TOKEN_STRING(#_handler),
#define AM_READ16(_handler, _shift) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_READ, 8, 2, 2, (_shift), 6), \
#define AM_READ16(_handler, _unitmask) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_READ, 8, 16, 8, UNITMASK16(_unitmask), 8), \
TOKEN_PTR(mread16, _handler), \
TOKEN_STRING(#_handler),
#define AM_READ32(_handler, _shift) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_READ, 8, 3, 2, (_shift), 6), \
#define AM_READ32(_handler, _unitmask) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_READ, 8, 32, 8, UNITMASK32(_unitmask), 8), \
TOKEN_PTR(mread32, _handler), \
TOKEN_STRING(#_handler),
#define AM_WRITE(_handler) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_WRITE, 8, 0, 2, 0, 6), \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_WRITE, 8, 0, 8, 0, 8), \
TOKEN_PTR(mwrite, _handler), \
TOKEN_STRING(#_handler),
#define AM_WRITE8(_handler, _shift) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_WRITE, 8, 1, 2, (_shift), 6), \
#define AM_WRITE8(_handler, _unitmask) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_WRITE, 8, 8, 8, UNITMASK8(_unitmask), 8), \
TOKEN_PTR(mwrite8, _handler), \
TOKEN_STRING(#_handler),
#define AM_WRITE16(_handler, _shift) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_WRITE, 8, 2, 2, (_shift), 6), \
#define AM_WRITE16(_handler, _unitmask) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_WRITE, 8, 16, 8, UNITMASK16(_unitmask), 8), \
TOKEN_PTR(mwrite16, _handler), \
TOKEN_STRING(#_handler),
#define AM_WRITE32(_handler, _shift) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_WRITE, 8, 3, 2, (_shift), 6), \
#define AM_WRITE32(_handler, _unitmask) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_WRITE, 8, 32, 8, UNITMASK32(_unitmask), 8), \
TOKEN_PTR(mwrite32, _handler), \
TOKEN_STRING(#_handler),
#define AM_DEVREAD(_type, _tag, _handler) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_DEVICE_READ, 8, 0, 2, 0, 6), \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_DEVICE_READ, 8, 0, 8, 0, 8), \
TOKEN_PTR(dread, _handler), \
TOKEN_STRING(#_handler), \
TOKEN_PTR(devtype, _type), \
TOKEN_STRING(_tag),
#define AM_DEVREAD8(_type, _tag, _handler, _shift) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_DEVICE_READ, 8, 1, 2, (_shift), 6), \
#define AM_DEVREAD8(_type, _tag, _handler, _unitmask) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_DEVICE_READ, 8, 8, 8, UNITMASK8(_unitmask), 8), \
TOKEN_PTR(dread8, _handler), \
TOKEN_STRING(#_handler), \
TOKEN_PTR(devtype, _type), \
TOKEN_STRING(_tag),
#define AM_DEVREAD16(_type, _tag, _handler, _shift) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_DEVICE_READ, 8, 2, 2, (_shift), 6), \
#define AM_DEVREAD16(_type, _tag, _handler, _unitmask) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_DEVICE_READ, 8, 16, 8, UNITMASK16(_unitmask), 8), \
TOKEN_PTR(dread16, _handler), \
TOKEN_STRING(#_handler), \
TOKEN_PTR(devtype, _type), \
TOKEN_STRING(_tag),
#define AM_DEVREAD32(_type, _tag, _handler, _shift) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_DEVICE_READ, 8, 3, 2, (_shift), 6), \
#define AM_DEVREAD32(_type, _tag, _handler, _unitmask) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_DEVICE_READ, 8, 32, 8, UNITMASK32(_unitmask), 8), \
TOKEN_PTR(dread32, _handler), \
TOKEN_STRING(#_handler), \
TOKEN_PTR(devtype, _type), \
TOKEN_STRING(_tag),
#define AM_DEVWRITE(_type, _tag, _handler) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_DEVICE_WRITE, 8, 0, 2, 0, 6), \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_DEVICE_WRITE, 8, 0, 8, 0, 8), \
TOKEN_PTR(dwrite, _handler), \
TOKEN_STRING(#_handler), \
TOKEN_PTR(devtype, _type), \
TOKEN_STRING(_tag),
#define AM_DEVWRITE8(_type, _tag, _handler, _shift) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_DEVICE_WRITE, 8, 1, 2, (_shift), 6), \
#define AM_DEVWRITE8(_type, _tag, _handler, _unitmask) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_DEVICE_WRITE, 8, 8, 8, UNITMASK8(_unitmask), 8), \
TOKEN_PTR(dwrite8, _handler), \
TOKEN_STRING(#_handler), \
TOKEN_PTR(devtype, _type), \
TOKEN_STRING(_tag),
#define AM_DEVWRITE16(_type, _tag, _handler, _shift) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_DEVICE_WRITE, 8, 2, 2, (_shift), 6), \
#define AM_DEVWRITE16(_type, _tag, _handler, _unitmask) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_DEVICE_WRITE, 8, 16, 8, UNITMASK16(_unitmask), 8), \
TOKEN_PTR(dwrite16, _handler), \
TOKEN_STRING(#_handler), \
TOKEN_PTR(devtype, _type), \
TOKEN_STRING(_tag),
#define AM_DEVWRITE32(_type, _tag, _handler, _shift) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_DEVICE_WRITE, 8, 3, 2, (_shift), 6), \
#define AM_DEVWRITE32(_type, _tag, _handler, _unitmask) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_DEVICE_WRITE, 8, 32, 8, UNITMASK32(_unitmask), 8), \
TOKEN_PTR(dwrite32, _handler), \
TOKEN_STRING(#_handler), \
TOKEN_PTR(devtype, _type), \
TOKEN_STRING(_tag),
#define AM_READ_PORT(_tag) \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_READ_PORT, 8, 0, 2, 0, 6), \
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_READ_PORT, 8, 0, 8, 0, 8), \
TOKEN_STRING(_tag),
#define AM_REGION(_region, _offs) \

View File

@ -692,7 +692,7 @@ static ADDRESS_MAP_START( soundsgood_map, ADDRESS_SPACE_PROGRAM, 16 )
ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0x7ffff)
AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x060000, 0x060007) AM_READWRITE8(pia_1_alt_r, pia_1_alt_w, 8)
AM_RANGE(0x060000, 0x060007) AM_READWRITE8(pia_1_alt_r, pia_1_alt_w, 0xff00)
AM_RANGE(0x070000, 0x070fff) AM_RAM
ADDRESS_MAP_END

View File

@ -736,29 +736,29 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( main020_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x000000, 0x1fffff) AM_ROM
AM_RANGE(0x400000, 0x40ffff) AM_READWRITE(SMH_RAM, gaelco3d_paletteram_020_w) AM_BASE(&paletteram32)
AM_RANGE(0x51000c, 0x51000f) AM_READ16(input_port_0_word_r, 16)
AM_RANGE(0x51001c, 0x51001f) AM_READ16(input_port_1_word_r, 16)
AM_RANGE(0x51002c, 0x51002f) AM_READ16(input_port_2_word_r, 16)
AM_RANGE(0x51003c, 0x51003f) AM_READ16(input_port_3_word_r, 16)
AM_RANGE(0x510040, 0x510043) AM_READ16(sound_status_r, 0)
AM_RANGE(0x510040, 0x510043) AM_WRITE16(sound_data_w, 16)
AM_RANGE(0x510100, 0x510103) AM_READ16(eeprom_data_r, 16)
AM_RANGE(0x510100, 0x510103) AM_WRITE16(irq_ack_w, 16)
AM_RANGE(0x51000c, 0x51000f) AM_READ16(input_port_0_word_r, 0xffff0000)
AM_RANGE(0x51001c, 0x51001f) AM_READ16(input_port_1_word_r, 0xffff0000)
AM_RANGE(0x51002c, 0x51002f) AM_READ16(input_port_2_word_r, 0xffff0000)
AM_RANGE(0x51003c, 0x51003f) AM_READ16(input_port_3_word_r, 0xffff0000)
AM_RANGE(0x510040, 0x510043) AM_READ16(sound_status_r, 0x0000ffff)
AM_RANGE(0x510040, 0x510043) AM_WRITE16(sound_data_w, 0xffff0000)
AM_RANGE(0x510100, 0x510103) AM_READ16(eeprom_data_r, 0xffff0000)
AM_RANGE(0x510100, 0x510103) AM_WRITE16(irq_ack_w, 0xffff0000)
AM_RANGE(0x510104, 0x510107) AM_WRITE(unknown_107_w)
AM_RANGE(0x510110, 0x510113) AM_WRITE16(eeprom_data_w, 0)
AM_RANGE(0x510114, 0x510117) AM_WRITE16(tms_control3_w, 0)
AM_RANGE(0x510118, 0x51011b) AM_WRITE16(eeprom_clock_w, 0)
AM_RANGE(0x510120, 0x510123) AM_WRITE16(eeprom_cs_w, 0)
AM_RANGE(0x510110, 0x510113) AM_WRITE16(eeprom_data_w, 0x0000ffff)
AM_RANGE(0x510114, 0x510117) AM_WRITE16(tms_control3_w, 0x0000ffff)
AM_RANGE(0x510118, 0x51011b) AM_WRITE16(eeprom_clock_w, 0x0000ffff)
AM_RANGE(0x510120, 0x510123) AM_WRITE16(eeprom_cs_w, 0x0000ffff)
AM_RANGE(0x510124, 0x510127) AM_WRITE(unknown_127_w)
AM_RANGE(0x510128, 0x51012b) AM_WRITE16(tms_reset_w, 0)
AM_RANGE(0x510130, 0x510133) AM_WRITE16(tms_irq_w, 0)
AM_RANGE(0x510128, 0x51012b) AM_WRITE16(tms_reset_w, 0x0000ffff)
AM_RANGE(0x510130, 0x510133) AM_WRITE16(tms_irq_w, 0x0000ffff)
AM_RANGE(0x510134, 0x510137) AM_WRITE(unknown_137_w)
AM_RANGE(0x510138, 0x51013b) AM_WRITE(unknown_13a_w)
AM_RANGE(0x510144, 0x510147) AM_WRITE16(led_0_w, 0)
AM_RANGE(0x510154, 0x510157) AM_WRITE16(analog_port_clock_w, 0)
AM_RANGE(0x510164, 0x510167) AM_WRITE16(analog_port_latch_w, 0)
AM_RANGE(0x510174, 0x510177) AM_WRITE16(led_1_w, 0)
AM_RANGE(0xfe7f80, 0xfe7fff) AM_WRITE16(tms_comm_w, SHIFT_PACKED) AM_BASE((UINT32 **)&tms_comm_base)
AM_RANGE(0x510144, 0x510147) AM_WRITE16(led_0_w, 0x0000ffff)
AM_RANGE(0x510154, 0x510157) AM_WRITE16(analog_port_clock_w, 0x0000ffff)
AM_RANGE(0x510164, 0x510167) AM_WRITE16(analog_port_latch_w, 0x0000ffff)
AM_RANGE(0x510174, 0x510177) AM_WRITE16(led_1_w, 0x0000ffff)
AM_RANGE(0xfe7f80, 0xfe7fff) AM_WRITE16(tms_comm_w, 0xffffffff) AM_BASE((UINT32 **)&tms_comm_base)
AM_RANGE(0xfe0000, 0xfeffff) AM_RAM AM_BASE((UINT32 **)&m68k_ram_base)
ADDRESS_MAP_END

View File

@ -933,14 +933,14 @@ static ADDRESS_MAP_START( ninclown_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x00007f) AM_RAM AM_REGION(REGION_CPU1, 0)
AM_RANGE(0x000080, 0x003fff) AM_RAM AM_BASE((void *)&main_ram) AM_SIZE(&main_ram_size)
AM_RANGE(0x004000, 0x07ffff) AM_ROM
AM_RANGE(0x100080, 0x100081) AM_WRITE8(sound_data_w, 8)
AM_RANGE(0x100080, 0x100081) AM_WRITE8(sound_data_w, 0xff00)
AM_RANGE(0x100100, 0x100101) AM_READWRITE(input_port_0_word_r, grom_bank16_w) AM_BASE((void *)&itech8_grom_bank)
AM_RANGE(0x100180, 0x100181) AM_READWRITE(input_port_1_word_r, display_page16_w)
AM_RANGE(0x100240, 0x100241) AM_WRITE8(tms34061_latch_w, 8)
AM_RANGE(0x100240, 0x100241) AM_WRITE8(tms34061_latch_w, 0xff00)
AM_RANGE(0x100280, 0x100281) AM_READWRITE(input_port_2_word_r, SMH_NOP)
AM_RANGE(0x100300, 0x10031f) AM_READWRITE8(itech8_blitter_r, itech8_blitter_w, SHIFT_PACKED)
AM_RANGE(0x100300, 0x10031f) AM_READWRITE8(itech8_blitter_r, itech8_blitter_w, 0xffff)
AM_RANGE(0x100380, 0x1003ff) AM_WRITE(palette16_w)
AM_RANGE(0x110000, 0x110fff) AM_READWRITE8(itech8_tms34061_r, itech8_tms34061_w, SHIFT_PACKED)
AM_RANGE(0x110000, 0x110fff) AM_READWRITE8(itech8_tms34061_r, itech8_tms34061_w, 0xffff)
ADDRESS_MAP_END

View File

@ -331,9 +331,9 @@ static ADDRESS_MAP_START( zwackery_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x080000, 0x080fff) AM_RAM
AM_RANGE(0x084000, 0x084fff) AM_RAM
AM_RANGE(0x100000, 0x10000f) AM_READWRITE(zwackery_6840_r, mcr68_6840_upper_w)
AM_RANGE(0x104000, 0x104007) AM_READWRITE8(pia_2_r, pia_2_w, 8)
AM_RANGE(0x108000, 0x108007) AM_READWRITE8(pia_3_r, pia_3_w, 0)
AM_RANGE(0x10c000, 0x10c007) AM_READWRITE8(pia_4_r, pia_4_w, 0)
AM_RANGE(0x104000, 0x104007) AM_READWRITE8(pia_2_r, pia_2_w, 0xff00)
AM_RANGE(0x108000, 0x108007) AM_READWRITE8(pia_3_r, pia_3_w, 0x00ff)
AM_RANGE(0x10c000, 0x10c007) AM_READWRITE8(pia_4_r, pia_4_w, 0x00ff)
AM_RANGE(0x800000, 0x800fff) AM_READWRITE(SMH_RAM, zwackery_videoram_w) AM_BASE(&videoram16) AM_SIZE(&videoram_size)
AM_RANGE(0x802000, 0x803fff) AM_READWRITE(SMH_RAM, zwackery_paletteram_w) AM_BASE(&paletteram16)
AM_RANGE(0xc00000, 0xc00fff) AM_READWRITE(SMH_RAM, zwackery_spriteram_w) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size)