Diff for /np2/cbus/ideio.c between versions 1.4 and 1.5

version 1.4, 2004/08/04 15:04:51 version 1.5, 2004/08/04 16:28:46
Line 118  static void setintr(IDEDRV drv) { Line 118  static void setintr(IDEDRV drv) {
   
 static void cmdabort(IDEDRV drv) {  static void cmdabort(IDEDRV drv) {
   
           TRACEOUT(("ideio: cmdabort()"));
         drv->status = IDESTAT_DRDY | IDESTAT_ERR;          drv->status = IDESTAT_DRDY | IDESTAT_ERR;
         drv->error = IDEERR_ABRT;          drv->error = IDEERR_ABRT;
         setintr(drv);          setintr(drv);
Line 251  static void IOOUTCALL ideio_o642(UINT po Line 252  static void IOOUTCALL ideio_o642(UINT po
                 drv->wp = dat;                  drv->wp = dat;
                 TRACEOUT(("ideio set WP %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP));                  TRACEOUT(("ideio set WP %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP));
         }          }
           (void)port;
 }  }
   
 static void IOOUTCALL ideio_o644(UINT port, REG8 dat) {  static void IOOUTCALL ideio_o644(UINT port, REG8 dat) {
   
         IDEDRV  drv;          IDEDRV  drv;
   
           (void)port;
         drv = getidedrv();          drv = getidedrv();
         if (drv) {          if (drv) {
                 drv->sc = dat;                  drv->sc = dat;
                 TRACEOUT(("ideio set SC %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP));                  TRACEOUT(("ideio set SC %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP));
         }          }
           (void)port;
 }  }
   
 static void IOOUTCALL ideio_o646(UINT port, REG8 dat) {  static void IOOUTCALL ideio_o646(UINT port, REG8 dat) {
Line 273  static void IOOUTCALL ideio_o646(UINT po Line 277  static void IOOUTCALL ideio_o646(UINT po
                 drv->sn = dat;                  drv->sn = dat;
                 TRACEOUT(("ideio set SN %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP));                  TRACEOUT(("ideio set SN %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP));
         }          }
           (void)port;
 }  }
   
 static void IOOUTCALL ideio_o648(UINT port, REG8 dat) {  static void IOOUTCALL ideio_o648(UINT port, REG8 dat) {
Line 285  static void IOOUTCALL ideio_o648(UINT po Line 290  static void IOOUTCALL ideio_o648(UINT po
                 drv->cy |= dat;                  drv->cy |= dat;
                 TRACEOUT(("ideio set CYL %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP));                  TRACEOUT(("ideio set CYL %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP));
         }          }
           (void)port;
 }  }
   
 static void IOOUTCALL ideio_o64a(UINT port, REG8 dat) {  static void IOOUTCALL ideio_o64a(UINT port, REG8 dat) {
Line 297  static void IOOUTCALL ideio_o64a(UINT po Line 303  static void IOOUTCALL ideio_o64a(UINT po
                 drv->cy |= dat << 8;                  drv->cy |= dat << 8;
                 TRACEOUT(("ideio set CYH %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP));                  TRACEOUT(("ideio set CYH %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP));
         }          }
           (void)port;
 }  }
   
 static void IOOUTCALL ideio_o64c(UINT port, REG8 dat) {  static void IOOUTCALL ideio_o64c(UINT port, REG8 dat) {
Line 318  static void IOOUTCALL ideio_o64c(UINT po Line 325  static void IOOUTCALL ideio_o64c(UINT po
         dev->drv[drvnum].dr = dat & 0xf0;          dev->drv[drvnum].dr = dat & 0xf0;
         dev->drv[drvnum].hd = dat & 0x0f;          dev->drv[drvnum].hd = dat & 0x0f;
         TRACEOUT(("ideio set DRHD %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP));          TRACEOUT(("ideio set DRHD %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP));
           (void)port;
 }  }
   
 static void IOOUTCALL ideio_o64e(UINT port, REG8 dat) {  static void IOOUTCALL ideio_o64e(UINT port, REG8 dat) {
   
         IDEDRV  drv;          IDEDRV  drv;
           IDEDEV  dev;
   
         drv = getidedrv();          drv = getidedrv();
         if (drv == NULL) {          if (drv == NULL) {
Line 331  static void IOOUTCALL ideio_o64e(UINT po Line 340  static void IOOUTCALL ideio_o64e(UINT po
         drv->cmd = dat;          drv->cmd = dat;
         TRACEOUT(("ideio set cmd %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP));          TRACEOUT(("ideio set cmd %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP));
         switch(dat) {          switch(dat) {
                 case 0x08:              // atapi reset                  case 0x08:              // device reset
                         if (drv->device == IDETYPE_CDROM) {                          if (drv->device == IDETYPE_CDROM) {
                                 drv->hd = 0;                                  drv->hd = 0x10;
                                 drv->sc = 1;                                  drv->sc = 0x01;
                                 drv->sn = 1;                                  drv->sn = 0x01;
                                 drv->cy = 0xeb14;                                  drv->cy = 0xeb14;
                                 drv->status = 0;                                  drv->status = 0x00;
                                 drv->error = 0;                                  drv->error = 0x01;
                                   dev = getidedev();
                                   if (dev) {
                                           if (dev->drivesel == 0) {
                                                   if (dev->drv[0].device == IDETYPE_NONE) {
                                                           drv->error = 0x00;
                                                   }
                                                   if (dev->drv[1].device == IDETYPE_NONE) {
                                                           drv->error |= 0x80;
                                                   }
                                           }
                                           else {
                                                   if (dev->drv[1].device == IDETYPE_NONE) {
                                                           drv->error = 0x00;
                                                   }
                                           }
                                   }
                         }                          }
                         break;                          break;
   
Line 362  static void IOOUTCALL ideio_o64e(UINT po Line 387  static void IOOUTCALL ideio_o64e(UINT po
                         readsec(drv);                          readsec(drv);
                         break;                          break;
   
                   case 0x90:              // execute device diagnostic
                           TRACEOUT(("ideio execute device diagnostic [%.4x:%.8x]",
                                                                                           CPU_CS, CPU_EIP));
                           dev = getidedev();
                           if (dev) {
                                   if (drv->device == IDETYPE_HDD) {
                                           drv->hd = 0x00;
                                           drv->sc = 0x01;
                                           drv->sn = 0x01;
                                           drv->cy = 0x0000;
                                   }
                                   else if (drv->device == IDETYPE_CDROM) {
                                           drv->hd = 0x10;
                                           drv->sc = 0x01;
                                           drv->sn = 0x01;
                                           drv->cy = 0xeb14;
                                   }
                                   drv->status = IDESTAT_DRDY;
                                   drv->error = 0x01;
                                   if (dev->drivesel == 0) {
                                           if (dev->drv[0].device == IDETYPE_NONE) {
                                                   drv->error = 0x00;
                                           }
                                           if (dev->drv[1].device == IDETYPE_NONE) {
                                                   drv->error |= 0x80;
                                           }
                                   }
                                   else {
                                           if (dev->drv[1].device == IDETYPE_NONE) {
                                                   drv->error = 0x00;
                                           }
                                   }
                           }
                           break;
   
                 case 0x91:              // set parameters                  case 0x91:              // set parameters
                         TRACEOUT(("ideio: set parameters dh=%x sec=%x",                          TRACEOUT(("ideio: set parameters dh=%x sec=%x",
                                                                                         drv->dr | drv->hd, drv->sc));                                                                                          drv->dr | drv->hd, drv->sc));
Line 408  static void IOOUTCALL ideio_o64e(UINT po Line 468  static void IOOUTCALL ideio_o64e(UINT po
                         panic("command:%.2x", dat);                          panic("command:%.2x", dat);
                         break;                          break;
         }          }
           (void)port;
 }  }
   
 static void IOOUTCALL ideio_o74c(UINT port, REG8 dat) {  static void IOOUTCALL ideio_o74c(UINT port, REG8 dat) {
Line 440  static void IOOUTCALL ideio_o74c(UINT po Line 501  static void IOOUTCALL ideio_o74c(UINT po
                         }                          }
                 }                  }
         }          }
         TRACEOUT(("ideio interrupt %sable", (dat & IDECTRL_NIEN) ? "di" : "en"));          TRACEOUT(("ideio interrupt %sable", (dat & IDECTRL_NIEN) ? "dis" : "en"));
         TRACEOUT(("ideio devctrl %.4x,%.2x [%.4x:%.8x]", port, dat, CPU_CS, CPU_EIP));          TRACEOUT(("ideio devctrl %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP));
           (void)port;
 }  }
   
 static void IOOUTCALL ideio_o74e(UINT port, REG8 dat) {  static void IOOUTCALL ideio_o74e(UINT port, REG8 dat) {
   
         TRACEOUT(("ideio %.4x,%.2x [%.4x:%.8x]", port, dat, CPU_CS, CPU_EIP));          TRACEOUT(("ideio %.4x,%.2x [%.4x:%.8x]", port, dat, CPU_CS, CPU_EIP));
           (void)port;
           (void)dat;
 }  }
   
   
Line 456  static REG8 IOINPCALL ideio_i642(UINT po Line 520  static REG8 IOINPCALL ideio_i642(UINT po
   
         IDEDRV  drv;          IDEDRV  drv;
   
           (void)port;
   
         drv = getidedrv();          drv = getidedrv();
         if (drv) {          if (drv) {
                 drv->status &= ~IDESTAT_ERR;                  drv->status &= ~IDESTAT_ERR;
Line 472  static REG8 IOINPCALL ideio_i644(UINT po Line 538  static REG8 IOINPCALL ideio_i644(UINT po
   
         IDEDRV  drv;          IDEDRV  drv;
   
           (void)port;
   
         drv = getidedrv();          drv = getidedrv();
         if (drv) {          if (drv) {
                 TRACEOUT(("ideio get SC %.2x [%.4x:%.8x]", drv->sc, CPU_CS, CPU_EIP));                  TRACEOUT(("ideio get SC %.2x [%.4x:%.8x]", drv->sc, CPU_CS, CPU_EIP));
Line 486  static REG8 IOINPCALL ideio_i646(UINT po Line 554  static REG8 IOINPCALL ideio_i646(UINT po
   
         IDEDRV  drv;          IDEDRV  drv;
   
           (void)port;
   
         drv = getidedrv();          drv = getidedrv();
         if (drv) {          if (drv) {
                 TRACEOUT(("ideio get SN %.2x [%.4x:%.8x]", drv->sn, CPU_CS, CPU_EIP));                  TRACEOUT(("ideio get SN %.2x [%.4x:%.8x]", drv->sn, CPU_CS, CPU_EIP));
Line 500  static REG8 IOINPCALL ideio_i648(UINT po Line 570  static REG8 IOINPCALL ideio_i648(UINT po
   
         IDEDRV  drv;          IDEDRV  drv;
   
           (void)port;
   
         drv = getidedrv();          drv = getidedrv();
         if (drv) {          if (drv) {
                 TRACEOUT(("ideio get CYL %.4x [%.4x:%.8x]", drv->cy, CPU_CS, CPU_EIP));                  TRACEOUT(("ideio get CYL %.4x [%.4x:%.8x]", drv->cy, CPU_CS, CPU_EIP));
Line 514  static REG8 IOINPCALL ideio_i64a(UINT po Line 586  static REG8 IOINPCALL ideio_i64a(UINT po
   
         IDEDRV  drv;          IDEDRV  drv;
   
           (void)port;
   
         drv = getidedrv();          drv = getidedrv();
         if (drv) {          if (drv) {
                 TRACEOUT(("ideio get CYH %.4x [%.4x:%.8x]", drv->cy, CPU_CS, CPU_EIP));                  TRACEOUT(("ideio get CYH %.4x [%.4x:%.8x]", drv->cy, CPU_CS, CPU_EIP));
Line 529  static REG8 IOINPCALL ideio_i64c(UINT po Line 603  static REG8 IOINPCALL ideio_i64c(UINT po
         IDEDRV  drv;          IDEDRV  drv;
         REG8    ret;          REG8    ret;
   
           (void)port;
   
         drv = getidedrv();          drv = getidedrv();
         if (drv) {          if (drv) {
                 ret = drv->dr | drv->hd;                  ret = drv->dr | drv->hd;
Line 544  static REG8 IOINPCALL ideio_i64e(UINT po Line 620  static REG8 IOINPCALL ideio_i64e(UINT po
   
         IDEDRV  drv;          IDEDRV  drv;
   
           (void)port;
   
         drv = getidedrv();          drv = getidedrv();
         if (drv) {          if (drv) {
                 TRACEOUT(("ideio status %.2x [%.4x:%.8x]",                  TRACEOUT(("ideio status %.2x [%.4x:%.8x]",
Line 563  static REG8 IOINPCALL ideio_i74c(UINT po Line 641  static REG8 IOINPCALL ideio_i74c(UINT po
   
         IDEDRV  drv;          IDEDRV  drv;
   
           (void)port;
   
         drv = getidedrv();          drv = getidedrv();
         if (drv) {          if (drv) {
                 TRACEOUT(("ideio alt status %.2x [%.4x:%.8x]",                  TRACEOUT(("ideio alt status %.2x [%.4x:%.8x]",
Line 600  void IOOUTCALL ideio_w16(UINT port, REG1 Line 680  void IOOUTCALL ideio_w16(UINT port, REG1
                         }                          }
                 }                  }
         }          }
           (void)port;
 }  }
   
 REG16 IOINPCALL ideio_r16(UINT port) {  REG16 IOINPCALL ideio_r16(UINT port) {
Line 608  REG16 IOINPCALL ideio_r16(UINT port) { Line 689  REG16 IOINPCALL ideio_r16(UINT port) {
         REG16   ret;          REG16   ret;
         BYTE    *p;          BYTE    *p;
   
           (void)port;
   
         drv = getidedrv();          drv = getidedrv();
         if (drv == NULL) {          if (drv == NULL) {
                 return(0xff);                  return(0xff);
Line 616  REG16 IOINPCALL ideio_r16(UINT port) { Line 699  REG16 IOINPCALL ideio_r16(UINT port) {
         if ((drv->status & IDESTAT_DRQ) && (drv->bufdir == IDEDIR_IN)) {          if ((drv->status & IDESTAT_DRQ) && (drv->bufdir == IDEDIR_IN)) {
                 p = drv->buf + drv->bufpos;                  p = drv->buf + drv->bufpos;
                 ret = p[0] + (p[1] << 8);                  ret = p[0] + (p[1] << 8);
                 TRACEOUT(("ide-data recv %4x (%.4x) [%.4x:%.8x]",                  TRACEOUT(("ide-data recv %.4x (%.4x) [%.4x:%.8x]",
                                                                                 ret, drv->bufpos, CPU_CS, CPU_EIP));                                                                                  ret, drv->bufpos, CPU_CS, CPU_EIP));
                 drv->bufpos += 2;                  drv->bufpos += 2;
                 if (drv->bufpos >= drv->bufsize) {                  if (drv->bufpos >= drv->bufsize) {
Line 733  void ideio_bind(void) { Line 816  void ideio_bind(void) {
                 iocore_attachinp(0x074c, ideio_i74c);                  iocore_attachinp(0x074c, ideio_i74c);
         }          }
 }  }
 #endif  
   
   #endif  /* SUPPORT_IDEIO */

Removed from v.1.4  
changed lines
  Added in v.1.5


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