diff options
Diffstat (limited to 'trunk/src/emu/machine/ds2401.h')
-rw-r--r-- | trunk/src/emu/machine/ds2401.h | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/trunk/src/emu/machine/ds2401.h b/trunk/src/emu/machine/ds2401.h new file mode 100644 index 00000000000..353735899f7 --- /dev/null +++ b/trunk/src/emu/machine/ds2401.h @@ -0,0 +1,69 @@ +/* + * DS2401 + * + * Dallas Semiconductor + * Silicon Serial Number + * + */ + +#ifndef __DS2401_H__ +#define __DS2401_H__ + +#define MCFG_DS2401_ADD(_tag) \ + MCFG_DEVICE_ADD(_tag, DS2401, 0) + +#include "emu.h" + +class ds2401_device : public device_t +{ +public: + // construction/destruction + ds2401_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + void write(bool line); + bool read(); + UINT8 direct_read(int index); + +protected: + enum { + SIZE_DATA = 8, + + COMMAND_READROM = 0x33 + }; + + 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(); + virtual void device_reset(); + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); + + // internal state + int state, bit, shift; + UINT8 byte; + bool rx, tx; + UINT8 data[SIZE_DATA]; + emu_timer *timer_main, *timer_reset; + attotime t_samp, t_rdv, t_rstl, t_pdh, t_pdl; + +private: + inline void ATTR_PRINTF(3,4) verboselog(int n_level, const char *s_fmt, ...); +}; + + +// device type definition +extern const device_type DS2401; + +#endif |