Diff for /np2/io/mouseif.c between versions 1.8 and 1.18

version 1.8, 2004/02/18 03:24:48 version 1.18, 2011/01/15 18:04:43
Line 30  void mouseif_sync(void) { Line 30  void mouseif_sync(void) {
   
 static void calc_mousexy(void) {  static void calc_mousexy(void) {
   
         UINT32  clock;          UINT32  clk;
         SINT32  diff;          SINT32  diff;
   
         clock = CPU_CLOCK + CPU_BASECLOCK + CPU_REMCLOCK;          clk = CPU_CLOCK + CPU_BASECLOCK + CPU_REMCLOCK;
         diff = clock - mouseif.lastc;          diff = clk - mouseif.lastc;
         if (diff >= 2000) {          if (diff >= 2000) {
                 SINT32 dx;                  SINT32 dx;
                 SINT32 dy;                  SINT32 dy;
Line 82  static void calc_mousexy(void) { Line 82  static void calc_mousexy(void) {
 void mouseint(NEVENTITEM item) {  void mouseint(NEVENTITEM item) {
   
         if (item->flag & NEVENT_SETEVENT) {          if (item->flag & NEVENT_SETEVENT) {
                 if (!(mouseif.portc & 0x10)) {                  if (!(mouseif.upd8255.portc & 0x10)) {
                         pic_setirq(0x0d);                          pic_setirq(0x0d);
                         nevent_set(NEVENT_MOUSE, mouseif.intrclock << mouseif.timing,                          nevent_set(NEVENT_MOUSE, mouseif.intrclock << mouseif.timing,
                                                                                                 mouseint, NEVENT_RELATIVE);                                                                                                  mouseint, NEVENT_RELATIVE);
Line 92  void mouseint(NEVENTITEM item) { Line 92  void mouseint(NEVENTITEM item) {
   
 static void setportc(REG8 value) {  static void setportc(REG8 value) {
   
         if ((value & 0x80) && (!(mouseif.portc & 0x80))) {          if ((value & 0x80) && (!(mouseif.upd8255.portc & 0x80))) {
                 calc_mousexy();                  calc_mousexy();
                 mouseif.latch_x = mouseif.x;                  mouseif.latch_x = mouseif.x;
                 mouseif.x = 0;                  mouseif.x = 0;
Line 111  static void setportc(REG8 value) { Line 111  static void setportc(REG8 value) {
                         mouseif.latch_y = -128;                          mouseif.latch_y = -128;
                 }                  }
         }          }
         if ((value ^ mouseif.portc) & 0x10) {          if ((value ^ mouseif.upd8255.portc) & 0x10) {
                 if (!(value & 0x10)) {                  if (!(value & 0x10)) {
                         if (!nevent_iswork(NEVENT_MOUSE)) {                          if (!nevent_iswork(NEVENT_MOUSE)) {
                                   // 割り込みを入れとく
                                   pic_setirq(0x0d);
                                 nevent_set(NEVENT_MOUSE, mouseif.intrclock << mouseif.timing,                                  nevent_set(NEVENT_MOUSE, mouseif.intrclock << mouseif.timing,
                                                                                                 mouseint, NEVENT_ABSOLUTE);                                                                                                  mouseint, NEVENT_ABSOLUTE);
                         }                          }
                 }                  }
         }          }
         mouseif.portc = (UINT8)value;          mouseif.upd8255.portc = (UINT8)value;
 }  }
   
   
 // ---- I/O  // ---- I/O
   
   static void IOOUTCALL mouseif_o7fd9(UINT port, REG8 dat) {
   
           mouseif.upd8255.porta = dat;
           (void)port;
   }
   
   static void IOOUTCALL mouseif_o7fdb(UINT port, REG8 dat) {
   
           mouseif.upd8255.portb = dat;
           (void)port;
   }
   
 static void IOOUTCALL mouseif_o7fdd(UINT port, REG8 dat) {  static void IOOUTCALL mouseif_o7fdd(UINT port, REG8 dat) {
   
         setportc(dat);          setportc(dat);
Line 133  static void IOOUTCALL mouseif_o7fdd(UINT Line 147  static void IOOUTCALL mouseif_o7fdd(UINT
   
 static void IOOUTCALL mouseif_o7fdf(UINT port, REG8 dat) {  static void IOOUTCALL mouseif_o7fdf(UINT port, REG8 dat) {
   
         if (dat & 0xf0) {          REG8    portc;
                 mouseif.mode = (UINT8)dat;          UINT    sft;
                 if (dat == 0x93) {  
                         setportc(0);          portc = 0;
                 }          if (dat & uPD8255_CTRL) {
                   mouseif.upd8255.mode = (UINT8)dat;
   #if 0
                   pic_resetirq(0x0d);
                   nevent_set(NEVENT_MOUSE, mouseif.intrclock << mouseif.timing,
                                                                                                   mouseint, NEVENT_ABSOLUTE);
   #endif
         }          }
         else {          else {
                 if (dat & 1) {                  sft = (dat >> 1) & 7;
                         setportc((REG8)(mouseif.portc | (1 << (dat >> 1))));                  portc = mouseif.upd8255.portc;
                 }                  portc &= (~(1 << sft));
                 else {                  portc |= (dat & 1) << sft;
                         setportc((REG8)(mouseif.portc & (~(1 << (dat >> 1)))));  
                 }  
         }          }
           setportc(portc);
         (void)port;          (void)port;
 }  }
   
Line 157  static REG8 IOINPCALL mouseif_i7fd9(UINT Line 176  static REG8 IOINPCALL mouseif_i7fd9(UINT
         REG8    ret;          REG8    ret;
         REG8    portc;          REG8    portc;
   
         calc_mousexy();          if (mouseif.upd8255.mode & uPD8255_PORTA) {
         ret = mouseif.b;                  calc_mousexy();
         if (np2cfg.MOUSERAPID) {                  ret = mouseif.b;
                 ret |= mouseif.rapid;                  if (np2cfg.MOUSERAPID) {
         }                          ret |= mouseif.rapid;
         ret &= 0xf0;                  }
         ret |= 0x50;                  ret &= 0xf0;
         portc = mouseif.portc;  #if 1
         if (portc & 0x80) {                  ret |= 0x40;            // for shizuku
                 x = mouseif.latch_x;  #else
                 y = mouseif.latch_y;                  ret |= 0x50;
         }  #endif
         else {                  portc = mouseif.upd8255.portc;
                 x = mouseif.x;                  if (portc & 0x80) {
                 y = mouseif.y;                          x = mouseif.latch_x;
         }                          y = mouseif.latch_y;
         if (portc & 0x40) {                  }
                 x = y;                  else {
         }                          x = mouseif.x;
         if (!(portc & 0x20)) {                          y = mouseif.y;
                 ret |= x & 0x0f;                  }
                   if (portc & 0x40) {
                           x = y;
                   }
                   if (!(portc & 0x20)) {
                           ret |= x & 0x0f;
                   }
                   else {
                           ret |= (x >> 4) & 0x0f;
                   }
                   return(ret);
         }          }
         else {          else {
                 ret |= (x >> 4) & 0x0f;                  return(mouseif.upd8255.porta);
         }          }
 //      TRACEOUT(("%x %x mouse [%x] %d -> %x", CPU_CS, CPU_IP, portc & 0x20, y, ret));  
         (void)port;          (void)port;
         return(ret);  
 }  }
   
 static REG8 IOINPCALL mouseif_i7fdb(UINT port) {  static REG8 IOINPCALL mouseif_i7fdb(UINT port) {
   
           if (mouseif.upd8255.mode & uPD8255_PORTB) {
                   return(0x40);
           }
           else {
                   return(mouseif.upd8255.portb);
           }
         (void)port;          (void)port;
         return(0x40);  
 }  }
   
 static REG8 IOINPCALL mouseif_i7fdd(UINT port) {  static REG8 IOINPCALL mouseif_i7fdd(UINT port) {
   
         REG8    ret;  
         REG8    mode;          REG8    mode;
           REG8    ret;
   
         ret = mouseif.portc;          mode = mouseif.upd8255.mode;
         mode = mouseif.mode;          ret = mouseif.upd8255.portc;
         if (mode & 8) {          if (mode & uPD8255_PORTCH) {
                 ret &= 0x1f;                  ret &= 0x1f;
         }          }
         if (mode & 1) {          if (mode & uPD8255_PORTCL) {
                 ret &= 0xf0;                  ret &= 0xf0;
                 ret |= 0x08;                  ret |= 0x08;
                 ret |= (np2cfg.dipsw[2] >> 5) & 0x04;                  ret |= (pccore.dipsw[2] >> 5) & 0x04;
                 ret |= ((~np2cfg.dipsw[0]) >> 4) & 0x03;                  ret |= ((~pccore.dipsw[0]) >> 4) & 0x03;
         }          }
         (void)port;          (void)port;
         return(ret);          return(ret);
 }  }
   
   
 static void IOOUTCALL mouseif_obfdb(UINT port, REG8 dat) {  static void IOOUTCALL mouseif_obfdb(UINT port, REG8 dat) {
   
         mouseif.timing = dat & 3;          mouseif.timing = dat & 3;
Line 223  static void IOOUTCALL mouseif_obfdb(UINT Line 254  static void IOOUTCALL mouseif_obfdb(UINT
   
 // ---- I/F  // ---- I/F
   
 void mouseif_reset(void) {  void mouseif_reset(const NP2CFG *pConfig) {
   
         ZeroMemory(&mouseif, sizeof(mouseif));          ZeroMemory(&mouseif, sizeof(mouseif));
         mouseif.mode = 0x93;          mouseif.upd8255.porta = 0x00;
         mouseif.portc = 0x10;          mouseif.upd8255.portb = 0x00;
           mouseif.upd8255.portc = 0xf0;                                                                   // ver0.82
           mouseif.upd8255.mode = 0x93;
         mouseif.intrclock = pccore.realclock / 120;          mouseif.intrclock = pccore.realclock / 120;
         mouseif.moveclock = pccore.realclock / 56400;          mouseif.moveclock = pccore.realclock / 56400;
           mouseif.latch_x = -1;
           mouseif.latch_y = -1;
   
           (void)pConfig;
 }  }
   
 void mouseif_bind(void) {  void mouseif_bind(void) {
   
           iocore_attachout(0x7fd9, mouseif_o7fd9);
           iocore_attachout(0x7fdb, mouseif_o7fdb);
         iocore_attachout(0x7fdd, mouseif_o7fdd);          iocore_attachout(0x7fdd, mouseif_o7fdd);
         iocore_attachout(0x7fdf, mouseif_o7fdf);          iocore_attachout(0x7fdf, mouseif_o7fdf);
         iocore_attachinp(0x7fd9, mouseif_i7fd9);          iocore_attachinp(0x7fd9, mouseif_i7fd9);

Removed from v.1.8  
changed lines
  Added in v.1.18


RetroPC.NET-CVS <cvs@retropc.net>