summaryrefslogtreecommitdiffstats
path: root/usr.sbin
diff options
context:
space:
mode:
authornyan <nyan@FreeBSD.org>2004-03-28 13:42:27 +0000
committernyan <nyan@FreeBSD.org>2004-03-28 13:42:27 +0000
commit1425c998a18db105fcdc560157ebc5bb857ab2e6 (patch)
treeed7ca9a72770f7fdeb5636d63f9a178d583f8737 /usr.sbin
parent8a75d031d7241e00e6848d5ba33e1c16abcc54b4 (diff)
downloadFreeBSD-src-1425c998a18db105fcdc560157ebc5bb857ab2e6.zip
FreeBSD-src-1425c998a18db105fcdc560157ebc5bb857ab2e6.tar.gz
Add PC98 supports.
Submitted by: Watanabe Kazuhiro <CQG00620@nifty.ne.jp> (mostly)
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/fdcontrol/Makefile4
-rw-r--r--usr.sbin/fdformat/Makefile4
-rw-r--r--usr.sbin/fdread/Makefile4
-rw-r--r--usr.sbin/fdread/fdutil.c70
4 files changed, 77 insertions, 5 deletions
diff --git a/usr.sbin/fdcontrol/Makefile b/usr.sbin/fdcontrol/Makefile
index a203ef9..807e4a5 100644
--- a/usr.sbin/fdcontrol/Makefile
+++ b/usr.sbin/fdcontrol/Makefile
@@ -8,4 +8,8 @@ CFLAGS+= -I${.CURDIR}/../fdread
WARNS?= 2
MAN= fdcontrol.8
+.if ${MACHINE} == "pc98"
+CFLAGS+= -DPC98
+.endif
+
.include <bsd.prog.mk>
diff --git a/usr.sbin/fdformat/Makefile b/usr.sbin/fdformat/Makefile
index 8cc164b..40ca9a7 100644
--- a/usr.sbin/fdformat/Makefile
+++ b/usr.sbin/fdformat/Makefile
@@ -8,4 +8,8 @@ SRCS= fdformat.c fdutil.c
WARNS?= 2
CFLAGS+= -I${.CURDIR}/../fdread
+.if ${MACHINE} == "pc98"
+CFLAGS+= -DPC98
+.endif
+
.include <bsd.prog.mk>
diff --git a/usr.sbin/fdread/Makefile b/usr.sbin/fdread/Makefile
index 05e588d..e99c620 100644
--- a/usr.sbin/fdread/Makefile
+++ b/usr.sbin/fdread/Makefile
@@ -3,4 +3,8 @@
PROG= fdread
SRCS= fdread.c fdutil.c
+.if ${MACHINE} == "pc98"
+CFLAGS+= -DPC98
+.endif
+
.include <bsd.prog.mk>
diff --git a/usr.sbin/fdread/fdutil.c b/usr.sbin/fdread/fdutil.c
index 9b81cad..a48eb17 100644
--- a/usr.sbin/fdread/fdutil.c
+++ b/usr.sbin/fdread/fdutil.c
@@ -87,6 +87,47 @@ printstatus(struct fdc_status *fdcsp, int terse)
static struct fd_type fd_types_auto[1];
+#ifdef PC98
+
+static struct fd_type fd_types_12m[] = {
+{ 15,2,0xFF,0x1B,80,2400,0,2,0x54,1,0,FL_MFM }, /* 1.2M */
+#if 0
+{ 10,2,0xFF,0x10,82,1640,1,2,0x30,1,0,FL_MFM }, /* 820K */
+{ 10,2,0xFF,0x10,80,1600,1,2,0x30,1,0,FL_MFM }, /* 800K */
+#endif
+{ 9,2,0xFF,0x20,80,1440,1,2,0x50,1,0,FL_MFM }, /* 720K */
+{ 9,2,0xFF,0x20,40, 720,1,2,0x50,1,0,FL_MFM|FL_2STEP },/* 360K */
+{ 8,2,0xFF,0x2A,80,1280,1,2,0x50,1,0,FL_MFM }, /* 640K */
+{ 8,3,0xFF,0x35,77,1232,0,2,0x74,1,0,FL_MFM }, /* 1.23M 1024/sec */
+#if 0
+{ 8,3,0xFF,0x35,80,1280,0,2,0x74,1,0,FL_MFM }, /* 1.28M 1024/sec */
+#endif
+};
+
+static struct fd_type fd_types_144m[] = {
+#if 0
+{ 21,2,0xFF,0x04,82,3444,2,2,0x0C,2,0,FL_MFM }, /* 1.72M in 3mode */
+{ 18,2,0xFF,0x1B,82,2952,2,2,0x54,1,0,FL_MFM }, /* 1.48M in 3mode */
+#endif
+{ 18,2,0xFF,0x1B,80,2880,2,2,0x54,1,0,FL_MFM }, /* 1.44M in 3mode */
+{ 15,2,0xFF,0x1B,80,2400,0,2,0x54,1,0,FL_MFM }, /* 1.2M */
+#if 0
+{ 10,2,0xFF,0x10,82,1640,1,2,0x30,1,0,FL_MFM }, /* 820K */
+{ 10,2,0xFF,0x10,80,1600,1,2,0x30,1,0,FL_MFM }, /* 800K */
+#endif
+{ 9,2,0xFF,0x20,80,1440,1,2,0x50,1,0,FL_MFM }, /* 720K */
+{ 9,2,0xFF,0x20,40, 720,1,2,0x50,1,0,FL_MFM|FL_2STEP },/* 360K */
+{ 8,2,0xFF,0x2A,80,1280,1,2,0x50,1,0,FL_MFM }, /* 640K */
+{ 8,3,0xFF,0x35,77,1232,0,2,0x74,1,0,FL_MFM }, /* 1.23M 1024/sec */
+#if 0
+{ 8,3,0xFF,0x35,80,1280,0,2,0x74,1,0,FL_MFM }, /* 1.28M 1024/sec */
+{ 9,3,0xFF,0x35,82,1476,0,2,0x47,1,0,FL_MFM }, /* 1.48M 1024/sec 9sec */
+{ 10,3,0xFF,0x1B,82,1640,2,2,0x54,1,0,FL_MFM }, /* 1.64M in 3mode - Reserve */
+#endif
+};
+
+#else /* PC98 */
+
static struct fd_type fd_types_288m[] =
{
#if 0
@@ -135,6 +176,8 @@ static struct fd_type fd_types_360k[] =
{ 9,2,0xFF,0x2A,40, 720,FDC_250KBPS,2,0x50,1,0,FL_MFM }, /* 360K */
};
+#endif /* PC98 */
+
/*
* Parse a format string, and fill in the parameter pointed to by `out'.
*
@@ -241,15 +284,15 @@ parse_fmt(const char *s, enum fd_drivetype type,
default:
abort(); /* paranoia */
+#ifndef PC98
case FDT_360K:
case FDT_720K:
if (j == 250)
out->trans = FDC_250KBPS;
- else {
- badspeed:
+ else
errx(EX_USAGE, "bad speed %d", j);
- }
break;
+#endif
case FDT_12M:
if (j == 300)
@@ -257,20 +300,22 @@ parse_fmt(const char *s, enum fd_drivetype type,
else if (j == 500)
out->trans = FDC_500KBPS;
else
- goto badspeed;
+ errx(EX_USAGE, "bad speed %d", j);
break;
+#ifndef PC98
case FDT_288M:
if (j == 1000)
out->trans = FDC_1MBPS;
/* FALLTHROUGH */
+#endif
case FDT_144M:
if (j == 250)
out->trans = FDC_250KBPS;
else if (j == 500)
out->trans = FDC_500KBPS;
else
- goto badspeed;
+ errx(EX_USAGE, "bad speed %d", j);
break;
}
break;
@@ -373,6 +418,7 @@ get_fmt(int size, enum fd_drivetype type)
default:
return (0);
+#ifndef PC98
case FDT_360K:
fdtp = fd_types_360k;
n = sizeof fd_types_360k / sizeof(struct fd_type);
@@ -382,6 +428,7 @@ get_fmt(int size, enum fd_drivetype type)
fdtp = fd_types_720k;
n = sizeof fd_types_720k / sizeof(struct fd_type);
break;
+#endif
case FDT_12M:
fdtp = fd_types_12m;
@@ -393,18 +440,25 @@ get_fmt(int size, enum fd_drivetype type)
n = sizeof fd_types_144m / sizeof(struct fd_type);
break;
+#ifndef PC98
case FDT_288M:
fdtp = fd_types_288m;
n = sizeof fd_types_288m / sizeof(struct fd_type);
break;
+#endif
}
if (size == -1)
return fd_types_auto;
for (i = 0; i < n; i++, fdtp++)
+#ifdef PC98
+ if (((128 << fdtp->secsize) * fdtp->size / 1024) == size)
+ return (fdtp);
+#else
if (fdtp->size / 2 == size)
return (fdtp);
+#endif
return (0);
}
@@ -442,29 +496,35 @@ getname(enum fd_drivetype t, const char **name, const char **descr)
*descr = "unknown drive type";
break;
+#ifndef PC98
case FDT_360K:
*name = "360K";
*descr = "5.25\" double-density";
break;
+#endif
case FDT_12M:
*name = "1.2M";
*descr = "5.25\" high-density";
break;
+#ifndef PC98
case FDT_720K:
*name = "720K";
*descr = "3.5\" double-density";
break;
+#endif
case FDT_144M:
*name = "1.44M";
*descr = "3.5\" high-density";
break;
+#ifndef PC98
case FDT_288M:
*name = "2.88M";
*descr = "3.5\" extra-density";
break;
+#endif
}
}
OpenPOWER on IntegriCloud