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のファイルを書き替える。
こんなところでしょうか。
戻る