Previous 199869 Revisions Next

r33439 Tuesday 18th November, 2014 at 19:16:46 UTC by Sandro Ronco
(MESS) dmv: added mouse input.
[src/emu/bus/dmv]k806.c k806.h

trunk/src/emu/bus/dmv/k806.c
r241950r241951
2828static MACHINE_CONFIG_FRAGMENT( dmv_k806 )
2929   MCFG_CPU_ADD("mcu", I8741, XTAL_6MHz)
3030   MCFG_CPU_IO_MAP(k806_io)
31
32   MCFG_TIMER_DRIVER_ADD_PERIODIC("mouse_timer", dmv_k806_device, mouse_timer, attotime::from_hz(1000))
3133MACHINE_CONFIG_END
3234
3335static INPUT_PORTS_START( dmv_k806 )
r241950r241951
4648   PORT_DIPNAME( 0x380, 0x00, "K806 Mouse" )  PORT_DIPLOCATION("J:!8,J:!9,J:!10")
4749   PORT_DIPSETTING( 0x000, "Hawley, Alps" )
4850   PORT_DIPSETTING( 0x380, "Depraz" )
51
52   PORT_START("MOUSE")
53   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_NAME("Righ Mouse Button")    PORT_CODE(MOUSECODE_BUTTON1)
54   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON3) PORT_NAME("Middte Mouse Button")  PORT_CODE(MOUSECODE_BUTTON3)
55   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_NAME("Left Mouse Button")    PORT_CODE(MOUSECODE_BUTTON2)
56
57   PORT_START("MOUSEX")
58   PORT_BIT( 0xfff, 0x000, IPT_MOUSE_X ) PORT_SENSITIVITY(20) PORT_KEYDELTA(0)
59
60   PORT_START("MOUSEY")
61   PORT_BIT( 0xfff, 0x000, IPT_MOUSE_Y ) PORT_SENSITIVITY(20) PORT_KEYDELTA(0)
4962INPUT_PORTS_END
5063
5164//**************************************************************************
r241950r241951
6679      : device_t(mconfig, DMV_K806, "K806 mouse", tag, owner, clock, "dmv_k806", __FILE__),
6780      device_dmvslot_interface( mconfig, *this ),
6881      m_mcu(*this, "mcu"),
69      m_jumpers(*this, "JUMPERS")
82      m_jumpers(*this, "JUMPERS"),
83      m_mouse_buttons(*this, "MOUSE"),
84      m_mouse_x(*this, "MOUSEX"),
85      m_mouse_y(*this, "MOUSEY")
7086{
7187}
7288
r241950r241951
85101
86102void dmv_k806_device::device_reset()
87103{
104   m_mouse.phase = 0;
105   m_mouse.xa = m_mouse.xb = ASSERT_LINE;
106   m_mouse.ya = m_mouse.yb = ASSERT_LINE;
107   m_mouse.x = m_mouse.y = 0;
108   m_mouse.prev_x = m_mouse.prev_y = 0;
88109}
89110
90111//-------------------------------------------------
r241950r241951
126147{
127148   UINT8 jumpers = m_jumpers->read();
128149   if (BIT(jumpers, ifsel) && ((!BIT(offset, 3) && BIT(jumpers, 5)) || (BIT(offset, 3) && BIT(jumpers, 6))))
150   {
129151      m_mcu->upi41_master_w(space, offset & 1, data);
152      m_bus->m_out_int_cb(CLEAR_LINE);
153   }
130154}
131155
132156READ8_MEMBER( dmv_k806_device::port1_r )
r241950r241951
140164   // -x-- ----   YB / X1
141165   // x--- ----   not used
142166
143   // TODO
144   return 0xff;
167   UINT8 data = m_mouse_buttons->read() & 0x07;
168
169   data |= (m_mouse.xa != CLEAR_LINE ? 0 : 0x08);
170   data |= (m_mouse.xb != CLEAR_LINE ? 0 : 0x10);
171   data |= (m_mouse.ya != CLEAR_LINE ? 0 : 0x20);
172   data |= (m_mouse.yb != CLEAR_LINE ? 0 : 0x40);
173
174   return data;
145175}
146176
147177READ8_MEMBER( dmv_k806_device::portt1_r )
r241950r241951
152182WRITE8_MEMBER( dmv_k806_device::port2_w )
153183{
154184   m_bus->m_out_int_cb((data & 1) ? CLEAR_LINE : ASSERT_LINE);
155};
185}
186
187/*-------------------------------------------------------------------
188
189    Generate a sequence of pulses that have their phases shifted
190    by 90 degree for simulate the mouse movement.
191
192                 Right                          Left
193        -+   +---+   +---+   +---    ---+   +---+   +---+   +-
194     XA  |   |   |   |   |   |          |   |   |   |   |   |
195         +---+   +---+   +---+          +---+   +---+   +---+
196
197        ---+   +---+   +---+   +-    -+   +---+   +---+   +---
198     XB    |   |   |   |   |   |      |   |   |   |   |   |
199           +---+   +---+   +---+      +---+   +---+   +---+
200
201                 Down                            Up
202        -+   +---+   +---+   +---    ---+   +---+   +---+   +-
203     YA  |   |   |   |   |   |          |   |   |   |   |   |
204         +---+   +---+   +---+          +---+   +---+   +---+
205
206        ---+   +---+   +---+   +-    -+   +---+   +---+   +---
207     YB    |   |   |   |   |   |      |   |   |   |   |   |
208           +---+   +---+   +---+      +---+   +---+   +---+
209
210-------------------------------------------------------------------*/
211
212TIMER_DEVICE_CALLBACK_MEMBER(dmv_k806_device::mouse_timer)
213{
214   switch(m_mouse.phase)
215   {
216   case 0:
217      m_mouse.xa = m_mouse.x > m_mouse.prev_x ? CLEAR_LINE : ASSERT_LINE;
218      m_mouse.xb = m_mouse.x < m_mouse.prev_x ? CLEAR_LINE : ASSERT_LINE;
219      m_mouse.ya = m_mouse.y > m_mouse.prev_y ? CLEAR_LINE : ASSERT_LINE;
220      m_mouse.yb = m_mouse.y < m_mouse.prev_y ? CLEAR_LINE : ASSERT_LINE;
221      break;
222   case 1:
223      m_mouse.xa = m_mouse.xb = m_mouse.x != m_mouse.prev_x ? CLEAR_LINE : ASSERT_LINE;
224      m_mouse.ya = m_mouse.yb = m_mouse.y != m_mouse.prev_y ? CLEAR_LINE : ASSERT_LINE;
225      break;
226   case 2:
227      m_mouse.xa = m_mouse.x < m_mouse.prev_x ? CLEAR_LINE : ASSERT_LINE;
228      m_mouse.xb = m_mouse.x > m_mouse.prev_x ? CLEAR_LINE : ASSERT_LINE;
229      m_mouse.ya = m_mouse.y < m_mouse.prev_y ? CLEAR_LINE : ASSERT_LINE;
230      m_mouse.yb = m_mouse.y > m_mouse.prev_y ? CLEAR_LINE : ASSERT_LINE;
231      break;
232   case 3:
233      m_mouse.xa = m_mouse.xb = ASSERT_LINE;
234      m_mouse.ya = m_mouse.yb = ASSERT_LINE;
235      m_mouse.prev_x = m_mouse.x;
236      m_mouse.prev_y = m_mouse.y;
237      m_mouse.x = m_mouse_x->read();
238      m_mouse.y = m_mouse_y->read();
239      break;
240   }
241
242   m_mouse.phase = (m_mouse.phase + 1) & 3;
243}
trunk/src/emu/bus/dmv/k806.h
r241950r241951
3333   DECLARE_READ8_MEMBER(port1_r);
3434   DECLARE_WRITE8_MEMBER(port2_w);
3535
36   TIMER_DEVICE_CALLBACK_MEMBER(mouse_timer);
37
3638protected:
3739   // device-level overrides
3840   virtual void device_start();
r241950r241951
4446private:
4547   required_device<upi41_cpu_device> m_mcu;
4648   required_ioport m_jumpers;
49   required_ioport m_mouse_buttons;
50   required_ioport m_mouse_x;
51   required_ioport m_mouse_y;
4752   dmvcart_slot_device * m_bus;
53
54   struct
55   {
56      int phase;
57      int x;
58      int y;
59      int prev_x;
60      int prev_y;
61      int xa;
62      int xb;
63      int ya;
64      int yb;
65   } m_mouse;
4866};
4967
5068


Previous 199869 Revisions Next


© 1997-2024 The MAME Team