Diff for /np2/io/fdc.c between versions 1.2 and 1.6

version 1.2, 2003/10/17 03:52:24 version 1.6, 2004/01/05 09:31:25
Line 4 Line 4
   
   
 #include        "compiler.h"  #include        "compiler.h"
 #include        "dosio.h"  
 #include        "i286.h"  
 #include        "pccore.h"  #include        "pccore.h"
 #include        "iocore.h"  #include        "iocore.h"
 #include        "fddfile.h"  #include        "fddfile.h"
   
   enum {
           FDC_DMACH2HD    = 2,
           FDC_DMACH2DD    = 3
   };
   
 static const BYTE FDCCMD_TABLE[32] = {  static const UINT8 FDCCMD_TABLE[32] = {
                                                 0, 0, 8, 2, 1, 8, 8, 1, 0, 8, 1, 0, 8, 5, 0, 2,                                                  0, 0, 8, 2, 1, 8, 8, 1, 0, 8, 1, 0, 8, 5, 0, 2,
                                                 0, 8, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0};                                                  0, 8, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0};
   
Line 42  static BOOL fdc_isfdcinterrupt(void) { Line 44  static BOOL fdc_isfdcinterrupt(void) {
         return(fdc.intreq);          return(fdc.intreq);
 }  }
   
 BYTE DMACCALL fdc_dmafunc(BYTE func) {  REG8 DMACCALL fdc_dmafunc(REG8 func) {
   
         switch(func) {          switch(func) {
                 case DMAEXT_START:                  case DMAEXT_START:
Line 55  BYTE DMACCALL fdc_dmafunc(BYTE func) { Line 57  BYTE DMACCALL fdc_dmafunc(BYTE func) {
         return(0);          return(0);
 }  }
   
 static void fdc_dmaready(BYTE enable) {  static void fdc_dmaready(REG8 enable) {
   
         if (CTRL_FDMEDIA == DISKTYPE_2HD) {          if (CTRL_FDMEDIA == DISKTYPE_2HD) {
                 dmac.dmach[DMA_2HD].ready = enable;                  dmac.dmach[FDC_DMACH2HD].ready = enable;
         }          }
         else {          else {
                 dmac.dmach[DMA_2DD].ready = enable;                  dmac.dmach[FDC_DMACH2DD].ready = enable;
         }          }
 }  }
   
Line 145  static void fdc_timeoutset(void) { Line 147  static void fdc_timeoutset(void) {
   
   
   
 static BOOL FDC_DriveCheck(BYTE protectcheck) {  static BOOL FDC_DriveCheck(BOOL protectcheck) {
   
         if (!fddfile[fdc.us].fname[0]) {          if (!fddfile[fdc.us].fname[0]) {
                 fdc.stat[fdc.us] = FDCRLT_IC0 | FDCRLT_NR | (fdc.hd << 2) | fdc.us;                  fdc.stat[fdc.us] = FDCRLT_IC0 | FDCRLT_NR | (fdc.hd << 2) | fdc.us;
Line 354  static void readsector(void) { Line 356  static void readsector(void) {
                 fdcsend_error7();                  fdcsend_error7();
                 return;                  return;
         }          }
   
         fdc.event = FDCEVENT_BUFSEND2;          fdc.event = FDCEVENT_BUFSEND2;
         fdc.bufp = 0;          fdc.bufp = 0;
 #if 1                                                                                                                   // ver0.27 ??  #if 1                                                                                                                   // ver0.27 ??
Line 465  static void FDC_SenceintStatus(void) {   Line 468  static void FDC_SenceintStatus(void) {  
         }          }
 }  }
   
 #if 0   // for test..  
 static void FDC_ReadID(void) {                                                  // cmd: 0a  static void FDC_ReadID(void) {                                                  // cmd: 0a
   
         switch(fdc.event) {          switch(fdc.event) {
                 case FDCEVENT_CMDRECV:                  case FDCEVENT_CMDRECV:
                           fdc.mf = fdc.cmd & 0x40;
                         get_hdus();                          get_hdus();
                           if (fdd_readid() == SUCCESS) {
                                   fdcsend_success7();
                           }
                           else {
                                   fdc.stat[fdc.us] = fdc.us | (fdc.hd << 2) |
                                                                                                           FDCRLT_IC0 | FDCRLT_MA;
                                   fdcsend_error7();
                           }
                         break;                          break;
         }          }
 }  }
 #endif  
   
 static void FDC_WriteID(void) {                                                 // cmd: 0d  static void FDC_WriteID(void) {                                                 // cmd: 0d
   
Line 590  static const FDCOPE FDC_Ope[0x20] = { Line 600  static const FDCOPE FDC_Ope[0x20] = {
                                 FDC_Recalibrate,                                  FDC_Recalibrate,
                                 FDC_SenceintStatus,                                  FDC_SenceintStatus,
                                 FDC_WriteData,                                  FDC_WriteData,
                                 FDC_Invalid,                    // FDC_ReadID,                                  FDC_ReadID,
                                 FDC_Invalid,                                  FDC_Invalid,
                                 FDC_ReadData,                                  FDC_ReadData,
                                 FDC_WriteID,                                  FDC_WriteID,
Line 622  static void fdcstatusreset(void) { Line 632  static void fdcstatusreset(void) {
         fdc.status = FDCSTAT_RQM;          fdc.status = FDCSTAT_RQM;
 }  }
   
 void DMACCALL fdc_DataRegWrite(BYTE data) {  void DMACCALL fdc_DataRegWrite(REG8 data) {
   
 //      if ((fdc.status & (FDCSTAT_RQM | FDCSTAT_DIO)) == FDCSTAT_RQM) {  //      if ((fdc.status & (FDCSTAT_RQM | FDCSTAT_DIO)) == FDCSTAT_RQM) {
                 switch(fdc.event) {                  switch(fdc.event) {
Line 661  void DMACCALL fdc_DataRegWrite(BYTE data Line 671  void DMACCALL fdc_DataRegWrite(BYTE data
 //      }  //      }
 }  }
   
   REG8 DMACCALL fdc_DataRegRead(void) {
 BYTE DMACCALL fdc_DataRegRead(void) {  
   
 //      if ((fdc.status & (FDCSTAT_RQM | FDCSTAT_DIO))  //      if ((fdc.status & (FDCSTAT_RQM | FDCSTAT_DIO))
 //                                                                      == (FDCSTAT_RQM | FDCSTAT_DIO)) {  //                                                                      == (FDCSTAT_RQM | FDCSTAT_DIO)) {
Line 706  BYTE DMACCALL fdc_DataRegRead(void) { Line 715  BYTE DMACCALL fdc_DataRegRead(void) {
   
 // ---- I/O  // ---- I/O
   
 static void IOOUTCALL fdc_o92(UINT port, BYTE dat) {  static void IOOUTCALL fdc_o92(UINT port, REG8 dat) {
   
   //      TRACEOUT(("fdc out %x %x", port, dat));
         CTRL_FDMEDIA = DISKTYPE_2HD;          CTRL_FDMEDIA = DISKTYPE_2HD;
         if ((fdc.status & (FDCSTAT_RQM | FDCSTAT_DIO)) == FDCSTAT_RQM) {          if ((fdc.status & (FDCSTAT_RQM | FDCSTAT_DIO)) == FDCSTAT_RQM) {
                 fdc_DataRegWrite(dat);                  fdc_DataRegWrite(dat);
Line 715  static void IOOUTCALL fdc_o92(UINT port, Line 725  static void IOOUTCALL fdc_o92(UINT port,
         (void)port;          (void)port;
 }  }
   
 static void IOOUTCALL fdc_o94(UINT port, BYTE dat) {  static void IOOUTCALL fdc_o94(UINT port, REG8 dat) {
   
   //      TRACEOUT(("fdc out %x %x", port, dat));
         CTRL_FDMEDIA = DISKTYPE_2HD;          CTRL_FDMEDIA = DISKTYPE_2HD;
         if ((fdc.ctrlreg ^ dat) & 0x10) {          if ((fdc.ctrlreg ^ dat) & 0x10) {
                 fdcstatusreset();                  fdcstatusreset();
Line 727  static void IOOUTCALL fdc_o94(UINT port, Line 738  static void IOOUTCALL fdc_o94(UINT port,
         (void)port;          (void)port;
 }  }
   
 static BYTE IOINPCALL fdc_i90(UINT port) {  static REG8 IOINPCALL fdc_i90(UINT port) {
   
   //      TRACEOUT(("fdc in %x %x", port, fdc.status));
         CTRL_FDMEDIA = DISKTYPE_2HD;          CTRL_FDMEDIA = DISKTYPE_2HD;
   
         (void)port;          (void)port;
         return(fdc.status);          return(fdc.status);
 }  }
   
 static BYTE IOINPCALL fdc_i92(UINT port) {  static REG8 IOINPCALL fdc_i92(UINT port) {
   
         BYTE    ret;          REG8    ret;
   
         CTRL_FDMEDIA = DISKTYPE_2HD;          CTRL_FDMEDIA = DISKTYPE_2HD;
         if ((fdc.status & (FDCSTAT_RQM | FDCSTAT_DIO))          if ((fdc.status & (FDCSTAT_RQM | FDCSTAT_DIO))
Line 748  static BYTE IOINPCALL fdc_i92(UINT port) Line 760  static BYTE IOINPCALL fdc_i92(UINT port)
                 ret = fdc.lastdata;                  ret = fdc.lastdata;
         }          }
         (void)port;          (void)port;
   //      TRACEOUT(("fdc in %x %x", port, ret));
         return(ret);          return(ret);
 }  }
   
 static BYTE IOINPCALL fdc_i94(UINT port) {  static REG8 IOINPCALL fdc_i94(UINT port) {
   
         CTRL_FDMEDIA = DISKTYPE_2HD;          CTRL_FDMEDIA = DISKTYPE_2HD;
   
Line 760  static BYTE IOINPCALL fdc_i94(UINT port) Line 773  static BYTE IOINPCALL fdc_i94(UINT port)
 }  }
   
   
 static void IOOUTCALL fdc_oca(UINT port, BYTE dat) {  static void IOOUTCALL fdc_oca(UINT port, REG8 dat) {
   
         CTRL_FDMEDIA = DISKTYPE_2DD;          CTRL_FDMEDIA = DISKTYPE_2DD;
         fdc_DataRegWrite(dat);          fdc_DataRegWrite(dat);
         (void)port;          (void)port;
 }  }
   
 static void IOOUTCALL fdc_occ(UINT port, BYTE dat) {  static void IOOUTCALL fdc_occ(UINT port, REG8 dat) {
   
         CTRL_FDMEDIA = DISKTYPE_2DD;          CTRL_FDMEDIA = DISKTYPE_2DD;
         fdc.ctrlreg = dat;          fdc.ctrlreg = dat;
         (void)port;          (void)port;
 }  }
   
 static BYTE IOINPCALL fdc_ic8(UINT port) {  static REG8 IOINPCALL fdc_ic8(UINT port) {
   
         CTRL_FDMEDIA = DISKTYPE_2DD;          CTRL_FDMEDIA = DISKTYPE_2DD;
   
Line 782  static BYTE IOINPCALL fdc_ic8(UINT port) Line 795  static BYTE IOINPCALL fdc_ic8(UINT port)
         return(fdc.status);          return(fdc.status);
 }  }
   
 static BYTE IOINPCALL fdc_ica(UINT port) {  static REG8 IOINPCALL fdc_ica(UINT port) {
   
         BYTE    ret;          REG8    ret;
   
         CTRL_FDMEDIA = DISKTYPE_2DD;          CTRL_FDMEDIA = DISKTYPE_2DD;
         ret = fdc_DataRegRead();          ret = fdc_DataRegRead();
Line 793  static BYTE IOINPCALL fdc_ica(UINT port) Line 806  static BYTE IOINPCALL fdc_ica(UINT port)
         return(ret);          return(ret);
 }  }
   
 static BYTE IOINPCALL fdc_icc(UINT port) {  static REG8 IOINPCALL fdc_icc(UINT port) {
   
         CTRL_FDMEDIA = DISKTYPE_2DD;          CTRL_FDMEDIA = DISKTYPE_2DD;
   
Line 802  static BYTE IOINPCALL fdc_icc(UINT port) Line 815  static BYTE IOINPCALL fdc_icc(UINT port)
 }  }
   
   
 static void IOOUTCALL fdc_obe(UINT port, BYTE dat) {  static void IOOUTCALL fdc_obe(UINT port, REG8 dat) {
   
         fdc.chgreg = dat;          fdc.chgreg = dat;
         (void)port;          (void)port;
 }  }
   
 static BYTE IOINPCALL fdc_ibe(UINT port) {  static REG8 IOINPCALL fdc_ibe(UINT port) {
   
         (void)port;          (void)port;
         return((fdc.chgreg & 3) | 8);          return((fdc.chgreg & 3) | 8);
Line 834  void fdc_reset(void) { Line 847  void fdc_reset(void) {
         ZeroMemory(&fdc, sizeof(fdc));          ZeroMemory(&fdc, sizeof(fdc));
         fdcstatusreset();          fdcstatusreset();
         CTRL_FDMEDIA = DISKTYPE_2HD;          CTRL_FDMEDIA = DISKTYPE_2HD;
           dmac_attach(DMADEV_2HD, FDC_DMACH2HD);
           dmac_attach(DMADEV_2DD, FDC_DMACH2DD);
 }  }
   
 void fdc_bind(void) {  void fdc_bind(void) {

Removed from v.1.2  
changed lines
  Added in v.1.6


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