Newsgroups: fj.os.linux From: sengoku@sdl.hitachi.co.jp (Hiroaki Sengoku) Subject: Dynabook 1.44M/1.2M floppy disk drive Message-ID: Organization: Systems Development Lab., Hitachi Ltd., JAPAN Distribution: fj Date: Mon, 4 Oct 1993 10:29:13 JST 仙石@日立です。 皆さんご存知のように、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 sengoku@sdl.hitachi.co.jp */ + 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 切替えの方法は東芝のテクニカルマニュアルに記載され ていないので、試行錯誤 :-) して見つけました。そのため何か変なことをして いるかも知れません。その場合は御指摘頂ければ幸いです。 -- 仙石浩明@システム開発研究所.日立製作所 sengoku@sdl.hitachi.co.jp (105u) ------------------------------------------------------------------------------- Newsgroups: fj.os.linux From: sengoku@sdl.hitachi.co.jp (Hiroaki Sengoku) Subject: Re: Dynabook 1.44M/1.2M floppy disk drive In-Reply-To: sengoku@sdl.hitachi.co.jp's message of Mon, 4 Oct 1993 01:29:13 GMT Message-ID: Followup-To: fj.os.linux Organization: Systems Development Lab., Hitachi Ltd., JAPAN References: 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 sengoku@sdl.hitachi.co.jp */ +/* 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 sengoku@sdl.hitachi.co.jp */ +/* 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 sengoku@sdl.hitachi.co.jp */ if (format_status != FORMAT_BUSY) { if (current_drive != CURRENT_DEV) { current_track = NO_TRACK; ----- きっちょんな -----8<----- きっちょんな ----- -- 仙石浩明@システム開発研究所.日立製作所 sengoku@sdl.hitachi.co.jp (105u)