summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/lc8670/lc8670.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/lc8670/lc8670.h')
-rw-r--r--src/devices/cpu/lc8670/lc8670.h56
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;