diff options
author | 2017-07-31 23:47:16 -0400 | |
---|---|---|
committer | 2017-08-01 00:21:19 -0400 | |
commit | bb0964f9a284b15851773f5428bd602ca01cc28b (patch) | |
tree | e2c7c0dc17e42a88046cf6de8b357daee868b9d9 /src/devices/cpu | |
parent | d050ba956ed79015389bc2cba7399db9cbd62684 (diff) |
Changes to debugger memory address translation
- memory_translate now returns an address space number rather a boolean flag, permitting addresses in part of one space to map to an entirely different space. This is primarily intended to help MCUs which have blocks of internal memory that can be dynamically remapped, but may also allow for more accurate emulation of MMUs that drive multiple external address spaces, since the old limit of four address spaces per MAME device has been lifted.
- memory_translate has also been made a const method, in spite of a couple of badly behaved CPU cores that can't honestly treat it as one.
- The (read|write)_(byte|word|dword|qword|memory|opcode) accessors have been transferred from debugger_cpu to device_memory_interface, with somewhat modified arguments corresponding to the translate function it calls through to if requested.
Diffstat (limited to 'src/devices/cpu')
-rw-r--r-- | src/devices/cpu/arm7/arm7.cpp | 6 | ||||
-rw-r--r-- | src/devices/cpu/arm7/arm7.h | 2 | ||||
-rw-r--r-- | src/devices/cpu/h6280/h6280.cpp | 6 | ||||
-rw-r--r-- | src/devices/cpu/h6280/h6280.h | 4 | ||||
-rw-r--r-- | src/devices/cpu/i386/i386.cpp | 7 | ||||
-rw-r--r-- | src/devices/cpu/i386/i386.h | 6 | ||||
-rw-r--r-- | src/devices/cpu/i386/i386priv.h | 4 | ||||
-rw-r--r-- | src/devices/cpu/i86/i286.cpp | 4 | ||||
-rw-r--r-- | src/devices/cpu/i86/i286.h | 2 | ||||
-rw-r--r-- | src/devices/cpu/m6502/m4510.cpp | 4 | ||||
-rw-r--r-- | src/devices/cpu/m6502/m4510.h | 6 | ||||
-rw-r--r-- | src/devices/cpu/m68000/m68000.h | 4 | ||||
-rw-r--r-- | src/devices/cpu/m68000/m68kcpu.cpp | 19 | ||||
-rw-r--r-- | src/devices/cpu/m68000/m68kmmu.h | 2 | ||||
-rw-r--r-- | src/devices/cpu/mips/mips3.cpp | 21 | ||||
-rw-r--r-- | src/devices/cpu/mips/mips3.h | 3 | ||||
-rw-r--r-- | src/devices/cpu/mips/mips3fe.cpp | 2 | ||||
-rw-r--r-- | src/devices/cpu/powerpc/ppc.h | 4 | ||||
-rw-r--r-- | src/devices/cpu/powerpc/ppccom.cpp | 8 | ||||
-rw-r--r-- | src/devices/cpu/powerpc/ppcfe.cpp | 2 | ||||
-rw-r--r-- | src/devices/cpu/z180/z180.cpp | 4 | ||||
-rw-r--r-- | src/devices/cpu/z180/z180.h | 2 |
22 files changed, 64 insertions, 58 deletions
diff --git a/src/devices/cpu/arm7/arm7.cpp b/src/devices/cpu/arm7/arm7.cpp index 314003c8bdb..734f5513f28 100644 --- a/src/devices/cpu/arm7/arm7.cpp +++ b/src/devices/cpu/arm7/arm7.cpp @@ -443,14 +443,14 @@ bool arm7_cpu_device::arm7_tlb_translate(offs_t &addr, int flags) } -bool arm7_cpu_device::memory_translate(int spacenum, int intention, offs_t &address) +int arm7_cpu_device::memory_translate(int spacenum, int intention, offs_t &address) const { /* only applies to the program address space and only does something if the MMU's enabled */ if( spacenum == AS_PROGRAM && ( m_control & COPRO_CTRL_MMU_EN ) ) { - return arm7_tlb_translate(address, 0); + return const_cast<arm7_cpu_device &>(*this).arm7_tlb_translate(address, 0) ? AS_PROGRAM : AS_INVALID; } - return true; + return spacenum; } diff --git a/src/devices/cpu/arm7/arm7.h b/src/devices/cpu/arm7/arm7.h index 7ee80f91fdd..be9eec4de0c 100644 --- a/src/devices/cpu/arm7/arm7.h +++ b/src/devices/cpu/arm7/arm7.h @@ -68,7 +68,7 @@ protected: // device_memory_interface overrides virtual space_config_vector memory_space_config() const override; - virtual bool memory_translate(int spacenum, int intention, offs_t &address) override; + virtual int memory_translate(int spacenum, int intention, offs_t &address) const override; // device_state_interface overrides virtual void state_export(const device_state_entry &entry) override; diff --git a/src/devices/cpu/h6280/h6280.cpp b/src/devices/cpu/h6280/h6280.cpp index c8a81af0532..5a53243b2d1 100644 --- a/src/devices/cpu/h6280/h6280.cpp +++ b/src/devices/cpu/h6280/h6280.cpp @@ -329,7 +329,7 @@ void h6280_device::device_stop() } -inline uint32_t h6280_device::translated(uint16_t addr) +inline uint32_t h6280_device::translated(uint16_t addr) const { return ((m_mmr[((addr) >> 13) & 7] << 13) | ((addr) & 0x1fff)); } @@ -2571,12 +2571,12 @@ WRITE8_MEMBER( h6280_device::timer_w ) } } -bool h6280_device::memory_translate(int spacenum, int intention, offs_t &address) +int h6280_device::memory_translate(int spacenum, int intention, offs_t &address) const { if (spacenum == AS_PROGRAM) address = translated(address); - return true; + return spacenum; } uint8_t h6280_device::io_get_buffer() diff --git a/src/devices/cpu/h6280/h6280.h b/src/devices/cpu/h6280/h6280.h index dc6a3ddb47f..80b693ccf3a 100644 --- a/src/devices/cpu/h6280/h6280.h +++ b/src/devices/cpu/h6280/h6280.h @@ -86,7 +86,7 @@ protected: // device_memory_interface overrides virtual space_config_vector memory_space_config() const override; - virtual bool memory_translate(int spacenum, int intention, offs_t &address) override; + virtual int memory_translate(int spacenum, int intention, offs_t &address) const override; // device_disasm_interface overrides virtual uint32_t disasm_min_opcode_bytes() const override; @@ -177,7 +177,7 @@ protected: PROTOTYPES(op) - uint32_t translated(uint16_t addr); + uint32_t translated(uint16_t addr) const; void h6280_cycles(int cyc); void set_nz(uint8_t n); void clear_t(); diff --git a/src/devices/cpu/i386/i386.cpp b/src/devices/cpu/i386/i386.cpp index 4b4b8286818..fdbdd82d9d0 100644 --- a/src/devices/cpu/i386/i386.cpp +++ b/src/devices/cpu/i386/i386.cpp @@ -4012,13 +4012,12 @@ void i386_device::execute_run() /*************************************************************************/ -bool i386_device::memory_translate(int spacenum, int intention, offs_t &address) +int i386_device::memory_translate(int spacenum, int intention, offs_t &address) const { - bool ret = true; if(spacenum == AS_PROGRAM) - ret = i386_translate_address(intention, &address, nullptr); + spacenum = i386_translate_address(intention, &address, nullptr) ? AS_PROGRAM : AS_INVALID; address &= m_a20_mask; - return ret; + return spacenum; } offs_t i386_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) diff --git a/src/devices/cpu/i386/i386.h b/src/devices/cpu/i386/i386.h index 3701f6c6704..4712bdfffad 100644 --- a/src/devices/cpu/i386/i386.h +++ b/src/devices/cpu/i386/i386.h @@ -60,7 +60,7 @@ protected: // device_memory_interface overrides virtual space_config_vector memory_space_config() const override; - virtual bool memory_translate(int spacenum, int intention, offs_t &address) override; + virtual int memory_translate(int spacenum, int intention, offs_t &address) const override; // device_state_interface overrides virtual void state_import(const device_state_entry &entry) override; @@ -296,8 +296,8 @@ protected: void register_state_i386_x87(); void register_state_i386_x87_xmm(); inline uint32_t i386_translate(int segment, uint32_t ip, int rwn); - inline vtlb_entry get_permissions(uint32_t pte, int wp); - bool i386_translate_address(int intention, offs_t *address, vtlb_entry *entry); + inline vtlb_entry get_permissions(uint32_t pte, int wp) const; + bool i386_translate_address(int intention, offs_t *address, vtlb_entry *entry) const; inline bool translate_address(int pl, int type, uint32_t *address, uint32_t *error); inline void CHANGE_PC(uint32_t pc); inline void NEAR_BRANCH(int32_t offs); diff --git a/src/devices/cpu/i386/i386priv.h b/src/devices/cpu/i386/i386priv.h index 0a917c631a3..24df4b5f4fb 100644 --- a/src/devices/cpu/i386/i386priv.h +++ b/src/devices/cpu/i386/i386priv.h @@ -381,7 +381,7 @@ uint32_t i386_device::i386_translate(int segment, uint32_t ip, int rwn) #define VTLB_FLAG_DIRTY 0x100 -vtlb_entry i386_device::get_permissions(uint32_t pte, int wp) +vtlb_entry i386_device::get_permissions(uint32_t pte, int wp) const { vtlb_entry ret = VTLB_READ_ALLOWED | ((pte & 4) ? VTLB_USER_READ_ALLOWED : 0); if(!wp) @@ -391,7 +391,7 @@ vtlb_entry i386_device::get_permissions(uint32_t pte, int wp) return ret; } -bool i386_device::i386_translate_address(int intention, offs_t *address, vtlb_entry *entry) +bool i386_device::i386_translate_address(int intention, offs_t *address, vtlb_entry *entry) const { uint32_t a = *address; uint32_t pdbr = m_cr[3] & 0xfffff000; diff --git a/src/devices/cpu/i86/i286.cpp b/src/devices/cpu/i86/i286.cpp index c3418b16efc..8abc3bbf994 100644 --- a/src/devices/cpu/i86/i286.cpp +++ b/src/devices/cpu/i86/i286.cpp @@ -371,12 +371,12 @@ void i80286_cpu_device::state_string_export(const device_state_entry &entry, std } } -bool i80286_cpu_device::memory_translate(int spacenum, int intention, offs_t &address) +int i80286_cpu_device::memory_translate(int spacenum, int intention, offs_t &address) const { if(spacenum == AS_PROGRAM) address &= m_amask; - return true; + return spacenum; } void i80286_cpu_device::execute_set_input(int inptnum, int state) diff --git a/src/devices/cpu/i86/i286.h b/src/devices/cpu/i86/i286.h index ad2447b78e7..eb4058d0804 100644 --- a/src/devices/cpu/i86/i286.h +++ b/src/devices/cpu/i86/i286.h @@ -86,7 +86,7 @@ protected: virtual uint32_t execute_input_lines() const override { return 1; } virtual void execute_set_input(int inputnum, int state) override; - bool memory_translate(int spacenum, int intention, offs_t &address) override; + int memory_translate(int spacenum, int intention, offs_t &address) const override; virtual void interrupt(int int_num, int trap = 1) override { if(trap) throw TRAP(int_num, (uint16_t)-1); else interrupt_descriptor(int_num, 0, 0); } virtual uint8_t read_port_byte(uint16_t port) override; diff --git a/src/devices/cpu/m6502/m4510.cpp b/src/devices/cpu/m6502/m4510.cpp index 852d3e5807a..71a038435ce 100644 --- a/src/devices/cpu/m6502/m4510.cpp +++ b/src/devices/cpu/m6502/m4510.cpp @@ -56,14 +56,14 @@ void m4510_device::device_reset() m65ce02_device::device_reset(); } -bool m4510_device::memory_translate(int spacenum, int intention, offs_t &address) +int m4510_device::memory_translate(int spacenum, int intention, offs_t &address) const { if (spacenum == AS_PROGRAM) { address = map(address); } - return true; + return spacenum; } m4510_device::mi_4510_normal::mi_4510_normal(m4510_device *_base) diff --git a/src/devices/cpu/m6502/m4510.h b/src/devices/cpu/m6502/m4510.h index b093c8aeb56..26cd6ec1422 100644 --- a/src/devices/cpu/m6502/m4510.h +++ b/src/devices/cpu/m6502/m4510.h @@ -30,7 +30,7 @@ public: protected: uint32_t map_offset[2]; uint8_t map_enable; - bool nomap; + mutable bool nomap; class mi_4510_normal : public memory_interface { public: @@ -54,9 +54,9 @@ protected: virtual void device_start() override; virtual void device_reset() override; - virtual bool memory_translate(int spacenum, int intention, offs_t &address) override; + virtual int memory_translate(int spacenum, int intention, offs_t &address) const override; - inline uint32_t map(uint16_t adr) { + inline uint32_t map(uint16_t adr) const { if(map_enable & (1 << (adr >> 13))) { nomap = false; return adr + map_offset[adr >> 15]; diff --git a/src/devices/cpu/m68000/m68000.h b/src/devices/cpu/m68000/m68000.h index 776f097967c..3a45bea87f3 100644 --- a/src/devices/cpu/m68000/m68000.h +++ b/src/devices/cpu/m68000/m68000.h @@ -395,7 +395,7 @@ public: virtual void state_string_export(const device_state_entry &entry, std::string &str) const override; // device_memory_interface overrides - virtual bool memory_translate(int space, int intention, offs_t &address) override; + virtual int memory_translate(int space, int intention, offs_t &address) const override; }; @@ -596,7 +596,7 @@ public: virtual uint32_t execute_default_irq_vector() const override { return -1; }; - virtual bool memory_translate(int space, int intention, offs_t &address) override; + virtual int memory_translate(int space, int intention, offs_t &address) const override; // device-level overrides virtual void device_start() override; diff --git a/src/devices/cpu/m68000/m68kcpu.cpp b/src/devices/cpu/m68000/m68kcpu.cpp index c4199ecdf15..945e9aafce5 100644 --- a/src/devices/cpu/m68000/m68kcpu.cpp +++ b/src/devices/cpu/m68000/m68kcpu.cpp @@ -704,7 +704,7 @@ static void m68k_cause_bus_error(m68000_base_device *m68k) m68ki_jump_vector(m68k, EXCEPTION_BUS_ERROR); } -bool m68000_base_device::memory_translate(int space, int intention, offs_t &address) +int m68000_base_device::memory_translate(int space, int intention, offs_t &address) const { /* only applies to the program address space and only does something if the MMU's enabled */ { @@ -712,28 +712,29 @@ bool m68000_base_device::memory_translate(int space, int intention, offs_t &addr if ((space == AS_PROGRAM) && ((pmmu_enabled) || (CPU_TYPE_IS_040_PLUS(cpu_type)))) { // FIXME: mmu_tmp_sr will be overwritten in pmmu_translate_addr_with_fc - uint16_t temp_mmu_tmp_sr = mmu_tmp_sr; + auto &cpu = const_cast<m68000_base_device &>(*this); + uint16_t temp_mmu_tmp_sr = cpu.mmu_tmp_sr; int mode = s_flag ? FUNCTION_CODE_SUPERVISOR_PROGRAM : FUNCTION_CODE_USER_PROGRAM; // uint32_t va=address; if (CPU_TYPE_IS_040_PLUS(cpu_type)) { - address = pmmu_translate_addr_with_fc_040(this, address, mode, 1); + address = pmmu_translate_addr_with_fc_040(&cpu, address, mode, 1); } else { - address = pmmu_translate_addr_with_fc(this, address, mode, 1); + address = pmmu_translate_addr_with_fc(&cpu, address, mode, 1); } - if ((mmu_tmp_sr & M68K_MMU_SR_INVALID) != 0) { + if ((cpu.mmu_tmp_sr & M68K_MMU_SR_INVALID) != 0) { // logerror("cpu_translate_m68k failed with mmu_sr=%04x va=%08x pa=%08x\n",mmu_tmp_sr,va ,address); address = 0; } - mmu_tmp_sr = temp_mmu_tmp_sr; + cpu.mmu_tmp_sr = temp_mmu_tmp_sr; } } - return true; + return space; } @@ -2627,7 +2628,7 @@ void m68020pmmu_device::device_start() init_cpu_m68020pmmu(); } -bool m68020hmmu_device::memory_translate(int space, int intention, offs_t &address) +int m68020hmmu_device::memory_translate(int space, int intention, offs_t &address) const { /* only applies to the program address space and only does something if the MMU's enabled */ { @@ -2636,7 +2637,7 @@ bool m68020hmmu_device::memory_translate(int space, int intention, offs_t &addre address = hmmu_translate_addr(this, address); } } - return true; + return space; } diff --git a/src/devices/cpu/m68000/m68kmmu.h b/src/devices/cpu/m68000/m68kmmu.h index d477b31f187..7ada8fb69b4 100644 --- a/src/devices/cpu/m68000/m68kmmu.h +++ b/src/devices/cpu/m68000/m68kmmu.h @@ -1111,7 +1111,7 @@ void m68881_mmu_ops(m68000_base_device *m68k) /* Apple HMMU translation is much simpler */ -static inline uint32_t hmmu_translate_addr(m68000_base_device *m68k, uint32_t addr_in) +static inline uint32_t hmmu_translate_addr(const m68000_base_device *m68k, uint32_t addr_in) { uint32_t addr_out; diff --git a/src/devices/cpu/mips/mips3.cpp b/src/devices/cpu/mips/mips3.cpp index d55d26623d1..3e812f73fc9 100644 --- a/src/devices/cpu/mips/mips3.cpp +++ b/src/devices/cpu/mips/mips3.cpp @@ -952,17 +952,22 @@ void mips3_device::device_reset() } -bool mips3_device::memory_translate(int spacenum, int intention, offs_t &address) +int mips3_device::memory_translate(int spacenum, int intention, offs_t &address) const { /* only applies to the program address space */ if (spacenum == AS_PROGRAM) - { - const vtlb_entry *table = vtlb_table(); - vtlb_entry entry = table[address >> MIPS3_MIN_PAGE_SHIFT]; - if ((entry & (1 << (intention & (TRANSLATE_TYPE_MASK | TRANSLATE_USER_MASK)))) == 0) - return false; - address = (entry & ~MIPS3_MIN_PAGE_MASK) | (address & MIPS3_MIN_PAGE_MASK); - } + return translate_address_internal(intention, address) ? AS_PROGRAM : AS_INVALID; + return spacenum; +} + + +bool mips3_device::translate_address_internal(int intention, offs_t &address) const +{ + const vtlb_entry *table = vtlb_table(); + vtlb_entry entry = table[address >> MIPS3_MIN_PAGE_SHIFT]; + if ((entry & (1 << (intention & (TRANSLATE_TYPE_MASK | TRANSLATE_USER_MASK)))) == 0) + return false; + address = (entry & ~MIPS3_MIN_PAGE_MASK) | (address & MIPS3_MIN_PAGE_MASK); return true; } diff --git a/src/devices/cpu/mips/mips3.h b/src/devices/cpu/mips/mips3.h index 6d763c8792b..e7256065baa 100644 --- a/src/devices/cpu/mips/mips3.h +++ b/src/devices/cpu/mips/mips3.h @@ -305,7 +305,7 @@ protected: // device_memory_interface overrides virtual space_config_vector memory_space_config() const override; - virtual bool memory_translate(int spacenum, int intention, offs_t &address) override; + virtual int memory_translate(int spacenum, int intention, offs_t &address) const override; // device_state_interface overrides virtual void state_export(const device_state_entry &entry) override; @@ -575,6 +575,7 @@ private: void log_register_list(drcuml_state *drcuml, const char *string, const uint32_t *reglist, const uint32_t *regnostarlist); void log_opcode_desc(drcuml_state *drcuml, const opcode_desc *desclist, int indent); + bool translate_address_internal(int intention, offs_t &address) const; }; diff --git a/src/devices/cpu/mips/mips3fe.cpp b/src/devices/cpu/mips/mips3fe.cpp index a530d026c75..69ab3c2ca3e 100644 --- a/src/devices/cpu/mips/mips3fe.cpp +++ b/src/devices/cpu/mips/mips3fe.cpp @@ -39,7 +39,7 @@ bool mips3_frontend::describe(opcode_desc &desc, const opcode_desc *prev) // compute the physical PC assert((desc.physpc & 3) == 0); - if (!m_mips3->memory_translate(AS_PROGRAM, TRANSLATE_FETCH, desc.physpc)) + if (!m_mips3->translate_address_internal(TRANSLATE_FETCH, desc.physpc)) { // uh-oh: a page fault; leave the description empty and just if this is the first instruction, leave it empty and // mark as needing to validate; otherwise, just end the sequence here diff --git a/src/devices/cpu/powerpc/ppc.h b/src/devices/cpu/powerpc/ppc.h index dd09cce15e4..4c808dd9767 100644 --- a/src/devices/cpu/powerpc/ppc.h +++ b/src/devices/cpu/powerpc/ppc.h @@ -260,7 +260,7 @@ protected: // device_memory_interface overrides virtual space_config_vector memory_space_config() const override; - virtual bool memory_translate(int spacenum, int intention, offs_t &address) override; + virtual int memory_translate(int spacenum, int intention, offs_t &address) const override; // device_state_interface overrides virtual void state_export(const device_state_entry &entry) override; @@ -626,7 +626,7 @@ protected: void set_timebase(uint64_t newtb); uint32_t get_decrementer(); void set_decrementer(uint32_t newdec); - uint32_t ppccom_translate_address_internal(int intention, offs_t &address); + uint32_t ppccom_translate_address_internal(int intention, offs_t &address) const; void ppc4xx_set_irq_line(uint32_t bitmask, int state); int ppc4xx_get_irq_line(uint32_t bitmask); void ppc4xx_dma_update_irq_states(); diff --git a/src/devices/cpu/powerpc/ppccom.cpp b/src/devices/cpu/powerpc/ppccom.cpp index 56a7325c460..737a29e2568 100644 --- a/src/devices/cpu/powerpc/ppccom.cpp +++ b/src/devices/cpu/powerpc/ppccom.cpp @@ -1272,7 +1272,7 @@ void ppc_device::ppccom_dcstore_callback() filling -------------------------------------------------*/ -uint32_t ppc_device::ppccom_translate_address_internal(int intention, offs_t &address) +uint32_t ppc_device::ppccom_translate_address_internal(int intention, offs_t &address) const { int transpriv = ((intention & TRANSLATE_USER_MASK) == 0); // 1 for supervisor, 0 for user int transtype = intention & TRANSLATE_TYPE_MASK; @@ -1467,14 +1467,14 @@ uint32_t ppc_device::ppccom_translate_address_internal(int intention, offs_t &ad from logical to physical -------------------------------------------------*/ -bool ppc_device::memory_translate(int spacenum, int intention, offs_t &address) +int ppc_device::memory_translate(int spacenum, int intention, offs_t &address) const { /* only applies to the program address space */ if (spacenum != AS_PROGRAM) - return true; + return spacenum; /* translation is successful if the internal routine returns 0 or 1 */ - return (ppccom_translate_address_internal(intention, address) <= 1); + return (ppccom_translate_address_internal(intention, address) <= 1) ? AS_PROGRAM : AS_INVALID; } diff --git a/src/devices/cpu/powerpc/ppcfe.cpp b/src/devices/cpu/powerpc/ppcfe.cpp index 956fad03374..2a5967061d5 100644 --- a/src/devices/cpu/powerpc/ppcfe.cpp +++ b/src/devices/cpu/powerpc/ppcfe.cpp @@ -74,7 +74,7 @@ bool ppc_frontend::describe(opcode_desc &desc, const opcode_desc *prev) int regnum; // compute the physical PC - if (!m_ppc->memory_translate(AS_PROGRAM, TRANSLATE_FETCH, desc.physpc)) + if (m_ppc->ppccom_translate_address_internal(TRANSLATE_FETCH, desc.physpc) > 1) { // uh-oh: a page fault; leave the description empty and just if this is the first instruction, leave it empty and // mark as needing to validate; otherwise, just end the sequence here diff --git a/src/devices/cpu/z180/z180.cpp b/src/devices/cpu/z180/z180.cpp index a1dda238c60..602d094e0bf 100644 --- a/src/devices/cpu/z180/z180.cpp +++ b/src/devices/cpu/z180/z180.cpp @@ -2552,13 +2552,13 @@ void z180_device::execute_set_input(int irqline, int state) } /* logical to physical address translation */ -bool z180_device::memory_translate(int spacenum, int intention, offs_t &address) +int z180_device::memory_translate(int spacenum, int intention, offs_t &address) const { if (spacenum == AS_PROGRAM) { address = MMU_REMAP_ADDR(address); } - return true; + return spacenum; } diff --git a/src/devices/cpu/z180/z180.h b/src/devices/cpu/z180/z180.h index dca5c963539..6c8073cf7de 100644 --- a/src/devices/cpu/z180/z180.h +++ b/src/devices/cpu/z180/z180.h @@ -150,7 +150,7 @@ protected: // device_memory_interface overrides virtual space_config_vector memory_space_config() const override; - virtual bool memory_translate(int spacenum, int intention, offs_t &address) override; + virtual int memory_translate(int spacenum, int intention, offs_t &address) const override; // device_state_interface overrides virtual void state_import(const device_state_entry &entry) override; |