diff options
33 files changed, 654 insertions, 364 deletions
diff --git a/src/devices/cpu/tms34010/34010fld.hxx b/src/devices/cpu/tms34010/34010fld.hxx index 79c2caa5c50..5df7ebafa65 100644 --- a/src/devices/cpu/tms34010/34010fld.hxx +++ b/src/devices/cpu/tms34010/34010fld.hxx @@ -484,13 +484,7 @@ uint32_t tms340x0_device::rfield_s_07(offs_t offset) uint32_t tms340x0_device::rfield_s_08(offs_t offset) { uint32_t ret; - if (offset & 0x07) - { - RFIELDMAC(0xff,9); - } - - else - ret = TMS34010_RDMEM(offset); + RFIELDMAC_8(); return (int32_t)(int8_t)ret; } diff --git a/src/devices/cpu/tms34010/34010gfx.hxx b/src/devices/cpu/tms34010/34010gfx.hxx index 9e810704184..879c40f61df 100644 --- a/src/devices/cpu/tms34010/34010gfx.hxx +++ b/src/devices/cpu/tms34010/34010gfx.hxx @@ -205,40 +205,40 @@ int tms340x0_device::compute_pixblt_b_cycles(int left_partials, int right_partia /* Shift register handling */ -void tms340x0_device::memory_w(memory_access<32, 1, 3, ENDIANNESS_LITTLE>::specific &space, offs_t offset,uint16_t data) +void tms340x0_device::memory_w(offs_t offset, uint16_t data) { //logerror("memory_w %08x %04x\n", offset << 3, data); if((offset << 3) == 0x02005010 && data == 0x0000) { machine().debug_break(); // abort(); } - space.write_word(offset, data); + TMS34010_WRMEM_WORD(offset, data); } -uint16_t tms340x0_device::memory_r(memory_access<32, 1, 3, ENDIANNESS_LITTLE>::specific &space, offs_t offset) +uint16_t tms340x0_device::memory_r(offs_t offset) { - return space.read_word(offset); + return TMS34010_RDMEM_WORD(offset); } -void tms340x0_device::shiftreg_w(memory_access<32, 1, 3, ENDIANNESS_LITTLE>::specific &space, offs_t offset,uint16_t data) +void tms340x0_device::shiftreg_w(offs_t offset, uint16_t data) { //logerror("shiftreg_w %08x %04x\n", offset << 3, data); if (!m_from_shiftreg_cb.isnull()) - m_from_shiftreg_cb(space, offset, &m_shiftreg[0]); + m_from_shiftreg_cb(offset, &m_shiftreg[0]); else logerror("From ShiftReg function not set. PC = %08X\n", m_pc); } -uint16_t tms340x0_device::shiftreg_r(memory_access<32, 1, 3, ENDIANNESS_LITTLE>::specific &space, offs_t offset) +uint16_t tms340x0_device::shiftreg_r(offs_t offset) { if (!m_to_shiftreg_cb.isnull()) - m_to_shiftreg_cb(space, offset, &m_shiftreg[0]); + m_to_shiftreg_cb(offset, &m_shiftreg[0]); else logerror("To ShiftReg function not set. PC = %08X\n", m_pc); return m_shiftreg[0]; } -uint16_t tms340x0_device::dummy_shiftreg_r(memory_access<32, 1, 3, ENDIANNESS_LITTLE>::specific &space, offs_t offset) +uint16_t tms340x0_device::dummy_shiftreg_r(offs_t offset) { return m_shiftreg[0]; } @@ -1034,13 +1034,13 @@ void FUNCTION_NAME(tms340x0_device::pixblt)(int src_is_linear, int dst_is_linear uint32_t srcword, dstword = 0; /* fetch the initial source word */ - srcword = (this->*word_read)(m_program, srcwordaddr++ << 4); + srcword = (this->*word_read)(srcwordaddr++ << 4); readwrites++; /* fetch the initial dest word */ if (PIXEL_OP_REQUIRES_SOURCE || TRANSPARENCY || (daddr & 0x0f) != 0) { - dstword = (this->*word_read)(m_program, dstwordaddr << 4); + dstword = (this->*word_read)(dstwordaddr << 4); readwrites++; } @@ -1053,7 +1053,7 @@ void FUNCTION_NAME(tms340x0_device::pixblt)(int src_is_linear, int dst_is_linear /* fetch more words if necessary */ if (srcbit + BITS_PER_PIXEL > 16) { - srcword |= (this->*word_read)(m_program, srcwordaddr++ << 4) << 16; + srcword |= (this->*word_read)(srcwordaddr++ << 4) << 16; readwrites++; } @@ -1070,7 +1070,7 @@ void FUNCTION_NAME(tms340x0_device::pixblt)(int src_is_linear, int dst_is_linear if (PIXEL_OP_REQUIRES_SOURCE || TRANSPARENCY) if (dstbit + BITS_PER_PIXEL > 16) { - dstword |= (this->*word_read)(m_program, (dstwordaddr + 1) << 4) << 16; + dstword |= (this->*word_read)((dstwordaddr + 1) << 4) << 16; readwrites++; } @@ -1085,7 +1085,7 @@ void FUNCTION_NAME(tms340x0_device::pixblt)(int src_is_linear, int dst_is_linear dstbit += BITS_PER_PIXEL; if (dstbit > 16) { - (this->*word_write)(m_program, dstwordaddr++ << 4, dstword); + (this->*word_write)(dstwordaddr++ << 4, dstword); readwrites++; dstbit -= 16; dstword >>= 16; @@ -1098,13 +1098,13 @@ void FUNCTION_NAME(tms340x0_device::pixblt)(int src_is_linear, int dst_is_linear /* if we're right-partial, read and mask the remaining bits */ if (dstbit != 16) { - uint16_t origdst = (this->*word_read)(m_program, dstwordaddr << 4); + uint16_t origdst = (this->*word_read)(dstwordaddr << 4); uint16_t mask = 0xffff << dstbit; dstword = (dstword & ~mask) | (origdst & mask); readwrites++; } - (this->*word_write)(m_program, dstwordaddr++ << 4, dstword); + (this->*word_write)(dstwordaddr++ << 4, dstword); readwrites++; } @@ -1136,14 +1136,14 @@ void FUNCTION_NAME(tms340x0_device::pixblt)(int src_is_linear, int dst_is_linear dwordaddr = daddr >> 4; /* fetch the initial source word */ - srcword = (this->*word_read)(m_program, swordaddr++ << 4); + srcword = (this->*word_read)(swordaddr++ << 4); srcmask = PIXEL_MASK << (saddr & 15); /* handle the left partial word */ if (left_partials != 0) { /* fetch the destination word */ - dstword = (this->*word_read)(m_program, dwordaddr << 4); + dstword = (this->*word_read)(dwordaddr << 4); dstmask = PIXEL_MASK << (daddr & 15); /* loop over partials */ @@ -1152,7 +1152,7 @@ void FUNCTION_NAME(tms340x0_device::pixblt)(int src_is_linear, int dst_is_linear /* fetch another word if necessary */ if (srcmask == 0) { - srcword = (this->*word_read)(m_program, swordaddr++ << 4); + srcword = (this->*word_read)(swordaddr++ << 4); srcmask = PIXEL_MASK; } @@ -1174,7 +1174,7 @@ void FUNCTION_NAME(tms340x0_device::pixblt)(int src_is_linear, int dst_is_linear } /* write the result */ - (this->*word_write)(m_program, dwordaddr++ << 4, dstword); + (this->*word_write)(dwordaddr++ << 4, dstword); } /* loop over full words */ @@ -1182,7 +1182,7 @@ void FUNCTION_NAME(tms340x0_device::pixblt)(int src_is_linear, int dst_is_linear { /* fetch the destination word (if necessary) */ if (PIXEL_OP_REQUIRES_SOURCE || TRANSPARENCY) - dstword = (this->*word_read)(m_program, dwordaddr << 4); + dstword = (this->*word_read)(dwordaddr << 4); else dstword = 0; dstmask = PIXEL_MASK; @@ -1193,7 +1193,7 @@ void FUNCTION_NAME(tms340x0_device::pixblt)(int src_is_linear, int dst_is_linear /* fetch another word if necessary */ if (srcmask == 0) { - srcword = (this->*word_read)(m_program, swordaddr++ << 4); + srcword = (this->*word_read)(swordaddr++ << 4); srcmask = PIXEL_MASK; } @@ -1215,14 +1215,14 @@ void FUNCTION_NAME(tms340x0_device::pixblt)(int src_is_linear, int dst_is_linear } /* write the result */ - (this->*word_write)(m_program, dwordaddr++ << 4, dstword); + (this->*word_write)(dwordaddr++ << 4, dstword); } /* handle the right partial word */ if (right_partials != 0) { /* fetch the destination word */ - dstword = (this->*word_read)(m_program, dwordaddr << 4); + dstword = (this->*word_read)(dwordaddr << 4); dstmask = PIXEL_MASK; /* loop over partials */ @@ -1232,7 +1232,7 @@ void FUNCTION_NAME(tms340x0_device::pixblt)(int src_is_linear, int dst_is_linear if (srcmask == 0) { LOGGFX((" right fetch @ %08x\n", swordaddr)); - srcword = (this->*word_read)(m_program, swordaddr++ << 4); + srcword = (this->*word_read)(swordaddr++ << 4); srcmask = PIXEL_MASK; } @@ -1254,7 +1254,7 @@ void FUNCTION_NAME(tms340x0_device::pixblt)(int src_is_linear, int dst_is_linear } /* write the result */ - (this->*word_write)(m_program, dwordaddr++ << 4, dstword); + (this->*word_write)(dwordaddr++ << 4, dstword); } #endif @@ -1405,14 +1405,14 @@ if ((daddr & (BITS_PER_PIXEL - 1)) != 0) osd_printf_debug("PIXBLT_R%d with odd d dwordaddr = (daddr + 15) >> 4; /* fetch the initial source word */ - srcword = (this->*word_read)(m_program, --swordaddr << 4); + srcword = (this->*word_read)(--swordaddr << 4); srcmask = PIXEL_MASK << ((saddr - BITS_PER_PIXEL) & 15); /* handle the right partial word */ if (right_partials != 0) { /* fetch the destination word */ - dstword = (this->*word_read)(m_program, --dwordaddr << 4); + dstword = (this->*word_read)(--dwordaddr << 4); dstmask = PIXEL_MASK << ((daddr - BITS_PER_PIXEL) & 15); /* loop over partials */ @@ -1421,7 +1421,7 @@ if ((daddr & (BITS_PER_PIXEL - 1)) != 0) osd_printf_debug("PIXBLT_R%d with odd d /* fetch source pixel if necessary */ if (srcmask == 0) { - srcword = (this->*word_read)(m_program, --swordaddr << 4); + srcword = (this->*word_read)(--swordaddr << 4); srcmask = PIXEL_MASK << (16 - BITS_PER_PIXEL); } @@ -1448,7 +1448,7 @@ if ((daddr & (BITS_PER_PIXEL - 1)) != 0) osd_printf_debug("PIXBLT_R%d with odd d } /* write the result */ - (this->*word_write)(m_program, dwordaddr << 4, dstword); + (this->*word_write)(dwordaddr << 4, dstword); } /* loop over full words */ @@ -1457,7 +1457,7 @@ if ((daddr & (BITS_PER_PIXEL - 1)) != 0) osd_printf_debug("PIXBLT_R%d with odd d /* fetch the destination word (if necessary) */ dwordaddr--; if (PIXEL_OP_REQUIRES_SOURCE || TRANSPARENCY) - dstword = (this->*word_read)(m_program, dwordaddr << 4); + dstword = (this->*word_read)(dwordaddr << 4); else dstword = 0; dstmask = PIXEL_MASK << (16 - BITS_PER_PIXEL); @@ -1468,7 +1468,7 @@ if ((daddr & (BITS_PER_PIXEL - 1)) != 0) osd_printf_debug("PIXBLT_R%d with odd d /* fetch source pixel if necessary */ if (srcmask == 0) { - srcword = (this->*word_read)(m_program, --swordaddr << 4); + srcword = (this->*word_read)(--swordaddr << 4); srcmask = PIXEL_MASK << (16 - BITS_PER_PIXEL); } @@ -1495,14 +1495,14 @@ if ((daddr & (BITS_PER_PIXEL - 1)) != 0) osd_printf_debug("PIXBLT_R%d with odd d } /* write the result */ - (this->*word_write)(m_program, dwordaddr << 4, dstword); + (this->*word_write)(dwordaddr << 4, dstword); } /* handle the left partial word */ if (left_partials != 0) { /* fetch the destination word */ - dstword = (this->*word_read)(m_program, --dwordaddr << 4); + dstword = (this->*word_read)(--dwordaddr << 4); dstmask = PIXEL_MASK << (16 - BITS_PER_PIXEL); /* loop over partials */ @@ -1511,7 +1511,7 @@ if ((daddr & (BITS_PER_PIXEL - 1)) != 0) osd_printf_debug("PIXBLT_R%d with odd d /* fetch the source pixel if necessary */ if (srcmask == 0) { - srcword = (this->*word_read)(m_program, --swordaddr << 4); + srcword = (this->*word_read)(--swordaddr << 4); srcmask = PIXEL_MASK << (16 - BITS_PER_PIXEL); } @@ -1538,7 +1538,7 @@ if ((daddr & (BITS_PER_PIXEL - 1)) != 0) osd_printf_debug("PIXBLT_R%d with odd d } /* write the result */ - (this->*word_write)(m_program, dwordaddr << 4, dstword); + (this->*word_write)(dwordaddr << 4, dstword); } /* update for next row */ @@ -1663,14 +1663,14 @@ void FUNCTION_NAME(tms340x0_device::pixblt_b)(int dst_is_linear) dwordaddr = daddr >> 4; /* fetch the initial source word */ - srcword = (this->*word_read)(m_program, swordaddr++ << 4); + srcword = (this->*word_read)(swordaddr++ << 4); srcmask = 1 << (saddr & 15); /* handle the left partial word */ if (left_partials != 0) { /* fetch the destination word */ - dstword = (this->*word_read)(m_program, dwordaddr << 4); + dstword = (this->*word_read)(dwordaddr << 4); dstmask = PIXEL_MASK << (daddr & 15); /* loop over partials */ @@ -1687,7 +1687,7 @@ void FUNCTION_NAME(tms340x0_device::pixblt_b)(int dst_is_linear) srcmask <<= 1; if (srcmask == 0) { - srcword = (this->*word_read)(m_program, swordaddr++ << 4); + srcword = (this->*word_read)(swordaddr++ << 4); srcmask = 0x0001; } @@ -1696,7 +1696,7 @@ void FUNCTION_NAME(tms340x0_device::pixblt_b)(int dst_is_linear) } /* write the result */ - (this->*word_write)(m_program, dwordaddr++ << 4, dstword); + (this->*word_write)(dwordaddr++ << 4, dstword); } /* loop over full words */ @@ -1704,7 +1704,7 @@ void FUNCTION_NAME(tms340x0_device::pixblt_b)(int dst_is_linear) { /* fetch the destination word (if necessary) */ if (PIXEL_OP_REQUIRES_SOURCE || TRANSPARENCY) - dstword = (this->*word_read)(m_program, dwordaddr << 4); + dstword = (this->*word_read)(dwordaddr << 4); else dstword = 0; dstmask = PIXEL_MASK; @@ -1723,7 +1723,7 @@ void FUNCTION_NAME(tms340x0_device::pixblt_b)(int dst_is_linear) srcmask <<= 1; if (srcmask == 0) { - srcword = (this->*word_read)(m_program, swordaddr++ << 4); + srcword = (this->*word_read)(swordaddr++ << 4); srcmask = 0x0001; } @@ -1732,14 +1732,14 @@ void FUNCTION_NAME(tms340x0_device::pixblt_b)(int dst_is_linear) } /* write the result */ - (this->*word_write)(m_program, dwordaddr++ << 4, dstword); + (this->*word_write)(dwordaddr++ << 4, dstword); } /* handle the right partial word */ if (right_partials != 0) { /* fetch the destination word */ - dstword = (this->*word_read)(m_program, dwordaddr << 4); + dstword = (this->*word_read)(dwordaddr << 4); dstmask = PIXEL_MASK; /* loop over partials */ @@ -1756,7 +1756,7 @@ void FUNCTION_NAME(tms340x0_device::pixblt_b)(int dst_is_linear) srcmask <<= 1; if (srcmask == 0) { - srcword = (this->*word_read)(m_program, swordaddr++ << 4); + srcword = (this->*word_read)(swordaddr++ << 4); srcmask = 0x0001; } @@ -1765,7 +1765,7 @@ void FUNCTION_NAME(tms340x0_device::pixblt_b)(int dst_is_linear) } /* write the result */ - (this->*word_write)(m_program, dwordaddr++ << 4, dstword); + (this->*word_write)(dwordaddr++ << 4, dstword); } /* update for next row */ @@ -1879,7 +1879,7 @@ void FUNCTION_NAME(tms340x0_device::fill)(int dst_is_linear) if (left_partials != 0) { /* fetch the destination word */ - dstword = (this->*word_read)(m_program, dwordaddr << 4); + dstword = (this->*word_read)(dwordaddr << 4); dstmask = PIXEL_MASK << (daddr & 15); /* loop over partials */ @@ -1896,7 +1896,7 @@ void FUNCTION_NAME(tms340x0_device::fill)(int dst_is_linear) } /* write the result */ - (this->*word_write)(m_program, dwordaddr++ << 4, dstword); + (this->*word_write)(dwordaddr++ << 4, dstword); } /* loop over full words */ @@ -1904,7 +1904,7 @@ void FUNCTION_NAME(tms340x0_device::fill)(int dst_is_linear) { /* fetch the destination word (if necessary) */ if (PIXEL_OP_REQUIRES_SOURCE || TRANSPARENCY) - dstword = (this->*word_read)(m_program, dwordaddr << 4); + dstword = (this->*word_read)(dwordaddr << 4); else dstword = 0; dstmask = PIXEL_MASK; @@ -1923,14 +1923,14 @@ void FUNCTION_NAME(tms340x0_device::fill)(int dst_is_linear) } /* write the result */ - (this->*word_write)(m_program, dwordaddr++ << 4, dstword); + (this->*word_write)(dwordaddr++ << 4, dstword); } /* handle the right partial word */ if (right_partials != 0) { /* fetch the destination word */ - dstword = (this->*word_read)(m_program, dwordaddr << 4); + dstword = (this->*word_read)(dwordaddr << 4); dstmask = PIXEL_MASK; /* loop over partials */ @@ -1947,7 +1947,7 @@ void FUNCTION_NAME(tms340x0_device::fill)(int dst_is_linear) } /* write the result */ - (this->*word_write)(m_program, dwordaddr++ << 4, dstword); + (this->*word_write)(dwordaddr++ << 4, dstword); } /* update for next row */ diff --git a/src/devices/cpu/tms34010/34010ops.h b/src/devices/cpu/tms34010/34010ops.h index ae4aa8f6e06..de90b202be3 100644 --- a/src/devices/cpu/tms34010/34010ops.h +++ b/src/devices/cpu/tms34010/34010ops.h @@ -21,24 +21,6 @@ MEMORY I/O MACROS ***************************************************************************/ -#define TMS34010_RDMEM(A) ((unsigned)m_program.read_byte (A)) -#define TMS34010_RDMEM_WORD(A) ((unsigned)m_program.read_word (A)) -inline uint32_t tms340x0_device::TMS34010_RDMEM_DWORD(offs_t A) -{ - uint32_t result = m_program.read_word(A); - return result | (m_program.read_word(A+16)<<16); -} - -#define TMS34010_WRMEM(A,V) (m_program.write_byte(A,V)) -#define TMS34010_WRMEM_WORD(A,V) (m_program.write_word(A,V)) -inline void tms340x0_device::TMS34010_WRMEM_DWORD(offs_t A, uint32_t V) -{ - m_program.write_word(A,V); - m_program.write_word(A+16,V>>16); -} - - - /* IO registers accessor */ #define IOREG(reg) (m_IOregs[reg]) #define SMART_IOREG(reg) (m_IOregs[m_is_34020 ? (int)REG020_##reg : (int)REG_##reg]) @@ -86,20 +68,16 @@ inline void tms340x0_device::TMS34010_WRMEM_DWORD(offs_t A, uint32_t V) } #define WFIELDMAC_8() \ - if (offset & 0x07) \ + if (true) \ { \ WFIELDMAC(0xff,9); \ - } \ - else \ - TMS34010_WRMEM(offset, data); + } #define RFIELDMAC_8() \ - if (offset & 0x07) \ + if (true) \ { \ RFIELDMAC(0xff,9); \ - } \ - else \ - ret = TMS34010_RDMEM(offset); + } #define WFIELDMAC_32() \ if (offset & 0x0f) \ diff --git a/src/devices/cpu/tms34010/34010ops.hxx b/src/devices/cpu/tms34010/34010ops.hxx index 96c6f3e17f4..1c71439107e 100644 --- a/src/devices/cpu/tms34010/34010ops.hxx +++ b/src/devices/cpu/tms34010/34010ops.hxx @@ -80,13 +80,13 @@ void tms340x0_device::unimpl(uint16_t op) { /* kludge for Super High Impact -- this doesn't seem to cause */ /* an illegal opcode exception */ - if (m_cache.read_word(m_pc - 0x10) == 0x0007) + if (space(AS_PROGRAM).read_word(m_pc - 0x10) == 0x0007) return; /* 9 Ball Shootout calls to FFDF7468, expecting it */ /* to execute the next instruction from FFDF7470 */ /* but the instruction at FFDF7460 is an 0x0001 */ - if (m_cache.read_word(m_pc - 0x10) == 0x0001) + if (space(AS_PROGRAM).read_word(m_pc - 0x10) == 0x0001) return; PUSH(m_pc); @@ -96,7 +96,7 @@ void tms340x0_device::unimpl(uint16_t op) COUNT_UNKNOWN_CYCLES(16); /* extra check to prevent bad things */ - if (m_pc == 0 || s_opcode_table[m_cache.read_word(m_pc) >> 4] == &tms34010_device::unimpl) + if (m_pc == 0 || s_opcode_table[space(AS_PROGRAM).read_word(m_pc) >> 4] == &tms34010_device::unimpl) { set_input_line(INPUT_LINE_HALT, ASSERT_LINE); machine().debug_break(); diff --git a/src/devices/cpu/tms34010/tms34010.cpp b/src/devices/cpu/tms34010/tms34010.cpp index cda86ced222..d5fd882a484 100644 --- a/src/devices/cpu/tms34010/tms34010.cpp +++ b/src/devices/cpu/tms34010/tms34010.cpp @@ -59,10 +59,10 @@ DEFINE_DEVICE_TYPE(TMS34020, tms34020_device, "tms34020", "Texas Instruments TMS GLOBAL VARIABLES ***************************************************************************/ -tms340x0_device::tms340x0_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor internal_regs_map) +tms340x0_device::tms340x0_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor internal_regs_map, bool is_34020) : cpu_device(mconfig, type, tag, owner, clock) , device_video_interface(mconfig, *this) - , m_program_config("program", ENDIANNESS_LITTLE, 16, 32, 3, internal_regs_map) + , m_program_config("program", ENDIANNESS_LITTLE, is_34020 ? 32 : 16, 32, 3, internal_regs_map) , m_pc(0) , m_ppc(0) , m_st(0) @@ -76,7 +76,7 @@ tms340x0_device::tms340x0_device(const machine_config &mconfig, device_type type , m_convmp(0) , m_gfxcycles(0) , m_pixelshift(0) - , m_is_34020(0) + , m_is_34020(is_34020) , m_reset_deferred(false) , m_halt_on_reset(false) , m_hblank_stable(0) @@ -97,16 +97,14 @@ tms340x0_device::tms340x0_device(const machine_config &mconfig, device_type type tms34010_device::tms34010_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : tms340x0_device(mconfig, TMS34010, tag, owner, clock, address_map_constructor(FUNC(tms34010_device::internal_regs_map), this)) + : tms340x0_device(mconfig, TMS34010, tag, owner, clock, address_map_constructor(FUNC(tms34010_device::internal_regs_map), this), false) { - m_is_34020 = 0; } tms34020_device::tms34020_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : tms340x0_device(mconfig, TMS34020, tag, owner, clock, address_map_constructor(FUNC(tms34020_device::internal_regs_map), this)) + : tms340x0_device(mconfig, TMS34020, tag, owner, clock, address_map_constructor(FUNC(tms34020_device::internal_regs_map), this), true) { - m_is_34020 = 1; } device_memory_interface::space_config_vector tms340x0_device::memory_space_config() const @@ -230,38 +228,121 @@ inline void tms340x0_device::RESET_ST() } /* shortcuts for reading opcodes */ -inline uint32_t tms340x0_device::ROPCODE() +uint32_t tms34010_device::ROPCODE() { uint32_t pc = m_pc; m_pc += 2 << 3; return m_cache.read_word(pc); } -inline int16_t tms340x0_device::PARAM_WORD() +uint32_t tms34020_device::ROPCODE() { uint32_t pc = m_pc; m_pc += 2 << 3; return m_cache.read_word(pc); } -inline int32_t tms340x0_device::PARAM_LONG() +int16_t tms34010_device::PARAM_WORD() +{ + uint32_t pc = m_pc; + m_pc += 2 << 3; + return m_cache.read_word(pc); +} + +int16_t tms34020_device::PARAM_WORD() +{ + uint32_t pc = m_pc; + m_pc += 2 << 3; + return m_cache.read_word(pc); +} + +int32_t tms34010_device::PARAM_LONG() { uint32_t pc = m_pc; m_pc += 4 << 3; return (uint16_t)m_cache.read_word(pc) | (m_cache.read_word(pc + 16) << 16); } -inline int16_t tms340x0_device::PARAM_WORD_NO_INC() +int32_t tms34020_device::PARAM_LONG() +{ + uint32_t pc = m_pc; + m_pc += 4 << 3; + return m_cache.read_dword_unaligned(pc); +} + +int16_t tms34010_device::PARAM_WORD_NO_INC() { return m_cache.read_word(m_pc); } -inline int32_t tms340x0_device::PARAM_LONG_NO_INC() +int16_t tms34020_device::PARAM_WORD_NO_INC() +{ + return m_cache.read_word(m_pc); +} + +int32_t tms34010_device::PARAM_LONG_NO_INC() { uint32_t pc = m_pc; return (uint16_t)m_cache.read_word(pc) | (m_cache.read_word(pc + 16) << 16); } +int32_t tms34020_device::PARAM_LONG_NO_INC() +{ + return m_cache.read_dword_unaligned(m_pc); +} + +uint32_t tms34010_device::TMS34010_RDMEM_WORD(offs_t A) +{ + return m_program.read_word(A); +} + +uint32_t tms34020_device::TMS34010_RDMEM_WORD(offs_t A) +{ + return m_program.read_word(A); +} + +uint32_t tms34010_device::TMS34010_RDMEM_DWORD(offs_t A) +{ + uint32_t result = m_program.read_word(A); + return result | (m_program.read_word(A+16)<<16); +} + +uint32_t tms34020_device::TMS34010_RDMEM_DWORD(offs_t A) +{ + return m_program.read_dword_unaligned(A); +} + +void tms34010_device::TMS34010_WRMEM_WORD(offs_t A, uint32_t V) +{ + m_program.write_word(A,V); +} + +void tms34020_device::TMS34010_WRMEM_WORD(offs_t A, uint32_t V) +{ + if (BIT(A, 4)) + m_program.write_dword(A-16,(V<<16)|(V>>16),0xffff0000); + else + m_program.write_dword(A,V,0x0000ffff); +} + +void tms34010_device::TMS34010_WRMEM_DWORD(offs_t A, uint32_t V) +{ + m_program.write_word(A,V); + m_program.write_word(A+16,V>>16); +} + +void tms34020_device::TMS34010_WRMEM_DWORD(offs_t A, uint32_t V) +{ + if (BIT(A, 4)) + { + m_program.write_dword(A-16,(V<<16)|(V>>16),0xffff0000); + m_program.write_dword(A+16,(V<<16)|(V>>16),0x0000ffff); + } + else + m_program.write_dword(A,V); +} + + /* read memory byte */ inline uint32_t tms340x0_device::RBYTE(offs_t offset) { @@ -331,7 +412,7 @@ uint32_t tms340x0_device::read_pixel_32(offs_t offset) uint32_t tms340x0_device::read_pixel_shiftreg(offs_t offset) { if (!m_to_shiftreg_cb.isnull()) - m_to_shiftreg_cb(m_program, offset, &m_shiftreg[0]); + m_to_shiftreg_cb(offset, &m_shiftreg[0]); else fatalerror("To ShiftReg function not set. PC = %08X\n", m_pc); return m_shiftreg[0]; @@ -473,7 +554,7 @@ void tms340x0_device::write_pixel_r_t_32(offs_t offset, uint32_t data) void tms340x0_device::write_pixel_shiftreg(offs_t offset, uint32_t data) { if (!m_from_shiftreg_cb.isnull()) - m_from_shiftreg_cb(m_program, offset, &m_shiftreg[0]); + m_from_shiftreg_cb(offset, &m_shiftreg[0]); else fatalerror("From ShiftReg function not set. PC = %08X\n", m_pc); } @@ -640,9 +721,6 @@ void tms340x0_device::device_start() m_external_host_access = false; - space(AS_PROGRAM).cache(m_cache); - space(AS_PROGRAM).specific(m_program); - /* set up the state table */ { state_add(TMS34010_PC, "PC", m_pc); @@ -682,6 +760,22 @@ void tms340x0_device::device_start() set_icountptr(m_icount); } +void tms34010_device::device_start() +{ + tms340x0_device::device_start(); + + space(AS_PROGRAM).cache(m_cache); + space(AS_PROGRAM).specific(m_program); +} + +void tms34020_device::device_start() +{ + tms340x0_device::device_start(); + + space(AS_PROGRAM).cache(m_cache); + space(AS_PROGRAM).specific(m_program); +} + void tms340x0_device::device_reset() { m_ppc = 0; diff --git a/src/devices/cpu/tms34010/tms34010.h b/src/devices/cpu/tms34010/tms34010.h index 961036b3439..c3d639e3506 100644 --- a/src/devices/cpu/tms34010/tms34010.h +++ b/src/devices/cpu/tms34010/tms34010.h @@ -105,8 +105,8 @@ enum #define TMS340X0_SCANLINE_IND16_CB_MEMBER(_name) void _name(screen_device &screen, bitmap_ind16 &bitmap, int scanline, const tms340x0_device::display_params *params) #define TMS340X0_SCANLINE_RGB32_CB_MEMBER(_name) void _name(screen_device &screen, bitmap_rgb32 &bitmap, int scanline, const tms340x0_device::display_params *params) -#define TMS340X0_TO_SHIFTREG_CB_MEMBER(_name) void _name(memory_access<32, 1, 3, ENDIANNESS_LITTLE>::specific &space, offs_t address, uint16_t *shiftreg) -#define TMS340X0_FROM_SHIFTREG_CB_MEMBER(_name) void _name(memory_access<32, 1, 3, ENDIANNESS_LITTLE>::specific &space, offs_t address, uint16_t *shiftreg) +#define TMS340X0_TO_SHIFTREG_CB_MEMBER(_name) void _name(offs_t address, uint16_t *shiftreg) +#define TMS340X0_FROM_SHIFTREG_CB_MEMBER(_name) void _name(offs_t address, uint16_t *shiftreg) class tms340x0_device : public cpu_device, @@ -126,8 +126,8 @@ public: typedef device_delegate<void (screen_device &screen, bitmap_ind16 &bitmap, int scanline, const display_params *params)> scanline_ind16_cb_delegate; typedef device_delegate<void (screen_device &screen, bitmap_rgb32 &bitmap, int scanline, const display_params *params)> scanline_rgb32_cb_delegate; - typedef device_delegate<void (memory_access<32, 1, 3, ENDIANNESS_LITTLE>::specific &space, offs_t address, uint16_t *shiftreg)> shiftreg_in_cb_delegate; - typedef device_delegate<void (memory_access<32, 1, 3, ENDIANNESS_LITTLE>::specific &space, offs_t address, uint16_t *shiftreg)> shiftreg_out_cb_delegate; + typedef device_delegate<void (offs_t address, uint16_t *shiftreg)> shiftreg_in_cb_delegate; + typedef device_delegate<void (offs_t address, uint16_t *shiftreg)> shiftreg_out_cb_delegate; void set_halt_on_reset(bool halt_on_reset) { m_halt_on_reset = halt_on_reset; } void set_pixel_clock(uint32_t pixclock) { m_pixclock = pixclock; } @@ -252,7 +252,7 @@ protected: }; // construction/destruction - tms340x0_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor internal_regs_map = address_map_constructor()); + tms340x0_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor internal_regs_map, bool is_34020); // device-level overrides virtual void device_start() override; @@ -281,8 +281,8 @@ protected: typedef uint32_t (tms340x0_device::*pixel_op_func)(uint32_t, uint32_t, uint32_t); typedef void (tms340x0_device::*pixblt_op_func)(int, int); typedef void (tms340x0_device::*pixblt_b_op_func)(int); - typedef void (tms340x0_device::*word_write_func)(memory_access<32, 1, 3, ENDIANNESS_LITTLE>::specific &space, offs_t offset,uint16_t data); - typedef uint16_t (tms340x0_device::*word_read_func)(memory_access<32, 1, 3, ENDIANNESS_LITTLE>::specific &space, offs_t offset); + typedef void (tms340x0_device::*word_write_func)(offs_t offset, uint16_t data); + typedef uint16_t (tms340x0_device::*word_read_func)(offs_t offset); static const wfield_func s_wfield_functions[32]; static const rfield_func s_rfield_functions[64]; @@ -312,14 +312,13 @@ protected: uint32_t m_convmp; int32_t m_gfxcycles; uint8_t m_pixelshift; - uint8_t m_is_34020; + const bool m_is_34020; bool m_reset_deferred; bool m_halt_on_reset; /* /HCS pin, which determines HALT state after reset */ uint8_t m_hblank_stable; uint8_t m_external_host_access; uint8_t m_executing; - memory_access<32, 1, 3, ENDIANNESS_LITTLE>::cache m_cache; - memory_access<32, 1, 3, ENDIANNESS_LITTLE>::specific m_program; + uint32_t m_pixclock; /* the pixel clock (0 means don't adjust screen size) */ int m_pixperclock; /* pixels per clock */ emu_timer *m_scantimer; @@ -354,15 +353,18 @@ protected: uint16_t m_IOregs[64]; uint16_t m_shiftreg[(8 * 512 * sizeof(uint16_t))/2]; - uint32_t TMS34010_RDMEM_DWORD(offs_t A); - void TMS34010_WRMEM_DWORD(offs_t A, uint32_t V); + + virtual uint32_t TMS34010_RDMEM_WORD(offs_t A) = 0; + virtual uint32_t TMS34010_RDMEM_DWORD(offs_t A) = 0; + virtual void TMS34010_WRMEM_WORD(offs_t A, uint32_t V) = 0; + virtual void TMS34010_WRMEM_DWORD(offs_t A, uint32_t V) = 0; void SET_ST(uint32_t st); void RESET_ST(); - uint32_t ROPCODE(); - int16_t PARAM_WORD(); - int32_t PARAM_LONG(); - int16_t PARAM_WORD_NO_INC(); - int32_t PARAM_LONG_NO_INC(); + virtual uint32_t ROPCODE() = 0; + virtual int16_t PARAM_WORD() = 0; + virtual int32_t PARAM_LONG() = 0; + virtual int16_t PARAM_WORD_NO_INC() = 0; + virtual int32_t PARAM_LONG_NO_INC() = 0; uint32_t RBYTE(offs_t offset); void WBYTE(offs_t offset, uint32_t data); uint32_t RLONG(offs_t offset); @@ -892,11 +894,11 @@ protected: int compute_fill_cycles(int left_partials, int right_partials, int full_words, int op_timing); int compute_pixblt_cycles(int left_partials, int right_partials, int full_words, int op_timing); int compute_pixblt_b_cycles(int left_partials, int right_partials, int full_words, int rows, int op_timing, int bpp); - void memory_w(memory_access<32, 1, 3, ENDIANNESS_LITTLE>::specific &space, offs_t offset,uint16_t data); - uint16_t memory_r(memory_access<32, 1, 3, ENDIANNESS_LITTLE>::specific &space, offs_t offset); - void shiftreg_w(memory_access<32, 1, 3, ENDIANNESS_LITTLE>::specific &space, offs_t offset, uint16_t data); - uint16_t shiftreg_r(memory_access<32, 1, 3, ENDIANNESS_LITTLE>::specific &space, offs_t offset); - uint16_t dummy_shiftreg_r(memory_access<32, 1, 3, ENDIANNESS_LITTLE>::specific &space, offs_t offset); + void memory_w(offs_t offset, uint16_t data); + uint16_t memory_r(offs_t offset); + void shiftreg_w(offs_t offset, uint16_t data); + uint16_t shiftreg_r(offs_t offset); + uint16_t dummy_shiftreg_r(offs_t offset); uint32_t pixel_op00(uint32_t dstpix, uint32_t mask, uint32_t srcpix); uint32_t pixel_op01(uint32_t dstpix, uint32_t mask, uint32_t srcpix); uint32_t pixel_op02(uint32_t dstpix, uint32_t mask, uint32_t srcpix); @@ -1016,10 +1018,27 @@ public: virtual u16 io_register_r(offs_t offset) override; protected: + // device-level overrides + virtual void device_start() override; + virtual uint64_t execute_clocks_to_cycles(uint64_t clocks) const noexcept override { return (clocks + 8 - 1) / 8; } virtual uint64_t execute_cycles_to_clocks(uint64_t cycles) const noexcept override { return (cycles * 8); } virtual std::unique_ptr<util::disasm_interface> create_disassembler() override; void internal_regs_map(address_map &map); + + virtual uint32_t ROPCODE() override; + virtual int16_t PARAM_WORD() override; + virtual int32_t PARAM_LONG() override; + virtual int16_t PARAM_WORD_NO_INC() override; + virtual int32_t PARAM_LONG_NO_INC() override; + virtual uint32_t TMS34010_RDMEM_WORD(offs_t A) override; + virtual uint32_t TMS34010_RDMEM_DWORD(offs_t A) override; + virtual void TMS34010_WRMEM_WORD(offs_t A, uint32_t V) override; + virtual void TMS34010_WRMEM_DWORD(offs_t A, uint32_t V) override; + +private: + memory_access<32, 1, 3, ENDIANNESS_LITTLE>::cache m_cache; + memory_access<32, 1, 3, ENDIANNESS_LITTLE>::specific m_program; }; DECLARE_DEVICE_TYPE(TMS34010, tms34010_device) @@ -1034,10 +1053,27 @@ public: virtual u16 io_register_r(offs_t offset) override; protected: + // device-level overrides + virtual void device_start() override; + virtual uint64_t execute_clocks_to_cycles(uint64_t clocks) const noexcept override { return (clocks + 4 - 1) / 4; } virtual uint64_t execute_cycles_to_clocks(uint64_t cycles) const noexcept override { return (cycles * 4); } virtual std::unique_ptr<util::disasm_interface> create_disassembler() override; void internal_regs_map(address_map &map); + + virtual uint32_t ROPCODE() override; + virtual int16_t PARAM_WORD() override; + virtual int32_t PARAM_LONG() override; + virtual int16_t PARAM_WORD_NO_INC() override; + virtual int32_t PARAM_LONG_NO_INC() override; + virtual uint32_t TMS34010_RDMEM_WORD(offs_t A) override; + virtual uint32_t TMS34010_RDMEM_DWORD(offs_t A) override; + virtual void TMS34010_WRMEM_WORD(offs_t A, uint32_t V) override; + virtual void TMS34010_WRMEM_DWORD(offs_t A, uint32_t V) override; + +private: + memory_access<32, 2, 3, ENDIANNESS_LITTLE>::cache m_cache; + memory_access<32, 2, 3, ENDIANNESS_LITTLE>::specific m_program; }; DECLARE_DEVICE_TYPE(TMS34020, tms34020_device) diff --git a/src/emu/emumem.cpp b/src/emu/emumem.cpp index 27ab2e1c6e5..a245c39fd3f 100644 --- a/src/emu/emumem.cpp +++ b/src/emu/emumem.cpp @@ -940,6 +940,11 @@ void memory_manager::allocate(device_memory_interface &memory) case 0x0000|0x100|16|(4-1): memory.allocate<address_space_specific<1, 1, -1, ENDIANNESS_LITTLE>>(*this, spacenum); break; case 0x1000|0x100|16|(4-1): memory.allocate<address_space_specific<1, 1, -1, ENDIANNESS_BIG >>(*this, spacenum); break; + case 0x0000|0x000|32|(4+3): memory.allocate<address_space_specific<0, 2, 3, ENDIANNESS_LITTLE>>(*this, spacenum); break; + case 0x1000|0x000|32|(4+3): memory.allocate<address_space_specific<0, 2, 3, ENDIANNESS_BIG >>(*this, spacenum); break; + case 0x0000|0x100|32|(4+3): memory.allocate<address_space_specific<1, 2, 3, ENDIANNESS_LITTLE>>(*this, spacenum); break; + case 0x1000|0x100|32|(4+3): memory.allocate<address_space_specific<1, 2, 3, ENDIANNESS_BIG >>(*this, spacenum); break; + case 0x0000|0x000|32|(4-0): memory.allocate<address_space_specific<0, 2, 0, ENDIANNESS_LITTLE>>(*this, spacenum); break; case 0x1000|0x000|32|(4-0): memory.allocate<address_space_specific<0, 2, 0, ENDIANNESS_BIG >>(*this, spacenum); break; case 0x0000|0x100|32|(4-0): memory.allocate<address_space_specific<1, 2, 0, ENDIANNESS_LITTLE>>(*this, spacenum); break; diff --git a/src/emu/emumem_hedp.cpp b/src/emu/emumem_hedp.cpp index 9a71f98184b..13938e07413 100644 --- a/src/emu/emumem_hedp.cpp +++ b/src/emu/emumem_hedp.cpp @@ -180,6 +180,8 @@ template class handler_entry_read_delegate<1, 0, ENDIANNESS_LITTLE, read16_dele template class handler_entry_read_delegate<1, 0, ENDIANNESS_BIG, read16_delegate>; template class handler_entry_read_delegate<1, -1, ENDIANNESS_LITTLE, read16_delegate>; template class handler_entry_read_delegate<1, -1, ENDIANNESS_BIG, read16_delegate>; +template class handler_entry_read_delegate<2, 3, ENDIANNESS_LITTLE, read32_delegate>; +template class handler_entry_read_delegate<2, 3, ENDIANNESS_BIG, read32_delegate>; template class handler_entry_read_delegate<2, 0, ENDIANNESS_LITTLE, read32_delegate>; template class handler_entry_read_delegate<2, 0, ENDIANNESS_BIG, read32_delegate>; template class handler_entry_read_delegate<2, -1, ENDIANNESS_LITTLE, read32_delegate>; @@ -205,6 +207,8 @@ template class handler_entry_read_delegate<1, 0, ENDIANNESS_LITTLE, read16m_del template class handler_entry_read_delegate<1, 0, ENDIANNESS_BIG, read16m_delegate>; template class handler_entry_read_delegate<1, -1, ENDIANNESS_LITTLE, read16m_delegate>; template class handler_entry_read_delegate<1, -1, ENDIANNESS_BIG, read16m_delegate>; +template class handler_entry_read_delegate<2, 3, ENDIANNESS_LITTLE, read32m_delegate>; +template class handler_entry_read_delegate<2, 3, ENDIANNESS_BIG, read32m_delegate>; template class handler_entry_read_delegate<2, 0, ENDIANNESS_LITTLE, read32m_delegate>; template class handler_entry_read_delegate<2, 0, ENDIANNESS_BIG, read32m_delegate>; template class handler_entry_read_delegate<2, -1, ENDIANNESS_LITTLE, read32m_delegate>; @@ -230,6 +234,8 @@ template class handler_entry_read_delegate<1, 0, ENDIANNESS_LITTLE, read16s_del template class handler_entry_read_delegate<1, 0, ENDIANNESS_BIG, read16s_delegate>; template class handler_entry_read_delegate<1, -1, ENDIANNESS_LITTLE, read16s_delegate>; template class handler_entry_read_delegate<1, -1, ENDIANNESS_BIG, read16s_delegate>; +template class handler_entry_read_delegate<2, 3, ENDIANNESS_LITTLE, read32s_delegate>; +template class handler_entry_read_delegate<2, 3, ENDIANNESS_BIG, read32s_delegate>; template class handler_entry_read_delegate<2, 0, ENDIANNESS_LITTLE, read32s_delegate>; template class handler_entry_read_delegate<2, 0, ENDIANNESS_BIG, read32s_delegate>; template class handler_entry_read_delegate<2, -1, ENDIANNESS_LITTLE, read32s_delegate>; @@ -255,6 +261,8 @@ template class handler_entry_read_delegate<1, 0, ENDIANNESS_LITTLE, read16sm_de template class handler_entry_read_delegate<1, 0, ENDIANNESS_BIG, read16sm_delegate>; template class handler_entry_read_delegate<1, -1, ENDIANNESS_LITTLE, read16sm_delegate>; template class handler_entry_read_delegate<1, -1, ENDIANNESS_BIG, read16sm_delegate>; +template class handler_entry_read_delegate<2, 3, ENDIANNESS_LITTLE, read32sm_delegate>; +template class handler_entry_read_delegate<2, 3, ENDIANNESS_BIG, read32sm_delegate>; template class handler_entry_read_delegate<2, 0, ENDIANNESS_LITTLE, read32sm_delegate>; template class handler_entry_read_delegate<2, 0, ENDIANNESS_BIG, read32sm_delegate>; template class handler_entry_read_delegate<2, -1, ENDIANNESS_LITTLE, read32sm_delegate>; @@ -280,6 +288,8 @@ template class handler_entry_read_delegate<1, 0, ENDIANNESS_LITTLE, read16mo_de template class handler_entry_read_delegate<1, 0, ENDIANNESS_BIG, read16mo_delegate>; template class handler_entry_read_delegate<1, -1, ENDIANNESS_LITTLE, read16mo_delegate>; template class handler_entry_read_delegate<1, -1, ENDIANNESS_BIG, read16mo_delegate>; +template class handler_entry_read_delegate<2, 3, ENDIANNESS_LITTLE, read32mo_delegate>; +template class handler_entry_read_delegate<2, 3, ENDIANNESS_BIG, read32mo_delegate>; template class handler_entry_read_delegate<2, 0, ENDIANNESS_LITTLE, read32mo_delegate>; template class handler_entry_read_delegate<2, 0, ENDIANNESS_BIG, read32mo_delegate>; template class handler_entry_read_delegate<2, -1, ENDIANNESS_LITTLE, read32mo_delegate>; @@ -305,6 +315,8 @@ template class handler_entry_read_delegate<1, 0, ENDIANNESS_LITTLE, read16smo_d template class handler_entry_read_delegate<1, 0, ENDIANNESS_BIG, read16smo_delegate>; template class handler_entry_read_delegate<1, -1, ENDIANNESS_LITTLE, read16smo_delegate>; template class handler_entry_read_delegate<1, -1, ENDIANNESS_BIG, read16smo_delegate>; +template class handler_entry_read_delegate<2, 3, ENDIANNESS_LITTLE, read32smo_delegate>; +template class handler_entry_read_delegate<2, 3, ENDIANNESS_BIG, read32smo_delegate>; template class handler_entry_read_delegate<2, 0, ENDIANNESS_LITTLE, read32smo_delegate>; template class handler_entry_read_delegate<2, 0, ENDIANNESS_BIG, read32smo_delegate>; template class handler_entry_read_delegate<2, -1, ENDIANNESS_LITTLE, read32smo_delegate>; @@ -330,6 +342,8 @@ template class handler_entry_write_delegate<1, 0, ENDIANNESS_LITTLE, write16_de template class handler_entry_write_delegate<1, 0, ENDIANNESS_BIG, write16_delegate>; template class handler_entry_write_delegate<1, -1, ENDIANNESS_LITTLE, write16_delegate>; template class handler_entry_write_delegate<1, -1, ENDIANNESS_BIG, write16_delegate>; +template class handler_entry_write_delegate<2, 3, ENDIANNESS_LITTLE, write32_delegate>; +template class handler_entry_write_delegate<2, 3, ENDIANNESS_BIG, write32_delegate>; template class handler_entry_write_delegate<2, 0, ENDIANNESS_LITTLE, write32_delegate>; template class handler_entry_write_delegate<2, 0, ENDIANNESS_BIG, write32_delegate>; template class handler_entry_write_delegate<2, -1, ENDIANNESS_LITTLE, write32_delegate>; @@ -355,6 +369,8 @@ template class handler_entry_write_delegate<1, 0, ENDIANNESS_LITTLE, write16m_d template class handler_entry_write_delegate<1, 0, ENDIANNESS_BIG, write16m_delegate>; template class handler_entry_write_delegate<1, -1, ENDIANNESS_LITTLE, write16m_delegate>; template class handler_entry_write_delegate<1, -1, ENDIANNESS_BIG, write16m_delegate>; +template class handler_entry_write_delegate<2, 3, ENDIANNESS_LITTLE, write32m_delegate>; +template class handler_entry_write_delegate<2, 3, ENDIANNESS_BIG, write32m_delegate>; template class handler_entry_write_delegate<2, 0, ENDIANNESS_LITTLE, write32m_delegate>; template class handler_entry_write_delegate<2, 0, ENDIANNESS_BIG, write32m_delegate>; template class handler_entry_write_delegate<2, -1, ENDIANNESS_LITTLE, write32m_delegate>; @@ -380,6 +396,8 @@ template class handler_entry_write_delegate<1, 0, ENDIANNESS_LITTLE, write16s_d template class handler_entry_write_delegate<1, 0, ENDIANNESS_BIG, write16s_delegate>; template class handler_entry_write_delegate<1, -1, ENDIANNESS_LITTLE, write16s_delegate>; template class handler_entry_write_delegate<1, -1, ENDIANNESS_BIG, write16s_delegate>; +template class handler_entry_write_delegate<2, 3, ENDIANNESS_LITTLE, write32s_delegate>; +template class handler_entry_write_delegate<2, 3, ENDIANNESS_BIG, write32s_delegate>; template class handler_entry_write_delegate<2, 0, ENDIANNESS_LITTLE, write32s_delegate>; template class handler_entry_write_delegate<2, 0, ENDIANNESS_BIG, write32s_delegate>; template class handler_entry_write_delegate<2, -1, ENDIANNESS_LITTLE, write32s_delegate>; @@ -405,6 +423,8 @@ template class handler_entry_write_delegate<1, 0, ENDIANNESS_LITTLE, write16sm_ template class handler_entry_write_delegate<1, 0, ENDIANNESS_BIG, write16sm_delegate>; template class handler_entry_write_delegate<1, -1, ENDIANNESS_LITTLE, write16sm_delegate>; template class handler_entry_write_delegate<1, -1, ENDIANNESS_BIG, write16sm_delegate>; +template class handler_entry_write_delegate<2, 3, ENDIANNESS_LITTLE, write32sm_delegate>; +template class handler_entry_write_delegate<2, 3, ENDIANNESS_BIG, write32sm_delegate>; template class handler_entry_write_delegate<2, 0, ENDIANNESS_LITTLE, write32sm_delegate>; template class handler_entry_write_delegate<2, 0, ENDIANNESS_BIG, write32sm_delegate>; template class handler_entry_write_delegate<2, -1, ENDIANNESS_LITTLE, write32sm_delegate>; @@ -430,6 +450,8 @@ template class handler_entry_write_delegate<1, 0, ENDIANNESS_LITTLE, write16mo_ template class handler_entry_write_delegate<1, 0, ENDIANNESS_BIG, write16mo_delegate>; template class handler_entry_write_delegate<1, -1, ENDIANNESS_LITTLE, write16mo_delegate>; template class handler_entry_write_delegate<1, -1, ENDIANNESS_BIG, write16mo_delegate>; +template class handler_entry_write_delegate<2, 3, ENDIANNESS_LITTLE, write32mo_delegate>; +template class handler_entry_write_delegate<2, 3, ENDIANNESS_BIG, write32mo_delegate>; template class handler_entry_write_delegate<2, 0, ENDIANNESS_LITTLE, write32mo_delegate>; template class handler_entry_write_delegate<2, 0, ENDIANNESS_BIG, write32mo_delegate>; template class handler_entry_write_delegate<2, -1, ENDIANNESS_LITTLE, write32mo_delegate>; @@ -455,6 +477,8 @@ template class handler_entry_write_delegate<1, 0, ENDIANNESS_LITTLE, write16smo template class handler_entry_write_delegate<1, 0, ENDIANNESS_BIG, write16smo_delegate>; template class handler_entry_write_delegate<1, -1, ENDIANNESS_LITTLE, write16smo_delegate>; template class handler_entry_write_delegate<1, -1, ENDIANNESS_BIG, write16smo_delegate>; +template class handler_entry_write_delegate<2, 3, ENDIANNESS_LITTLE, write32smo_delegate>; +template class handler_entry_write_delegate<2, 3, ENDIANNESS_BIG, write32smo_delegate>; template class handler_entry_write_delegate<2, 0, ENDIANNESS_LITTLE, write32smo_delegate>; template class handler_entry_write_delegate<2, 0, ENDIANNESS_BIG, write32smo_delegate>; template class handler_entry_write_delegate<2, -1, ENDIANNESS_LITTLE, write32smo_delegate>; @@ -481,6 +505,8 @@ template class handler_entry_read_ioport<1, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_ioport<1, 0, ENDIANNESS_BIG>; template class handler_entry_read_ioport<1, -1, ENDIANNESS_LITTLE>; template class handler_entry_read_ioport<1, -1, ENDIANNESS_BIG>; +template class handler_entry_read_ioport<2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_ioport<2, 3, ENDIANNESS_BIG>; template class handler_entry_read_ioport<2, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_ioport<2, 0, ENDIANNESS_BIG>; template class handler_entry_read_ioport<2, -1, ENDIANNESS_LITTLE>; @@ -506,6 +532,8 @@ template class handler_entry_write_ioport<1, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_ioport<1, 0, ENDIANNESS_BIG>; template class handler_entry_write_ioport<1, -1, ENDIANNESS_LITTLE>; template class handler_entry_write_ioport<1, -1, ENDIANNESS_BIG>; +template class handler_entry_write_ioport<2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_ioport<2, 3, ENDIANNESS_BIG>; template class handler_entry_write_ioport<2, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_ioport<2, 0, ENDIANNESS_BIG>; template class handler_entry_write_ioport<2, -1, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedr0.cpp b/src/emu/emumem_hedr0.cpp index 92deb472e03..536c64e6274 100644 --- a/src/emu/emumem_hedr0.cpp +++ b/src/emu/emumem_hedr0.cpp @@ -90,6 +90,21 @@ template class handler_entry_read_dispatch< 7, 1, -1, ENDIANNESS_BIG>; template class handler_entry_read_dispatch< 8, 1, -1, ENDIANNESS_LITTLE>; template class handler_entry_read_dispatch< 8, 1, -1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch< 2, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch< 2, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch< 3, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch< 3, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch< 4, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch< 4, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch< 5, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch< 5, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch< 6, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch< 6, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch< 7, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch< 7, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch< 8, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch< 8, 2, 3, ENDIANNESS_BIG>; + template class handler_entry_read_dispatch< 2, 2, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_dispatch< 2, 2, 0, ENDIANNESS_BIG>; template class handler_entry_read_dispatch< 3, 2, 0, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedr1.cpp b/src/emu/emumem_hedr1.cpp index 86aa8452791..253b7e987f2 100644 --- a/src/emu/emumem_hedr1.cpp +++ b/src/emu/emumem_hedr1.cpp @@ -89,6 +89,23 @@ template class handler_entry_read_dispatch<15, 1, -1, ENDIANNESS_BIG>; template class handler_entry_read_dispatch<16, 1, -1, ENDIANNESS_LITTLE>; template class handler_entry_read_dispatch<16, 1, -1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch< 9, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch< 9, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<10, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<10, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<11, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<11, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<12, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<12, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<13, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<13, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<14, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<14, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<15, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<15, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<16, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<16, 2, 3, ENDIANNESS_BIG>; + template class handler_entry_read_dispatch< 9, 2, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_dispatch< 9, 2, 0, ENDIANNESS_BIG>; template class handler_entry_read_dispatch<10, 2, 0, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedr2.cpp b/src/emu/emumem_hedr2.cpp index a59bc746f9e..11a108c7522 100644 --- a/src/emu/emumem_hedr2.cpp +++ b/src/emu/emumem_hedr2.cpp @@ -89,6 +89,23 @@ template class handler_entry_read_dispatch<23, 1, -1, ENDIANNESS_BIG>; template class handler_entry_read_dispatch<24, 1, -1, ENDIANNESS_LITTLE>; template class handler_entry_read_dispatch<24, 1, -1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<17, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<17, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<18, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<18, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<19, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<19, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<20, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<20, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<21, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<21, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<22, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<22, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<23, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<23, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<24, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<24, 2, 3, ENDIANNESS_BIG>; + template class handler_entry_read_dispatch<17, 2, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_dispatch<17, 2, 0, ENDIANNESS_BIG>; template class handler_entry_read_dispatch<18, 2, 0, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedr3.cpp b/src/emu/emumem_hedr3.cpp index aa325b5b5a8..9c610294a99 100644 --- a/src/emu/emumem_hedr3.cpp +++ b/src/emu/emumem_hedr3.cpp @@ -90,6 +90,23 @@ template class handler_entry_read_dispatch<30, 1, -1, ENDIANNESS_BIG>; template class handler_entry_read_dispatch<32, 1, -1, ENDIANNESS_LITTLE>; template class handler_entry_read_dispatch<32, 1, -1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<25, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<25, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<26, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<26, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<27, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<27, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<28, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<28, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<29, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<29, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<31, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<31, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<30, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<30, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<32, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<32, 2, 3, ENDIANNESS_BIG>; + template class handler_entry_read_dispatch<25, 2, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_dispatch<25, 2, 0, ENDIANNESS_BIG>; template class handler_entry_read_dispatch<26, 2, 0, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedw0.cpp b/src/emu/emumem_hedw0.cpp index acfbd3362c3..593a42d7417 100644 --- a/src/emu/emumem_hedw0.cpp +++ b/src/emu/emumem_hedw0.cpp @@ -90,6 +90,21 @@ template class handler_entry_write_dispatch< 7, 1, -1, ENDIANNESS_BIG>; template class handler_entry_write_dispatch< 8, 1, -1, ENDIANNESS_LITTLE>; template class handler_entry_write_dispatch< 8, 1, -1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch< 2, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch< 2, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch< 3, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch< 3, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch< 4, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch< 4, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch< 5, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch< 5, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch< 6, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch< 6, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch< 7, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch< 7, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch< 8, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch< 8, 2, 3, ENDIANNESS_BIG>; + template class handler_entry_write_dispatch< 2, 2, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_dispatch< 2, 2, 0, ENDIANNESS_BIG>; template class handler_entry_write_dispatch< 3, 2, 0, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedw1.cpp b/src/emu/emumem_hedw1.cpp index d3d3b9e5f81..7626d522018 100644 --- a/src/emu/emumem_hedw1.cpp +++ b/src/emu/emumem_hedw1.cpp @@ -89,6 +89,23 @@ template class handler_entry_write_dispatch<15, 1, -1, ENDIANNESS_BIG>; template class handler_entry_write_dispatch<16, 1, -1, ENDIANNESS_LITTLE>; template class handler_entry_write_dispatch<16, 1, -1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch< 9, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch< 9, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<10, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<10, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<11, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<11, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<12, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<12, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<13, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<13, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<14, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<14, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<15, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<15, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<16, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<16, 2, 3, ENDIANNESS_BIG>; + template class handler_entry_write_dispatch< 9, 2, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_dispatch< 9, 2, 0, ENDIANNESS_BIG>; template class handler_entry_write_dispatch<10, 2, 0, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedw2.cpp b/src/emu/emumem_hedw2.cpp index 8e6fc4c4dcf..f36532ce3b8 100644 --- a/src/emu/emumem_hedw2.cpp +++ b/src/emu/emumem_hedw2.cpp @@ -89,6 +89,23 @@ template class handler_entry_write_dispatch<23, 1, -1, ENDIANNESS_BIG>; template class handler_entry_write_dispatch<24, 1, -1, ENDIANNESS_LITTLE>; template class handler_entry_write_dispatch<24, 1, -1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<17, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<17, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<18, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<18, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<19, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<19, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<20, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<20, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<21, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<21, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<22, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<22, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<23, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<23, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<24, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<24, 2, 3, ENDIANNESS_BIG>; + template class handler_entry_write_dispatch<17, 2, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_dispatch<17, 2, 0, ENDIANNESS_BIG>; template class handler_entry_write_dispatch<18, 2, 0, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedw3.cpp b/src/emu/emumem_hedw3.cpp index 4a423133483..53057a42341 100644 --- a/src/emu/emumem_hedw3.cpp +++ b/src/emu/emumem_hedw3.cpp @@ -90,6 +90,23 @@ template class handler_entry_write_dispatch<30, 1, -1, ENDIANNESS_BIG>; template class handler_entry_write_dispatch<32, 1, -1, ENDIANNESS_LITTLE>; template class handler_entry_write_dispatch<32, 1, -1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<25, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<25, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<26, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<26, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<27, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<27, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<28, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<28, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<29, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<29, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<31, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<31, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<30, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<30, 2, 3, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<32, 2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<32, 2, 3, ENDIANNESS_BIG>; + template class handler_entry_write_dispatch<25, 2, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_dispatch<25, 2, 0, ENDIANNESS_BIG>; template class handler_entry_write_dispatch<26, 2, 0, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hem.cpp b/src/emu/emumem_hem.cpp index 741a2c649b4..4ed00acfa3a 100644 --- a/src/emu/emumem_hem.cpp +++ b/src/emu/emumem_hem.cpp @@ -105,6 +105,8 @@ template class handler_entry_read_memory<1, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_memory<1, 0, ENDIANNESS_BIG>; template class handler_entry_read_memory<1, -1, ENDIANNESS_LITTLE>; template class handler_entry_read_memory<1, -1, ENDIANNESS_BIG>; +template class handler_entry_read_memory<2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_memory<2, 3, ENDIANNESS_BIG>; template class handler_entry_read_memory<2, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_memory<2, 0, ENDIANNESS_BIG>; template class handler_entry_read_memory<2, -1, ENDIANNESS_LITTLE>; @@ -130,6 +132,8 @@ template class handler_entry_write_memory<1, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_memory<1, 0, ENDIANNESS_BIG>; template class handler_entry_write_memory<1, -1, ENDIANNESS_LITTLE>; template class handler_entry_write_memory<1, -1, ENDIANNESS_BIG>; +template class handler_entry_write_memory<2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_memory<2, 3, ENDIANNESS_BIG>; template class handler_entry_write_memory<2, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_memory<2, 0, ENDIANNESS_BIG>; template class handler_entry_write_memory<2, -1, ENDIANNESS_LITTLE>; @@ -156,6 +160,8 @@ template class handler_entry_read_memory_bank<1, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_memory_bank<1, 0, ENDIANNESS_BIG>; template class handler_entry_read_memory_bank<1, -1, ENDIANNESS_LITTLE>; template class handler_entry_read_memory_bank<1, -1, ENDIANNESS_BIG>; +template class handler_entry_read_memory_bank<2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_memory_bank<2, 3, ENDIANNESS_BIG>; template class handler_entry_read_memory_bank<2, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_memory_bank<2, 0, ENDIANNESS_BIG>; template class handler_entry_read_memory_bank<2, -1, ENDIANNESS_LITTLE>; @@ -181,6 +187,8 @@ template class handler_entry_write_memory_bank<1, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_memory_bank<1, 0, ENDIANNESS_BIG>; template class handler_entry_write_memory_bank<1, -1, ENDIANNESS_LITTLE>; template class handler_entry_write_memory_bank<1, -1, ENDIANNESS_BIG>; +template class handler_entry_write_memory_bank<2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_memory_bank<2, 3, ENDIANNESS_BIG>; template class handler_entry_write_memory_bank<2, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_memory_bank<2, 0, ENDIANNESS_BIG>; template class handler_entry_write_memory_bank<2, -1, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hep.cpp b/src/emu/emumem_hep.cpp index 25b54142d3e..38cf89b4ec3 100644 --- a/src/emu/emumem_hep.cpp +++ b/src/emu/emumem_hep.cpp @@ -60,6 +60,8 @@ template class handler_entry_read_passthrough<1, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_passthrough<1, 0, ENDIANNESS_BIG>; template class handler_entry_read_passthrough<1, -1, ENDIANNESS_LITTLE>; template class handler_entry_read_passthrough<1, -1, ENDIANNESS_BIG>; +template class handler_entry_read_passthrough<2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_passthrough<2, 3, ENDIANNESS_BIG>; template class handler_entry_read_passthrough<2, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_passthrough<2, 0, ENDIANNESS_BIG>; template class handler_entry_read_passthrough<2, -1, ENDIANNESS_LITTLE>; @@ -85,6 +87,8 @@ template class handler_entry_write_passthrough<1, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_passthrough<1, 0, ENDIANNESS_BIG>; template class handler_entry_write_passthrough<1, -1, ENDIANNESS_LITTLE>; template class handler_entry_write_passthrough<1, -1, ENDIANNESS_BIG>; +template class handler_entry_write_passthrough<2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_passthrough<2, 3, ENDIANNESS_BIG>; template class handler_entry_write_passthrough<2, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_passthrough<2, 0, ENDIANNESS_BIG>; template class handler_entry_write_passthrough<2, -1, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_het.cpp b/src/emu/emumem_het.cpp index 2d2f818e770..0bf8a2e3077 100644 --- a/src/emu/emumem_het.cpp +++ b/src/emu/emumem_het.cpp @@ -60,6 +60,8 @@ template class handler_entry_read_tap<1, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_tap<1, 0, ENDIANNESS_BIG>; template class handler_entry_read_tap<1, -1, ENDIANNESS_LITTLE>; template class handler_entry_read_tap<1, -1, ENDIANNESS_BIG>; +template class handler_entry_read_tap<2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_tap<2, 3, ENDIANNESS_BIG>; template class handler_entry_read_tap<2, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_tap<2, 0, ENDIANNESS_BIG>; template class handler_entry_read_tap<2, -1, ENDIANNESS_LITTLE>; @@ -85,6 +87,8 @@ template class handler_entry_write_tap<1, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_tap<1, 0, ENDIANNESS_BIG>; template class handler_entry_write_tap<1, -1, ENDIANNESS_LITTLE>; template class handler_entry_write_tap<1, -1, ENDIANNESS_BIG>; +template class handler_entry_write_tap<2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_tap<2, 3, ENDIANNESS_BIG>; template class handler_entry_write_tap<2, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_tap<2, 0, ENDIANNESS_BIG>; template class handler_entry_write_tap<2, -1, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_heu.cpp b/src/emu/emumem_heu.cpp index 42cc8c3f83c..e556a39bd31 100644 --- a/src/emu/emumem_heu.cpp +++ b/src/emu/emumem_heu.cpp @@ -248,6 +248,8 @@ template class handler_entry_read_units<1, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_units<1, 0, ENDIANNESS_BIG>; template class handler_entry_read_units<1, -1, ENDIANNESS_LITTLE>; template class handler_entry_read_units<1, -1, ENDIANNESS_BIG>; +template class handler_entry_read_units<2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_units<2, 3, ENDIANNESS_BIG>; template class handler_entry_read_units<2, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_units<2, 0, ENDIANNESS_BIG>; template class handler_entry_read_units<2, -1, ENDIANNESS_LITTLE>; @@ -273,6 +275,8 @@ template class handler_entry_write_units<1, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_units<1, 0, ENDIANNESS_BIG>; template class handler_entry_write_units<1, -1, ENDIANNESS_LITTLE>; template class handler_entry_write_units<1, -1, ENDIANNESS_BIG>; +template class handler_entry_write_units<2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_units<2, 3, ENDIANNESS_BIG>; template class handler_entry_write_units<2, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_units<2, 0, ENDIANNESS_BIG>; template class handler_entry_write_units<2, -1, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_heun.cpp b/src/emu/emumem_heun.cpp index c875a829f9a..0248f0f5a98 100644 --- a/src/emu/emumem_heun.cpp +++ b/src/emu/emumem_heun.cpp @@ -74,6 +74,8 @@ template class handler_entry_read_unmapped<1, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_unmapped<1, 0, ENDIANNESS_BIG>; template class handler_entry_read_unmapped<1, -1, ENDIANNESS_LITTLE>; template class handler_entry_read_unmapped<1, -1, ENDIANNESS_BIG>; +template class handler_entry_read_unmapped<2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_unmapped<2, 3, ENDIANNESS_BIG>; template class handler_entry_read_unmapped<2, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_unmapped<2, 0, ENDIANNESS_BIG>; template class handler_entry_read_unmapped<2, -1, ENDIANNESS_LITTLE>; @@ -99,6 +101,8 @@ template class handler_entry_write_unmapped<1, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_unmapped<1, 0, ENDIANNESS_BIG>; template class handler_entry_write_unmapped<1, -1, ENDIANNESS_LITTLE>; template class handler_entry_write_unmapped<1, -1, ENDIANNESS_BIG>; +template class handler_entry_write_unmapped<2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_unmapped<2, 3, ENDIANNESS_BIG>; template class handler_entry_write_unmapped<2, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_unmapped<2, 0, ENDIANNESS_BIG>; template class handler_entry_write_unmapped<2, -1, ENDIANNESS_LITTLE>; @@ -125,6 +129,8 @@ template class handler_entry_read_nop<1, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_nop<1, 0, ENDIANNESS_BIG>; template class handler_entry_read_nop<1, -1, ENDIANNESS_LITTLE>; template class handler_entry_read_nop<1, -1, ENDIANNESS_BIG>; +template class handler_entry_read_nop<2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_read_nop<2, 3, ENDIANNESS_BIG>; template class handler_entry_read_nop<2, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_nop<2, 0, ENDIANNESS_BIG>; template class handler_entry_read_nop<2, -1, ENDIANNESS_LITTLE>; @@ -150,6 +156,8 @@ template class handler_entry_write_nop<1, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_nop<1, 0, ENDIANNESS_BIG>; template class handler_entry_write_nop<1, -1, ENDIANNESS_LITTLE>; template class handler_entry_write_nop<1, -1, ENDIANNESS_BIG>; +template class handler_entry_write_nop<2, 3, ENDIANNESS_LITTLE>; +template class handler_entry_write_nop<2, 3, ENDIANNESS_BIG>; template class handler_entry_write_nop<2, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_nop<2, 0, ENDIANNESS_BIG>; template class handler_entry_write_nop<2, -1, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_mud.cpp b/src/emu/emumem_mud.cpp index 8359dd8224e..0a287cc6c1d 100644 --- a/src/emu/emumem_mud.cpp +++ b/src/emu/emumem_mud.cpp @@ -116,6 +116,8 @@ template class memory_units_descriptor<1, 0, ENDIANNESS_LITTLE>; template class memory_units_descriptor<1, 0, ENDIANNESS_BIG>; template class memory_units_descriptor<1, -1, ENDIANNESS_LITTLE>; template class memory_units_descriptor<1, -1, ENDIANNESS_BIG>; +template class memory_units_descriptor<2, 3, ENDIANNESS_LITTLE>; +template class memory_units_descriptor<2, 3, ENDIANNESS_BIG>; template class memory_units_descriptor<2, 0, ENDIANNESS_LITTLE>; template class memory_units_descriptor<2, 0, ENDIANNESS_BIG>; template class memory_units_descriptor<2, -1, ENDIANNESS_LITTLE>; diff --git a/src/mame/drivers/atronic.cpp b/src/mame/drivers/atronic.cpp index 59911f40bda..9f67fe63d89 100644 --- a/src/mame/drivers/atronic.cpp +++ b/src/mame/drivers/atronic.cpp @@ -359,7 +359,7 @@ private: required_device<tms34020_device> m_videocpu; required_device<ramdac_device> m_ramdac; - required_shared_ptr<uint16_t> m_vidram; + required_shared_ptr<uint32_t> m_vidram; TMS340X0_TO_SHIFTREG_CB_MEMBER(to_shiftreg); TMS340X0_FROM_SHIFTREG_CB_MEMBER(from_shiftreg); @@ -422,17 +422,19 @@ TMS340X0_FROM_SHIFTREG_CB_MEMBER(atronic_state::from_shiftreg) TMS340X0_SCANLINE_RGB32_CB_MEMBER(atronic_state::scanline_update) { - uint32_t fulladdr = ((params->rowaddr << 16) | params->coladdr) >> 4; - uint16_t* bg0_base = &m_vidram[(fulladdr & 0xffc00)]; // this probably isn't screen ram, but some temp gfx are copied on startup + uint32_t fulladdr = ((params->rowaddr << 16) | params->coladdr) >> 5; + uint32_t* bg0_base = &m_vidram[(fulladdr & 0x7fe00)]; // this probably isn't screen ram, but some temp gfx are copied on startup uint32_t* dst = &bitmap.pix32(scanline); - int coladdr = fulladdr & 0x3ff; + int coladdr = fulladdr & 0x1ff; const pen_t *pens = m_palette->pens(); - for (int x = params->heblnk; x < params->hsblnk; x += 2, coladdr++) + for (int x = params->heblnk; x < params->hsblnk; x += 4, coladdr++) { - uint16_t bg0pix = bg0_base[coladdr & 0x3ff]; - dst[x + 0] = pens[(bg0pix & 0x00ff)]; - dst[x + 1] = pens[(bg0pix & 0xff00) >> 8]; + uint32_t bg0pix = bg0_base[coladdr & 0x1ff]; + dst[x + 0] = pens[(bg0pix & 0x000000ff)]; + dst[x + 1] = pens[(bg0pix & 0x0000ff00) >> 8]; + dst[x + 2] = pens[(bg0pix & 0x00ff0000) >> 16]; + dst[x + 3] = pens[(bg0pix & 0xff000000) >> 24]; } } @@ -440,9 +442,9 @@ void atronic_state::video_map(address_map &map) { map(0x00000000, 0x01ffffff).ram().share("vidram"); - map(0xa0000010, 0xa000001f).w(m_ramdac, FUNC(ramdac_device::index_w)).umask16(0x00ff); - map(0xa0000020, 0xa000002f).w(m_ramdac, FUNC(ramdac_device::pal_w)).umask16(0x00ff); - map(0xa0000030, 0xa000003f).w(m_ramdac, FUNC(ramdac_device::mask_w)).umask16(0x00ff); + map(0xa0000010, 0xa0000017).w(m_ramdac, FUNC(ramdac_device::index_w)); + map(0xa0000020, 0xa0000027).w(m_ramdac, FUNC(ramdac_device::pal_w)); + map(0xa0000030, 0xa0000037).w(m_ramdac, FUNC(ramdac_device::mask_w)); map(0xfc000000, 0xffffffff).rom().region("user1", 0); } @@ -503,7 +505,7 @@ ROM_START( atronic ) ROM_REGION( 0x020000, "u6", 0 ) // config? ROM_LOAD( "atronic u6.bin", 0x0000, 0x020000, CRC(9742b2d8) SHA1(9f5851c78f92055730b834de18f8dc7bd9b29a37) ) - ROM_REGION16_LE( 0x800000, "user1", ROMREGION_ERASE00 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", ROMREGION_ERASE00 ) /* TMS34020APCM-40 code (34020) */ ROM_REGION( 0x400000, "u18u21",ROMREGION_ERASE00 ) // sound ROM_REGION( 0x400000, "pals",ROMREGION_ERASE00 ) // pal (converted from JED) @@ -518,7 +520,7 @@ ROM_START( atronica ) ROM_REGION( 0x020000, "u6", 0 ) // config? ROM_LOAD( "atronic u6 std.bin", 0x0000, 0x020000, CRC(9ef7ae79) SHA1(3ed0ea056b23cee8829421c2369ff869b370ee80) ) - ROM_REGION16_LE( 0x800000, "user1", ROMREGION_ERASE00 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", ROMREGION_ERASE00 ) /* TMS34020APCM-40 code (34020) */ ROM_REGION( 0x400000, "u18u21",ROMREGION_ERASE00 ) // sound ROM_REGION( 0x400000, "pals",ROMREGION_ERASE00 ) // pal (converted from JED) ROM_END @@ -532,7 +534,7 @@ ROM_START( atlantca ) ROM_REGION( 0x020000, "u6", 0 ) // config? ROM_LOAD( "u6.1 atla01-a-zb-std-5-xx-xx-axx", 0x0000, 0x020000, CRC(5d09a4bf) SHA1(94aea5396a968ff659ac9e2f4879262c55eba2fe) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ ROM_LOAD32_BYTE( "u9.8 atla01-a-e-std-5", 0x000000, 0x100000, CRC(7f8210fa) SHA1(f71faee0d606c6aa06287f6ea31f41727e2a22d9) ) ROM_LOAD32_BYTE( "u11.8 atla01-a-e-std-5", 0x000001, 0x100000, CRC(af648717) SHA1(8ab57dc9962ed47a8beb03dcfc686c57de326793) ) ROM_LOAD32_BYTE( "u13.8 atla01-a-e-std-5", 0x000002, 0x100000, CRC(6e89bf2b) SHA1(0c3346a5da6c67bf2ef38cf657860dccb03a0461) ) @@ -560,7 +562,7 @@ ROM_START( atlantcaa ) ROM_REGION( 0x020000, "u6", 0 ) // config? ROM_LOAD( "u6.1 atla01-a-zb-std-5-xx-xx-axx", 0x0000, 0x020000, CRC(5d09a4bf) SHA1(94aea5396a968ff659ac9e2f4879262c55eba2fe) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ ROM_LOAD32_BYTE( "u9-80.bin", 0x000000, 0x100000, CRC(1c51f9e1) SHA1(9300c80409f28ba55b94b93a3359fac732262b27) ) ROM_LOAD32_BYTE( "u11-80.bin", 0x000001, 0x100000, CRC(b2b1f41f) SHA1(7551c7acc5c6c26b672e4a42d847ec9af79b50fe) ) ROM_LOAD32_BYTE( "u13-80.bin", 0x000002, 0x100000, CRC(515820fa) SHA1(2f5def7145b45f8cd63d5463880a548e58e2b2d3) ) @@ -589,7 +591,7 @@ ROM_START( baboshka ) ROM_REGION( 0x020000, "u6", 0 ) // config? ROM_LOAD( "u6-10.bin", 0x0000, 0x020000, CRC(8b0ccfd2) SHA1(abdc59ebddc9e4fc3aa5b723a746de1419f7d6e7) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ ROM_LOAD32_BYTE( "u9-80.bin", 0x000000, 0x100000, CRC(1a5d8a4f) SHA1(ff8160f000ecb032831ef4320b686fdd37c19bc9) ) ROM_LOAD32_BYTE( "u11-80.bin", 0x000001, 0x100000, CRC(713e18c9) SHA1(eb14213101c3ee09601bf01000631c3a2509e876) ) ROM_LOAD32_BYTE( "u13-80.bin", 0x000002, 0x100000, CRC(dfbc8c2f) SHA1(1ae2dcd572fa5fc31be5cdb7d6de2bced06ff94e) ) @@ -614,7 +616,7 @@ ROM_START( cfblue ) ROM_REGION( 0x020000, "u6", 0 ) // config? ROM_LOAD( "u6.bin", 0x0000, 0x020000, CRC(63690e7e) SHA1(9dcb3d64bae03556875185ead23d9b911773f5bd) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ ROM_LOAD32_BYTE( "u9.bin", 0x000000, 0x100000, CRC(d1c2ad08) SHA1(e53c7e91b2ab86e64f4ae753404aa86ae881becf) ) ROM_LOAD32_BYTE( "u11.bin", 0x000001, 0x100000, CRC(42872aef) SHA1(54d7cf6a9f3d5d8b2b14fa381fd7b9db974525e1) ) ROM_LOAD32_BYTE( "u13.bin", 0x000002, 0x100000, CRC(7da9415b) SHA1(aaa73465417dcf92838021b37cb412d52ccb4d85) ) @@ -639,7 +641,7 @@ ROM_START( cfbluea ) ROM_LOAD( "u6-10.bin", 0x0000, 0x020000, CRC(0db0531d) SHA1(391e41b2dcd38669dcc24e938e9838feee972559) ) ROM_LOAD( "u6low-10.bin", 0x0000, 0x020000, CRC(3cbad206) SHA1(d2a468d5bfd441b74ef85be088873d1f74d5c66e) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ ROM_LOAD32_BYTE( "u9-80.bin", 0x000000, 0x100000, CRC(37b3a499) SHA1(eb3252185596dd513d3cce95f3425241ca8513ab) ) ROM_LOAD32_BYTE( "u11-80.bin", 0x000001, 0x100000, CRC(d98b2b1d) SHA1(414d300d113e9737d63efea09b358aeb8eeed7fc) ) ROM_LOAD32_BYTE( "u13-80.bin", 0x000002, 0x100000, CRC(478bb4a5) SHA1(94304fe1477bfc66e8dcf2c2c91226754cb8c32a) ) @@ -664,7 +666,7 @@ ROM_START( cfgreen ) ROM_REGION( 0x020000, "u6", 0 ) // config? ROM_LOAD( "u6-10.bin", 0x0000, 0x020000, CRC(3cbad206) SHA1(d2a468d5bfd441b74ef85be088873d1f74d5c66e) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ ROM_LOAD32_BYTE( "u9-80.bin", 0x000000, 0x100000, CRC(19a47a1b) SHA1(ae9ad2027fddf96062833345a5e2b9e7101b3380) ) ROM_LOAD32_BYTE( "u11-80.bin", 0x000001, 0x100000, CRC(7d805f07) SHA1(0bb27a702e45d3d660363ac75c0f52f07248d40a) ) ROM_LOAD32_BYTE( "u13-80.bin", 0x000002, 0x100000, CRC(104110dc) SHA1(9322598a94e3c71f546da3b42f137a22fc78a894) ) @@ -689,7 +691,7 @@ ROM_START( chicken ) ROM_REGION( 0x020000, "u6", 0 ) // config? ROM_LOAD( "u6-10.bin", 0x0000, 0x020000, CRC(bac68023) SHA1(fdc5d540ceb4a2d44013dfd59b46103ec6745dea) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ ROM_LOAD32_BYTE( "u9-80.bin", 0x000000, 0x100000, CRC(1109b7d6) SHA1(c0f6f5d56ee95982688b595894a2985ef53629e7) ) ROM_LOAD32_BYTE( "u11-80.bin", 0x000001, 0x100000, CRC(5a1449f6) SHA1(3903858239223c37615f12a8db6a8e873722e34c) ) ROM_LOAD32_BYTE( "u13-80.bin", 0x000002, 0x100000, CRC(e1081c7a) SHA1(dd6390d64cda9af93093092361ca24b551d82549) ) @@ -714,7 +716,7 @@ ROM_START( aclown ) ROM_REGION( 0x020000, "u6", 0 ) // config? ROM_LOAD( "u6-10.bin", 0x0000, 0x020000, CRC(ab86b3d4) SHA1(b0d32887674f971a3ccd482775ec3f978a2ea0c1) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ ROM_LOAD32_BYTE( "u9-80.bin", 0x000000, 0x100000, CRC(8bcbb27f) SHA1(d953268213580af11a2cc0dbd8bf1652f97f3929) ) ROM_LOAD32_BYTE( "u11-80.bin", 0x000001, 0x100000, CRC(73fb3169) SHA1(8bbe5d8b8898e2d3368506e7b66d05b8f8ac7d02) ) ROM_LOAD32_BYTE( "u13-80.bin", 0x000002, 0x100000, CRC(47580998) SHA1(37a6e409618aa3fe7d24bd3580fa93269895b059) ) @@ -740,7 +742,7 @@ ROM_START( goldglen ) ROM_REGION( 0x020000, "u6", 0 ) // config? ROM_LOAD( "u6-10.bin", 0x0000, 0x020000, CRC(94409a39) SHA1(99af058e48147fc75a8c23e4f1a28484f3d5f625) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ ROM_LOAD32_BYTE( "u9-80.bin", 0x000000, 0x100000, CRC(01e69d2d) SHA1(a6e6974aec52931aeeb1f90d8f917ab85ebe843e) ) ROM_LOAD32_BYTE( "u11-80.bin", 0x000001, 0x100000, CRC(6c39a180) SHA1(95f91ec10961d36c86dee5ce42fc7c8ab693e271) ) ROM_LOAD32_BYTE( "u13-80.bin", 0x000002, 0x100000, CRC(e60a093f) SHA1(fa0af661f869f80e11097e101ec6100a75d1e63f) ) @@ -765,7 +767,7 @@ ROM_START( iccash ) ROM_REGION( 0x020000, "u6", 0 ) // config? ROM_LOAD( "u6-10.bin", 0x0000, 0x020000, CRC(5e7d8a05) SHA1(255355cf594c2818d358860e616b5b578a87e974) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ ROM_LOAD32_BYTE( "u9-80.bin", 0x000000, 0x100000, CRC(db77fe46) SHA1(2502c5c165a9720e5ff1196eaa17189281c3145c) ) ROM_LOAD32_BYTE( "u11-80.bin", 0x000001, 0x100000, CRC(3a512c6c) SHA1(ba8592773d71e57b3dc6aaff7df1214a57429b10) ) ROM_LOAD32_BYTE( "u13-80.bin", 0x000002, 0x100000, CRC(75fadda8) SHA1(5a968f10e582fbe74000f3de33dc1e2d07c3fec1) ) @@ -791,7 +793,7 @@ ROM_START( shpinxii ) ROM_LOAD( "u6-10.bin", 0x0000, 0x020000, CRC(4d37999a) SHA1(678dc788cfe00ab2599df08941660324793d7f6c) ) ROM_LOAD( "sphinx ii.bin", 0x0000, 0x020000, CRC(7fae09a6) SHA1(5c26798337d3691d81f853ee447cb7119fce7b14) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ ROM_LOAD32_BYTE( "u9-80.bin", 0x000000, 0x100000, CRC(c54e4e07) SHA1(1249494773dae044a7bb4381b084e3d2e14367d7) ) ROM_LOAD32_BYTE( "u11-80.bin", 0x000001, 0x100000, CRC(5c1e82ab) SHA1(f22ba1dc6799388e855d8f3064b96d568619a75b) ) ROM_LOAD32_BYTE( "u13-80.bin", 0x000002, 0x100000, CRC(fb49ae3e) SHA1(bf0cb5815639ebc3db3333249ab2ed81d3bdc684) ) @@ -819,7 +821,7 @@ ROM_START( beachpt ) ROM_REGION( 0x020000, "u6", 0 ) // config? ROM_LOAD( "u06_crp5bs1a.bin", 0x0000, 0x020000, CRC(0db0531d) SHA1(391e41b2dcd38669dcc24e938e9838feee972559) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ ROM_LOAD32_BYTE( "u09_bep5a01d.bin", 0x000000, 0x100000, CRC(0f4614de) SHA1(2181c552e9a3669fda5e87d0c596d5534d24d4b3) ) ROM_LOAD32_BYTE( "u11_bep5a01d.bin", 0x000001, 0x100000, CRC(4f8c6fee) SHA1(2b75fe948bddda899969ef4a7663a52dc7b0eb81) ) ROM_LOAD32_BYTE( "u13_bep5a01d.bin", 0x000002, 0x100000, CRC(ca9a24e5) SHA1(67276f680f3aedf480c54c666f0db1110cd77aee) ) @@ -847,7 +849,7 @@ ROM_START( beetleup ) ROM_LOAD( "u06_n5b0-a-05-b.648f.bin", 0x0000, 0x020000, CRC(2d2ff35f) SHA1(97759fbad4b6b30ca8f8ea74da74cfaa433a7fa2) ) ROM_LOAD( "u06_n5b0-a-06-b.64 56.bin", 0x0000, 0x020000, CRC(7b4a6a97) SHA1(e3d54476730ca34a9f7214219cf991a220e15d5c) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ ROM_LOAD32_BYTE( "u09_7b88.bin", 0x000000, 0x100000, CRC(8443972b) SHA1(5f2eea84ba18a83502f36eeaa52cff49a1631668) ) ROM_LOAD32_BYTE( "u11_1957.bin", 0x000001, 0x100000, CRC(36c7e5c5) SHA1(2bad0bb6b363af6a37f5b11c7ca8b3b674df4072) ) ROM_LOAD32_BYTE( "u13_b661.bin", 0x000002, 0x100000, CRC(0e74726c) SHA1(3103d801a622315877fc09d9c99290b54b266885) ) @@ -874,7 +876,7 @@ ROM_START( bigblue ) ROM_LOAD( "big blue bags.bin", 0x0000, 0x020000, CRC(4ec3fc1c) SHA1(7a081d370c54a6ea333957958b1341560458e845) ) ROM_LOAD( "bbbu01-c-za-std_-5-xx-xx-axx.1mu06.bin", 0x0000, 0x020000, CRC(09e6df0b) SHA1(85961160f95cb8d223f73483d6edad79fa37d729) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ ROM_LOAD32_BYTE( "bbbu01-a_-a-std_-5_.8gu09.bin", 0x000000, 0x100000, CRC(6f11b908) SHA1(663382bc295615afbc3a9a39c7089470b8b55926) ) ROM_LOAD32_BYTE( "bbbu01-a_-a-std_-5_.8gu11.bin", 0x000001, 0x100000, CRC(4cddcb5a) SHA1(e23354ab36f814b22c39564111558d4935fe8d70) ) ROM_LOAD32_BYTE( "bbbu01-a_-a-std_-5_.8gu13.bin", 0x000002, 0x100000, CRC(3a6dd649) SHA1(0f2b6cdf4f10ded99adc4fe0b47e4fada4aa6643) ) @@ -898,7 +900,7 @@ ROM_START( castaway ) ROM_REGION( 0x020000, "u6", 0 ) // config? ROM_LOAD( "u6.1 c5bo-a-03-a", 0x0000, 0x020000, CRC(3917302a) SHA1(39b0672c36554712825a0e310522933be4b46d84) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ ROM_LOAD32_BYTE( "u9.8 cw5_b-03-b", 0x000000, 0x100000, CRC(c49aaf25) SHA1(5518312046208b4f912e9dee2ff24653a9976c6f) ) ROM_LOAD32_BYTE( "u11.8 cw5_b-03-b", 0x000001, 0x100000, CRC(24267b4b) SHA1(9103923dd1bba0b01f6020f7c357ac9b7bef4951) ) ROM_LOAD32_BYTE( "u13.8 cw5_b-03-b", 0x000002, 0x100000, CRC(3e606516) SHA1(5edad0a3099700bfeedff5a143591a85b3c4f582) ) @@ -922,7 +924,7 @@ ROM_START( castawaya ) // bad dump? (roms all look incorrect size to me) ROM_REGION( 0x080000, "u6", 0 ) // config? ROM_LOAD( "u-6 m27c801.bin", 0x0000, 0x080000, CRC(86538b30) SHA1(6b8d732b59af2cc1a6524989f8cf12a4d4dac484) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ // seem to be half size, doesn't have the TMS vectors ROM_LOAD32_BYTE( "u-9 m27c801.bin", 0x000000, 0x080000, BAD_DUMP CRC(4a5efe38) SHA1(23e82eeadccdd0224858686b1d96bd5d184904cb) ) ROM_LOAD32_BYTE( "u-11 m27c801.bin", 0x000001, 0x080000, BAD_DUMP CRC(099e27e2) SHA1(4419ac8090ccab673e61f4f73c837971e341e7e2) ) @@ -952,7 +954,7 @@ ROM_START( dncsprt ) ROM_REGION( 0x020000, "u6", 0 ) // config? ROM_LOAD( "dasp01-d-za-std_-5-xx-xx-axx.1mu06", 0x0000, 0x020000, CRC(2d5f7976) SHA1(77de321ba2f46726a0c26aa498a4c3deb7f8c421) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ ROM_LOAD32_BYTE( "dasp01-a_-c-std_-5_.8gu09", 0x000000, 0x100000, CRC(e6941863) SHA1(c9fe08bd070c9fac7b8c9089a6ecbff581265b3a) ) ROM_LOAD32_BYTE( "dasp01-a_-c-std_-5_.8gu11", 0x000001, 0x100000, CRC(400b82ab) SHA1(5af6daf65e50b0c5ad27c43b0f3d4d8d24f38102) ) ROM_LOAD32_BYTE( "dasp01-a_-c-std_-5_.8gu13", 0x000002, 0x100000, CRC(b425a8f6) SHA1(82d8e0d8602a81c6d4cf528b73f3c84ab5dde11b) ) @@ -977,7 +979,7 @@ ROM_START( drmmake ) ROM_LOAD( "u6-1001", 0x0000, 0x020000, CRC(7a00ad2a) SHA1(67d90b10b4f62922c4ed94bb8a0f77e474ee385d) ) ROM_LOAD( "dream maker.bin", 0x0000, 0x020000, CRC(49c19eb3) SHA1(a55d4f9a0dd2b1db41fb28f475efa7e9f7c85be6) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ ROM_LOAD32_BYTE( "u9-801", 0x000000, 0x100000, CRC(e560eeff) SHA1(fe33927a91be7ecd2a283bb09b87f5f3d659cf09) ) ROM_LOAD32_BYTE( "u11-801", 0x000001, 0x100000, CRC(693cec8e) SHA1(83d33603fa11aa4341a40b2ffc4862992307dcfc) ) ROM_LOAD32_BYTE( "u13-801", 0x000002, 0x100000, CRC(8b78f6aa) SHA1(74804c44124b71f0f11446da342d0548130394f6) ) @@ -1004,7 +1006,7 @@ ROM_START( jumpjkpt ) ROM_REGION( 0x020000, "u6", 0 ) // config? ROM_LOAD( "jujp01-a-za-std_-5_u06.bin", 0x0000, 0x020000, CRC(0f19b0c1) SHA1(c118215bcf502287277c34e6f389af70ab945674) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ ROM_LOAD32_BYTE( "jujp01-a_-b-std_-5_u09.bin", 0x000000, 0x100000, CRC(7d3cb293) SHA1(e9f102620f01309327678e115e206fd29dcffde6) ) ROM_LOAD32_BYTE( "jujp01-a_-b-std_-5_u11.bin", 0x000001, 0x100000, CRC(d92c0c7e) SHA1(680032b81e76c74539ff56f8c5fc7d4d16fd4793) ) ROM_LOAD32_BYTE( "jujp01-a_-b-std_-5_u13.bin", 0x000002, 0x100000, CRC(555ced70) SHA1(1ec115a2e2a1c171070775913a3eb831efc81dab) ) @@ -1030,7 +1032,7 @@ ROM_START( mushmagi ) ROM_REGION( 0x080000, "u6", 0 ) // config? ROM_LOAD( "mb-u06.bin", 0x0000, 0x080000, CRC(10e3f3f6) SHA1(458f5be7ee01e361b4c31c099fc721521fbe3864) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ ROM_LOAD32_BYTE( "gb-u09.bin", 0x000000, 0x100000, CRC(f2d82cee) SHA1(78a15f757bbbb1f4f0a5ab889a9807d886a543a8) ) ROM_LOAD32_BYTE( "gb-u11.bin", 0x000001, 0x100000, CRC(3ead238a) SHA1(21956bd6b24e3281db70b6d28d97ee7bbd9ae75f) ) ROM_LOAD32_BYTE( "gb-u13.bin", 0x000002, 0x100000, CRC(58c191e6) SHA1(b0f86f407958de2b8e0f5e61288f8b6c7a2c0c2f) ) @@ -1056,7 +1058,7 @@ ROM_START( splmastr ) ROM_LOAD( "mb-u6 ebda.bin", 0x0000, 0x020000, CRC(7e73e9c7) SHA1(a8b00af9a3bf936e54391a96777ac78773b3cee0) ) ROM_LOAD( "speel master.bin", 0x0000, 0x020000, CRC(04168ab7) SHA1(70a387599bf6629a9a8a6ff38ed0d40e92e54504) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ ROM_LOAD32_BYTE( "gb-u9 b408.bin", 0x000000, 0x100000, CRC(e7146c72) SHA1(21b143ae93a73dd59b652a0033ceaa9116575239) ) ROM_LOAD32_BYTE( "gb-u11 abf6.bin", 0x000001, 0x100000, CRC(de54f849) SHA1(b628a69c8ad5f81543cd78c458dd9348226114a7) ) ROM_LOAD32_BYTE( "gb-u13 6526.bin", 0x000002, 0x100000, CRC(e5744b4f) SHA1(8c36b087dc4fad6cd463abea5b1e7c0bd9c30074) ) @@ -1094,7 +1096,7 @@ ROM_START( tajmah ) ROM_LOAD32_BYTE( "t5_d01d.u12", 0x600002, 0x080000, CRC(c2ca0b17) SHA1(cfd553f1943552620f6d324f767fd1f1957e8e25) ) ROM_LOAD32_BYTE( "t5_d01d.u14", 0x600003, 0x080000, CRC(0d512057) SHA1(f5f43dad25940193516d467725ecbe1989cc9003) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) - is this an alt set, or a 2nd video board? */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) - is this an alt set, or a 2nd video board? */ ROM_LOAD32_BYTE( "u9", 0x400000, 0x080000, CRC(157b9860) SHA1(6e04f035a945a63617e32b196fa0c1b6fd26b281) ) ROM_LOAD32_BYTE( "u11", 0x400001, 0x080000, CRC(6aa2cecc) SHA1(7b1d6bb81fed7413f69e926e7cefe1ee171453b4) ) ROM_LOAD32_BYTE( "u13", 0x400002, 0x080000, CRC(5c091b7a) SHA1(d1c758a6d155bbc7359f3f46a29bac44d96ec4b1) ) @@ -1127,7 +1129,7 @@ ROM_START( 3wishrd ) ROM_LOAD( "three wishes.bin", 0x0000, 0x020000, CRC(37d85da7) SHA1(64db855e06dab5ea85c669bd72f1e8ee8856607a) ) ROM_LOAD( "590a13a.1u6", 0x0000, 0x020000, CRC(3e674907) SHA1(ca933c416764ebf355d8e04f871f8421c9039078) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ ROM_LOAD32_BYTE( "tw5b01a.8u9", 0x000000, 0x100000, CRC(2410659a) SHA1(2bcd2539c0e3e7389c27c21e58d9199b9c7c742e) ) ROM_LOAD32_BYTE( "tw5b01a.u11", 0x000001, 0x100000, CRC(44ca9ce1) SHA1(b1c6d83f749202c072c6ce99c0470a31cfab8986) ) ROM_LOAD32_BYTE( "tw5b01a.u13", 0x000002, 0x100000, CRC(6c60097b) SHA1(f5ddb86b481b7b95d6ec151b37d662b583817813) ) @@ -1156,7 +1158,7 @@ ROM_START( atrwild ) ROM_LOAD( "mb-u22-d.bin", 0x000, 0x117, CRC(dc097847) SHA1(305294284d0ffd578f9115b836ef1f9e906c1599) ) ROM_LOAD( "mb-u32-b.bin", 0x000, 0x117, CRC(78a9310b) SHA1(deb84d96b0411b05c54fb2c998bed020a37d5005) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ ROM_LOAD32_BYTE( "u8.bin", 0x600000, 0x080000, CRC(4acafd98) SHA1(d516c55ddce1470e4e19725b6d7dfd5f70ba1129) ) ROM_LOAD32_BYTE( "u10.bin", 0x600001, 0x080000, CRC(804800be) SHA1(5fb2a5479c2a7073c2abd40e14a162fbf783eb70) ) ROM_LOAD32_BYTE( "u12.bin", 0x600002, 0x080000, CRC(0845ff27) SHA1(5012569a79c9fcbee178a0cee45d25769a1cf9be) ) @@ -1177,7 +1179,7 @@ ROM_START( atricmon ) ROM_LOAD( "mb-u32-d.bin", 0x000, 0x2e5, CRC(996854bc) SHA1(647d2f49b739f7ca55c0b85290b6a21256834fd8) ) ROM_LOAD( "mb-u35-65994077_icm-s.bin", 0x000, 0x2e5, CRC(996854bc) SHA1(647d2f49b739f7ca55c0b85290b6a21256834fd8) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ ROM_LOAD32_BYTE( "gb-u9.bin", 0x000000, 0x100000, CRC(eff83f95) SHA1(743f2fb0dd84a83387919db70175aa62f5f6f858) ) ROM_LOAD32_BYTE( "gb-u11.bin", 0x000001, 0x100000, CRC(3fc27ae9) SHA1(896da175c11b48fb28dbb0678849b8f167cf5f6e) ) ROM_LOAD32_BYTE( "gb-u13.bin", 0x000002, 0x100000, CRC(6ad50f67) SHA1(b32781f06acc3e9929467d6d1212cf0dc757e5b3) ) @@ -1210,7 +1212,7 @@ ROM_START( atrbonpk ) ROM_LOAD( "u6-b.bin", 0x000, 0x117, CRC(2750fb0a) SHA1(3814c4755a215073425a9d6bb048315498962c76) ) ROM_LOAD( "u7-a.bin", 0x000, 0x117, CRC(adcb2789) SHA1(cc2ebd69abec73d66665faaec19b8706e539b34c) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ ROM_LOAD32_BYTE( "u9.bin", 0x400000, 0x080000, CRC(5b8450f1) SHA1(27fc771c3fb824cdb845237324984778fcd0a737) ) ROM_LOAD32_BYTE( "u11.bin", 0x400001, 0x080000, CRC(c8c52bd1) SHA1(081b8b4c46f18d030329bf519a8ed50385f7c062) ) ROM_LOAD32_BYTE( "u13.bin", 0x400002, 0x080000, CRC(23164a85) SHA1(e6de6aac28f1dac9ea908aaab9760b56ded1bb91) ) @@ -1231,7 +1233,7 @@ ROM_START( abigchs ) ROM_REGION( 0x020000, "u6", 0 ) // config? ROM_LOAD( "bigc21-d-zf-std_-5-xx-xx-axx.1mu06", 0x0000, 0x020000, CRC(0eb376fb) SHA1(34e1f28e71503ffb0e1e922bd3ba17bad0d37d99) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ // not valid TMS code, looks like some x86 drive image split into ROMs? ROM_LOAD( "bigc01-a_-f-rus_-5_-g101.wigu09", 0x000000, 0x100000, CRC(c87e6bb4) SHA1(387e2498625ff718fccaa7701dd595ee787b9a83) ) ROM_LOAD( "bigc01-a_-f-rus_-5_-g101.wigu11", 0x100000, 0x100000, CRC(c9e9fa7f) SHA1(1698215845f21cfde0274e880d89c66fb3226f04) ) @@ -1256,7 +1258,7 @@ ROM_START( bearnec ) ROM_REGION( 0x020000, "u6", 0 ) // config? ROM_LOAD( "u6_bene21-e-zg-std_-5-xx-xx-axx_0f78.bin", 0x0000, 0x020000, CRC(d956484f) SHA1(d2d659a4350d7204666234a511ebd4dd7a021d89) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ // not valid TMS code, looks like some x86 drive image split into ROMs? ROM_LOAD( "u09_a632.bin", 0x000000, 0x100000, CRC(a671b6e8) SHA1(86b97ba98fdd09575a371b5b7f7d42bf2916fe17) ) ROM_LOAD( "u11_947b.bin", 0x100000, 0x100000, CRC(3dc60963) SHA1(d824cd4fbe4116744727180762fbf0ffe22e6398) ) @@ -1281,7 +1283,7 @@ ROM_START( goldcity ) ROM_REGION( 0x020000, "u6", 0 ) // config? ROM_LOAD( "goci21-e-zf-std_-5-xx-xx-axx.1mu06", 0x0000, 0x020000, CRC(73ab9c41) SHA1(0888923bdaede83f264979c0757894f5cb2e0ec8) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ // not valid TMS code, looks like some x86 drive image split into ROMs? ROM_LOAD( "goci01-a_-c-rus_-5_-g101.wigu09", 0x000000, 0x100000, CRC(72c9b584) SHA1(1345e7ea34a819fbc01b9a64e9f9c1a2de927dda) ) ROM_LOAD( "goci01-a_-c-rus_-5_-g101.wigu11", 0x100000, 0x100000, CRC(2ebe1d71) SHA1(1b540c3bb9b232f475c3fe2b56c55f473d8c09ee) ) @@ -1309,7 +1311,7 @@ ROM_START( santam ) ROM_REGION( 0x020000, "u6", 0 ) // config? ROM_LOAD( "u06_1m_m27c1001-10f_da21h.bin", 0x0000, 0x020000, CRC(51c0a380) SHA1(861c8b4f825f4bc11dd02ac03dcc2cc7e8c65129) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* TMS34020APCM-40 code (34020) */ // not valid TMS code, looks like some x86 drive image split into ROMs? ROM_LOAD( "gb_u09_8m_m27c801-100f1_9df6h.bin", 0x000000, 0x100000, CRC(470ccae5) SHA1(0521af7830cc59102edcc658df4d21a3d669d6db) ) ROM_LOAD( "gb_u11_8m_m27c801-100f1_7621h.bin", 0x100000, 0x100000, CRC(8f9a1031) SHA1(1aca654b62e73f3005e627625bea2b4198c04a99) ) diff --git a/src/mame/drivers/btoads.cpp b/src/mame/drivers/btoads.cpp index d6e70fca2d8..1868e0f257c 100644 --- a/src/mame/drivers/btoads.cpp +++ b/src/mame/drivers/btoads.cpp @@ -28,11 +28,34 @@ void btoads_state::machine_start() { + m_nvram_data = std::make_unique<uint8_t[]>(0x2000); + subdevice<nvram_device>("nvram")->set_base(m_nvram_data.get(), 0x2000); + save_item(NAME(m_main_to_sound_data)); save_item(NAME(m_main_to_sound_ready)); save_item(NAME(m_sound_to_main_data)); save_item(NAME(m_sound_to_main_ready)); save_item(NAME(m_sound_int_state)); + save_pointer(NAME(m_nvram_data), 0x2000); +} + + + +/************************************* + * + * NVRAM + * + *************************************/ + +void btoads_state::nvram_w(offs_t offset, uint8_t data) +{ + m_nvram_data[offset] = data; +} + + +uint8_t btoads_state::nvram_r(offs_t offset) +{ + return m_nvram_data[offset]; } @@ -180,11 +203,11 @@ void btoads_state::main_map(address_map &map) map(0x20000180, 0x200001ff).w(FUNC(btoads_state::display_control_w)); map(0x20000200, 0x2000027f).w(FUNC(btoads_state::scroll0_w)); map(0x20000280, 0x200002ff).w(FUNC(btoads_state::scroll1_w)); - map(0x20000300, 0x2000037f).rw(FUNC(btoads_state::paletteram_r), FUNC(btoads_state::paletteram_w)); + map(0x20000300, 0x2000037f).rw(m_tlc34076, FUNC(tlc34076_device::read), FUNC(tlc34076_device::write)).umask32(0x000000ff); map(0x20000380, 0x200003ff).rw(FUNC(btoads_state::main_sound_r), FUNC(btoads_state::main_sound_w)); map(0x20000400, 0x2000047f).w(FUNC(btoads_state::misc_control_w)); - map(0x40000000, 0x4000000f).nopw(); /* watchdog? */ - map(0x60000000, 0x6003ffff).ram().share("nvram"); + map(0x40000000, 0x4000001f).nopw(); /* watchdog? */ + map(0x60000000, 0x6003ffff).rw(FUNC(btoads_state::nvram_r), FUNC(btoads_state::nvram_w)).umask32(0x000000ff); map(0xa0000000, 0xa03fffff).rw(FUNC(btoads_state::vram_fg_display_r), FUNC(btoads_state::vram_fg_display_w)).share("vram_fg0"); map(0xa4000000, 0xa43fffff).rw(FUNC(btoads_state::vram_fg_draw_r), FUNC(btoads_state::vram_fg_draw_w)).share("vram_fg1"); map(0xa8000000, 0xa87fffff).ram().share("vram_fg_data"); @@ -228,46 +251,46 @@ void btoads_state::sound_io_map(address_map &map) static INPUT_PORTS_START( btoads ) PORT_START("P1") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) + PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("P2") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) + PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("P3") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(3) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(3) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START3 ) - PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(3) + PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3) + PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(3) + PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3) + PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) + PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) + PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2) + PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_START3 ) + PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("UNK") - PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0xffffffff, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("SPECIAL") - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(btoads_state, sound_to_main_r) + PORT_BIT( 0x00000001, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(btoads_state, sound_to_main_r) PORT_SERVICE_NO_TOGGLE( 0x0002, IP_ACTIVE_LOW ) - PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(btoads_state, main_to_sound_r) - PORT_BIT( 0xff7c, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00000080, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(btoads_state, main_to_sound_r) + PORT_BIT( 0xffffff7c, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("SW1") PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Demo_Sounds )) PORT_DIPLOCATION("SW1:1") @@ -292,7 +315,7 @@ static INPUT_PORTS_START( btoads ) PORT_DIPSETTING( 0x0040, DEF_STR( Off )) PORT_DIPSETTING( 0x0000, DEF_STR( On )) PORT_DIPUNKNOWN_DIPLOC(0x0080, 0x0080, "SW1:8") - PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END @@ -348,7 +371,7 @@ ROM_START( btoads ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound program, M27C256B rom */ ROM_LOAD( "bt.u102", 0x0000, 0x8000, CRC(a90b911a) SHA1(6ec25161e68df1c9870d48cc2b1f85cd1a49aba9) ) - ROM_REGION16_LE( 0x800000, "user1", 0 ) /* 34020 code, M27C322 roms */ + ROM_REGION32_LE( 0x800000, "user1", 0 ) /* 34020 code, M27C322 roms */ ROM_LOAD32_WORD( "btc0-p0.u120", 0x000000, 0x400000, CRC(0dfd1e35) SHA1(733a0a4235bebd598c600f187ed2628f28cf9bd0) ) ROM_LOAD32_WORD( "btc0-p1.u121", 0x000002, 0x400000, CRC(df7487e1) SHA1(67151b900767bb2653b5261a98c81ff8827222c3) ) diff --git a/src/mame/drivers/metalmx.cpp b/src/mame/drivers/metalmx.cpp index 74b75ad0587..c431fb2f447 100644 --- a/src/mame/drivers/metalmx.cpp +++ b/src/mame/drivers/metalmx.cpp @@ -525,8 +525,8 @@ void metalmx_state::adsp_data_map(address_map &map) void metalmx_state::gsp_map(address_map &map) { - map(0x88800000, 0x8880000f).ram(); /* ? */ - map(0x88c00000, 0x88c0000f).ram(); /* ? */ + map(0x88800000, 0x8880001f).ram(); /* ? */ + map(0x88c00000, 0x88c0001f).ram(); /* ? */ map(0xff000000, 0xff7fffff).ram().share("gsp_dram"); map(0xff800000, 0xffffffff).ram().share("gsp_vram"); } diff --git a/src/mame/drivers/midwunit.cpp b/src/mame/drivers/midwunit.cpp index ff7cabab5b8..533bf08f59c 100644 --- a/src/mame/drivers/midwunit.cpp +++ b/src/mame/drivers/midwunit.cpp @@ -94,7 +94,6 @@ Notes: #include "emu.h" -#include "includes/midtunit.h" #include "includes/midwunit.h" #include "audio/dcs.h" diff --git a/src/mame/drivers/midxunit.cpp b/src/mame/drivers/midxunit.cpp index c233650567f..697636d054d 100644 --- a/src/mame/drivers/midxunit.cpp +++ b/src/mame/drivers/midxunit.cpp @@ -10,21 +10,6 @@ Games supported: * Revolution X - Known bugs: - * POST test ends with "CUSTOM CHIP U76 BAD" message, - However, this is caused by failed blitter DMA test, it's buggy code: - 20D31460: MOVI 100000h,A14 ; control register value, set H-clip access - 20D31490: MOVE A14,@C08000E0h,1 ; 32bit write control reg - 20D314C0: MOVI 1FF0000h,A14 ; H-clip range value 0-511 - 20D314F0: MOVE A14,@C08000C0h,1 ; 32bit write H-clip reg - 20D31520: MOVI 300000h,A14 ; control register value, set V-clip access - 20D31550: MOVE A14,@C08000E0h,0 ; 16bit(!!) write, upper word ignored in MAME, control reg still set to H-clip access - 20D31580: MOVI 1FF0000h,A14 ; V-clip range value 0-511 - 20D315B0: MOVE A14,@C08000C0h,1 ; 32bit write, in MAME write goes to H-clip registers - in result of not set V-clip range in MAME the whole DMA request is clipped. - It is possible X-unit DMA registers block C08000xxh access is 32-bit only (/CAS0-3 lines ignored), so any write access always update whole 32bits. - At the moment TMS34020 incorrectly emulated as 16bit wide data bus CPU, so we can't properly handle this issue. - *************************************************************************** Revolution X @@ -131,7 +116,6 @@ ________________________________________________________________ #include "cpu/adsp2100/adsp2100.h" #include "cpu/tms34010/tms34010.h" #include "machine/adc0844.h" -#include "machine/nvram.h" #include "screen.h" @@ -159,12 +143,11 @@ void midxunit_state::main_map(address_map &map) map(0x60c00060, 0x60c0007f).portr("DSW"); map(0x60c00080, 0x60c000df).w(FUNC(midxunit_state::midxunit_io_w)); map(0x60c000e0, 0x60c000ff).rw(FUNC(midxunit_state::midxunit_security_r), FUNC(midxunit_state::midxunit_security_w)); - map(0x80800000, 0x8080000f).r("adc", FUNC(adc0848_device::read)).umask16(0x00ff).w("adc", FUNC(adc0848_device::write)).umask16(0x00ff); - map(0x80800010, 0x8080001f).noprw(); - map(0x80c00000, 0x80c000ff).rw(FUNC(midxunit_state::midxunit_uart_r), FUNC(midxunit_state::midxunit_uart_w)); - map(0xa0440000, 0xa047ffff).rw(FUNC(midxunit_state::midxunit_cmos_r), FUNC(midxunit_state::midxunit_cmos_w)).share("nvram"); + map(0x80800000, 0x80800007).rw("adc", FUNC(adc0848_device::read), FUNC(adc0848_device::write)); + map(0x80c00000, 0x80c000ff).rw(FUNC(midxunit_state::midxunit_uart_r), FUNC(midxunit_state::midxunit_uart_w)).umask32(0x000000ff); + map(0xa0440000, 0xa047ffff).rw(FUNC(midxunit_state::midxunit_cmos_r), FUNC(midxunit_state::midxunit_cmos_w)).umask32(0x000000ff); map(0xa0800000, 0xa08fffff).rw(m_video, FUNC(midxunit_video_device::midxunit_paletteram_r), FUNC(midxunit_video_device::midxunit_paletteram_w)).share("palette"); - map(0xc0800000, 0xc08000ff).mirror(0x00400000).rw(m_video, FUNC(midxunit_video_device::midtunit_dma_r), FUNC(midxunit_video_device::midtunit_dma_w)); + map(0xc0800000, 0xc08000ff).mirror(0x00400000).rw(FUNC(midxunit_state::midxunit_dma_r), FUNC(midxunit_state::midxunit_dma_w)); map(0xf8000000, 0xfeffffff).r(m_video, FUNC(midxunit_video_device::midwunit_gfxrom_r)); map(0xff000000, 0xffffffff).rom().region("maincpu", 0); } @@ -179,38 +162,39 @@ void midxunit_state::main_map(address_map &map) static INPUT_PORTS_START( revx ) PORT_START("IN0") - PORT_BIT( 0x000f, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) - PORT_BIT( 0x00c0, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x0f00, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0xc000, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x0000000f, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x000000c0, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x00000f00, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x00001000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x00002000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0xffffc000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("IN1") - PORT_BIT( 0x000f, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) - PORT_BIT( 0xffc0, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x0000000f, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) + PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) + PORT_BIT( 0xffffffc0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("IN2") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_TILT ) /* Slam Switch */ - PORT_SERVICE_NO_TOGGLE(0x0010, IP_ACTIVE_LOW) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN3 ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_COIN4 ) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START3 ) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_VOLUME_DOWN ) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_VOLUME_UP ) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_CUSTOM ) /* coin door */ - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BILL1 ) /* bill validator */ + PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_TILT ) /* Slam Switch */ + PORT_SERVICE_NO_TOGGLE(0x00000010, IP_ACTIVE_LOW) + PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_COIN3 ) + PORT_BIT( 0x00000100, IP_ACTIVE_LOW, IPT_COIN4 ) + PORT_BIT( 0x00000200, IP_ACTIVE_LOW, IPT_START3 ) + PORT_BIT( 0x00000400, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x00000800, IP_ACTIVE_LOW, IPT_VOLUME_DOWN ) + PORT_BIT( 0x00001000, IP_ACTIVE_LOW, IPT_VOLUME_UP ) + PORT_BIT( 0x00002000, IP_ACTIVE_LOW, IPT_CUSTOM ) /* coin door */ + PORT_BIT( 0x00004000, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x00008000, IP_ACTIVE_LOW, IPT_BILL1 ) /* bill validator */ + PORT_BIT( 0xffff0000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("DSW") PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Flip_Screen )) @@ -255,6 +239,7 @@ static INPUT_PORTS_START( revx ) PORT_DIPNAME( 0x8000, 0x8000, "Test Switch" ) PORT_DIPSETTING( 0x8000, DEF_STR( Off )) PORT_DIPSETTING( 0x0000, DEF_STR( On )) + PORT_BIT( 0xffff0000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("AN0") PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_CROSSHAIR(X, -1.0, 0.0, 0) PORT_SENSITIVITY(20) PORT_KEYDELTA(10) PORT_REVERSE PORT_PLAYER(1) diff --git a/src/mame/includes/btoads.h b/src/mame/includes/btoads.h index c8b51de940c..f339950136e 100644 --- a/src/mame/includes/btoads.h +++ b/src/mame/includes/btoads.h @@ -21,13 +21,13 @@ class btoads_state : public driver_device public: btoads_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_vram_fg0(*this, "vram_fg0", 16), - m_vram_fg1(*this, "vram_fg1", 16), - m_vram_fg_data(*this, "vram_fg_data"), - m_vram_bg0(*this, "vram_bg0"), - m_vram_bg1(*this, "vram_bg1"), - m_sprite_scale(*this, "sprite_scale"), - m_sprite_control(*this, "sprite_control"), + m_vram_fg0(*this, "vram_fg0", 32), + m_vram_fg1(*this, "vram_fg1", 32), + m_vram_fg_data(*this, "vram_fg_data", 32), + m_vram_bg0(*this, "vram_bg0", 32), + m_vram_bg1(*this, "vram_bg1", 32), + m_sprite_scale(*this, "sprite_scale", 32), + m_sprite_control(*this, "sprite_control", 32), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_bsmt(*this, "bsmt"), @@ -82,8 +82,11 @@ private: uint16_t m_sprite_dest_offs; uint16_t m_misc_control; int m_xcount; + std::unique_ptr<uint8_t[]> m_nvram_data; // in drivers/btoads + void nvram_w(offs_t offset, uint8_t data); + uint8_t nvram_r(offs_t offset); void main_sound_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); uint16_t main_sound_r(); void sound_data_w(uint8_t data); @@ -99,8 +102,6 @@ private: void display_control_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); void scroll0_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); void scroll1_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - void paletteram_w(offs_t offset, uint16_t data); - uint16_t paletteram_r(offs_t offset); void vram_bg0_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); void vram_bg1_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); uint16_t vram_bg0_r(offs_t offset); diff --git a/src/mame/includes/midwunit.h b/src/mame/includes/midwunit.h index 65a30559968..2e923243d5a 100644 --- a/src/mame/includes/midwunit.h +++ b/src/mame/includes/midwunit.h @@ -10,13 +10,22 @@ #pragma once +#include "audio/dcs.h" +#include "cpu/tms34010/tms34010.h" #include "machine/midwayic.h" +#include "video/midtunit.h" +#include "emupal.h" -class midwunit_state : public midtunit_state +class midwunit_state : public driver_device { public: midwunit_state(const machine_config &mconfig, device_type type, const char *tag) - : midtunit_state(mconfig, type, tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_video(*this, "video") + , m_dcs(*this, "dcs") + , m_palette(*this, "palette") + , m_gfxrom(*this, "gfxrom") , m_midway_serial_pic(*this, "serial_security_sim") , m_midway_serial_pic_emu(*this, "serial_security") , m_nvram(*this, "nvram") @@ -53,12 +62,18 @@ private: uint16_t midwunit_sound_r(); uint16_t midwunit_sound_state_r(); void midwunit_sound_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - void umk3_palette_hack_w(address_space &space, offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + void umk3_palette_hack_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); void wwfmania_io_0_w(uint16_t data); void init_mk3_common(); void main_map(address_map &map); + required_device<tms340x0_device> m_maincpu; + required_device<midtunit_video_device> m_video; + required_device<dcs_audio_device> m_dcs; + required_device<palette_device> m_palette; + required_memory_region m_gfxrom; + optional_device<midway_serial_pic_device> m_midway_serial_pic; optional_device<midway_serial_pic_emu_device> m_midway_serial_pic_emu; required_shared_ptr<uint16_t> m_nvram; diff --git a/src/mame/includes/midxunit.h b/src/mame/includes/midxunit.h index 8a9565aae35..0b3929cbe3d 100644 --- a/src/mame/includes/midxunit.h +++ b/src/mame/includes/midxunit.h @@ -10,15 +10,24 @@ #pragma once -#include "midtunit.h" +#include "audio/dcs.h" +#include "cpu/tms34010/tms34010.h" #include "machine/midwayic.h" +#include "machine/nvram.h" +#include "video/midtunit.h" +#include "emupal.h" -class midxunit_state : public midtunit_state +class midxunit_state : public driver_device { public: midxunit_state(const machine_config &mconfig, device_type type, const char *tag) - : midtunit_state(mconfig, type, tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_video(*this, "video") + , m_dcs(*this, "dcs") + , m_palette(*this, "palette") + , m_gfxrom(*this, "gfxrom") , m_nvram(*this, "nvram") , m_midway_serial_pic(*this, "serial_pic") , m_gun_recoil(*this, "Player%u_Gun_Recoil", 1U) @@ -32,35 +41,40 @@ protected: virtual void machine_reset() override; private: - uint16_t midxunit_cmos_r(offs_t offset); - void midxunit_cmos_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + uint8_t midxunit_cmos_r(offs_t offset); + void midxunit_cmos_w(offs_t offset, uint8_t data); void midxunit_io_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); void midxunit_unknown_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); DECLARE_WRITE_LINE_MEMBER(adc_int_w); uint16_t midxunit_status_r(); - uint16_t midxunit_uart_r(offs_t offset); - void midxunit_uart_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + uint8_t midxunit_uart_r(offs_t offset); + void midxunit_uart_w(offs_t offset, uint8_t data); uint16_t midxunit_security_r(); void midxunit_security_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); void midxunit_security_clock_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - uint16_t midxunit_sound_r(); - uint16_t midxunit_sound_state_r(); - void midxunit_sound_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); DECLARE_WRITE_LINE_MEMBER(midxunit_dcs_output_full); + uint32_t midxunit_dma_r(offs_t offset, uint32_t mem_mask = ~0); + void midxunit_dma_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); void main_map(address_map &map); - required_shared_ptr<uint16_t> m_nvram; + required_device<tms340x0_device> m_maincpu; + required_device<midtunit_video_device> m_video; + required_device<dcs_audio_device> m_dcs; + required_device<palette_device> m_palette; + required_memory_region m_gfxrom; + + required_device<nvram_device> m_nvram; required_device<midway_serial_pic_device> m_midway_serial_pic; output_finder<3> m_gun_recoil; output_finder<3> m_gun_led; uint8_t m_cmos_write_enable; uint16_t m_iodata[8]; - uint8_t m_ioshuffle[16]; uint8_t m_uart[8]; uint8_t m_security_bits; bool m_adc_int; + std::unique_ptr<uint8_t[]> m_nvram_data; }; #endif // MAME_INCLUDES_MIDXUNIT_H diff --git a/src/mame/machine/midwunit.cpp b/src/mame/machine/midwunit.cpp index 7cdbc9adda1..0bf37f9293d 100644 --- a/src/mame/machine/midwunit.cpp +++ b/src/mame/machine/midwunit.cpp @@ -7,10 +7,6 @@ **************************************************************************/ #include "emu.h" -#include "cpu/tms34010/tms34010.h" -#include "cpu/m6809/m6809.h" -#include "audio/dcs.h" -#include "includes/midtunit.h" #include "includes/midwunit.h" #define LOG_UNKNOWN (1 << 0) @@ -165,7 +161,7 @@ void midwunit_state::machine_start() /********************** Mortal Kombat 3 **********************/ -void midwunit_state::umk3_palette_hack_w(address_space &space, offs_t offset, uint16_t data, uint16_t mem_mask) +void midwunit_state::umk3_palette_hack_w(offs_t offset, uint16_t data, uint16_t mem_mask) { /* UMK3 uses a circular buffer to hold pending palette changes; the buffer holds 17 entries @@ -186,7 +182,7 @@ void midwunit_state::umk3_palette_hack_w(address_space &space, offs_t offset, ui without significantly impacting the rest of the system. */ COMBINE_DATA(&m_umk3_palette[offset]); - space.device().execute().adjust_icount(-100); + m_maincpu->adjust_icount(-100); /* printf("in=%04X%04X out=%04X%04X\n", m_umk3_palette[3], m_umk3_palette[2], m_umk3_palette[1], m_umk3_palette[0]); */ } @@ -214,14 +210,14 @@ void midwunit_state::init_mk3r10() void midwunit_state::init_umk3() { init_mk3_common(); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x0106a060, 0x0106a09f, write16_delegate(*this, FUNC(midwunit_state::umk3_palette_hack_w))); + m_maincpu->space(AS_PROGRAM).install_write_handler(0x0106a060, 0x0106a09f, write16s_delegate(*this, FUNC(midwunit_state::umk3_palette_hack_w))); m_umk3_palette = m_mainram + (0x6a060>>4); } void midwunit_state::init_umk3r11() { init_mk3_common(); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x0106a060, 0x0106a09f, write16_delegate(*this, FUNC(midwunit_state::umk3_palette_hack_w))); + m_maincpu->space(AS_PROGRAM).install_write_handler(0x0106a060, 0x0106a09f, write16s_delegate(*this, FUNC(midwunit_state::umk3_palette_hack_w))); m_umk3_palette = m_mainram + (0x6a060>>4); } diff --git a/src/mame/machine/midxunit.cpp b/src/mame/machine/midxunit.cpp index 2bcda95e389..23464c614c7 100644 --- a/src/mame/machine/midxunit.cpp +++ b/src/mame/machine/midxunit.cpp @@ -7,12 +7,7 @@ **************************************************************************/ #include "emu.h" -#include "cpu/tms34010/tms34010.h" -#include "cpu/m6809/m6809.h" -#include "audio/dcs.h" -#include "includes/midtunit.h" #include "includes/midxunit.h" -#include "midwayic.h" #define LOG_IO (1 << 0) #define LOG_UART (1 << 1) @@ -29,14 +24,14 @@ * *************************************/ -uint16_t midxunit_state::midxunit_cmos_r(offs_t offset) +uint8_t midxunit_state::midxunit_cmos_r(offs_t offset) { - return m_nvram[offset]; + return m_nvram_data[offset]; } -void midxunit_state::midxunit_cmos_w(offs_t offset, uint16_t data, uint16_t mem_mask) +void midxunit_state::midxunit_cmos_w(offs_t offset, uint8_t data) { - COMBINE_DATA(m_nvram+offset); + m_nvram_data[offset] = data; } @@ -127,14 +122,9 @@ WRITE_LINE_MEMBER(midxunit_state::midxunit_dcs_output_full) } -uint16_t midxunit_state::midxunit_uart_r(offs_t offset) +uint8_t midxunit_state::midxunit_uart_r(offs_t offset) { - int result = 0; - - /* convert to a byte offset */ - if (offset & 1) - return 0; - offset /= 2; + uint8_t result = 0; /* switch off the offset */ switch (offset) @@ -152,7 +142,7 @@ uint16_t midxunit_state::midxunit_uart_r(offs_t offset) /* non-loopback case: bit 0 means data ready, bit 2 means ok to send */ else { - int temp = midxunit_sound_state_r(); + int temp = m_dcs->control_r(); result |= (temp & 0x800) >> 9; result |= (~temp & 0x400) >> 10; machine().scheduler().synchronize(); @@ -167,7 +157,11 @@ uint16_t midxunit_state::midxunit_uart_r(offs_t offset) /* non-loopback case: read from the DCS system */ else - result = midxunit_sound_r(); + { + LOGMASKED(LOG_SOUND, "%08X:Sound read\n", m_maincpu->pc()); + + result = m_dcs->data_r(); + } break; case 5: /* register 5 seems to be like 3, but with in/out swapped */ @@ -179,7 +173,7 @@ uint16_t midxunit_state::midxunit_uart_r(offs_t offset) /* non-loopback case: bit 0 means data ready, bit 2 means ok to send */ else { - int temp = midxunit_sound_state_r(); + int temp = m_dcs->control_r(); result |= (temp & 0x800) >> 11; result |= (~temp & 0x400) >> 8; machine().scheduler().synchronize(); @@ -196,14 +190,8 @@ uint16_t midxunit_state::midxunit_uart_r(offs_t offset) } -void midxunit_state::midxunit_uart_w(offs_t offset, uint16_t data, uint16_t mem_mask) +void midxunit_state::midxunit_uart_w(offs_t offset, uint8_t data) { - /* convert to a byte offset, ignoring MSB writes */ - if ((offset & 1) || !ACCESSING_BITS_0_7) - return; - offset /= 2; - data &= 0xff; - /* switch off the offset */ switch (offset) { @@ -215,7 +203,7 @@ void midxunit_state::midxunit_uart_w(offs_t offset, uint16_t data, uint16_t mem_ /* non-loopback case: send to the DCS system */ else - midxunit_sound_w(0, data, mem_mask); + m_dcs->data_w(data); break; case 5: /* register 5 write seems to reset things */ @@ -253,12 +241,15 @@ void midxunit_state::machine_start() m_gun_recoil.resolve(); m_gun_led.resolve(); + m_nvram_data = std::make_unique<uint8_t[]>(0x2000); + m_nvram->set_base(m_nvram_data.get(), 0x2000); + save_item(NAME(m_cmos_write_enable)); save_item(NAME(m_iodata)); - save_item(NAME(m_ioshuffle)); save_item(NAME(m_uart)); save_item(NAME(m_security_bits)); save_item(NAME(m_adc_int)); + save_pointer(NAME(m_nvram_data), 0x2000); } void midxunit_state::machine_reset() @@ -269,10 +260,6 @@ void midxunit_state::machine_reset() m_security_bits = 0; - /* reset I/O shuffling */ - for (int i = 0; i < 16; i++) - m_ioshuffle[i] = i % 8; - m_dcs->set_io_callbacks(write_line_delegate(*this, FUNC(midxunit_state::midxunit_dcs_output_full)), write_line_delegate(*this)); } @@ -314,37 +301,27 @@ void midxunit_state::midxunit_security_clock_w(offs_t offset, uint16_t data, uin /************************************* * - * Sound write handlers + * DMA registers (inverted word select) * *************************************/ -uint16_t midxunit_state::midxunit_sound_r() +uint32_t midxunit_state::midxunit_dma_r(offs_t offset, uint32_t mem_mask) { - LOGMASKED(LOG_SOUND, "%08X:Sound read\n", m_maincpu->pc()); - - return m_dcs->data_r() & 0xff; -} + uint32_t result = 0; + if (ACCESSING_BITS_0_15) + result |= uint32_t(m_video->midtunit_dma_r(offset * 2 + 1)) << 16; + if (ACCESSING_BITS_16_31) + result |= m_video->midtunit_dma_r(offset * 2); -uint16_t midxunit_state::midxunit_sound_state_r() -{ - return m_dcs->control_r(); + return result; } -void midxunit_state::midxunit_sound_w(offs_t offset, uint16_t data, uint16_t mem_mask) +void midxunit_state::midxunit_dma_w(offs_t offset, uint32_t data, uint32_t mem_mask) { - /* check for out-of-bounds accesses */ - if (offset) - { - LOGMASKED(LOG_SOUND | LOG_UNKNOWN, "%s: Unexpected write to sound (hi) = %04X\n", machine().describe_context(), data); - return; - } - - /* call through based on the sound type */ - if (ACCESSING_BITS_0_7) - { - LOGMASKED(LOG_SOUND, "%s: Sound write = %04X\n", machine().describe_context(), data); - m_dcs->data_w(data & 0xff); - } + if (ACCESSING_BITS_0_15) + m_video->midtunit_dma_w(offset * 2 + 1, data >> 16); + if (ACCESSING_BITS_16_31) + m_video->midtunit_dma_w(offset * 2, data & 0xffff); } diff --git a/src/mame/video/btoads.cpp b/src/mame/video/btoads.cpp index c301aa02c28..b891357d00e 100644 --- a/src/mame/video/btoads.cpp +++ b/src/mame/video/btoads.cpp @@ -121,25 +121,6 @@ void btoads_state::scroll1_w(offs_t offset, uint16_t data, uint16_t mem_mask) /************************************* * - * Palette RAM - * - *************************************/ - -void btoads_state::paletteram_w(offs_t offset, uint16_t data) -{ - m_tlc34076->write(offset/2, data); -} - - -uint16_t btoads_state::paletteram_r(offs_t offset) -{ - return m_tlc34076->read(offset/2); -} - - - -/************************************* - * * Background video RAM * *************************************/ |