diff options
Diffstat (limited to 'src/devices/cpu/lc8670/lc8670.h')
-rw-r--r-- | src/devices/cpu/lc8670/lc8670.h | 56 |
1 files changed, 22 insertions, 34 deletions
diff --git a/src/devices/cpu/lc8670/lc8670.h b/src/devices/cpu/lc8670/lc8670.h index c7d440d93bb..2f92c6c6e6c 100644 --- a/src/devices/cpu/lc8670/lc8670.h +++ b/src/devices/cpu/lc8670/lc8670.h @@ -60,12 +60,12 @@ public: uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); // internal map handlers - DECLARE_READ8_MEMBER(regs_r); - DECLARE_WRITE8_MEMBER(regs_w); - DECLARE_READ8_MEMBER(mram_r); - DECLARE_WRITE8_MEMBER(mram_w); - DECLARE_READ8_MEMBER(xram_r); - DECLARE_WRITE8_MEMBER(xram_w); + uint8_t regs_r(offs_t offset); + void regs_w(offs_t offset, uint8_t data); + uint8_t mram_r(offs_t offset); + void mram_w(offs_t offset, uint8_t data); + uint8_t xram_r(offs_t offset); + void xram_w(offs_t offset, uint8_t data); // configuration helpers void set_cpu_clock(clock_source source, uint32_t clock) { m_clocks[unsigned(source)] = clock; } @@ -73,27 +73,16 @@ public: template <typename T, typename U, typename V> void set_clock_sources(T &&sub_clock, U &&rc_clock, V &&cf_clock) { - set_cpu_clock(lc8670_cpu_device::clock_source::SUB, sub_clock); - set_cpu_clock(lc8670_cpu_device::clock_source::RC, rc_clock); - set_cpu_clock(lc8670_cpu_device::clock_source::CF, cf_clock); + set_cpu_clock(lc8670_cpu_device::clock_source::SUB, std::forward<T>(sub_clock)); + set_cpu_clock(lc8670_cpu_device::clock_source::RC, std::forward<U>(rc_clock)); + set_cpu_clock(lc8670_cpu_device::clock_source::CF, std::forward<V>(cf_clock)); } auto bank_cb() { return m_bankswitch_func.bind(); } - template <typename Object> void set_lcd_update_cb(Object &&cb) { m_lcd_update_func = std::forward<Object>(cb); } - void set_lcd_update_cb(lcd_update_delegate callback) { m_lcd_update_func = callback; } - template <class FunctionClass> void set_lcd_update_cb(const char *devname, - uint32_t (FunctionClass::*callback)(bitmap_ind16 &, const rectangle &, uint8_t*, bool, uint8_t), const char *name) - { - set_lcd_update_cb(lcd_update_delegate(callback, name, devname, static_cast<FunctionClass *>(nullptr))); - } - template <class FunctionClass> void set_lcd_update_cb( - uint32_t (FunctionClass::*callback)(bitmap_ind16 &, const rectangle &, uint8_t*, bool, uint8_t), const char *name) - { - set_lcd_update_cb(lcd_update_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr))); - } + template <typename... T> void set_lcd_update_cb(T &&... args) { m_lcd_update_func.set(std::forward<T>(args)...); } - void lc8670_internal_map(address_map &map); + void lc8670_internal_map(address_map &map) ATTR_COLD; protected: enum { @@ -102,14 +91,12 @@ protected: }; // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // device_execute_interface overrides - virtual uint32_t execute_min_cycles() const override { return 1; } - virtual uint32_t execute_max_cycles() const override { return 7; } - virtual uint32_t execute_input_lines() const override { return 4; } + virtual uint32_t execute_min_cycles() const noexcept override { return 1; } + virtual uint32_t execute_max_cycles() const noexcept override { return 7; } virtual void execute_run() override; virtual void execute_set_input(int inputnum, int state) override; @@ -123,6 +110,9 @@ protected: // device_disasm_interface overrides virtual std::unique_ptr<util::disasm_interface> create_disassembler() override; + TIMER_CALLBACK_MEMBER(base_timer_update); + TIMER_CALLBACK_MEMBER(clock_timer_update); + private: // helpers inline uint8_t fetch(); @@ -200,14 +190,12 @@ private: address_space_config m_data_config; address_space_config m_io_config; - address_space * m_program; // program space (ROM or flash) - address_space * m_data; // internal RAM/register - address_space * m_io; // I/O ports - memory_access_cache<0, 0, ENDIANNESS_BIG> *m_cache; + memory_access<16, 0, 0, ENDIANNESS_BIG>::cache m_cache; + memory_access<16, 0, 0, ENDIANNESS_BIG>::specific m_program; // program space (ROM or flash) + memory_access< 9, 0, 0, ENDIANNESS_BIG>::specific m_data; // internal RAM/register + memory_access< 8, 0, 0, ENDIANNESS_BIG>::specific m_io; // I/O ports // timers - static const device_timer_id BASE_TIMER = 1; - static const device_timer_id CLOCK_TIMER = 2; emu_timer * m_basetimer; emu_timer * m_clocktimer; |