| version 1.6, 2004/08/08 12:32:58 | version 1.8, 2004/08/09 04:47:53 | 
| Line 84  static UINT32 nexttrackptr(FDDFILE fdd, | Line 84  static UINT32 nexttrackptr(FDDFILE fdd, | 
 | } | } | 
 |  |  | 
 |  |  | 
| int curdataflush(void) { | static int curdataflush(void) { | 
 |  |  | 
 | FDDFILE fdd; | FDDFILE fdd; | 
 | FILEH   fh; | FILEH   fh; | 
| Line 113  int curdataflush(void) { | Line 113  int curdataflush(void) { | 
 | } | } | 
 |  |  | 
 |  |  | 
| static DWORD read_d88track(REG8 drv, UINT track, BYTE type) { | static DWORD read_d88track(REG8 drv, UINT track, REG8 media) { | 
 |  |  | 
 | FDDFILE fdd; | FDDFILE fdd; | 
 | FILEH   hdr; | FILEH   hdr; | 
| Line 121  static DWORD read_d88track(REG8 drv, UIN | Line 121  static DWORD read_d88track(REG8 drv, UIN | 
 | curdataflush(); | curdataflush(); | 
 | curdrv = drv; | curdrv = drv; | 
 | curtrk = track; | curtrk = track; | 
| curtype = type; | curtype = media; | 
 | cursct = (UINT)-1; | cursct = (UINT)-1; | 
 | curwrite = 0; | curwrite = 0; | 
 | curtrkerr = 0; | curtrkerr = 0; | 
| Line 130  static DWORD read_d88track(REG8 drv, UIN | Line 130  static DWORD read_d88track(REG8 drv, UIN | 
 |  |  | 
 | fdd = fddfile + drv; | fdd = fddfile + drv; | 
 | if ((drv < 0) || (drv > 3) || (track > 163) || | if ((drv < 0) || (drv > 3) || (track > 163) || | 
| ((type == 0) && (fdd->inf.d88.head.fd_type == 0x20)) || | (media != (fdd->inf.d88.head.fd_type >> 4)) || | 
| ((type == 1) && (fdd->inf.d88.head.fd_type != 0x20)) || |  | 
 | ((curfp = fdd->inf.d88.ptr[track]) == 0) || | ((curfp = fdd->inf.d88.ptr[track]) == 0) || | 
 | ((cursize = nexttrackptr(fdd, curfp, | ((cursize = nexttrackptr(fdd, curfp, | 
 | fdd->inf.d88.fd_size) - curfp) > 0x4000)) { | fdd->inf.d88.fd_size) - curfp) > 0x4000)) { | 
| Line 173  const _D88SEC *p; | Line 172  const _D88SEC *p; | 
 | UINT            sectors; | UINT            sectors; | 
 | UINT            secsize; | UINT            secsize; | 
 |  |  | 
| if ((curdrv != drv) || (curtrk != track) || (curtype != fdc.media)) { | if ((curdrv != drv) || (curtrk != track) || (curtype != fdc.s.media)) { | 
| read_d88track(drv, track, fdc.media); | read_d88track(drv, track, fdc.s.media); | 
 | } | } | 
 | if (curtrkerr) { | if (curtrkerr) { | 
 | cursct = r; | cursct = r; | 
| Line 226  static void drvflush(REG8 drv) { | Line 225  static void drvflush(REG8 drv) { | 
 |  |  | 
 | //********************************************************************** | //********************************************************************** | 
 |  |  | 
| short fdd_crc_d88(void) { | BRESULT fddd88_crc(FDDFILE fdd) { | 
 |  |  | 
 | UINT            track; | UINT            track; | 
 | const _D88SEC   *p; | const _D88SEC   *p; | 
| Line 234  const _D88SEC *p; | Line 233  const _D88SEC *p; | 
 | UINT            sectors; | UINT            sectors; | 
 | UINT            secsize; | UINT            secsize; | 
 |  |  | 
 | ZeroMemory(fdc.crc_dat, 6); |  | 
 | track = (fdc.c << 1) + fdc.h; | track = (fdc.c << 1) + fdc.h; | 
 | if (track >= 164) { | if (track >= 164) { | 
 | goto crcerror_d88; | goto crcerror_d88; | 
| Line 253  const _D88SEC *p; | Line 251  const _D88SEC *p; | 
 | } | } | 
 | p = (D88SEC)(((UINT8 *)(p + 1)) + secsize); | p = (D88SEC)(((UINT8 *)(p + 1)) + secsize); | 
 | } | } | 
 |  | fdc.s.buffer[0] = p->c; | 
 |  | fdc.s.buffer[1] = p->h; | 
 |  | fdc.s.buffer[2] = p->r; | 
 |  | fdc.s.buffer[3] = p->n; | 
 |  | fdc.s.buffer[4] = 0; | 
 |  | fdc.s.buffer[5] = 0; | 
 |  | fdc.s.bufsize = 6; | 
 | fdc.rreg = p->c;                                                                // メルヘンヴェール | fdc.rreg = p->c;                                                                // メルヘンヴェール | 
 | fdc.crc_dat[0] = p->c; |  | 
 | fdc.crc_dat[1] = p->h; |  | 
 | fdc.crc_dat[2] = p->r; |  | 
 | fdc.crc_dat[3] = p->n; |  | 
 | crcnum++; | crcnum++; | 
 | if (p->stat) { | if (p->stat) { | 
 | crcerror = TRUE; | crcerror = TRUE; | 
| Line 265  const _D88SEC *p; | Line 266  const _D88SEC *p; | 
 | else { | else { | 
 | crcerror = FALSE; | crcerror = FALSE; | 
 | } | } | 
| return(0); | return(SUCCESS); | 
 |  |  | 
| crcerror_d88:; | crcerror_d88: | 
 | crcerror = TRUE; | crcerror = TRUE; | 
| return(1); | (void)fdd; | 
|  | return(FAILURE); | 
 | } | } | 
 |  |  | 
 |  |  | 
| Line 342  BYTE fdd_stat_d88(void) { | Line 344  BYTE fdd_stat_d88(void) { | 
 | ans |= 0x03;                                    // DATA REQUEST / BUSY | ans |= 0x03;                                    // DATA REQUEST / BUSY | 
 | } | } | 
 | } | } | 
| else if ((cmd == 0x0e) && (readdiag < 0x1a00)) { | else if ((cmd == 0x0c) && (fdc.s.bufpos < 6)) { | 
 | ans |= 0x03; | ans |= 0x03; | 
 | } | } | 
| else if ((cmd == 0x0c) && (fdc.crc_off < 6)) {          // ver0.25 | else if ((cmd == 0x0e) && (readdiag < 0x1a00)) { | 
 | ans |= 0x03; | ans |= 0x03; | 
 | } | } | 
 | else if (cmd == 0x0f) { | else if (cmd == 0x0f) { | 
| Line 412  void init_tao_d88(void) { | Line 414  void init_tao_d88(void) { | 
 | FDDFILE         fdd; | FDDFILE         fdd; | 
 |  |  | 
 | fdd = fddfile + fdc.drv; | fdd = fddfile + fdc.drv; | 
| if ((fdc.media == 0) && (fdd->inf.d88.head.fd_type != 0x20)) { | if (fdc.s.media != (fdd->inf.d88.head.fd_type >> 4)) { | 
|  | tao = WID_ERR; | 
|  | } | 
|  | if (fdc.s.media == DISKTYPE_2D) { | 
 | tao = WID_2D; | tao = WID_2D; | 
 | } | } | 
| else if ((fdc.media == 1) && (fdd->inf.d88.head.fd_type == 0x20)) { | else if (fdc.s.media == DISKTYPE_2HD) { | 
 | tao = WID_2HD; | tao = WID_2HD; | 
 | } | } | 
 | else { | else { | 
| Line 459  static int fileappend(FILEH hdl, FDDFILE | Line 464  static int fileappend(FILEH hdl, FDDFILE | 
 | return(0); | return(0); | 
 | } | } | 
 |  |  | 
| void endoftrack(void) { | static void endoftrack(void) { | 
 |  |  | 
 | FDDFILE fdd; | FDDFILE fdd; | 
 | FILEH   hdr; | FILEH   hdr; | 
| Line 695  BRESULT fddd88_set(FDDFILE fdd, REG8 drv | Line 700  BRESULT fddd88_set(FDDFILE fdd, REG8 drv | 
 | } | } | 
 | fdd->type = DISKTYPE_D88; | fdd->type = DISKTYPE_D88; | 
 | fdd->protect = (UINT8)(attr & 1); | fdd->protect = (UINT8)(attr & 1); | 
| milstr_ncpy(fdd->fname, fname, NELEMENTS(fdd->fname)); | (void)drv; | 
 | return(SUCCESS); | return(SUCCESS); | 
 |  |  | 
 | fdst_err: | fdst_err: |