summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/alto2/a2mouse.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/cpu/alto2/a2mouse.c')
-rw-r--r--src/emu/cpu/alto2/a2mouse.c271
1 files changed, 0 insertions, 271 deletions
diff --git a/src/emu/cpu/alto2/a2mouse.c b/src/emu/cpu/alto2/a2mouse.c
deleted file mode 100644
index 0844d45de6d..00000000000
--- a/src/emu/cpu/alto2/a2mouse.c
+++ /dev/null
@@ -1,271 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Juergen Buchmueller
-/*****************************************************************************
- *
- * Xerox AltoII mouse interface
- *
- *****************************************************************************/
-#include "alto2cpu.h"
-#include "a2roms.h"
-
-#define MOUSE_DIRTY_HACK 0
-
-enum {
- MX1 = (1<<0), //!< MX1 signal is bit 0 (latch bit 1)
- LMX1 = (1<<1),
- MX2 = (1<<2), //!< MX2 signal is bit 2 (latch bit 3)
- LMX2 = (1<<3),
- MY1 = (1<<4), //!< MY1 signal is bit 4 (latch bit 5)
- LMY1 = (1<<5),
- MY2 = (1<<6), //!< MY2 signal is bit 6 (latch bit 7)
- LMY2 = (1<<7),
- MACTIVE = (MX1|MX2|MY1|MY2), //!< mask for the active bits
- MLATCH = (LMX1|LMX2|LMY1|LMY2) //!< mask for the latched bits
-};
-
-/**
- * <PRE>
- * The mouse inputs from the shutters are connected to a quad
- * 2/3 input RS flip flop (SN74279).
- *
- * 74279
- * +---+--+---+
- * | +--+ |
- * R1 -|1 16|- Vcc
- * | |
- * S1a -|2 15|- S4
- * | |
- * S1b -|3 14|- R4
- * | |
- * Q1 -|4 13|- Q4
- * | |
- * R2 -|5 12|- S3a
- * | |
- * S2 -|6 11|- S3b
- * | |
- * Q2 -|7 10|- R3
- * | |
- * GND -|8 9|- Q3
- * | |
- * +----------+
- *
- * The 'Y' Encoder signals are connected to IC1:
- * shutter pin(s) R/S output
- * ------------------------------------
- * 0 2,3 S1a,b Q1 MX2 -> 1
- * 1 1 R1 Q1 MX2 -> 0
- * 2 5 R2 Q2 MX1 -> 0
- * 3 6 S2 Q2 MX1 -> 1
- *
- * The 'X' Encoder signals are connected to IC2:
- * shutter pin(s) R/S output
- * ------------------------------------
- * 0 2,3 S1a,b Q1 MY2 -> 1
- * 1 1 R1 Q1 MY2 -> 0
- * 2 5 R2 Q2 MY1 -> 0
- * 3 6 S2 Q2 MY1 -> 1
- *
- *
- * The pulse train generated by a left or up rotation is:
- *
- * +---+ +---+ +---+
- * MX1/MY1 | | | | | |
- * ---+ +---+ +---+ +---
- *
- * +---+ +---+ +---+ +-
- * MX2/MY2 | | | | | | |
- * -+ +---+ +---+ +---+
- *
- *
- * The pulse train generated by a right or down rotation is:
- *
- * +---+ +---+ +---+ +-
- * MX1/MY1 | | | | | | |
- * -+ +---+ +---+ +---+
- *
- * +---+ +---+ +---+
- * MX2/MY2 | | | | | |
- * ---+ +---+ +---+ +---
- *
- * In order to simulate the shutter sequence for the mouse motions
- * we have to generate a sequence of pulses on MX1/MX2 and MY1/MY2
- * that have their phases shifted by 90 degree.
- * </PRE>
- */
-
-
-#define MOVEX(x) ((((x) < 0) ? MY2 : ((x) > 0) ? MY1 : 0))
-#define MOVEY(y) ((((y) < 0) ? MX2 : ((y) > 0) ? MX1 : 0))
-#define SIGN(a) ((a) < 0 ? -1 : (a) > 0 ? 1 : 0)
-
-/**
- * @brief return the mouse motion flags
- *
- * Advance the mouse x and y coordinates to the dx and dy
- * coordinates by either toggling MX2 or MX1 first for a
- * y movement, or MY2 or MY1 for x movement.
- * There are four read phases counted by m_mouse.phase
- *
- * @return lookup value from madr_a32
- */
-UINT16 alto2_cpu_device::mouse_read()
-{
- UINT16 data;
-
- m_mouse.latch = (m_mouse.latch << 1) & MLATCH;
- data = m_madr_a32[m_mouse.latch];
-
- switch (m_mouse.phase) {
- case 0:
- m_mouse.latch |= MOVEX(m_mouse.dx - m_mouse.x);
- m_mouse.latch |= MOVEY(m_mouse.dy - m_mouse.y);
- break;
- case 1:
- m_mouse.latch |= MACTIVE;
- m_mouse.x -= SIGN(m_mouse.x - m_mouse.dx);
- m_mouse.y -= SIGN(m_mouse.y - m_mouse.dy);
- break;
- case 2:
- m_mouse.latch ^= MOVEX(m_mouse.dx - m_mouse.x);
- m_mouse.latch ^= MOVEY(m_mouse.dy - m_mouse.y);
- break;
- default:
- m_mouse.latch &= ~MACTIVE;
- m_mouse.x -= SIGN(m_mouse.x - m_mouse.dx);
- m_mouse.y -= SIGN(m_mouse.y - m_mouse.dy);
- }
- m_mouse.phase = (m_mouse.phase + 1) % 4;
- return data;
-}
-
-/**
- * @brief register a mouse motion in x direction
- * @param ioport_field reference to the field
- * @param param pointer passed in PORT_CHANGED_MEMBER last parameter
- * @param oldval the old ioport_value
- * @param newval the new ioport_value
- */
-INPUT_CHANGED_MEMBER( alto2_cpu_device::mouse_motion_x )
-{
- // set new destination (absolute) mouse x coordinate
- INT32 x = m_mouse.dx + newval - oldval;
- x = x < 0 ? 0 : x > 605 ? 605 : x;
- m_mouse.dx = x;
-#if MOUSE_DIRTY_HACK
- /* XXX: dirty, dirty, hack */
-#if USE_HAMMING_CHECK
- m_mem.ram[0424/2] = hamming_code(1, 0424 / 2, (m_mouse.dx << 16) | m_mouse.dy);
-#else
- m_mem.ram[0424/2] = (m_mouse.dx << 16) | m_mouse.dy;
-#endif
-#endif
-}
-
-/**
- * @brief register a mouse motion in y direction
- * @param ioport_field reference to the field
- * @param param pointer passed in PORT_CHANGED_MEMBER last parameter
- * @param oldval the old ioport_value
- * @param newval the new ioport_value
- */
-INPUT_CHANGED_MEMBER( alto2_cpu_device::mouse_motion_y )
-{
- // set new destination (absolute) mouse y coordinate
- INT32 y = m_mouse.dy + newval - oldval;
- y = y < 0 ? 0 : y > 807 ? 807 : y;
- m_mouse.dy = y;
-#if MOUSE_DIRTY_HACK
- /* XXX: dirty, dirty, hack */
-#if USE_HAMMING_CHECK
- m_mem.ram[0424/2] = hamming_code(1, 0424 / 2, (m_mouse.dx << 16) | m_mouse.dy);
-#else
- m_mem.ram[0424/2] = (m_mouse.dx << 16) | m_mouse.dy;
-#endif
-#endif
-}
-
-/**
- * @brief register a mouse button change
- *
- * convert button bit to UTILIN[13-15]
- *
- * @param ioport_field reference to the field
- * @param param pointer passed in PORT_CHANGED_MEMBER last parameter
- * @param oldval the old ioport_value
- * @param newval the new ioport_value
- */
-INPUT_CHANGED_MEMBER( alto2_cpu_device::mouse_button_0 )
-{
- X_WRBITS(m_hw.utilin,16,13,13,newval);
-}
-
-INPUT_CHANGED_MEMBER( alto2_cpu_device::mouse_button_1 )
-{
- X_WRBITS(m_hw.utilin,16,14,14,newval);
-}
-
-INPUT_CHANGED_MEMBER( alto2_cpu_device::mouse_button_2 )
-{
- X_WRBITS(m_hw.utilin,16,15,15,newval);
-}
-
-static const prom_load_t pl_madr_a32 =
-{
- "madr.a32",
- 0,
- "a0e3b4a7",
- "24e50afdeb637a6a8588f8d3a3493c9188b8da2c",
- /* size */ 0400,
- /* amap */ AMAP_DEFAULT,
- /* axor */ 0,
- /* dxor */ 017, // invert D0-D3
- /* width */ 4,
- /* shift */ 0,
- /* dmap */ DMAP_REVERSE_0_3, // reverse D0-D3 to D3-D0
- /* dand */ ZERO,
- /* type */ sizeof(UINT8)
-};
-
-/**
- * @brief initialize the mouse context to useful values
- *
- * From the Alto Hardware Manual:
- * <PRE>
- * The mouse is a hand-held pointing device which contains two encoders
- * which digitize its position as it is rolled over a table-top. It also
- * has three buttons which may be read as the three low order bits of
- * memory location UTILIN (0177030), iin the manner of the keyboard.
- * The bit/button correspondence in UTILIN are (depressed keys
- * correspond to 0's in memory):
- *
- * UTILIN[13] TOP or LEFT button (RED)
- * UTILIN[14] BOTTOM or RIGHT button (BLUE)
- * UTILIN[15] MIDDLE button (YELLOW)
- *
- * The mouse coordinates are maintained by the MRT microcode in locations
- * MOUSELOC(0424)=X and MOUSELOC+1(0425)=Y in page one of the Alto memory.
- * These coordinates are relative, i.e., the hardware only increments and
- * decrements them. The resolution of the mouse is approximately 100 points
- * per inch.
- * </PRE>
- */
-void alto2_cpu_device::init_mouse()
-{
- memset(&m_mouse, 0, sizeof(m_mouse));
- m_madr_a32 = prom_load(machine(), &pl_madr_a32, memregion("madr_a32")->base());
-}
-
-void alto2_cpu_device::exit_mouse()
-{
- // nothing to do yet
-}
-
-void alto2_cpu_device::reset_mouse()
-{
- m_mouse.x = 0;
- m_mouse.y = 0;
- m_mouse.dx = 0;
- m_mouse.dy = 0;
- m_mouse.latch = 0;
- m_mouse.phase = 0;
-}