実験パート4

FAT16パッチはZIP・MO・HDD対応になりました
7月2日
終わりにしようと思っていたのに、スペインの方から「FAT16パッチのソースを公開してほしい」と
言われ、見直しているうちに見つけちゃったのです。LS-120?だったかな、Device type code 3を
認識しないといけなかったのでした。それを直してver 0.02aになりました。

EVAパッチのテスト中、FAT16パッチの不審な行動を発見。
208MBのファイルをリードするとき、MOとHDDでは違う結果になります。
原因を調べないといけないですね。

6月8日
長い間FAT16パッチにお付き合い下さり、ありがとうございました。
動作報告して下さった皆さんには、心から感謝しています。
バグがなければ一応このバージョンで完成とします。

DOS2を解析すればするほどパッチでは歯が立たないと思いました。
CDエクステンションパッチにすれば良かったかな。

と言うわけで、次はEVAパッチに取りかかります。
MOで巨大ファイルの再生がしたいので。

FAT16パッチ

6月1日
FAT16パッチを始めてから1年になるのかな。いつから始めたのか正確な日にちは覚えてないけど。
飽きもせずよくやってます。だって止めようとするとテスターさんのHDDが飛んだり。
言い出しっぺの方がいなくなってしまったので、今度こそ止められるかも知れない。

FAT16なメディアで仮想FDが使えないかなとEP.COMにパッチをあてました。EPってEVAに似ているので
パッチは簡単でしたが、仮想FDは使えません。リセットしたらFAT16パッチは消えてしまう。
なので、FAT16メディアではHDDEMUを使って下さい。

5月17日
やっと気分転換できたようです。
今のMSX界って一人がつまずくと、連鎖反応で誰かがコケます。
気力が戻ったのでFAT16 4/20版をなおしました。サブディレクトリ関係が少しは解決したかも。

FAT16パッチは、230MBのMOで正常に読み書き出来るようになったら終了するつもりです。
たぶんDOS2パッチでは、そのくらいが限界です。大容量HDDをパーティション分割なしで
使いたい方は、たろうさんに期待しましょう。スペインでは完成したのかな。

FAT16パッチ5/17版

5月7日
気分転換のためFAT16パッチ以外のことをしています。

スーパーロードランナーを調べてみました。tRでは動かないので、サンヨーの2+を押入から出して
準備がいろいろと面倒です。このソフトはBASIC起動なので、解析用にはMSXAIDSを使いました。
バンク切り替えのアドレスは0000hなのです。変わってますね。0000hはMAIN-ROMになっているのに
本当にバンクが替わるの?と試してみると・・・・しっかり8000h〜BFFFhが切り替わってました。
0000h〜3FFFhにバンク番号を書き込むと、ページ2のバンクが替わります。

同じ実験をtRで試しましたが、ページ0にバンク番号を書いてもバンク切り替えが出来ませんでした。
なぜでしょう。tRはMAIN-ROMが拡張スロットにあるというのは関係ない?
ハードの出来る方、スーパーロードランナーを解析して下さい。

ウチのゲームは似非SCC用にパッチあてたので、tRで動いてます。
DOS2解析よりゲーム解析の方がおもしろい。

それからFAT16パッチ4/20版で、CONCATは駄目ですね。クラスタサイズ8KのHDDでも駄目でした。
ZIPと230MBのMO対応にするかも。できればクラスタサイズ8Kまで対応したいのですが、Disk Bufferを
多く取ると処理が遅くなるし、Bufferが少ないと階層が深くなったときにつらいし。

5月4日
230MBのMOを買って54MBのEVAファイル再生の実験をしました。はじめのFFF0hセクタは順調に再生されましたが
2週目が駄目です。ノイズが入って画面がずれてしまいます。
HDDやZIPでは2週目に入るところで、画面と音声が一時停止するだけでしたが、MOは遅いから?

息子のパソコン(VAIO)、とうとう私の物になりました。

4月30日
クロスブレイムは64Kゲームでした。16Kバンクで、ページ2を切り替えるバンクアドレスが
4045hとBFFFhにあります。変なゲームですよ、これ。ページ1と2がRAMでも、スロット1に
ゲームROMを差していれば動くようになってます。
ROM領域を書き替えているので、プロテクトだと思ってしまった。

クロスブレイムはパッチあてて、Mikasen.さんのMEGA16で動くようにしました。
次はいよいよEVAの録画パッチですね。そういえば2GBのHDDを使って、180MBのEVAファイル再生に
成功したようです。

4/20版、EVAファイル作成のCONCATで動作不良みたいです。
問題はセクタ番号のbit16-23かも知れません。
こっちを直すとあっちが駄目現象です。あっちもこっちも丸く収まるように、もう少し解析します。

4月27日
クロスブレイムという32kのROMゲームが、NSLOADでも似非SCCでも正常に
ゲーム出来ないというので解析してみました。
NSLOADで動かないゲームはありますけど、似非SCCで駄目なゲームって
余程変わったことをしているのでしょう。

確かに変わっています、このゲーム。
昨日から本格的に解析してますけど、どう見ても32kのROMに見えないし、
バンク切り替えしている気がしてなりません。でもメガROMではないです。
64kのROMゲームってある? やっぱり現物を見ないとわかりませんね。

クロスブレイム問題が解決しないと、EVAの録画にパッチがあてられない。
それからFAT16の4/20版を試した方がいらっしゃいましたら、不良動作の報告が
欲しいのでお願いします。ルートディレクトリのエントリ数、MSXでは200hに
なりません。パッチあてたほうが良い?

4月20日
期末のごたごたがやっと片づきました。まだ提出書類が3枚残っているけど。

特定のファイルがZero typeで正常に読み出せない不具合をなおしました。
ファイルがサブディレクトリにある時、セクタ番号のbit16-23がファイルとサブディレクトリで
異なっている物は、正常に読み出せませんでした。やっと原因がわかったのでなおしました。

気が付いたらMMのサブディレクトリ表示がおかしくなっていました。
B:\SUB1\SUB2\SUB3  こんな時、サブディレクトリ\SUB3 に行くと画面が乱れます。
DIRコマンドでは正常にファイルが表示されます。MMには対応していないので注意して下さい。

FAT16パッチ4/20版です。

4月10日
4/7版はサブディレクトリに行かれなくて・・・ごめんなさい。
パッチを置くスペースが厳しくなって、あちこち移動しているうちに、1CFEhのCALL 2B8Chが
おかしくなってしまいました。

こっちを使って下さい。FAT16 4/10版

4月8日
4/7版をちょっと修正しました。オプションなしで起動すると、FAT16対応のドライブが表示されます。
FAT16を使えるドライブは2つです。3つ目のドライブを設定したいときは、設定済みのドライブを
ひとつ解除してから、再度設定して下さい。

4月7日
FAT16パッチ4/7版はドライブを2つ設定できるので、FAT16ドライブからFAT16ドライブへのコピーが出来ます。
HDDはパーティション番号を設定して起動するようにしましたが、うまくいくかどうかわかりません。
EVAをESCで止めても'Not a DOS disk'になりません。

FAT16 4/7版

4月3日
昨日のEVAパッチを試した方、止まらなくて困ったと思います。
2回目以降のループで、フィールド数を設定していなかったのが原因みたいです。

それから、ESCで止めたときの"Not a Dos disk"問題、(F2CFh)セグメントのB6D4h〜にブートセクタが
読み込まれないことが原因です。どうしてこうなるのか、セクタ番号のbit16-23の設定場所を、
ファイルアクセスルーチンに変えた方が良いかも知れません。

EVAパッチ4/3版

4月2日
出来立てのEVAパッチです。54,543,360バイトのファイルが最後まで再生されました。
32MB以下のファイルには対応していないかも知れません。

使い方は EVATEST filename /p です。
32MBまで再生すると画面が停止しますが、スペースキーを押すと続きを再生します。
大きなファイルを作って試して下さい。


スペースキーを押さなくても、ファイルの終わりまで再生するようにしました。
繋ぎ目がうまくいきませんが。
[ESC]で終了すると"Not a Dos disk"のエラーが出ます。FAT16を解除して再度常駐して下さい。

EVAパッチ

3月30日
64MBのファイルでEVAパッチを試した方から「32MBしか再生されない」と言われ続けてました。
ようやくEVAファイルを手に入れたので、つなぎ合わせて47MBのファイルを作り再生してみましたが、
12MB付近で終了してしまいます。

作者さんに聞いてみると65536セクタまでしか対応していないとか。
そんなわけでEVAはパッチをあてても32MBしか再生されません。残念でした。

3月29日
FAT16パッチを試した方から動作報告をいただいていますが、皆さんかなりヘビーな方々で、
知らない単語が出てきたり、私がひとりで読んでも分からないことが多いです。
それで皆さんに一緒に読んでいただき、分からないことは教えていただこうと掲示板を設けました。

どんなメディアで動作したか、どんな不具合が発生したかを掲示板に書いて下さい。
今のところ230MBのMO、1GBのHDD、2GBのHDD、LS-120で動作しているようです。

3月23日
FCBを使ってファイルアクセスするときに、ドライブを指定しないとFAT12扱いになっていましたが、
やっと改善しました。DIRコマンドでディスクの空き容量計算に時間がかかるので、ついでに直そうと
いろいろやってみたらパッチルーチンが大きくなりすぎて、セグメント1枚確保しないとだめですね。

じつは確保したセグメントをどこに置けばいいのかわかりません。ページ1に置いてもいいのかな。


下のMMコピー、FAT16パッチを起動したばかりなら正常にコピーできますが、どうも続けて
コピーしているうちにおかしくなるようです。まだまだパッチが不十分ですね、きっと。

FAT16 3/23版はFCBでカレントドライブが使えます。クラスタ番号は0002h〜FEFFhまで使えると思います。

3月16日
昨日の計算問題、BUFFERに読み込んだセクタがFATやDIRECTORYの時は、BUFFERが無効にならないように
すればいいのかな・・・・と、いいかげんな解析ですね。24bitで計算するようにパッチをあてました。
32MBの境界線も64MBの境界線もファイル書き込みできます。これで100MBのファイルが作れる。

MM上でコピーすると、コピーしたファイルはFATもDIRECTORYも正常なのに ZT.COM で読むと、ファイルの
最後まで読めないという変な現象が起こるのですが、ウチだけ? 
COPYコマンドでコピーすればこの現象は起こらないです。やっぱりMMは使えないのかな。

FAT16 3/16版です。COMMAND2.COMパッチも入ってます。
パッチルーチンが大きくなってしまったので、少し前のバージョンからLUNAと同時には使えません。
セグメント1枚確保して、パッチルーチンをそっちに置けばいいのでしょうが、実験版なので。

3月15日
境界線問題、やっと原因がわかりました。ディスクアクセスルーチンで、READ/WRITEの後にBUFFERのセクタ番号を
調べているところがあります。セクタ番号がFFFFhから10000hに繰り上がるあたりでは、計算が合わなくなるのでしょう。
そうするとBUFFERのドライブ番号を0にするようです。この計算がどういう意味なのか分からないので、
対処の方法がわかりません。取りあえず問題の所を潰してみましたが、もしかしたら副作用が出るかも。


3/5版はREAD BUFFERとWRITE BUFFERで、同じルーチンを使ってセクタ番号の最上位7bitを
セットしているのでいろいろと不都合が出ると思います。
3/9版からセクタ番号の最上位7bitの保存を、セクタ換算用・BUFFER用・READ/WRITE用に分けました。
ディスクアクセスルーチン内で23bitのセクタ番号をセットします。
3/10版はファイルアクセスルーチン内で最上位7bit、ディスクアクセスルーチン内で16bitをセットしますが、
こうすると境界線を跨ぐようなファイルを書き込むときに、セクタ番号の最上位ビットが繰り上がりません。

FAT16 3/15版は3/9版と同じ方法です。ブートセクタの+20h〜22hからセクタ総数を得るようにしたので、
たぶんディスクの空き容量が正しく表示されるのでは。
セクタ直読みすると、セクタ換算したときの最上位7bitがそのままセットされてしまいます。

3月10日
32MBの境界線付近にファイルを書き込むときのFAT問題ですが、何故かZIPでは起こらない現象のようです。
ZIPのセクタ0FFF9h〜10038hに、ファンクション49hでファイルを書き込み、BUFFERを覗くと
ドライブ番号・フラッシュビットは正常にセットされていました。

HDDのセクタ0FFFDh〜1003Chへの書き込みでは、データは正常に書き込めるのにBUFFERがおかしくなります。
それでもドライブ番号を入れてやれば、クローズで新しいFATがディスクに書き込まれます。

ZIPとHDDの動作の違いって、クラスタサイズが原因なのかな・・・

昨日のパッチ、ファイルアクセス前のセクタ番号セットの場所を変えたら、ファンクション2Fh,30hでの
セクタ番号が23ビット扱いになってしまいました。わかりにくいので元に戻しました。
FAT16 3/10版

3月9日
MKDIRのトラブルってZIPでは起こらない現象かも知れません。SUB DIRの作成では空きクラスタを
探して、1クラスタ全部をBUFFERにリードして00hクリアします。BUFFERの初期値って5ですよね。
ZIPのクラスタサイズは4hセクタなので、1クラスタを一度に読み込めるけど、クラスタサイズ
10hセクタのHDDならリード/クリア/ライトを繰り返すことになります。

パッチルーチンを見直すと、そうした場合に不具合が起こるようになっていました。
クラスタサイズ以上にBUFFERを取っていれば、問題は起こらない?
という訳にもいかないので、パッチルーチンを少し直しました。

それとは別の現象ですが、セクタFFFDh〜セクタ1003Chにファイルを書くと、FATが書き込まれないです。
BUFFERにリードされたFATには、新しいファイルのFATが書かれているのに、クローズしてもHDDの方に
書かれないです。しかもエラーなし。どうなっているのでしょう。
クローズルーチンで何かのチェックをしている様子もないし。ここ以外では正常に書き込めるし。

パッチを直すたびにファイルを2つ書き替えるのが面倒なので、ひとつにまとめました。
FAT16 3/9版はST、GT共通です。

ファイル書き込み(ファンクション49h)でFATが書き込まれないのは、BUFFERのドライブが00hに
なっているからです。00hの時はフラッシュビットがセットされていても、ディスクに書き込まれないのです。
なぜ上のような時だけ00hになるのか・・・・パッチルーチンから戻ったときのフラグが原因かも。

3月5日
サブディレクトリ作成時の初期化トラブルは、解決したかも知れません。
自分であてたパッチなのにすっかり忘れていて、解析しましたがDOS2より難解でした。
やっぱり一気に作らないと忘れちゃって駄目です。

MKDIR問題解決版です。FAT16001.LZH

3月3日
昨日のリムーバブルメディア、ブートセクタが違っていたようですね。
開始論理ブロックは全部20hでいいのでしょうか。直しておきました。

それからMKDIRでサブディレクトリのセクタが初期化されない問題ですが、
しばらくDOS2解析していなかったので・・・・忘れちゃった。
他のドライブでも起こる現象? たぶん私が書き替えたのでしょう。
もう一度解析します。

3月2日
PCカードとかスマートメディアとか、私には何のことかよくわからないのですが、
inquiryデータのRMBな物は全て認識するようにしました。
ただし、ZIP以外は区別してないです。PCカードもなんとかメディアも同じ扱いです。

中身を見たことがないので、ほんとにわからないです。
ブートセクタがセクタ00hにあれば、そのままで大丈夫なはずですが、もし違っていたら
手作業でドライブ登録テーブルを書き替えて下さい。

FAT16001.LZH

FAT16パッチ開発日記に戻る トップページに戻る