Previous 199869 Revisions Next

r17685 Thursday 6th September, 2012 at 20:47:53 UTC by Sandro Ronco
geniusiq: added mouse input. (nw)
[src/mess/drivers]geniusiq.c

trunk/src/mess/drivers/geniusiq.c
r17684r17685
9595
9696#define MACHINE_RESET_MEMBER(name) void name::machine_reset()
9797
98#define KEYBOARD_QUEUE_SIZE    8
98#define KEYBOARD_QUEUE_SIZE    0x8
9999
100100class geniusiq_state : public driver_device
101101{
r17684r17685
120120   DECLARE_READ16_MEMBER(input_r);
121121   DECLARE_WRITE16_MEMBER(mouse_pos_w);
122122   DECLARE_INPUT_CHANGED_MEMBER(send_input);
123   DECLARE_INPUT_CHANGED_MEMBER(send_mouse_input);
123124   DECLARE_WRITE16_MEMBER(gfx_base_w);
124125   DECLARE_WRITE16_MEMBER(gfx_dest_w);
125126   DECLARE_WRITE16_MEMBER(gfx_color_w);
126127   DECLARE_WRITE16_MEMBER(gfx_idx_w);
128   void queue_input(UINT16 data);
127129
128130   DECLARE_READ16_MEMBER(unk0_r) { return 0; }
129131   DECLARE_READ16_MEMBER(unk_r) { return machine().rand(); }
r17684r17685
133135   UINT16      m_gfx_x;
134136   UINT32      m_gfx_base;
135137   UINT8      m_gfx_color[2];
136   UINT16      m_mouse_posx;
137   UINT16      m_mouse_posy;
138   UINT8      m_mouse_posx;
139   UINT8      m_mouse_posy;
140   UINT16      m_mouse_gfx_posx;
141   UINT16      m_mouse_gfx_posy;
138142   struct
139143   {
140144      UINT16   buffer[KEYBOARD_QUEUE_SIZE];
r17684r17685
196200            UINT8 pen = (data>>12) & 0x0f;
197201
198202            // I assume color 0 is transparent
199            if(pen != 0 && screen.visible_area().contains(m_mouse_posx + x*2 + b, m_mouse_posy + y))
200               bitmap.pix16(m_mouse_posy + y, m_mouse_posx + x*2 + b) = pen;
203            if(pen != 0 && screen.visible_area().contains(m_mouse_gfx_posx + x*2 + b, m_mouse_gfx_posy + y))
204               bitmap.pix16(m_mouse_gfx_posy + y, m_mouse_gfx_posx + x*2 + b) = pen;
201205            data <<= 4;
202206         }
203207      }
r17684r17685
217221
218222WRITE16_MEMBER( geniusiq_state::mouse_pos_w )
219223{
220   switch (offset)
221   {
222      case 0:      m_mouse_posx = data;   break;
223      case 1:      m_mouse_posy = data;   break;
224   }
224   if (offset)
225      m_mouse_gfx_posy = data;
226   else
227      m_mouse_gfx_posx = data;
225228}
226229
227230WRITE16_MEMBER(geniusiq_state::gfx_color_w)
r17684r17685
293296   return data;
294297}
295298
299void geniusiq_state::queue_input(UINT16 data)
300{
301   m_keyboard.buffer[m_keyboard.tail] = data;
302
303   m_keyboard.tail = (m_keyboard.tail+1) % KEYBOARD_QUEUE_SIZE;
304
305   // new data in queue
306   m_maincpu->set_input_line(M68K_IRQ_4, ASSERT_LINE);
307}
308
309INPUT_CHANGED_MEMBER( geniusiq_state::send_mouse_input )
310{
311   UINT8 new_mouse_x = ioport("MOUSEX")->read();
312   UINT8 new_mouse_y = ioport("MOUSEY")->read();
313   UINT8 mouse_buttons = ioport("MOUSE")->read();
314
315   UINT8 delta_x = (UINT8)(new_mouse_x - m_mouse_posx);
316   UINT8 delta_y = (UINT8)(new_mouse_y - m_mouse_posy);
317   m_mouse_posx = new_mouse_x;
318   m_mouse_posy = new_mouse_y;
319
320   queue_input(0x1000 | 0x40 | mouse_buttons | ((delta_y>>4) & 0x0c) | ((delta_x>>6) & 0x03));
321   queue_input(0x1000 | (delta_x & 0x3f));
322   queue_input(0x1000 | (delta_y & 0x3f));
323}
324
296325INPUT_CHANGED_MEMBER( geniusiq_state::send_input )
297326{
298   m_keyboard.buffer[m_keyboard.tail] = (UINT8)(FPTR)param;
327   UINT16 data = (UINT16)(FPTR)param;
299328
300329   // set bit 7 if the key is released
301330   if (!newval)
302      m_keyboard.buffer[m_keyboard.tail] |= 0x80;
331      data |= 0x80;
303332
304   m_keyboard.tail = (m_keyboard.tail+1) % KEYBOARD_QUEUE_SIZE;
305
306   // new input from keyboard
307   m_maincpu->set_input_line(M68K_IRQ_4, ASSERT_LINE);
333   queue_input(data);
308334}
309335
310336
r17684r17685
335361
336362static INPUT_CHANGED( trigger_irq )
337363{
338   cputag_set_input_line(field.machine(), "maincpu", (int)(FPTR)param, newval ? HOLD_LINE : CLEAR_LINE);
364   //cputag_set_input_line(field.machine(), "maincpu", (int)(FPTR)param, newval ? HOLD_LINE : CLEAR_LINE);
339365}
340366
341367/* Input ports */
r17684r17685
378404
379405   PORT_START( "IN2" )
380406   PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_0 )         PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x20 )
381   PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_F2 )      PORT_NAME("Enter") PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x21 )
407   PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_ENTER )      PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x21 )
382408   PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_BACKSPACE ) PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x22 )
383409   PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_L )         PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x23 )
384410   PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_O )         PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x24 )
r17684r17685
392418   PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_COLON )      PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x2c )
393419   PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_K )         PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x2d )
394420   PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_I )         PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x2e )
395   PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Mouse Button 1")   PORT_CODE( KEYCODE_ENTER )   PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x2f )
421   PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Mouse Button 1 (keyboard)")   PORT_CODE( KEYCODE_F2 )   PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x2f )
396422
397423   PORT_START( "IN3" )
398424   PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_8 )         PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x30 )
r17684r17685
428454   PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_V )         PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x4c )
429455   PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_F )         PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x4d )
430456   PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_R )         PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x4e )
431   PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Mouse Up")         PORT_CODE( KEYCODE_UP )      PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x4f )
457   PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Mouse Up Button")   PORT_CODE( KEYCODE_UP )      PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x4f )
432458
433459   PORT_START( "IN5" )
434460   PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_4 )         PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x50 )
r17684r17685
438464   PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_3 )         PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x54 )
439465   PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD )      //  PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x55 )
440466   PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD )      //  PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x56 )
441   PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Mouse Down")      PORT_CODE( KEYCODE_DOWN )   PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x57 )
467   PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Mouse Down Button")   PORT_CODE( KEYCODE_DOWN )   PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x57 )
442468   PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_INSERT )   PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x58 )
443469   PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_X )         PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x59 )
444470   PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_S )         PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x5a )
r17684r17685
446472   PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_2 )         PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x5c )
447473   PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD )      //  PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x5d )
448474   PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD )      //  PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x5e )
449   PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Mouse Left")      PORT_CODE( KEYCODE_LEFT )   PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x5f )
475   PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Mouse Left Button")   PORT_CODE( KEYCODE_LEFT )   PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x5f )
450476
451477   PORT_START( "IN6" )
452478   PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Help")            PORT_CODE( KEYCODE_F1 )   PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x60 )
r17684r17685
456482   PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_Q )         PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x64 )
457483   PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_A )         PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x65 )
458484   PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_1 )         PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x66 )
459   PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Mouse Right")      PORT_CODE( KEYCODE_RIGHT )   PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x67 )
485   PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Mouse Right Button") PORT_CODE( KEYCODE_RIGHT )   PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x67 )
460486   PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD )      //  PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x68 )
461487   PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_0_PAD )      PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x69 )
462488   PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_DEL_PAD )   PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x6a )
r17684r17685
484510   PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD )      //  PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x7e )
485511   PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD )      //  PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x7f )
486512
513   PORT_START("MOUSEX")
514   PORT_BIT( 0xff, 0x00, IPT_MOUSE_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(0)      PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_mouse_input, 0 )
515
516   PORT_START("MOUSEY")
517   PORT_BIT( 0xff, 0x00, IPT_MOUSE_Y ) PORT_SENSITIVITY(50) PORT_KEYDELTA(0)      PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_mouse_input, 0 )
518
519   PORT_START("MOUSE")
520   PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON2 )   PORT_NAME("Mouse Button 2")      PORT_CODE(MOUSECODE_BUTTON2)   PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_mouse_input, 0 )
521   PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON1 )   PORT_NAME("Mouse Button 1")      PORT_CODE(MOUSECODE_BUTTON1)   PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_mouse_input, 0 )
522
487523   PORT_START( "DEBUG" )   // for debug purposes, to be removed in the end
488524   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_1 ) PORT_NAME( "IRQ 1" ) PORT_CHANGED( trigger_irq, 1 )
489525   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_2 ) PORT_NAME( "IRQ 2" ) PORT_CHANGED( trigger_irq, 2 )
r17684r17685
505541   m_gfx_color[0] = m_gfx_color[1] = 0;
506542   m_mouse_posx = 0;
507543   m_mouse_posy = 0;
544   m_mouse_gfx_posx = 0;
545   m_mouse_gfx_posy = 0;
508546}
509547
510548static MACHINE_CONFIG_START( geniusiq, geniusiq_state )

Previous 199869 Revisions Next


© 1997-2024 The MAME Team