summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/machine/mb14241.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/machine/mb14241.c')
-rw-r--r--src/mame/machine/mb14241.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/mame/machine/mb14241.c b/src/mame/machine/mb14241.c
new file mode 100644
index 00000000000..3b883207cdb
--- /dev/null
+++ b/src/mame/machine/mb14241.c
@@ -0,0 +1,50 @@
+/***************************************************************************
+
+ Midway 8080-based black and white hardware
+
+****************************************************************************/
+
+#include "driver.h"
+#include "mb14241.h"
+
+
+#define MAX_MB14241 1
+
+struct MB14241
+{
+ UINT16 shift_data; /* 15 bits only */
+ UINT8 shift_count; /* 3 bits */
+};
+
+static struct MB14241 chips[MAX_MB14241];
+
+
+static void mb14241_shift_count_w(int num, UINT8 data)
+{
+ chips[num].shift_count = ~data & 0x07;
+}
+
+WRITE8_HANDLER( mb14241_0_shift_count_w ) { mb14241_shift_count_w(0, data); }
+
+
+static void mb14241_shift_data_w(int num, UINT8 data)
+{
+ chips[num].shift_data = (chips[num].shift_data >> 8) | ((UINT16)data << 7);
+}
+
+WRITE8_HANDLER( mb14241_0_shift_data_w ) { mb14241_shift_data_w(0, data); }
+
+
+static UINT8 mb14241_shift_result_r(int num)
+{
+ return chips[num].shift_data >> chips[num].shift_count;
+}
+
+READ8_HANDLER( mb14241_0_shift_result_r ) { return mb14241_shift_result_r(0); }
+
+
+void mb14241_init(int num)
+{
+ state_save_register_item("mb14241", num, chips[num].shift_data);
+ state_save_register_item("mb14241", num, chips[num].shift_count);
+}