FAT16パッチ開発日記  

パート1  (1998/07/25 〜 10/10)    パート2  (1998/11/02 〜 12/30)
パート3  (1999/01/07 〜 02/27)    パート4  (1999/03/02 〜 07/02)
パート5  (1999/08/09 〜 12/31)    パート6  (2000/01/06 〜 04/19)
パート7  (2000/04/21 〜 2001/01/21) パート8  (2001/05/13 〜 12/30)

FAT16パッチのダウンロード (2003/08/22)


2003 8月22日 FAT16 ver0.09のソースをダウンロードページに置きました。 たぶんバージョンアップすることはないと思うので、改造したい方はどうぞ。
2002 2月23日 似非ROMディスクはMSXが暴走してもデータが消えないって。それはいいですね。 私は使い方が粗いせいか、MegaSCSIのデータがすぐに消えてしまうのです。 ・・・またつまらないことを考えている。 似非ROMディスクでMegaSCSIを作れば、なんて。 MSXを起動する度に、MegaSCSIのデータを書き替えていることは知っています。 だからパッチを工夫してデータ書き替えをやめるとか。 データ書き替えなんて博士らしくないです。(なんかすごいこと言ってるかも) MegaSCSIに似非RAMディスクが付いてないと不便ですか? 似非RAMディスクは容量が少ないし、ドライブをひとつ消費するので無くてもいい? 更にすごいこと言ってますね >私 MegaSCSI(FAT16)から似非RAMディスクを追放してみました。ATA-IDEみたいな感じです。 似非RAMディスクが無いとちょっと心細いけど、Aドライブを2GBのHDDにしてみたり。 う〜ん、ますますATA-IDEみたいです。 似非RAMディスクが無いと困ることになるのかな。しばらくこのままで使ってみよう。
2月8日 GIGAMIXさんの掲示板に、FAT16パッチのことが書かれていました。 FAT16を使っている人は、日本では多分私だけです。 海外のATA-IDEユーザーさんはどうなんでしょう。Jonさんが動作テストで使ったくらいかな。 ATA-IDEユーザーさんが使ったとしても、私の所にはバグ報告が来ないので、どんな具合か さっぱりわかりません。 FAT16の動作原理を詳しく説明した方が良いのでしょうか。
2月1日 昨夜から寝返り打っても痛くないです。痛くなければ治ったも同然。 嬉しくてMegaSCSIパッチを始めました。が、プログラム組めない・・・ 最近は滅多にプログラムなんて作らないから、何をどうしていいやら。 コマンドラインの受け取り方なんて知らないよう・・・という感じです。 これで作れるのかな。 半日かかってなんとか形が出来てきました。 MegaSCSIのBANK 08をシステム領域にするには、似非RAMのファイルをどこかに移した後 内部テーブルを書き替えて、似非RAMを再フォーマットしなければなりません。 けっこう面倒なので、MegaSCSIの最後のバンクをFAT16用に使えないか考えています。 それならデータ領域バンク数をひとつ減らせば出来るでしょ?  すでにファイルがそのバンクを使っていたらどうしよう。使用中かどうかFATを調べる? 似非RAMをデフラグできるといいなぁ。
1月28日 電源を入れてからDOSのプロンプトが出るまでの時間を計ってみました。 結果はFAT12でも16でもほとんど同じ、1〜2秒の差でした。なので、FAT16パッチは複数 カーネル対応版のまま内臓しました。3キーを押しながら電源を入れると、起動時から FAT16が使えるので、起動ドライブをFAT16に出来ますが、MegaSCSIではあまり意味がないです。 意味がないけど、MegaSCSIにパッチをあてるプログラムを作ります。 あとFAT16パーティション用ブートプログラムも作らなければ。ブートセクタ内に'VOL_ID'と 'FAT16'の文字列が必要なので。 プログラム作りはちょっとおあずけ。 肋骨にヒビが入ったまま、明日から仕事です。1ヶ月もかかるなんて聞いてないよ。
1月25日 バンクを1つ使ってFAT16パッチをMegaSCSIに内蔵してみましたが、起動に時間掛かりすぎ。 DOS2カーネルの種類別にパッチを分けるべきか。 起動が遅い原因はパッチあてに時間が掛かるからです。 なぜ時間が掛かるか、CPUがZ80になっているから?
1月24日 久しぶりにT博士から突っ込みが入りました。セクタサイズをいじるのは良くないって。 「は〜い、やめます」とすぐに従ってしまいます。 MegaSCSIにFAT16パッチを組み込む方法を教えていただいたので、軌道修正。 でもBANKを1つ使ってパッチあてプログラムを組み込むか、2つにしてパッチ済みカーネルを 入れてしまうか迷っています。BANK4,5はFAT12、BANK8,9はFAT16みたいに。 FAT16はファンクション67h,68hが使えないので、その時はFAT12のカーネルを使ってしまうとか。 あまり意味がない? また博士から突っ込みが入りそう。 暇な時間も残り1日半、結局何も出来なかったような気がします。 あっ、そうでもないです。FAT16パッチを解析したので、いろいろ思い出しました。 それにしても凄いパッチです。あまりの強引さにビックリ。
1月22日 DOS2ってセクタサイズを固定にしているから簡単だったのですね。 セクタサイズが関係している箇所が多すぎて、パッチが大変そう。掛け算・割り算・disk bufferから転送するバイト数を、セクタサイズ参照にすればいいのかな。 MegaSCSIの説明書によると、DSKIOルーチンではセクタサイズ512バイト以外のドライブには アクセス出来ないって。でもMegaSCSIファンクションとDSKIOの違いって、セクタサイズを 調べた後エラーを出すか出さないかだけでしょ?DSKIOでもエラーを無視すれば、アクセス 可能では。 Disk bufferをどうするか、良い考えが浮かびません。 Bufferの大きさを512バイトにしておいて、Buffer=10にする。セクタサイズが1024バイトの ときはBufferを2つ使用。同じセクタ番号のBufferが出来てしまうので、セクタの前半・ 後半がわかるような印を付ける。F34Dhはどうしよう。 セクタサイズが大きくなると、ディレクトリマスクとかも違ってくる? 解けない問題で遊んでいます。だって今週は暇なんだもん。
1月20日 1セクタ1024バイトに出来ると、4GBのパーティションが作れる? もし出来たとして、Windows等で読めるのかしら。 Disk Bufferを全て1024バイトずつ確保するのは、メモリの無駄使いですね。 セクタサイズが512バイトでないときだけ、Bufferを別に取る。RAMDISKを使っていなければ BC00h-BFFFhが空いているし。勝手に使っちゃ駄目? Bufferを別に取った場合、リンクはどうすればいいのだろう。通常のBufferのリンクを 拡張Bufferの方に飛ばさなければ。 RAMDISK使用禁止にしておいて、初めからその領域をBuffer用にしてしまう。 それならセクタサイズ2048でもメモリ不足にならないね。
1月19日 今日もコピーの実験です。 ・実験6)MOからHDDの後半(8000hクラスタ付近)にコピー      C:DIR1\DIR2\DIR3\DIR4\MSX > B:\TEST\SUB1\SUB2\SUB3\SUB4\MSX → 成功  もの凄く時間が掛かりましたが、コピーは成功です。  下の追加実験はHDDの前半に書き込んでいたし、プライマリは内蔵RAMだったので  40分位で終わりました。  実験6はプライマリを外付けRAMにしていたせいか、2時間30分も掛かってしまった。 コピーはたぶん大丈夫です。 ----------- 上司の命令で1週間自宅謹慎だそうです。 家にいないとまずいし、力仕事は出来ないし、時間はたっぷりあるのでパッチワークに 励もうかと思います。実験もいろいろする予定なので、興味のある方は話しに付き合って 下さい。 MSX-DOS2ってセクタサイズ512バイト固定ですよね。セクタサイズ2048バイトまで使える ように出来ないかしら。セクタサイズが変わって困るものは・・・Disk Bufferかな。 Test1 MegaSCSIにパッチあててBufferのサイズを1024バイトに拡張してみました。 BUFFERS=10と同じなので、動作に支障はないようです。 次はDOS2のあちこちにパッチですね。
1月17日 Copy失敗の原因は階層の深さではなくファイル数かも知れません。 下の実験の続きです。 ・実験3)BドライブのSub directoryからCドライブのSub directoryへ \C以降をMMで指定してコピー      B:\SUB1\SUB2\SUB3\SUB4\MSX\C〜 > C:DIR1\DIR2\DIR3\DIR4\MSX → 成功 ・実験4)もう一度BドライブのSubからCドライブのSubへ\MSXをコピー      B:\SUB1\SUB2\SUB3\SUB4\MSX > C:DIR1\DIR2\DIR3\DIR5\MSX → 失敗  \B/\Hをコピーした後、勝手に終了してしまいました。   この実験、コピー先のディレクトリを変えて2回やりましたが、結果は同じ。  ワークエリアを見ると、コピー元のBドライブでSub directory \MSXをBufferに読むため  セクタ番号のbit0-15をワークに書き込んだ後、セクタを読まないでそのまま終了という  感じ。セクタ番号のbit16-23が、たぶん前に読み込んだセクタ番号のままです。  あっ、違うかも知れない。Bufferが0クリアされている。そうなるとbit16-23のあたりが  問題ありそう。  ファイルのコピーって、最後はコピー元のファイルを読んで、End of fileで終了ですよね。  その後、\SUB4に戻る? 戻らない?  それはMMの仕事?    MegaSCSIパッチでプライマリマッパRAMを切り替えて、ワークエリアを解析しています。  階層が深くても、Sub directoryのファイルでも、コピーで開くファイルは2つ。  FATやdirectoryはBufferに読み込まれます。    ------- ・追加実験 コピーの方向をMOからHDDに変更      C:DIR1\DIR2\DIR3\DIR4\MSX > B:\SUB1\SUB2\SUB3\SUB5\MSX → 成功  あっさり出来ちゃいました。なぜ?  MOとHDDではファイル書き込みのスピードが全然違いますが、それが原因?  それともファイルの位置?  原因がわからないので、このままのパッチで良いのか駄目なのか・・・  意地悪な使い方をしなければ、このままで大丈夫な気がします。
1月15日 やっと正月休みが終わって、パッチ再開です。 FAT16ドライブでファイルを一度に沢山コピーすると、ほとんど失敗していました。 この実験、v0.08以降はやってなかったので、久しぶりに実験開始。 BドライブHDD(2GB)・CドライブMO(230MB)を使い、MMからディレクトリ\MSXを コピーします。MMはver2.07A(パッチ版)を、FAT16パッチはver0.09を使用。 \MSX |- \A (75)      ( )内はファイル数     |- \B (106)- \H (6)     |- \C (71)-|- \I (2) | |- \J (2) | |- (5)     |- \D (15)     |- \E (3) |- \F (13)-|- \K (11) | |- \L (25) | |- \M (16) |- \G (5) |- (6) ・実験1)CドライブのRoot directoryからBドライブのSub directoryへ     C:\MSX > B:\SUB1\SUB2\SUB3\SUB4\MSX  →  成功 ・実験2)BドライブのSub directoryからCドライブのSub directoryへ      B:\SUB1\SUB2\SUB3\SUB4\MSX > C:DIR1\DIR2\DIR3\DIR4\MSX → 失敗   Cドライブに \B/\Hのファイルを書き込んだ後、動作がおかしくなりました。  普通ならMMのwindowが開いて、Making directory...で \Cを作りますよね。  何故かwindowが出ないまま\DIR4に勝手なファイルを作りました。  階層が深くなると、コピーに失敗します。  
1月1日 明けましておめでとうございます。 8ドライブで使えるFAT16パッチについて、いろいろ考えていました。 ・パッチあてプログラムをインターフェースに内蔵できないか。   実験ではパッチをあてたカーネルを内蔵しましたが、やはり他のユーザーさんには   勧められない方法ですから。   それにフロッピーディスクのフォーマットができないと困ります。   パッチプログラムが小さければ、たぶん内蔵できます。その場合、FAT16にしない   オプション(特定のキーを押しながら起動)も必要かも知れない。 ・ファンクション67h(ディスクのフォーマット)をどうするか。   FAT16用に確保するシステムセグメントにルーチンを移して、呼ばれたときだけ   (F2D0h)のセグメントと入れ替える。意味、わかりますか?   それとも、フロッピーをフォーマットするときはFAT12で起動すれば良い? ・MegaSCSIでは、DOS2カーネルのバージョンに合ったパッチをインストールする。 ・ATA-IDEでは、IDEBIOSのファイルを書き替える。 こんなところでしょうか。


戻る