|
|
| version 1.5, 2004/08/05 11:30:12 | 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 498 void endoftrack(void) { | Line 503 void endoftrack(void) { |
| } | } |
| lastpointer = file_seek(hdr, 0, 2); | lastpointer = file_seek(hdr, 0, 2); |
| fpointer = fdd->inf.d88.ptr[trk]; | fpointer = fdd->inf.d88.ptr[trk]; |
| if (fpointer = 0) { | if (fpointer == 0) { |
| for (i=trk; i>=0; i--) { // 新規トラック | for (i=trk; i>=0; i--) { // 新規トラック |
| fpointer = fdd->inf.d88.ptr[i]; | fpointer = fdd->inf.d88.ptr[i]; |
| if (fpointer) { | if (fpointer) { |
| 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: |