Previous 199869 Revisions Next

r19340 Wednesday 5th December, 2012 at 18:32:25 UTC by Angelo Salese
Added preliminary Mouse interface
[src/mess/drivers]pc9801.c

trunk/src/mess/drivers/pc9801.c
r19339r19340
491491   DECLARE_MACHINE_START(pc9801rs);
492492   DECLARE_MACHINE_START(pc9821);
493493
494   DECLARE_MACHINE_RESET(pc9801);
494   DECLARE_MACHINE_RESET(pc9801_common);
495495   DECLARE_MACHINE_RESET(pc9801f);
496496   DECLARE_MACHINE_RESET(pc9801rs);
497497   DECLARE_MACHINE_RESET(pc9821);
r19339r19340
522522   DECLARE_READ8_MEMBER(ppi_fdd_portb_r);
523523   DECLARE_READ8_MEMBER(ppi_fdd_portc_r);
524524   DECLARE_WRITE8_MEMBER(ppi_fdd_portc_w);
525
526   DECLARE_WRITE_LINE_MEMBER(fdc_2hd_irq);
527   DECLARE_WRITE_LINE_MEMBER(fdc_2hd_drq);
528   DECLARE_WRITE_LINE_MEMBER(fdc_2dd_irq);
529   DECLARE_WRITE_LINE_MEMBER(fdc_2dd_drq);
530//   DECLARE_WRITE_LINE_MEMBER(pc9801rs_fdc_irq);
531
525532   DECLARE_READ8_MEMBER(ppi_mouse_porta_r);
526533   DECLARE_READ8_MEMBER(ppi_mouse_portb_r);
527534   DECLARE_READ8_MEMBER(ppi_mouse_portc_r);
528535   DECLARE_WRITE8_MEMBER(ppi_mouse_porta_w);
529536   DECLARE_WRITE8_MEMBER(ppi_mouse_portb_w);
530537   DECLARE_WRITE8_MEMBER(ppi_mouse_portc_w);
538   struct{
539      UINT8 control;
540      UINT8 lx;
541      UINT8 ly;
542   }m_mouse;
543   TIMER_DEVICE_CALLBACK_MEMBER( mouse_irq_cb );
531544
532   DECLARE_WRITE_LINE_MEMBER(fdc_2hd_irq);
533   DECLARE_WRITE_LINE_MEMBER(fdc_2hd_drq);
534   DECLARE_WRITE_LINE_MEMBER(fdc_2dd_irq);
535   DECLARE_WRITE_LINE_MEMBER(fdc_2dd_drq);
536//   DECLARE_WRITE_LINE_MEMBER(pc9801rs_fdc_irq);
537
538545   void pc9801_fdc_2hd_update_ready(floppy_image_device *, int);
539546   inline UINT32 m_calc_grcg_addr(int i,UINT32 offset);
540547};
r19339r19340
25532560   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 Joystick Button 2")
25542561   PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
25552562
2563   PORT_START("MOUSE_X")
2564   PORT_BIT( 0xff, 0x00, IPT_MOUSE_X ) PORT_RESET PORT_SENSITIVITY(30) PORT_KEYDELTA(30)
2565
2566   PORT_START("MOUSE_Y")
2567   PORT_BIT( 0xff, 0x00, IPT_MOUSE_Y ) PORT_RESET PORT_SENSITIVITY(30) PORT_KEYDELTA(30)
2568
2569   PORT_START("MOUSE_B")
2570   PORT_BIT(0x1f, IP_ACTIVE_HIGH, IPT_UNUSED )
2571   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_BUTTON3) PORT_CODE(MOUSECODE_BUTTON3) PORT_NAME("Mouse Middle Button")
2572   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_CODE(MOUSECODE_BUTTON2) PORT_NAME("Mouse Right Button")
2573   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_CODE(MOUSECODE_BUTTON1) PORT_NAME("Mouse Left Button")
2574
25562575   PORT_START("ROM_LOAD")
25572576   PORT_CONFNAME( 0x01, 0x01, "Load floppy 2hd BIOS" )
25582577   PORT_CONFSETTING(    0x00, DEF_STR( Yes ) )
r19339r19340
26342653ir4 rs-232c
26352654ir5
26362655ir6
2637ir7
2656ir7 slave irq
26382657
263926588259 slave:
2640ir0 <connection with master 8259?>
2659ir0 printer
26412660ir1
26422661ir2 2dd floppy irq
26432662ir3 2hd floppy irq
26442663ir4 opn
2645ir5
2664ir5 mouse
26462665ir6
26472666ir7
26482667*/
r19339r19340
28932912
28942913READ8_MEMBER(pc9801_state::ppi_mouse_porta_r)
28952914{
2896   printf("A\n");
2897   return 0xff;
2915   UINT8 res;
2916   UINT8 isporthi;
2917   const char *const mousenames[] = { "MOUSE_X", "MOUSE_Y" };
2918
2919   res = ioport("MOUSE_B")->read() & 0xe0;
2920   isporthi = ((m_mouse.control & 0x20) >> 5)*4;
2921
2922   if((m_mouse.control & 0x80) == 0)
2923      res |= ioport(mousenames[(m_mouse.control & 0x40) >> 6])->read() >> (isporthi) & 0xf;
2924   else
2925   {
2926      if(m_mouse.control & 0x40)
2927         res |= (m_mouse.ly >> isporthi) & 0xf;
2928      else
2929         res |= (m_mouse.lx >> isporthi) & 0xf;
2930   }
2931
2932//   printf("A\n");
2933   return res;
28982934}
28992935
29002936READ8_MEMBER(pc9801_state::ppi_mouse_portb_r)
r19339r19340
29212957
29222958WRITE8_MEMBER(pc9801_state::ppi_mouse_portc_w)
29232959{
2924   printf("C %02x\n",data);
2960   if((m_mouse.control & 0x80) == 0 && data & 0x80)
2961   {
2962      m_mouse.lx = ioport("MOUSE_X")->read();
2963      m_mouse.ly = ioport("MOUSE_Y")->read();
2964   }
2965
2966   m_mouse.control = data;
29252967}
29262968
29272969static I8255A_INTERFACE( ppi_mouse_intf )
r19339r19340
31073149   state_save_register_global_pointer(machine(), m_ext_gvram, 0xa0000);
31083150}
31093151
3110MACHINE_RESET_MEMBER(pc9801_state,pc9801)
3152MACHINE_RESET_MEMBER(pc9801_state,pc9801_common)
31113153{
31123154
31133155   /* this looks like to be some kind of backup ram, system will boot with green colors otherwise */
r19339r19340
31273169   beep_set_state(machine().device(BEEPER_TAG),0);
31283170
31293171   m_nmi_ff = 0;
3172   m_mouse.control = 0xff;
31303173}
31313174
31323175MACHINE_RESET_MEMBER(pc9801_state,pc9801f)
31333176{
3134   MACHINE_RESET_CALL_MEMBER(pc9801);
3177   MACHINE_RESET_CALL_MEMBER(pc9801_common);
31353178
31363179   /* 2dd interface ready line is ON by default */
31373180   floppy_image_device *floppy;
r19339r19340
31643207
31653208MACHINE_RESET_MEMBER(pc9801_state,pc9801rs)
31663209{
3167   MACHINE_RESET_CALL_MEMBER(pc9801);
3210   MACHINE_RESET_CALL_MEMBER(pc9801_common);
31683211
31693212   m_gate_a20 = 0;
31703213   m_rom_bank = 0;
r19339r19340
32353278   FLOPPY_PC98FDI_FORMAT
32363279FLOPPY_FORMATS_END
32373280
3281TIMER_DEVICE_CALLBACK_MEMBER( pc9801_state::mouse_irq_cb )
3282{
3283   if((m_mouse.control & 0x10) == 0)
3284   {
3285      pic8259_ir5_w(machine().device("pic8259_slave"), 0);
3286      pic8259_ir5_w(machine().device("pic8259_slave"), 1);
3287   }
3288}
3289
3290static MACHINE_CONFIG_FRAGMENT( pc9801_mouse )
3291   MCFG_I8255_ADD( "ppi8255_mouse", ppi_mouse_intf )
3292
3293   MCFG_TIMER_DRIVER_ADD_PERIODIC("mouse_timer", pc9801_state, mouse_irq_cb, attotime::from_hz(120))
3294MACHINE_CONFIG_END
3295
3296
32383297static MACHINE_CONFIG_START( pc9801, pc9801_state )
32393298   MCFG_CPU_ADD("maincpu", I8086, 5000000) //unknown clock
32403299   MCFG_CPU_PROGRAM_MAP(pc9801_map)
r19339r19340
32513310   MCFG_I8255_ADD( "ppi8255_sys", ppi_system_intf )
32523311   MCFG_I8255_ADD( "ppi8255_prn", ppi_printer_intf )
32533312   MCFG_I8255_ADD( "ppi8255_fdd", ppi_fdd_intf )
3254   MCFG_I8255_ADD( "ppi8255_mouse", ppi_mouse_intf )
3313   MCFG_FRAGMENT_ADD(pc9801_mouse)
32553314   MCFG_UPD1990A_ADD(UPD1990A_TAG, XTAL_32_768kHz, pc9801_upd1990a_intf)
32563315   MCFG_I8251_ADD(UPD8251_TAG, pc9801_uart_interface)
32573316
r19339r19340
33203379   MCFG_I8255_ADD( "ppi8255_sys", ppi_system_intf )
33213380   MCFG_I8255_ADD( "ppi8255_prn", ppi_printer_intf )
33223381   MCFG_I8255_ADD( "ppi8255_fdd", ppi_fdd_intf )
3323   MCFG_I8255_ADD( "ppi8255_mouse", ppi_mouse_intf )
3382   MCFG_FRAGMENT_ADD(pc9801_mouse)
33243383   MCFG_UPD1990A_ADD("upd1990a", XTAL_32_768kHz, pc9801_upd1990a_intf)
33253384   MCFG_I8251_ADD(UPD8251_TAG, pc9801_uart_interface)
33263385
r19339r19340
33833442   MCFG_I8255_ADD( "ppi8255_sys", ppi_system_intf )
33843443   MCFG_I8255_ADD( "ppi8255_prn", ppi_printer_intf )
33853444   MCFG_I8255_ADD( "ppi8255_fdd", ppi_fdd_intf )
3386   MCFG_I8255_ADD( "ppi8255_mouse", ppi_mouse_intf )
3445   MCFG_FRAGMENT_ADD(pc9801_mouse)
33873446   MCFG_UPD1990A_ADD("upd1990a", XTAL_32_768kHz, pc9801_upd1990a_intf)
33883447   MCFG_I8251_ADD(UPD8251_TAG, pc9801_uart_interface)
33893448

Previous 199869 Revisions Next


© 1997-2024 The MAME Team