--- np2/fdd/fdd_d88.c 2003/10/18 01:21:58 1.3 +++ np2/fdd/fdd_d88.c 2004/06/18 07:42:13 1.6 @@ -6,7 +6,7 @@ #include "fdd_d88.h" -#define D88BUFSIZE 0x6000 // テグザー対策 +#define D88BUFSIZE 0x6000 #define D88TRACKMAX 10600 @@ -59,6 +59,7 @@ static BOOL d88trk_flushdata(D88TRK trk) goto dtfd_err2; } file_close(fh); + trk->write = FALSE; dtfd_exit: return(SUCCESS); @@ -72,7 +73,7 @@ dtfd_err1: static BOOL d88trk_read(D88TRK trk, FDDFILE fdd, UINT track, BYTE type) { - BYTE rpm; + UINT8 rpm; FILEH fh; UINT32 fptr; UINT32 size; @@ -82,9 +83,11 @@ static BOOL d88trk_read(D88TRK trk, FDDF goto dtrd_err1; } - rpm = fdc.rpm; + rpm = fdc.rpm[fdc.us]; + TRACEOUT(("d88trk_read(%d,%d)", rpm, track)); switch(fdd->inf.d88.fdtype_major) { case DISKTYPE_2D: + TRACEOUT(("DISKTYPE_2D")); if ((rpm) || (type != DISKTYPE_2DD) || (track & 2)) { goto dtrd_err1; } @@ -147,9 +150,9 @@ dtrd_err1: static BOOL rpmcheck(D88SEC sec) { FDDFILE fdd = fddfile + fdc.us; - BYTE rpm; + UINT8 rpm; - rpm = fdc.rpm; + rpm = fdc.rpm[fdc.us]; switch(fdd->inf.d88.fdtype_major) { case DISKTYPE_2D: case DISKTYPE_2DD: @@ -177,49 +180,6 @@ static BOOL rpmcheck(D88SEC sec) { 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 - // ---- @@ -230,6 +190,7 @@ static void drvflush(FDDFILE fdd) { trk = &d88trk; if (trk->fdd == fdd) { d88trk_flushdata(trk); + trk->fdd = NULL; } } @@ -353,9 +314,9 @@ BOOL fddd88_eject(FDDFILE fdd) { BOOL fdd_diskaccess_d88(void) { // ver0.31 FDDFILE fdd = fddfile + fdc.us; - BYTE rpm; + UINT8 rpm; - rpm = fdc.rpm; + rpm = fdc.rpm[fdc.us]; switch(fdd->inf.d88.fdtype_major) { case DISKTYPE_2D: case DISKTYPE_2DD: @@ -409,12 +370,12 @@ BOOL fdd_read_d88(void) { fddlasterror = 0x00; if (trkseek(fdd, (fdc.treg[fdc.us] << 1) + fdc.hd)) { - fddlasterror = 0xe0; // ver0.28 + fddlasterror = 0xe0; return(FAILURE); } p = searchsector_d88(TRUE); if (!p) { - fddlasterror = 0xc0; // ver0.28 + fddlasterror = 0xc0; return(FAILURE); } if (fdc.N < 8) { @@ -443,14 +404,14 @@ BOOL fdd_write_d88(void) { UINT size; UINT secsize; - fddlasterror = 0x00; // ver0.28 + fddlasterror = 0x00; if (trkseek(fdd, (fdc.treg[fdc.us] << 1) + fdc.hd)) { - fddlasterror = 0xe0; // ver0.28 + fddlasterror = 0xe0; return(FAILURE); } p = searchsector_d88(FALSE); if (!p) { - fddlasterror = 0xc0; // ver0.28 + fddlasterror = 0xc0; return(FAILURE); } if (fdc.N < 8) { @@ -467,69 +428,10 @@ BOOL fdd_write_d88(void) { CopyMemory(p+1, fdc.buf, size); d88trk.write = TRUE; } - fddlasterror = 0x00; // ver0.28 + fddlasterror = 0x00; 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) { FDDFILE fdd = fddfile + fdc.us; @@ -539,9 +441,9 @@ BOOL fdd_readid_d88(void) { UINT sectors; UINT secsize; - fddlasterror = 0x00; // ver0.28 + fddlasterror = 0x00; if (trkseek(fdd, (fdc.treg[fdc.us] << 1) + fdc.hd)) { - fddlasterror = 0xe0; // ver0.28 + fddlasterror = 0xe0; return(FAILURE); } p = d88trk.buf; @@ -550,7 +452,7 @@ BOOL fdd_readid_d88(void) { break; } 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.H = ((D88SEC)p)->h; fdc.R = ((D88SEC)p)->r; @@ -559,10 +461,9 @@ BOOL fdd_readid_d88(void) { if (fdc.crcn >= sectors) { fdc.crcn = 0; } - // ver0.29 if ((fdc.mf == 0xff) || ((fdc.mf ^ (((D88SEC)p)->mfm_flg)) & 0x40)) { - fddlasterror = 0x00; // ver0.28 + fddlasterror = 0x00; return(SUCCESS); } } @@ -574,13 +475,15 @@ BOOL fdd_readid_d88(void) { pos += secsize; p += secsize; } - fdc.crcn = 0x00; // ver0.29 - fddlasterror = 0xe0; // ver0.31 + fdc.crcn = 0x00; + fddlasterror = 0xe0; // ver0.31 return(FAILURE); } + // -------------------------------------------------------------------------- +// えーと…こんなところにあって大丈夫? static BOOL formating = FALSE; static BYTE formatsec = 0; static BYTE formatwrt = 0; @@ -629,22 +532,24 @@ static void endoftrack(UINT fmtsize, BYT FDDFILE fdd = fddfile + fdc.us; - FILEH hdl; - int i; - UINT trk; - long fpointer; - long endpointer; - long lastpointer; - long trksize; - int ptr; - long apsize; + D88SEC d88sec; + FILEH hdl; + int i; + UINT trk; + long fpointer; + long endpointer; + long lastpointer; + long trksize; + int ptr; + long apsize; trk = (fdc.treg[fdc.us] << 1) + fdc.hd; ptr = 0; for (i=0; i<(int)sectors; i++) { - STOREINTELWORD(((D88SEC)(&d88trk.buf[ptr]))->sectors, sectors); - ptr += LOADINTELWORD(((D88SEC)(&d88trk.buf[ptr]))->size); + d88sec = (D88SEC)(d88trk.buf + ptr); + STOREINTELWORD(d88sec->sectors, sectors); + ptr += LOADINTELWORD(d88sec->size); ptr += sizeof(_D88SEC); } @@ -652,7 +557,7 @@ static void endoftrack(UINT fmtsize, BYT if (hdl == FILEH_INVALID) { return; } - lastpointer = file_seek(hdl, 0, 2); + lastpointer = file_seek(hdl, 0, FSEEK_END); fpointer = fdd->inf.d88.ptr[trk]; if (fpointer == 0) { for (i=trk; i>=0; i--) { // 新規トラック @@ -683,9 +588,10 @@ static void endoftrack(UINT fmtsize, BYT STOREINTELDWORD(fdd->inf.d88.head.trackp[trk], fpointer); file_seek(hdl, fpointer, 0); file_write(hdl, d88trk.buf, fmtsize); - file_seek(hdl, 0, 0); + file_seek(hdl, 0, FSEEK_SET); file_write(hdl, &fdd->inf.d88.head, sizeof(fdd->inf.d88.head)); file_close(hdl); +// TRACEOUT(("fmt %d %d", fpointer, fmtsize)); } @@ -696,7 +602,7 @@ BOOL fdd_formatinit_d88(void) { formatsec = 0; formatpos = 0; formatwrt = 0; - drvflush(NULL); + drvflush(fddfile + fdc.us); return(SUCCESS); } return(FAILURE); @@ -729,7 +635,7 @@ BOOL fdd_formating_d88(const BYTE *ID) { STOREINTELWORD(d88sec->size, size); if ((fdd->inf.d88.fdtype_major == DISKTYPE_2HD) && (fdd->inf.d88.fdtype_minor != 0)) { - d88sec->rpm_flg = fdc.rpm; + d88sec->rpm_flg = fdc.rpm[fdc.us]; } FillMemory(d88sec + 1, size, fdc.d); formatpos += sizeof(_D88SEC);