summaryrefslogtreecommitdiffstatshomepage
path: root/trunk/src/emu/machine/ds2401.h
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/emu/machine/ds2401.h')
-rw-r--r--trunk/src/emu/machine/ds2401.h69
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