bin/174711: [fdc] Floppy drive 5.25" 360Kb bug.
Emil Mamedov
emil80386 at yahoo.com
Tue May 7 15:30:01 UTC 2013
The following reply was made to PR bin/174711; it has been noted by GNATS.
From: Emil Mamedov <emil80386 at yahoo.com>
To: FreeBSD-gnats-submit at FreeBSD.org, freebsd-i386 at FreeBSD.org
Cc:
Subject: Re: bin/174711: [fdc] Floppy drive 5.25" 360Kb bug.
Date: Tue, 7 May 2013 08:26:57 -0700 (PDT)
My previous tarball has been corrupted and I've attached
floppy-diff files to message body:
--- fdc.c.org 2012-03-03 06:15:13.000000000 +0000
+++ fdc.c 2013-01-21 23:18:14.000000000 +0000
@@ -136,33 +136,35 @@
*/
static struct fd_type fd_searchlist_360k[] = {
- { FDF_5_360 },
+ { FDD_5_360 | FL_AUTO},
+ { FDD_5_180 | FL_AUTO},
{ 0 }
};
static struct fd_type fd_searchlist_12m[] = {
- { FDF_5_1200 | FL_AUTO },
- { FDF_5_360 | FL_2STEP | FL_AUTO},
+ { FHD_5_1200 | FL_AUTO },
+ { FHD_5_360 | FL_2STEP | FL_AUTO},
+ { FHD_5_180 | FL_2STEP | FL_AUTO},
{ 0 }
};
static struct fd_type fd_searchlist_720k[] = {
- { FDF_3_720 },
+ { FHD_3_720 },
{ 0 }
};
static struct fd_type fd_searchlist_144m[] = {
- { FDF_3_1440 | FL_AUTO},
- { FDF_3_720 | FL_AUTO},
+ { FHD_3_1440 | FL_AUTO},
+ { FHD_3_720 | FL_AUTO},
{ 0 }
};
static struct fd_type fd_searchlist_288m[] = {
- { FDF_3_1440 | FL_AUTO },
+ { FHD_3_1440 | FL_AUTO },
#if 0
- { FDF_3_2880 | FL_AUTO }, /* XXX: probably doesn't work */
+ { FHD_3_2880 | FL_AUTO }, /* XXX: probably doesn't work */
#endif
- { FDF_3_720 | FL_AUTO},
+ { FHD_3_720 | FL_AUTO},
{ 0 }
};
@@ -297,7 +299,7 @@
fdprinttype(struct fd_type *ft)
{
- printf("(%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,0x%x)",
+ printf("(%d,%d,0x%x,0x%x,%d,%d,%d,%d,0x%x,%d,%d,0x%x)\n",
ft->sectrac, ft->secsize, ft->datalen, ft->gap, ft->tracks,
ft->size, ft->trans, ft->heads, ft->f_gap, ft->f_inter,
ft->offset_side2, ft->flags);
@@ -856,7 +858,8 @@
return (fdc_biodone(fdc, ENXIO));
/* Check if we lost our media */
- if (fdin_rd(fdc) & FDI_DCHG) {
+ if ((fdin_rd(fdc) & FDI_DCHG) &&
+ !(device_get_flags(fd->dev) & FD_NO_CHLINE)) {
if (debugflags & 0x40)
printf("Lost disk\n");
mtx_lock(&fdc->fdc_mtx);
@@ -884,7 +887,7 @@
mfm = (fd->ft->flags & FL_MFM)? NE7CMD_MFM: 0;
steptrac = (fd->ft->flags & FL_2STEP)? 2: 1;
- i = fd->ft->sectrac * fd->ft->heads;
+ i = fd->ft->sectrac * fd->ft->heads; //sectors per cyl
cylinder = bp->bio_pblkno / i;
descyl = cylinder * steptrac;
sec = bp->bio_pblkno % i;
@@ -928,6 +931,22 @@
* Enhanced controllers do implied seeks for read&write as long as
* we do not need multiple steps per track.
*/
+ /* But if DD diskette in HD FDD then disable do implied seek */
+ if (fdc->fdct == FDC_ENHANCED) {
+ int imp_seek;
+ if (fd->ft->flags & FL_2STEP) imp_seek = 0x00;
+ else imp_seek = 0x40;
+ if (fdc_cmd(fdc, 4,
+ I8207X_CONFIG,
+ 0,
+ imp_seek | /* Disable/Enable Implied Seek */
+ 0x10 | /* Polling disabled */
+ (fifo_threshold - 1), /* Fifo threshold */
+ 0x00, /* Precomp track */
+ 0))
+ device_printf(fdc->fdc_dev,
+ " CONFIGURE failed\n");
+ }
if (cylinder != fd->track && (
fdc->fdct != FDC_ENHANCED ||
descyl != cylinder ||
@@ -1229,7 +1248,9 @@
if (fdc_sense_int(fdc, &st0, &cyl) == FD_NOT_VALID)
goto done; /* XXX */
*recal |= (1 << fd->fdsu);
- if (fdin_rd(fdc) & FDI_DCHG) {
+
+ if ((fdin_rd(fdc) & FDI_DCHG) &&
+ !(device_get_flags(fd->dev) & FD_NO_CHLINE)) {
if (debugflags & 0x40)
printf("Empty in probe\n");
mtx_lock(&fdc->fdc_mtx);
@@ -1238,8 +1259,8 @@
} else {
if (fdc_sense_drive(fdc, &st3) != 0)
goto done;
- if (debugflags & 0x40)
- printf("Got disk in probe\n");
+// if (debugflags & 0x40)
+// printf("Got disk in probe\n");
mtx_lock(&fdc->fdc_mtx);
fd->flags &= ~FD_EMPTY;
if (st3 & NE7_ST3_WP)
@@ -1341,37 +1362,61 @@
* Stepping to cylinder 2 has the side-effect of clearing the
* unit attention bit.
*/
- oopts = fd->options;
+ oopts = fd->options; //Saving drive options
fd->options |= FDOPT_NOERRLOG | FDOPT_NORETRY;
- for (; fdtp->heads; fdtp++) {
- fdsettype(fd, fdtp);
+ for (; fdtp->heads; fdtp++) { //increment drive type from search list
+ fdsettype(fd, fdtp); //set drive type
id.cyl = id.head = 0;
- rv = fdmisccmd(fd, BIO_RDID, &id);
- if (rv != 0)
- continue;
- if (id.cyl != 0 || id.head != 0 || id.secshift != fdtp->secsize)
+ rv = fdmisccmd(fd, BIO_RDID, &id); //reading cyl0, head0
+ if (rv != 0) //if error -> next iteration
continue;
+ if (id.cyl != 0 || id.head != 0 ||
+ id.secshift != fdtp->secsize)
+ continue; //if unexpected type -> next iteration
id.cyl = 2;
- id.head = fd->ft->heads - 1;
+ id.head = fd->ft->heads - 1; //get max head number for
+ // expected media type(0 or 1)
rv = fdmisccmd(fd, BIO_RDID, &id);
- if (id.cyl != 2 || id.head != fdtp->heads - 1 ||
+ if (id.cyl != 2 || id.head != fdtp->heads - 1 ||
id.secshift != fdtp->secsize)
- continue;
- if (rv == 0)
+ continue; //if unexpected type -> next iteration
+ if (rv == 0) //if no errors -> exit from cycle
break;
}
- fd->options = oopts;
+ /* trying get sectors per track
+ searching max sector number */
+ int i ;
+ int spt = 0;
+ for (i=1; i <= fd->ft->sectrac; i++) {
+ id.cyl = id.head = 0;
+ rv = fdmisccmd(fd, BIO_RDID, &id); //reading cyl0, head0
+ if (rv != 0) //if error -> next iteration
+ continue;
+ if (id.sec > spt)
+ spt=id.sec;
+ }
+ if (debugflags & 0x40) {
+ if (spt == 0)
+ device_printf(fd->dev, "No media in drive or media without format\n");
+ else
+ device_printf(fd->dev, "Sectors per track = %d\n", spt);
+ }
+
+ fd->options = oopts; //Restoring drive options
if (fdtp->heads == 0) {
if (debugflags & 0x40)
device_printf(fd->dev, "autoselection failed\n");
fdsettype(fd, fd_native_types[fd->type]);
return (-1);
} else {
+ fd->ft->sectrac = spt;
+ fd->ft->size = spt * fd->ft->heads * fd->ft->tracks ;
if (debugflags & 0x40) {
device_printf(fd->dev,
- "autoselected %d KB medium\n", fd->ft->size / 2);
+ "autoselected %d KB medium\n",
+ (128 << fd->ft->secsize) * fd->ft->size / 1024 );
fdprinttype(fd->ft);
}
return (0);
@@ -1710,8 +1755,7 @@
break;
case 0x81:
case 0x90:
- device_set_desc(dev,
- "Enhanced floppy controller");
+ device_set_desc(dev, "Enhanced floppy controller");
fdc->fdct = FDC_ENHANCED;
break;
default:
--- fdcio.h.org 2012-03-03 06:15:13.000000000 +0000
+++ fdcio.h 2012-01-17 21:23:37.000000000 +0000
@@ -181,46 +181,53 @@
* XXX: should have been done 20 years ago to make sense.
*/
#ifdef PC98
-#define FDF_3_1722 21,2,0xFF,0x04,82,0,2,2,0x0C,2,0,FL_MFM
-#define FDF_3_1476 18,2,0xFF,0x1B,82,0,2,2,0x54,1,0,FL_MFM
-#define FDF_3_1440 18,2,0xFF,0x1B,80,0,2,2,0x54,1,0,FL_MFM
-#define FDF_3_1200 15,2,0xFF,0x1B,80,0,0,2,0x54,1,0,FL_MFM
-#define FDF_3_820 10,2,0xFF,0x10,82,0,1,2,0x30,1,0,FL_MFM
-#define FDF_3_800 10,2,0xFF,0x10,80,0,1,2,0x30,1,0,FL_MFM
-#define FDF_3_720 9,2,0xFF,0x20,80,0,1,2,0x50,1,0,FL_MFM
-#define FDF_3_360 9,2,0xFF,0x20,40,0,1,2,0x50,1,0,FL_MFM|FL_2STEP
-#define FDF_3_640 8,2,0xFF,0x2A,80,0,1,2,0x50,1,0,FL_MFM
-#define FDF_3_1230 8,3,0xFF,0x35,77,0,0,2,0x74,1,0,FL_MFM
-#define FDF_3_1280 8,3,0xFF,0x35,80,0,0,2,0x74,1,0,FL_MFM
-#define FDF_3_1480 9,3,0xFF,0x35,82,0,0,2,0x47,1,0,FL_MFM
-#define FDF_3_1640 10,3,0xFF,0x1B,82,0,2,2,0x54,1,0,FL_MFM
-#define FDF_5_1200 15,2,0xFF,0x1B,80,0,0,2,0x54,1,0,FL_MFM
-#define FDF_5_820 10,2,0xFF,0x10,82,0,1,2,0x30,1,0,FL_MFM
-#define FDF_5_800 10,2,0xFF,0x10,80,0,1,2,0x30,1,0,FL_MFM
-#define FDF_5_720 9,2,0xFF,0x20,80,0,1,2,0x50,1,0,FL_MFM
-#define FDF_5_360 9,2,0xFF,0x20,40,0,1,2,0x50,1,0,FL_MFM|FL_2STEP
-#define FDF_5_640 8,2,0xFF,0x2A,80,0,1,2,0x50,1,0,FL_MFM
-#define FDF_5_1230 8,3,0xFF,0x35,77,0,0,2,0x74,1,0,FL_MFM
-#define FDF_5_1280 8,3,0xFF,0x35,80,0,0,2,0x74,1,0,FL_MFM
+#define FHD_3_1722 21,2,0xFF,0x04,82,0,2,2,0x0C,2,0,FL_MFM
+#define FHD_3_1476 18,2,0xFF,0x1B,82,0,2,2,0x54,1,0,FL_MFM
+#define FHD_3_1440 18,2,0xFF,0x1B,80,0,2,2,0x54,1,0,FL_MFM
+#define FHD_3_1200 15,2,0xFF,0x1B,80,0,0,2,0x54,1,0,FL_MFM
+#define FHD_3_820 10,2,0xFF,0x10,82,0,1,2,0x30,1,0,FL_MFM
+#define FHD_3_800 10,2,0xFF,0x10,80,0,1,2,0x30,1,0,FL_MFM
+#define FHD_3_720 9,2,0xFF,0x20,80,0,1,2,0x50,1,0,FL_MFM
+#define FHD_3_360 9,2,0xFF,0x20,40,0,1,2,0x50,1,0,FL_MFM|FL_2STEP
+#define FHD_3_640 8,2,0xFF,0x2A,80,0,1,2,0x50,1,0,FL_MFM
+#define FHD_3_1230 8,3,0xFF,0x35,77,0,0,2,0x74,1,0,FL_MFM
+#define FHD_3_1280 8,3,0xFF,0x35,80,0,0,2,0x74,1,0,FL_MFM
+#define FHD_3_1480 9,3,0xFF,0x35,82,0,0,2,0x47,1,0,FL_MFM
+#define FHD_3_1640 10,3,0xFF,0x1B,82,0,2,2,0x54,1,0,FL_MFM
+#define FHD_5_1200 15,2,0xFF,0x1B,80,0,0,2,0x54,1,0,FL_MFM
+#define FHD_5_820 10,2,0xFF,0x10,82,0,1,2,0x30,1,0,FL_MFM
+#define FHD_5_800 10,2,0xFF,0x10,80,0,1,2,0x30,1,0,FL_MFM
+#define FHD_5_720 9,2,0xFF,0x20,80,0,1,2,0x50,1,0,FL_MFM
+#define FHD_5_360 9,2,0xFF,0x20,40,0,1,2,0x50,1,0,FL_MFM|FL_2STEP
+#define FHD_5_640 8,2,0xFF,0x2A,80,0,1,2,0x50,1,0,FL_MFM
+#define FHD_5_1230 8,3,0xFF,0x35,77,0,0,2,0x74,1,0,FL_MFM
+#define FHD_5_1280 8,3,0xFF,0x35,80,0,0,2,0x74,1,0,FL_MFM
#else /* PC98 */
-#define FDF_3_2880 36,2,0xFF,0x1B,80,0,FDC_1MBPS,002,0x4C,1,1,FL_MFM|FL_PERPND
-#define FDF_3_1722 21,2,0xFF,0x04,82,0,FDC_500KBPS,2,0x0C,2,0,FL_MFM
-#define FDF_3_1476 18,2,0xFF,0x1B,82,0,FDC_500KBPS,2,0x6C,1,0,FL_MFM
-#define FDF_3_1440 18,2,0xFF,0x1B,80,0,FDC_500KBPS,2,0x6C,1,0,FL_MFM
-#define FDF_3_1200 15,2,0xFF,0x1B,80,0,FDC_500KBPS,2,0x54,1,0,FL_MFM
-#define FDF_3_820 10,2,0xFF,0x10,82,0,FDC_250KBPS,2,0x2e,1,0,FL_MFM
-#define FDF_3_800 10,2,0xFF,0x10,80,0,FDC_250KBPS,2,0x2e,1,0,FL_MFM
-#define FDF_3_720 9,2,0xFF,0x20,80,0,FDC_250KBPS,2,0x50,1,0,FL_MFM
-#define FDF_5_1480 18,2,0xFF,0x02,82,0,FDC_500KBPS,2,0x02,2,0,FL_MFM
-#define FDF_5_1440 18,2,0xFF,0x02,80,0,FDC_500KBPS,2,0x02,2,0,FL_MFM
-#define FDF_5_1230 8,3,0xFF,0x35,77,0,FDC_500KBPS,2,0x74,1,0,FL_MFM
-#define FDF_5_1200 15,2,0xFF,0x1B,80,0,FDC_500KBPS,2,0x54,1,0,FL_MFM
-#define FDF_5_820 10,2,0xFF,0x10,82,0,FDC_300KBPS,2,0x2e,1,0,FL_MFM
-#define FDF_5_800 10,2,0xFF,0x10,80,0,FDC_300KBPS,2,0x2e,1,0,FL_MFM
-#define FDF_5_720 9,2,0xFF,0x20,80,0,FDC_300KBPS,2,0x50,1,0,FL_MFM
-#define FDF_5_640 8,2,0xFF,0x2A,80,0,FDC_300KBPS,2,0x50,1,0,FL_MFM
-#define FDF_5_360 9,2,0xFF,0x23,40,0,FDC_300KBPS,2,0x50,1,0,FL_MFM
-/* XXX: 0x2a ? */
+
+ /* HD floppy drive */
+#define FHD_3_2880 36,2,0xFF,0x1B,80,0,FDC_1MBPS,002,0x4C,1,1,FL_MFM|FL_PERPND
+#define FHD_3_1722 21,2,0xFF,0x04,82,0,FDC_500KBPS,2,0x0C,2,0,FL_MFM
+#define FHD_3_1476 18,2,0xFF,0x1B,82,0,FDC_500KBPS,2,0x6C,1,0,FL_MFM
+#define FHD_3_1440 18,2,0xFF,0x1B,80,0,FDC_500KBPS,2,0x6C,1,0,FL_MFM
+#define FHD_3_1200 15,2,0xFF,0x1B,80,0,FDC_500KBPS,2,0x54,1,0,FL_MFM
+#define FHD_3_820 10,2,0xFF,0x10,82,0,FDC_250KBPS,2,0x2e,1,0,FL_MFM
+#define FHD_3_800 10,2,0xFF,0x10,80,0,FDC_250KBPS,2,0x2e,1,0,FL_MFM
+#define FHD_3_720 9,2,0xFF,0x20,80,0,FDC_250KBPS,2,0x50,1,0,FL_MFM
+#define FHD_5_1480 18,2,0xFF,0x02,82,0,FDC_500KBPS,2,0x02,2,0,FL_MFM
+#define FHD_5_1440 18,2,0xFF,0x02,80,0,FDC_500KBPS,2,0x02,2,0,FL_MFM
+#define FHD_5_1230 8,3,0xFF,0x35,77,0,FDC_500KBPS,2,0x74,1,0,FL_MFM
+#define FHD_5_1200 15,2,0xFF,0x1B,80,0,FDC_500KBPS,2,0x54,1,0,FL_MFM
+#define FHD_5_820 10,2,0xFF,0x10,82,0,FDC_300KBPS,2,0x2e,1,0,FL_MFM
+#define FHD_5_800 10,2,0xFF,0x10,80,0,FDC_300KBPS,2,0x2e,1,0,FL_MFM
+#define FHD_5_720 9,2,0xFF,0x20,80,0,FDC_300KBPS,2,0x50,1,0,FL_MFM
+#define FHD_5_640 8,2,0xFF,0x2A,80,0,FDC_300KBPS,2,0x50,1,0,FL_MFM
+#define FHD_5_360 9,2,0xFF,0x23,40,0,FDC_300KBPS,2,0x50,1,0,FL_MFM|FL_2STEP
+#define FHD_5_180 9,2,0xFF,0x23,40,0,FDC_300KBPS,1,0x50,1,0,FL_MFM|FL_2STEP
+ /* DD floppy drive */
+#define FDD_5_360 9,2,0xFF,0x2A,40,0,FDC_250KBPS,2,0x50,1,0,FL_MFM
+#define FDD_5_180 9,2,0xFF,0x2A,40,0,FDC_250KBPS,1,0x50,1,0,FL_MFM
+#define FDD_5_320 8,2,0xFF,0x2A,40,0,FDC_250KBPS,2,0x50,1,0,FL_MFM
+#define FDD_5_160 8,2,0xFF,0x2A,40,0,FDC_250KBPS,1,0x50,1,0,FL_MFM
#endif
#endif /* !_MACHINE_IOCTL_FD_H_ */
--- fdcontrol.c.org 2012-03-03 06:15:13.000000000 +0000
+++ fdcontrol.c 2013-01-23 22:41:34.000000000 +0000
@@ -41,7 +41,7 @@
#include "fdutil.h"
-static int format, verbose, show = 1, showfmt;
+static int format = 0, verbose =0 , show = 1, showfmt = 0;
static char *fmtstring;
static void showdev(enum fd_drivetype, const char *);
@@ -51,7 +51,7 @@
usage(void)
{
errx(EX_USAGE,
- "usage: fdcontrol [-F] [-d dbg] [-f fmt] [-s fmtstr] [-v] device");
+ "usage: fdcontrol [-F] [-f fmt] [-s fmtstr] [-v] device");
}
void
@@ -72,14 +72,11 @@
enum fd_drivetype type;
struct fd_type ft, newft, *fdtp;
const char *name, *descr;
- int fd, i, autofmt;
+ int fd, i;
- autofmt = 0;
- while((i = getopt(argc, argv, "aFf:s:v")) != -1)
+ while((i = getopt(argc, argv, "Ff:s:v")) != -1)
switch(i) {
- case 'a':
- autofmt = 1;
case 'F':
showfmt = 1;
show = 0;
@@ -121,19 +118,12 @@
if (ioctl(fd, FD_GDTYPE, &type) == -1)
err(EX_OSERR, "ioctl(FD_GDTYPE)");
- if (ioctl(fd, FD_GTYPE, &ft) == -1)
- err(EX_OSERR, "ioctl(FD_GTYPE)");
-
+
if (show) {
showdev(type, argv[0]);
return (0);
}
- if (autofmt) {
- memset(&newft, 0, sizeof newft);
- ft = newft;
- }
-
if (format) {
getname(type, &name, &descr);
fdtp = get_fmt(format, type);
@@ -149,6 +139,14 @@
ft = newft;
}
+ if (format || fmtstring) {
+ if (ioctl(fd, FD_STYPE, &ft) == -1)
+ err(EX_OSERR, "ioctl(FD_STYPE)");
+ }
+
+ if (ioctl(fd, FD_GTYPE, &ft) == -1)
+ err(EX_OSERR, "ioctl(FD_GTYPE)");
+
if (showfmt) {
if (verbose) {
const char *s;
@@ -159,7 +157,7 @@
print_fmt(ft);
if (ft.datalen != 0xff &&
ft.datalen != (128 << ft.secsize))
- printf("\tData length:\t%d\n", ft.datalen);
+ printf("\tData length:\t0x%x\n", ft.datalen);
printf("\tSector size:\t%d\n", 128 << ft.secsize);
printf("\tSectors/track:\t%d\n", ft.sectrac);
printf("\tHeads/cylinder:\t%d\n", ft.heads);
@@ -170,8 +168,8 @@
case 2: printf("\tTransfer rate:\t250 kbps\n"); break;
case 3: printf("\tTransfer rate:\t1 Mbps\n"); break;
}
- printf("\tSector gap:\t%d\n", ft.gap);
- printf("\tFormat gap:\t%d\n", ft.f_gap);
+ printf("\tSector gap:\t0x%x\n", ft.gap);
+ printf("\tFormat gap:\t0x%x\n", ft.f_gap);
printf("\tInterleave:\t%d\n", ft.f_inter);
printf("\tSide offset:\t%d\n", ft.offset_side2);
printf("\tFlags\t\t<");
@@ -196,14 +194,7 @@
} else {
print_fmt(ft);
}
- return (0);
- }
-
- if (format || fmtstring) {
- if (ioctl(fd, FD_STYPE, &ft) == -1)
- err(EX_OSERR, "ioctl(FD_STYPE)");
- return (0);
}
- return 0;
+ return (close(fd));
}
--- fdcontrol.8.org 2012-03-03 06:15:13.000000000 +0000
+++ fdcontrol.8 2013-01-20 20:33:45.000000000 +0000
@@ -34,7 +34,6 @@
.Sh SYNOPSIS
.Nm
.Op Fl F
-.Op Fl d Ar dbg
.Op Fl f Ar fmt
.Op Fl s Ar fmtstr
.Op Fl v
@@ -93,30 +92,6 @@
.Fl v ,
some more text will be returned, including the total capacity of the
density settings in kilobytes.
-.Ss Debug Control
-If the
-.Xr fdc 4
-driver was configured with the
-.Dv FDC_DEBUG
-option, by default, device debugging information is still disabled
-since it could produce huge amounts of kernel messages.
-It needs to
-be turned on using
-.Nm
-together with
-.Dq Fl d Li 1 ,
-usually immediately before starting an operation on the respective
-device the debug information is wanted for, and later turned off again
-using
-.Dq Fl d Li 0 .
-Note that debugging levels are a driver's global option that will
-affect any drives and controllers using the
-.Xr fdc 4
-driver, regardless which
-.Ar device
-was specified on the
-.Nm
-command line.
.Ss Density Control
The
.Xr fdc 4
@@ -206,8 +181,9 @@
.It Ar sectrac
The number of sectors per track.
.It Ar secsize
-The sector size code, 0 = 128 bytes (or less), 1 = 256 bytes, 2 = 512
-bytes, 3 = 1024 bytes.
+The sector size in bytes. Previously was sector size code:
+ 0 = 128 bytes (or less), 1 = 256 bytes, 2 = 512 bytes,
+ 3 = 1024 bytes.
.It Ar datalen
The actual sector size if the size code is 0, or the (ignored) value
0xFF for larger size codes.
--- fdformat.c.org 2012-03-03 06:15:13.000000000 +0000
+++ fdformat.c 2013-01-20 10:21:27.000000000 +0000
@@ -112,27 +112,7 @@
usage (void)
{
errx(EX_USAGE,
- "usage: fdformat [-F fill] [-f fmt] [-s fmtstr] [-nqvy] device");
-}
-
-static int
-yes (void)
-{
- char reply[256], *p;
-
- reply[sizeof(reply) - 1] = 0;
- for (;;) {
- fflush(stdout);
- if (!fgets (reply, sizeof(reply) - 1, stdin))
- return (0);
- for (p=reply; *p==' ' || *p=='\t'; ++p)
- continue;
- if (*p=='y' || *p=='Y')
- return (1);
- if (*p=='n' || *p=='N' || *p=='\n' || *p=='\r')
- return (0);
- printf("Answer `yes' or `no': ");
- }
+ "usage: fdformat [-F fill] [-f fmt] [-s fmtstr] [-nqv] device");
}
int
@@ -191,10 +171,6 @@
verify_only = 1;
break;
- case 'y': /* confirm */
- confirm = 1;
- break;
-
default:
usage();
}
@@ -281,16 +257,7 @@
fdt.tracks * fdt.heads * bytes_per_track / 1024,
device);
}
- else if(!quiet && !confirm) {
- printf("Format %dK floppy `%s'? (y/n): ",
- fdt.tracks * fdt.heads * bytes_per_track / 1024,
- device);
- if(!yes()) {
- printf("Not confirmed.\n");
- return (EX_UNAVAILABLE);
- }
- }
-
+
/*
* Formatting.
*/
--- fdformat.1.org 2012-03-03 06:15:13.000000000 +0000
+++ fdformat.1 2013-01-20 10:32:30.000000000 +0000
@@ -35,7 +35,7 @@
.Op Fl F Ar fill
.Op Fl f Ar fmt
.Op Fl s Ar fmtstr
-.Op Fl nqvy
+.Op Fl nqv
.Ar device
.Sh DESCRIPTION
The
@@ -84,9 +84,6 @@
.Ar device .
.It Fl v
Do not format, verify only.
-.It Fl y
-Do not ask for confirmation whether to format the floppy disk but
-still report formatting status.
.El
.Pp
For non-autoselecting subdevices, neither
--- fdutil.c.org 2012-03-03 06:15:13.000000000 +0000
+++ fdutil.c 2013-01-22 22:42:21.000000000 +0000
@@ -90,93 +90,97 @@
static struct fd_type fd_types_auto[1] =
{ { 0,0,0,0,0,0,0,0,0,0,0,FL_AUTO } };
-
static struct fd_type fd_types_288m[] = {
#if 0
- { FDF_3_2880 },
+ { FHD_3_2880 },
#endif
- { FDF_3_1722 },
- { FDF_3_1476 },
- { FDF_3_1440 },
- { FDF_3_1200 },
- { FDF_3_820 },
- { FDF_3_800 },
- { FDF_3_720 },
+ { FHD_3_1722 },
+ { FHD_3_1476 },
+ { FHD_3_1440 },
+ { FHD_3_1200 },
+ { FHD_3_820 },
+ { FHD_3_800 },
+ { FHD_3_720 },
{ 0,0,0,0,0,0,0,0,0,0,0,0 }
};
static struct fd_type fd_types_144m[] = {
#ifdef PC98
#if 0
- { FDF_3_1722 },
- { FDF_3_1476 },
+ { FHD_3_1722 },
+ { FHD_3_1476 },
#endif
- { FDF_3_1440 },
- { FDF_3_1200 },
+ { FHD_3_1440 },
+ { FHD_3_1200 },
#if 0
- { FDF_3_820 },
- { FDF_3_800 },
+ { FHD_3_820 },
+ { FHD_3_800 },
#endif
- { FDF_3_720 },
- { FDF_3_360 },
- { FDF_3_640 },
- { FDF_3_1230 },
+ { FHD_3_720 },
+ { FHD_3_360 },
+ { FHD_3_640 },
+ { FHD_3_1230 },
#if 0
- { FDF_3_1280 },
- { FDF_3_1480 },
- { FDF_3_1640 },
+ { FHD_3_1280 },
+ { FHD_3_1480 },
+ { FHD_3_1640 },
#endif
{ 0,0,0,0,0,0,0,0,0,0,0,0 }
+//end of PC98
#else
- { FDF_3_1722 },
- { FDF_3_1476 },
- { FDF_3_1440 },
- { FDF_3_1200 },
- { FDF_3_820 },
- { FDF_3_800 },
- { FDF_3_720 },
+ { FHD_3_1722 },
+ { FHD_3_1476 },
+ { FHD_3_1440 },
+ { FHD_3_1200 },
+ { FHD_3_820 },
+ { FHD_3_800 },
+ { FHD_3_720 },
{ 0,0,0,0,0,0,0,0,0,0,0,0 }
#endif
};
static struct fd_type fd_types_12m[] = {
#ifdef PC98
- { FDF_5_1200 },
+ { FHD_5_1200 },
#if 0
- { FDF_5_820 },
- { FDF_5_800 },
+ { FHD_5_820 },
+ { FHD_5_800 },
#endif
- { FDF_5_720 },
- { FDF_5_360 },
- { FDF_5_640 },
- { FDF_5_1230 },
+ { FHD_5_720 },
+ { FHD_5_360 },
+ { FHD_5_640 },
+ { FHD_5_1230 },
#if 0
- { FDF_5_1280 },
+ { FHD_5_1280 },
#endif
{ 0,0,0,0,0,0,0,0,0,0,0,0 }
+//end of PC98
#else
- { FDF_5_1200 },
- { FDF_5_1230 },
- { FDF_5_1480 },
- { FDF_5_1440 },
- { FDF_5_820 },
- { FDF_5_800 },
- { FDF_5_720 },
- { FDF_5_360 | FL_2STEP },
- { FDF_5_640 },
+ { FHD_5_1200 },
+ { FHD_5_1230 },
+ { FHD_5_1480 },
+ { FHD_5_1440 },
+ { FHD_5_820 },
+ { FHD_5_800 },
+ { FHD_5_720 },
+ { FHD_5_360 | FL_2STEP },
+ { FHD_5_640 },
{ 0,0,0,0,0,0,0,0,0,0,0,0 }
#endif
};
static struct fd_type fd_types_720k[] =
{
- { FDF_3_720 },
+ { FHD_3_720 },
{ 0,0,0,0,0,0,0,0,0,0,0,0 }
};
static struct fd_type fd_types_360k[] =
{
- { FDF_5_360 },
+ { FDD_5_360 },
+ { FDD_5_180 },
+ { FDD_5_320 },
+ { FDD_5_160 },
{ 0,0,0,0,0,0,0,0,0,0,0,0 }
};
More information about the freebsd-bugs
mailing list