// license:BSD-3-Clause // copyright-holders:Aaron Giles,smf /*************************************************************************** timekpr.h Various ST Microelectronics timekeeper SRAM implementations: - M48T02 - M48T35 - M48T37 - M48T58 - MK48T08 - MK48T12 ***************************************************************************/ #ifndef MAME_MACHINE_TIMEKPR_H #define MAME_MACHINE_TIMEKPR_H #pragma once //************************************************************************** // TYPE DEFINITIONS //************************************************************************** // ======================> timekeeper_device class timekeeper_device : public device_t, public device_nvram_interface { public: DECLARE_WRITE8_MEMBER( write ); DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER(watchdog_write); auto reset_cb() { return m_reset_cb.bind(); } auto irq_cb() { return m_irq_cb.bind(); } protected: // construction/destruction timekeeper_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, int size); // 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; // device_nvram_interface overrides virtual void nvram_default() override; virtual void nvram_read(emu_file &file) override; virtual void nvram_write(emu_file &file) override; TIMER_CALLBACK_MEMBER(watchdog_callback); devcb_write_line m_reset_cb; devcb_write_line m_irq_cb; private: void counters_to_ram(); void counters_from_ram(); // internal state uint8_t m_control; uint8_t m_seconds; uint8_t m_minutes; uint8_t m_hours; uint8_t m_day; uint8_t m_date; uint8_t m_month; uint8_t m_year; uint8_t m_century; std::vector m_data; optional_region_ptr m_default_data; emu_timer* m_watchdog_timer; attotime m_watchdog_delay; protected: int const m_size; int m_offset_watchdog; int m_offset_control; int m_offset_seconds; int m_offset_minutes; int m_offset_hours; int m_offset_day; int m_offset_date; int m_offset_month; int m_offset_year; int m_offset_century; int m_offset_flags; }; class m48t02_device : public timekeeper_device { public: m48t02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); }; class m48t35_device : public timekeeper_device { public: m48t35_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); }; class m48t37_device : public timekeeper_device { public: m48t37_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); }; class m48t58_device : public timekeeper_device { public: m48t58_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); }; class mk48t08_device : public timekeeper_device { public: mk48t08_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); }; class mk48t12_device : public timekeeper_device { public: mk48t12_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); }; // device type definition DECLARE_DEVICE_TYPE(M48T02, m48t02_device) DECLARE_DEVICE_TYPE(M48T35, m48t35_device) DECLARE_DEVICE_TYPE(M48T37, m48t37_device) DECLARE_DEVICE_TYPE(M48T58, m48t58_device) DECLARE_DEVICE_TYPE(MK48T08, mk48t08_device) DECLARE_DEVICE_TYPE(MK48T12, mk48t12_device) #endif // MAME_MACHINE_TIMEKPR_H