// license:BSD-3-Clause // copyright-holders:smf /* * DS2401 * * Dallas Semiconductor * Silicon Serial Number * */ #ifndef MAME_MACHINE_DS2401_H #define MAME_MACHINE_DS2401_H #pragma once class ds2401_device : public device_t { public: // construction/destruction ds2401_device(const machine_config &mconfig, const char *tag, device_t *owner) : ds2401_device(mconfig, tag, owner, uint32_t(0)) { } ds2401_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); DECLARE_WRITE_LINE_MEMBER( write ); DECLARE_READ_LINE_MEMBER( read ); uint8_t direct_read(int index); protected: enum { SIZE_DATA = 8, COMMAND_READROM = 0x33, COMMAND_READROM_COMPAT = 0x0f }; enum { STATE_IDLE, STATE_RESET, STATE_RESET1, STATE_RESET2, STATE_COMMAND, STATE_READROM }; enum { TIMER_MAIN, TIMER_RESET }; // 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; // internal state int m_state, m_bit, m_shift; uint8_t m_byte; bool m_rx, m_tx; uint8_t m_data[SIZE_DATA]; emu_timer *m_timer_main, *m_timer_reset; attotime t_samp, t_rdv, t_rstl, t_pdh, t_pdl; private: inline void verboselog(int n_level, const char *s_fmt, ...) ATTR_PRINTF(3,4); }; // device type definition DECLARE_DEVICE_TYPE(DS2401, ds2401_device) #endif // MAME_MACHINE_DS2401_H