summaryrefslogtreecommitdiffstatshomepage
path: root/trunk/src/emu/machine/cdp1871.h
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/emu/machine/cdp1871.h')
-rw-r--r--trunk/src/emu/machine/cdp1871.h148
1 files changed, 148 insertions, 0 deletions
diff --git a/trunk/src/emu/machine/cdp1871.h b/trunk/src/emu/machine/cdp1871.h
new file mode 100644
index 00000000000..cc803c83821
--- /dev/null
+++ b/trunk/src/emu/machine/cdp1871.h
@@ -0,0 +1,148 @@
+/**********************************************************************
+
+ RCA CDP1871 Keyboard Encoder emulation
+
+ Copyright MESS Team.
+ Visit http://mamedev.org for licensing and usage restrictions.
+
+**********************************************************************
+ _____ _____
+ D1 1 |* \_/ | 40 Vdd
+ D2 2 | | 39 SHIFT
+ D3 3 | | 38 CONTROL
+ D4 4 | | 37 ALPHA
+ D5 5 | | 36 DEBOUNCE
+ D6 6 | | 35 _RTP
+ D7 7 | | 34 TPB
+ D8 8 | | 33 _DA
+ D9 9 | | 32 BUS 7
+ D10 10 | CDP1871 | 31 BUS 6
+ D11 11 | | 30 BUS 5
+ S1 12 | | 29 BUS 4
+ S2 13 | | 28 BUS 3
+ S3 14 | | 27 BUS 2
+ S4 15 | | 26 BUS 1
+ S5 16 | | 25 BUS 0
+ S6 17 | | 24 CS4
+ S7 18 | | 23 CS3
+ S8 19 | | 22 CS2
+ Vss 20 |_____________| 21 _CS1
+
+**********************************************************************/
+
+#pragma once
+
+#ifndef __CDP1871__
+#define __CDP1871__
+
+#include "emu.h"
+
+
+
+//**************************************************************************
+// MACROS / CONSTANTS
+//**************************************************************************
+
+
+
+
+//**************************************************************************
+// INTERFACE CONFIGURATION MACROS
+//**************************************************************************
+
+#define MCFG_CDP1871_ADD(_tag, _intrf, _clock) \
+ MCFG_DEVICE_ADD(_tag, CDP1871, _clock) \
+ MCFG_DEVICE_CONFIG(_intrf)
+
+#define CDP1871_INTERFACE(name) \
+ const cdp1871_interface (name)=
+
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> cdp1871_interface
+
+struct cdp1871_interface
+{
+ devcb_read8 in_d1_cb;
+ devcb_read8 in_d2_cb;
+ devcb_read8 in_d3_cb;
+ devcb_read8 in_d4_cb;
+ devcb_read8 in_d5_cb;
+ devcb_read8 in_d6_cb;
+ devcb_read8 in_d7_cb;
+ devcb_read8 in_d8_cb;
+ devcb_read8 in_d9_cb;
+ devcb_read8 in_d10_cb;
+ devcb_read8 in_d11_cb;
+
+ devcb_read_line in_shift_cb;
+ devcb_read_line in_control_cb;
+ devcb_read_line in_alpha_cb;
+
+ // this gets called for every change of the DA pin (pin 33)
+ devcb_write_line out_da_cb;
+
+ // this gets called for every change of the RPT pin (pin 35)
+ devcb_write_line out_rpt_cb;
+};
+
+
+// ======================> cdp1871_device
+
+class cdp1871_device : public device_t,
+ public cdp1871_interface
+{
+public:
+ // construction/destruction
+ cdp1871_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ DECLARE_READ8_MEMBER( data_r );
+
+ DECLARE_READ_LINE_MEMBER( da_r );
+ DECLARE_READ_LINE_MEMBER( rpt_r );
+
+protected:
+ // device-level overrides
+ virtual void device_config_complete();
+ virtual void device_start();
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
+
+ void change_output_lines();
+ void clock_scan_counters();
+ void detect_keypress();
+
+private:
+ devcb_resolved_write_line m_out_da_func;
+ devcb_resolved_write_line m_out_rpt_func;
+ devcb_resolved_read8 m_in_d_func[11];
+ devcb_resolved_read_line m_in_shift_func;
+ devcb_resolved_read_line m_in_control_func;
+ devcb_resolved_read_line m_in_alpha_func;
+
+ bool m_inhibit; // scan counter clock inhibit
+ int m_sense; // sense input scan counter
+ int m_drive; // modifier inputs
+
+ int m_shift; // latched shift modifier
+ int m_control; // latched control modifier
+
+ int m_da; // data available flag
+ int m_next_da; // next value of data available flag
+ int m_rpt; // repeat flag
+ int m_next_rpt; // next value of repeat flag
+
+ // timers
+ emu_timer *m_scan_timer; // keyboard scan timer
+};
+
+
+// device type definition
+extern const device_type CDP1871;
+
+
+
+#endif