Subject: Dynabook 1.44M/1.2M floppy disk drive
From: [email-masked] (Hiroaki Sengoku)
Date: Mon, 4 Oct 1993 10:29:13 JST
Newsgroups: fj.os.linux

仙石＠日立です。

  皆さんご存知のように、Dynabook の floppy disk drive は、DOS では 1.2M
<-> 1.44M の自動切替が出来るのに、linux では出来ません。私は普段 1.44M
boot の設定にしているので、 1.2M の disk が読めず不便でした。そこでちょっ
と kernel に patch をあてて読めるようにしました。

# すでに誰かがやっているかな ? 少なくとも linux ML と fj.os.linux では書
# かれていないと思いますが、ちょっと心配。^^;)

  私は mtools で B: を 1.2M drive の設定にして使ってます。なかなか便利。
  もちろん mount -t msdos /dev/fd0h1200 /mnt も使えます。

----- きっちょんな -----8<----- きっちょんな -----
--- kernel/chr_drv/keyboard.c.org	Sun Aug 15 03:52:34 1993
+++ kernel/chr_drv/keyboard.c	Sat Oct  2 18:29:00 1993
@@ -731,3 +731,9 @@
 	mark_bh(KEYBOARD_BH);
 	return kmem_start;
 }
+
+void switch_fd(short x) {
+	kb_wait();
+	outb(0xBB,0x64);
+	send_data(x);
+}
--- kernel/blk_drv/floppy.c.org	Sun Aug 15 20:24:36 1993
+++ kernel/blk_drv/floppy.c	Sat Oct  2 18:48:50 1993
@@ -989,6 +989,8 @@
     }
 }
 
+void switch_fd(short x);
+
 static void redo_fd_request(void)
 {
 	unsigned int block;
@@ -1091,6 +1093,13 @@
 		seek = 1;
 	sector++;
 	del_timer(motor_off_timer + current_drive);
+	/* change floppy mode. by [email-masked] */
+	if( floppy->size % 1200 ) {	/* only for TOSHIBA j-3100 */
+		switch_fd(0x00);	/* 1.44 Mbytes mode */
+	} else {
+		switch_fd(0x10);	/* 1.2  Mbytes mode */
+	}
+	/* end of change */
 	floppy_on(current_drive);
 }
 
----- きっちょんな -----8<----- きっちょんな -----

  なお、drive の mode 切替えの方法は東芝のテクニカルマニュアルに記載され
ていないので、試行錯誤 :-) して見つけました。そのため何か変なことをして
いるかも知れません。その場合は御指摘頂ければ幸いです。
--
				仙石浩明＠システム開発研究所．日立製作所
					[email-masked] (105u)
-------------------------------------------------------------------------------
Newsgroups: fj.os.linux
From: [email-masked] (Hiroaki Sengoku)
Subject: Re: Dynabook 1.44M/1.2M floppy disk drive
In-Reply-To: [email-masked]'s message of Mon, 4 Oct 1993 01:29:13 GMT
Message-ID: <[email-masked]>
Followup-To: fj.os.linux
Organization: Systems Development Lab., Hitachi Ltd., JAPAN
References: <[email-masked]>
Distribution: fj
Date: Mon, 13 Dec 1993 14:21:12 JST

仙石＠日立です。

私:
|   皆さんご存知のように、Dynabook の floppy disk drive は、DOS では 1.2M
| <-> 1.44M の自動切替が出来るのに、linux では出来ません。私は普段 1.44M
| boot の設定にしているので、 1.2M の disk が読めず不便でした。そこでちょっ
| と kernel に patch をあてて読めるようにしました。

  という patch を以前流したのですが、floppy の読み書きが遅くなるという 
(致命的な) 副作用がありました。バグ報告は一件しか来なかったので、みなさ
ん適当に修正されたのだと思いますが、念のため patchlevel 14 に対する 
patch を公開します。

# 誰も使ってなかったりして。

----- きっちょんな -----8<----- きっちょんな -----
--- drivers/char/keyboard.c.org	Tue Nov 23 21:51:04 1993
+++ drivers/char/keyboard.c	Fri Dec 10 23:38:50 1993
@@ -781,3 +781,11 @@
 	mark_bh(KEYBOARD_BH);
 	return kmem_start;
 }
+
+/* change floppy mode. patched by [email-masked] */
+/* NOTICE: This routine is only for TOSHIBA J-3100          */
+void switch_fd(short x) {
+	kb_wait();
+	outb(0xBB,0x64);
+	send_data(x);
+}
--- drivers/block/floppy.c.org	Tue Nov 23 03:47:46 1993
+++ drivers/block/floppy.c	Sat Dec 11 01:16:55 1993
@@ -991,6 +991,23 @@
     }
 }
 
+/* change floppy mode. patched by [email-masked] */
+/* NOTICE: This routine is only for TOSHIBA J-3100          */
+void switch_fd(short x);
+static void change_floppy_mode(void) {
+	static int prev_mode = -1;
+	int mode;
+	mode = floppy->size % 1200;
+	if( mode != prev_mode ) {
+		if( mode ) {
+			switch_fd(0x00);	/* 1.44 Mbytes mode */
+		} else {
+			switch_fd(0x10);	/* 1.2  Mbytes mode */
+		}
+		prev_mode = mode;
+	}
+}
+
 static void redo_fd_request(void)
 {
 	unsigned int block;
@@ -1036,6 +1053,7 @@
 				floppy++;
 		}
 	}
+	change_floppy_mode();	/* added by [email-masked] */
 	if (format_status != FORMAT_BUSY) {
 		if (current_drive != CURRENT_DEV) {
 			current_track = NO_TRACK;
----- きっちょんな -----8<----- きっちょんな -----
--
				仙石浩明＠システム開発研究所．日立製作所
					[email-masked] (105u)