--- np2/fdd/fdd_d88.c 2003/11/12 00:55:38 1.4 +++ np2/fdd/fdd_d88.c 2005/03/22 04:03:15 1.12 @@ -6,7 +6,7 @@ #include "fdd_d88.h" -#define D88BUFSIZE 0x6000 // テグザー対策 +#define D88BUFSIZE 0x6000 #define D88TRACKMAX 10600 @@ -30,17 +30,17 @@ static UINT32 nexttrackptr(FDDFILE fdd, typedef struct { FDDFILE fdd; UINT track; - BYTE type; + UINT type; long fptr; UINT size; BOOL write; - BYTE buf[D88BUFSIZE]; + UINT8 buf[D88BUFSIZE]; } _D88TRK, *D88TRK; static _D88TRK d88trk; -static BOOL d88trk_flushdata(D88TRK trk) { +static BRESULT d88trk_flushdata(D88TRK trk) { FDDFILE fdd; FILEH fh; @@ -71,9 +71,9 @@ dtfd_err1: return(FAILURE); } -static BOOL d88trk_read(D88TRK trk, FDDFILE fdd, UINT track, BYTE type) { +static BRESULT d88trk_read(D88TRK trk, FDDFILE fdd, UINT track, UINT type) { - BYTE rpm; + UINT8 rpm; FILEH fh; UINT32 fptr; UINT32 size; @@ -83,9 +83,10 @@ static BOOL d88trk_read(D88TRK trk, FDDF goto dtrd_err1; } - rpm = fdc.rpm; + rpm = fdc.rpm[fdc.us]; switch(fdd->inf.d88.fdtype_major) { case DISKTYPE_2D: + TRACEOUT(("DISKTYPE_2D")); if ((rpm) || (type != DISKTYPE_2DD) || (track & 2)) { goto dtrd_err1; } @@ -145,12 +146,12 @@ dtrd_err1: } -static BOOL rpmcheck(D88SEC sec) { +static BRESULT 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: @@ -178,49 +179,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 - // ---- @@ -235,7 +193,7 @@ static void drvflush(FDDFILE fdd) { } } -static BOOL trkseek(FDDFILE fdd, UINT track) { +static BRESULT trkseek(FDDFILE fdd, UINT track) { D88TRK trk; BOOL r; @@ -254,7 +212,7 @@ static BOOL trkseek(FDDFILE fdd, UINT tr static D88SEC searchsector_d88(BOOL check) { // ver0.29 - BYTE *p; + UINT8 *p; UINT sec; UINT pos = 0; UINT nsize; @@ -305,7 +263,7 @@ static D88SEC searchsector_d88(BOOL chec // ---- -BOOL fddd88_set(FDDFILE fdd, const char *fname, int ro) { +BRESULT fddd88_set(FDDFILE fdd, const OEMCHAR *fname, int ro) { short attr; FILEH fh; @@ -327,7 +285,6 @@ BOOL fddd88_set(FDDFILE fdd, const char goto fdst_err; } fdd->type = DISKTYPE_D88; - file_cpyname(fdd->fname, fname, sizeof(fdd->fname)); fdd->protect = ((attr & 1) || (fdd->inf.d88.head.protect & 0x10) || (ro))?TRUE:FALSE; fdd->inf.d88.fdtype_major = fdd->inf.d88.head.fd_type >> 4; @@ -342,7 +299,7 @@ fdst_err: return(FAILURE); } -BOOL fddd88_eject(FDDFILE fdd) { +BRESULT fddd88_eject(FDDFILE fdd) { drvflush(fdd); fdd->fname[0] = '\0'; @@ -352,12 +309,12 @@ BOOL fddd88_eject(FDDFILE fdd) { } -BOOL fdd_diskaccess_d88(void) { // ver0.31 +BRESULT 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: @@ -382,14 +339,14 @@ BOOL fdd_diskaccess_d88(void) { return(SUCCESS); } -BOOL fdd_seek_d88(void) { +BRESULT fdd_seek_d88(void) { FDDFILE fdd = fddfile + fdc.us; return(trkseek(fdd, (fdc.ncn << 1) + fdc.hd)); } -BOOL fdd_seeksector_d88(void) { +BRESULT fdd_seeksector_d88(void) { FDDFILE fdd = fddfile + fdc.us; @@ -402,7 +359,7 @@ BOOL fdd_seeksector_d88(void) { return(SUCCESS); } -BOOL fdd_read_d88(void) { +BRESULT fdd_read_d88(void) { FDDFILE fdd = fddfile + fdc.us; D88SEC p; @@ -411,12 +368,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) { @@ -438,21 +395,21 @@ BOOL fdd_read_d88(void) { return(SUCCESS); } -BOOL fdd_write_d88(void) { +BRESULT fdd_write_d88(void) { FDDFILE fdd = fddfile + fdc.us; D88SEC p; 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) { @@ -469,81 +426,22 @@ 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) { +BRESULT fdd_readid_d88(void) { FDDFILE fdd = fddfile + fdc.us; - BYTE *p; + UINT8 *p; UINT sec; UINT pos = 0; 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; @@ -552,7 +450,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; @@ -561,10 +459,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); } } @@ -576,16 +473,18 @@ 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; +static UINT8 formatsec = 0; +static UINT8 formatwrt = 0; static UINT formatpos = 0; static int fileappend(FILEH hdl, FDDFILE fdd, @@ -595,7 +494,7 @@ static int fileappend(FILEH hdl, FDDFILE UINT size; UINT rsize; int t; - BYTE tmp[0x1000]; + UINT8 tmp[0x400]; // Stack 0x1000->0x400 UINT32 cur; if ((length = last - ptr) <= 0) { // 書き換える必要なし @@ -627,20 +526,20 @@ static int fileappend(FILEH hdl, FDDFILE } -static void endoftrack(UINT fmtsize, BYTE sectors) { +static void endoftrack(UINT fmtsize, UINT8 sectors) { FDDFILE fdd = fddfile + fdc.us; - D88SEC d88sec; - 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; @@ -694,7 +593,7 @@ static void endoftrack(UINT fmtsize, BYT } -BOOL fdd_formatinit_d88(void) { +BRESULT fdd_formatinit_d88(void) { if (fdc.treg[fdc.us] < 82) { formating = TRUE; @@ -708,7 +607,7 @@ BOOL fdd_formatinit_d88(void) { } // todo アンフォーマットとか ディスク1周した時の切り捨てとか… -BOOL fdd_formating_d88(const BYTE *ID) { +BRESULT fdd_formating_d88(const UINT8 *ID) { FDDFILE fdd = fddfile + fdc.us; @@ -734,7 +633,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);