Diff for /np2/fdd/fdd_xdf.c between versions 1.3 and 1.8

version 1.3, 2004/01/27 10:55:47 version 1.8, 2005/02/07 14:46:09
Line 13  static const _XDFINFO supportxdf[] = { Line 13  static const _XDFINFO supportxdf[] = {
                         // 512                          // 512
                         {0, 154, 15, 2, DISKTYPE_2HD, 0},                          {0, 154, 15, 2, DISKTYPE_2HD, 0},
 #endif  #endif
   #if 1
                           // 512
                           {0, 160, 15, 2, DISKTYPE_2HD, 0},
   #endif
                         // 1024                          // 1024
                         {0, 154,  8, 3, DISKTYPE_2HD, 0},                          {0, 154,  8, 3, DISKTYPE_2HD, 0},
                         // 1.44MB                          // 1.44MB
Line 20  static const _XDFINFO supportxdf[] = { Line 24  static const _XDFINFO supportxdf[] = {
 };  };
   
 typedef struct {  typedef struct {
         BYTE    dummy[4];          UINT8   dummy[4];
         BYTE    fddtype[4];          UINT8   fddtype[4];
         BYTE    headersize[4];          UINT8   headersize[4];
         BYTE    fddsize[4];          UINT8   fddsize[4];
         BYTE    sectorsize[4];          UINT8   sectorsize[4];
         BYTE    sectors[4];          UINT8   sectors[4];
         BYTE    surfaces[4];          UINT8   surfaces[4];
         BYTE    cylinders[4];          UINT8   cylinders[4];
 } FDIHDR;  } FDIHDR;
   
   
Line 36  BOOL fddxdf_set(FDDFILE fdd, const char  Line 40  BOOL fddxdf_set(FDDFILE fdd, const char 
 const _XDFINFO  *xdf;  const _XDFINFO  *xdf;
         short           attr;          short           attr;
         FILEH           fh;          FILEH           fh;
         UINT            fdsize;          UINT32          fdsize;
         UINT            size;          UINT            size;
   
         attr = file_attr(fname);          attr = file_attr(fname);
Line 47  const _XDFINFO *xdf; Line 51  const _XDFINFO *xdf;
         if (fh == FILEH_INVALID) {          if (fh == FILEH_INVALID) {
                 return(FAILURE);                  return(FAILURE);
         }          }
         fdsize = file_seek(fh, 0, FSEEK_END);          fdsize = file_getsize(fh);
         file_close(fh);          file_close(fh);
   
         xdf = supportxdf;          xdf = supportxdf;
         while(xdf < (supportxdf + (sizeof(supportxdf)/sizeof(_XDFINFO)))) {          while(xdf < (supportxdf + NELEMENTS(supportxdf))) {
                 size = xdf->tracks;                  size = xdf->tracks;
                 size *= xdf->sectors;                  size *= xdf->sectors;
                 size <<= (7 + xdf->n);                  size <<= (7 + xdf->n);
Line 72  BOOL fddxdf_setfdi(FDDFILE fdd, const ch Line 76  BOOL fddxdf_setfdi(FDDFILE fdd, const ch
   
         short   attr;          short   attr;
         FILEH   fh;          FILEH   fh;
         FDIHDR  fdi;          UINT32  fdsize;
         UINT    r;          UINT    r;
           FDIHDR  fdi;
         UINT32  fddtype;          UINT32  fddtype;
         UINT32  headersize;          UINT32  headersize;
         UINT32  size;          UINT32  size;
Line 88  BOOL fddxdf_setfdi(FDDFILE fdd, const ch Line 93  BOOL fddxdf_setfdi(FDDFILE fdd, const ch
         if (attr & 0x18) {          if (attr & 0x18) {
                 return(FAILURE);                  return(FAILURE);
         }          }
           fdsize = 0;
         r = 0;          r = 0;
         fh = file_open_rb(fname);          fh = file_open_rb(fname);
         if (fh != FILEH_INVALID) {          if (fh != FILEH_INVALID) {
                   fdsize = file_getsize(fh);
                 r = file_read(fh, &fdi, sizeof(fdi));                  r = file_read(fh, &fdi, sizeof(fdi));
                 file_close(fh);                  file_close(fh);
         }          }
Line 109  BOOL fddxdf_setfdi(FDDFILE fdd, const ch Line 116  BOOL fddxdf_setfdi(FDDFILE fdd, const ch
                 (cylinders == 0) || (cylinders >= 128)) {                  (cylinders == 0) || (cylinders >= 128)) {
                 return(FAILURE);                  return(FAILURE);
         }          }
           if (fdsize != (headersize + (size * sectors * surfaces * cylinders))) {
                   return(FAILURE);
           }
         size >>= 8;          size >>= 8;
         n = 0;          n = 0;
         while(size) {          while(size) {
Line 166  BOOL fddxdf_diskaccess(FDDFILE fdd) { Line 176  BOOL fddxdf_diskaccess(FDDFILE fdd) {
                 (CTRL_FDMEDIA != fdd->inf.xdf.disktype)) {                  (CTRL_FDMEDIA != fdd->inf.xdf.disktype)) {
                 return(FAILURE);                  return(FAILURE);
         }          }
         (void)fdd;  
         return(SUCCESS);          return(SUCCESS);
 }  }
   
Line 174  BOOL fddxdf_seek(FDDFILE fdd) { Line 183  BOOL fddxdf_seek(FDDFILE fdd) {
   
         if ((fdd->type != DISKTYPE_BETA) ||          if ((fdd->type != DISKTYPE_BETA) ||
                 (CTRL_FDMEDIA != fdd->inf.xdf.disktype) ||                  (CTRL_FDMEDIA != fdd->inf.xdf.disktype) ||
                 (fdc.rpm != fdd->inf.xdf.rpm) ||                  (fdc.rpm[fdc.us] != fdd->inf.xdf.rpm) ||
                 (fdc.ncn >= (fdd->inf.xdf.tracks >> 1))) {                  (fdc.ncn >= (fdd->inf.xdf.tracks >> 1))) {
                 return(FAILURE);                  return(FAILURE);
         }          }
Line 185  BOOL fddxdf_seeksector(FDDFILE fdd) { Line 194  BOOL fddxdf_seeksector(FDDFILE fdd) {
   
         if ((fdd->type != DISKTYPE_BETA) ||          if ((fdd->type != DISKTYPE_BETA) ||
                 (CTRL_FDMEDIA != fdd->inf.xdf.disktype) ||                  (CTRL_FDMEDIA != fdd->inf.xdf.disktype) ||
                 (fdc.rpm != fdd->inf.xdf.rpm) ||                  (fdc.rpm[fdc.us] != fdd->inf.xdf.rpm) ||
                 (fdc.treg[fdc.us] >= (fdd->inf.xdf.tracks >> 1))) {                  (fdc.treg[fdc.us] >= (fdd->inf.xdf.tracks >> 1))) {
                 fddlasterror = 0xe0;                  fddlasterror = 0xe0;
                 return(FAILURE);                  return(FAILURE);
Line 207  BOOL fddxdf_read(FDDFILE fdd) { Line 216  BOOL fddxdf_read(FDDFILE fdd) {
         long    seekp;          long    seekp;
         UINT    secsize;          UINT    secsize;
   
         fddlasterror = 0x00;                                                                            // ver0.28          fddlasterror = 0x00;
         if (fddxdf_seeksector(fdd)) {          if (fddxdf_seeksector(fdd)) {
                 return(FAILURE);                  return(FAILURE);
         }          }
         if (fdc.N != fdd->inf.xdf.n) {          if (fdc.N != fdd->inf.xdf.n) {
                 fddlasterror = 0xc0;                                                                    // ver0.28                  fddlasterror = 0xc0;
                 return(FAILURE);                  return(FAILURE);
         }          }
   
Line 225  BOOL fddxdf_read(FDDFILE fdd) { Line 234  BOOL fddxdf_read(FDDFILE fdd) {
   
         hdl = file_open_rb(fdd->fname);          hdl = file_open_rb(fdd->fname);
         if (hdl == FILEH_INVALID) {          if (hdl == FILEH_INVALID) {
                 fddlasterror = 0xe0;                                                                    // ver0.28                  fddlasterror = 0xe0;
                 return(FAILURE);                  return(FAILURE);
         }          }
         if ((file_seek(hdl, seekp, FSEEK_SET) != seekp) ||          if ((file_seek(hdl, seekp, FSEEK_SET) != seekp) ||
                 (file_read(hdl, fdc.buf, secsize) != secsize)) {                  (file_read(hdl, fdc.buf, secsize) != secsize)) {
                 file_close(hdl);                  file_close(hdl);
                 fddlasterror = 0xe0;                                                                    // ver0.28                  fddlasterror = 0xe0;
                 return(FAILURE);                  return(FAILURE);
         }          }
         file_close(hdl);          file_close(hdl);
         fdc.bufcnt = secsize;          fdc.bufcnt = secsize;
         fddlasterror = 0x00;                                                                            // ver0.28          fddlasterror = 0x00;
         return(SUCCESS);          return(SUCCESS);
 }  }
   
Line 246  BOOL fddxdf_write(FDDFILE fdd) { Line 255  BOOL fddxdf_write(FDDFILE fdd) {
         long    seekp;          long    seekp;
         UINT    secsize;          UINT    secsize;
   
         fddlasterror = 0x00;                                                                            // ver0.28          fddlasterror = 0x00;
         if (fddxdf_seeksector(fdd)) {          if (fddxdf_seeksector(fdd)) {
                 fddlasterror = 0xe0;                                                                    // ver0.28                  fddlasterror = 0xe0;
                 return(FAILURE);                  return(FAILURE);
         }          }
         if (fdd->protect) {          if (fdd->protect) {
                 fddlasterror = 0x70;                                                                    // ver0.28                  fddlasterror = 0x70;
                 return(FAILURE);                  return(FAILURE);
         }          }
         if (fdc.N != fdd->inf.xdf.n) {          if (fdc.N != fdd->inf.xdf.n) {
                 fddlasterror = 0xc0;                                                                    // ver0.28                  fddlasterror = 0xc0;
                 return(FAILURE);                  return(FAILURE);
         }          }
   
Line 269  BOOL fddxdf_write(FDDFILE fdd) { Line 278  BOOL fddxdf_write(FDDFILE fdd) {
   
         hdl = file_open(fdd->fname);          hdl = file_open(fdd->fname);
         if (hdl == FILEH_INVALID) {          if (hdl == FILEH_INVALID) {
                 fddlasterror = 0xc0;                                                                    // ver0.28                  fddlasterror = 0xc0;
                 return(FAILURE);                  return(FAILURE);
         }          }
         if ((file_seek(hdl, seekp, FSEEK_SET) != seekp) ||          if ((file_seek(hdl, seekp, FSEEK_SET) != seekp) ||
                 (file_write(hdl, fdc.buf, secsize) != secsize)) {                  (file_write(hdl, fdc.buf, secsize) != secsize)) {
                 file_close(hdl);                  file_close(hdl);
                 fddlasterror = 0xc0;                                                                    // ver0.28                  fddlasterror = 0xc0;
                 return(FAILURE);                  return(FAILURE);
         }          }
         file_close(hdl);          file_close(hdl);
         fdc.bufcnt = secsize;          fdc.bufcnt = secsize;
         fddlasterror = 0x00;                                                                            // ver0.28          fddlasterror = 0x00;
         return(SUCCESS);          return(SUCCESS);
 }  }
   
 BOOL fddxdf_readid(FDDFILE fdd) {  BOOL fddxdf_readid(FDDFILE fdd) {
   
         fddlasterror = 0x00;          fddlasterror = 0x00;
         if ((fdc.rpm != fdd->inf.xdf.rpm) ||          if ((!fdc.mf) ||
                   (fdc.rpm[fdc.us] != fdd->inf.xdf.rpm) ||
                 (fdc.crcn >= fdd->inf.xdf.sectors)) {                  (fdc.crcn >= fdd->inf.xdf.sectors)) {
                 fddlasterror = 0xe0;                  fddlasterror = 0xe0;
                 return(FAILURE);                  return(FAILURE);

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


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