Diff for /np2/fdd/fdd_d88.c between versions 1.5 and 1.7

version 1.5, 2004/01/29 09:41:50 version 1.7, 2004/06/19 14:39:22
Line 6 Line 6
 #include        "fdd_d88.h"  #include        "fdd_d88.h"
   
   
 #define         D88BUFSIZE              0x6000                  // テグザー対策  #define         D88BUFSIZE              0x6000
 #define         D88TRACKMAX             10600  #define         D88TRACKMAX             10600
   
   
Line 30  static UINT32 nexttrackptr(FDDFILE fdd,  Line 30  static UINT32 nexttrackptr(FDDFILE fdd, 
 typedef struct {  typedef struct {
         FDDFILE fdd;          FDDFILE fdd;
         UINT    track;          UINT    track;
         BYTE    type;          UINT    type;
         long    fptr;          long    fptr;
         UINT    size;          UINT    size;
         BOOL    write;          BOOL    write;
Line 71  dtfd_err1: Line 71  dtfd_err1:
         return(FAILURE);          return(FAILURE);
 }  }
   
 static BOOL d88trk_read(D88TRK trk, FDDFILE fdd, UINT track, BYTE type) {  static BOOL d88trk_read(D88TRK trk, FDDFILE fdd, UINT track, UINT type) {
   
         UINT8   rpm;          UINT8   rpm;
         FILEH   fh;          FILEH   fh;
Line 86  static BOOL d88trk_read(D88TRK trk, FDDF Line 86  static BOOL d88trk_read(D88TRK trk, FDDF
         rpm = fdc.rpm[fdc.us];          rpm = fdc.rpm[fdc.us];
         switch(fdd->inf.d88.fdtype_major) {          switch(fdd->inf.d88.fdtype_major) {
                 case DISKTYPE_2D:                  case DISKTYPE_2D:
                           TRACEOUT(("DISKTYPE_2D"));
                         if ((rpm) || (type != DISKTYPE_2DD) || (track & 2)) {                          if ((rpm) || (type != DISKTYPE_2DD) || (track & 2)) {
                                 goto dtrd_err1;                                  goto dtrd_err1;
                         }                          }
Line 178  static BOOL rpmcheck(D88SEC sec) { Line 179  static BOOL rpmcheck(D88SEC sec) {
         return(SUCCESS);          return(SUCCESS);
 }  }
   
 #if 0  
 static D88SEC d88trk_seasector(BOOL check) {  
   
         D88TRK  trk;  
         BYTE    *ptr;  
         BYTE    *ptrend;  
         D88SEC  ret;  
         UINT    sec;  
         UINT    size;  
         UINT    sectors;  
   
         trk = &d88trk;  
         ptr = trk->buf;  
         ptrend = ptr + trk->size;  
         for (sec=0; sec<40; ) {  
                 ret = (D88SEC)ptr;  
                 ptr += sizeof(_D88SEC);  
                 if (ptr > ptrend) {  
                         break;  
                 }  
                 size = LOADINTELWORD(ret->size);  
                 ptr += size;  
                 if (ptr > ptrend) {  
                         break;  
                 }  
                 if ((ret->c == fdc.C) && (ret->h == fdc.H) &&  
                         (ret->r == fdc.R) && (ret->n == fdc.N) && (!rpmcheck(ret))) {  
                         if (check) {  
                                 if ((fdc.mf != 0xff) && (!((fdc.mf ^ ret->mfm_flg) & 0x40))) {  
                                         break;  
                                 }  
                         }  
                         return(ret);  
                 }  
                 sectors = LOADINTELWORD(ret->sectors);  
                 if (++sec >= sectors) {  
                         break;  
                 }  
         }  
         return(NULL);  
 }  
 #endif  
   
   
 // ----  // ----
   
Line 411  BOOL fdd_read_d88(void) { Line 369  BOOL fdd_read_d88(void) {
   
         fddlasterror = 0x00;          fddlasterror = 0x00;
         if (trkseek(fdd, (fdc.treg[fdc.us] << 1) + fdc.hd)) {          if (trkseek(fdd, (fdc.treg[fdc.us] << 1) + fdc.hd)) {
                 fddlasterror = 0xe0;                                                                    // ver0.28                  fddlasterror = 0xe0;
                 return(FAILURE);                  return(FAILURE);
         }          }
         p = searchsector_d88(TRUE);          p = searchsector_d88(TRUE);
         if (!p) {          if (!p) {
                 fddlasterror = 0xc0;                                                                    // ver0.28                  fddlasterror = 0xc0;
                 return(FAILURE);                  return(FAILURE);
         }          }
         if (fdc.N < 8) {          if (fdc.N < 8) {
Line 445  BOOL fdd_write_d88(void) { Line 403  BOOL fdd_write_d88(void) {
         UINT            size;          UINT            size;
         UINT            secsize;          UINT            secsize;
   
         fddlasterror = 0x00;                                                                            // ver0.28          fddlasterror = 0x00;
         if (trkseek(fdd, (fdc.treg[fdc.us] << 1) + fdc.hd)) {          if (trkseek(fdd, (fdc.treg[fdc.us] << 1) + fdc.hd)) {
                 fddlasterror = 0xe0;                                                                    // ver0.28                  fddlasterror = 0xe0;
                 return(FAILURE);                  return(FAILURE);
         }          }
         p = searchsector_d88(FALSE);          p = searchsector_d88(FALSE);
         if (!p) {          if (!p) {
                 fddlasterror = 0xc0;                                                                    // ver0.28                  fddlasterror = 0xc0;
                 return(FAILURE);                  return(FAILURE);
         }          }
         if (fdc.N < 8) {          if (fdc.N < 8) {
Line 469  BOOL fdd_write_d88(void) { Line 427  BOOL fdd_write_d88(void) {
                 CopyMemory(p+1, fdc.buf, size);                  CopyMemory(p+1, fdc.buf, size);
                 d88trk.write = TRUE;                  d88trk.write = TRUE;
         }          }
         fddlasterror = 0x00;                                                                            // ver0.28          fddlasterror = 0x00;
         return(SUCCESS);          return(SUCCESS);
 }  }
   
 #if 0  
 BOOL fddd88_readid(void) {  
   
         FDDFILE         fdd = fddfile + fdc.us;  
   
         D88TRK  trk;  
         BYTE    *ptr;  
         BYTE    *ptrend;  
         D88SEC  cur;  
         UINT    sec;  
         UINT    size;  
         UINT    sectors;  
   
         fddlasterror = 0x00;                                                                            // ver0.28  
         if (trkseek(fdd, (fdc.treg[fdc.us] << 1) + fdc.hd)) {  
                 fddlasterror = 0xe0;                                                                    // ver0.28  
                 return(FAILURE);  
         }  
   
         trk = &d88trk;  
         ptr = trk->buf;  
         ptrend = ptr + trk->size;  
         for (sec=0; sec<40; ) {  
                 cur = (D88SEC)ptr;  
                 ptr += sizeof(_D88SEC);  
                 if (ptr > ptrend) {  
                         break;  
                 }  
                 size = LOADINTELWORD(cur->size);  
                 ptr += size;  
                 if (ptr > ptrend) {  
                         break;  
                 }  
                 sectors = LOADINTELWORD(cur->sectors);  
                 if ((sec == (UINT)fdc.crcn) && (!rpmcheck(cur))) {  
                         fdc.C = cur->c;  
                         fdc.H = cur->h;  
                         fdc.R = cur->r;  
                         fdc.N = cur->n;  
                         fdc.crcn++;  
                         if ((UINT)fdc.crcn >= sectors) {  
                                 fdc.crcn = 0;  
                         }  
                         if ((fdc.mf == 0xff) || ((fdc.mf ^ cur->mfm_flg) & 0x40)) {  
                                 fddlasterror = 0x00;  
                                 return(SUCCESS);  
                         }  
                 }  
                 sec++;  
                 if (sec >= sectors) {  
                         break;  
                 }  
         }  
         fdc.crcn = 0x00;  
         fddlasterror = 0xe0;  
         return(FAILURE);  
 }  
 #endif  
   
 BOOL fdd_readid_d88(void) {  BOOL fdd_readid_d88(void) {
   
         FDDFILE fdd = fddfile + fdc.us;          FDDFILE fdd = fddfile + fdc.us;
Line 541  BOOL fdd_readid_d88(void) { Line 440  BOOL fdd_readid_d88(void) {
         UINT    sectors;          UINT    sectors;
         UINT    secsize;          UINT    secsize;
   
         fddlasterror = 0x00;                                                                            // ver0.28          fddlasterror = 0x00;
         if (trkseek(fdd, (fdc.treg[fdc.us] << 1) + fdc.hd)) {          if (trkseek(fdd, (fdc.treg[fdc.us] << 1) + fdc.hd)) {
                 fddlasterror = 0xe0;                                                                    // ver0.28                  fddlasterror = 0xe0;
                 return(FAILURE);                  return(FAILURE);
         }          }
         p = d88trk.buf;          p = d88trk.buf;
Line 552  BOOL fdd_readid_d88(void) { Line 451  BOOL fdd_readid_d88(void) {
                         break;                          break;
                 }                  }
                 sectors = LOADINTELWORD(((D88SEC)p)->sectors);                  sectors = LOADINTELWORD(((D88SEC)p)->sectors);
                 if ((sec == fdc.crcn) && (!rpmcheck((D88SEC)p))) {      // ver0.31                  if ((sec == fdc.crcn) && (!rpmcheck((D88SEC)p))) {                      // ver0.31
                         fdc.C = ((D88SEC)p)->c;                          fdc.C = ((D88SEC)p)->c;
                         fdc.H = ((D88SEC)p)->h;                          fdc.H = ((D88SEC)p)->h;
                         fdc.R = ((D88SEC)p)->r;                          fdc.R = ((D88SEC)p)->r;
Line 561  BOOL fdd_readid_d88(void) { Line 460  BOOL fdd_readid_d88(void) {
                         if (fdc.crcn >= sectors) {                          if (fdc.crcn >= sectors) {
                                 fdc.crcn = 0;                                  fdc.crcn = 0;
                         }                          }
                                                                                                                                 // ver0.29  
                         if ((fdc.mf == 0xff) ||                          if ((fdc.mf == 0xff) ||
                                         ((fdc.mf ^ (((D88SEC)p)->mfm_flg)) & 0x40)) {                                          ((fdc.mf ^ (((D88SEC)p)->mfm_flg)) & 0x40)) {
                                 fddlasterror = 0x00;                                                    // ver0.28                                  fddlasterror = 0x00;
                                 return(SUCCESS);                                  return(SUCCESS);
                         }                          }
                 }                  }
Line 576  BOOL fdd_readid_d88(void) { Line 474  BOOL fdd_readid_d88(void) {
                 pos += secsize;                  pos += secsize;
                 p += secsize;                  p += secsize;
         }          }
         fdc.crcn = 0x00;                                                                                        // ver0.29          fdc.crcn = 0x00;
         fddlasterror = 0xe0;                                                                            // ver0.31          fddlasterror = 0xe0;                                                                                    // ver0.31
         return(FAILURE);          return(FAILURE);
 }  }
   
   
 // --------------------------------------------------------------------------  // --------------------------------------------------------------------------
   
   // えーと…こんなところにあって大丈夫?
 static BOOL formating = FALSE;  static BOOL formating = FALSE;
 static BYTE formatsec = 0;  static BYTE formatsec = 0;
 static BYTE formatwrt = 0;  static BYTE formatwrt = 0;
Line 631  static void endoftrack(UINT fmtsize, BYT Line 531  static void endoftrack(UINT fmtsize, BYT
   
         FDDFILE fdd = fddfile + fdc.us;          FDDFILE fdd = fddfile + fdc.us;
   
         D88SEC          d88sec;          D88SEC  d88sec;
         FILEH           hdl;          FILEH   hdl;
         int                     i;          int             i;
         UINT            trk;          UINT    trk;
         long            fpointer;          long    fpointer;
         long            endpointer;          long    endpointer;
         long            lastpointer;          long    lastpointer;
         long            trksize;          long    trksize;
         int                     ptr;          int             ptr;
         long            apsize;          long    apsize;
   
         trk = (fdc.treg[fdc.us] << 1) + fdc.hd;          trk = (fdc.treg[fdc.us] << 1) + fdc.hd;
   

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


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