実験パート3

DOS2解析はまだまだ続く (ここに出てくるDOS2のアドレスはSTのものですが、 ロットの違いで若干ずれることがあります)
2月27日
FAT16パッチのHDD対応版、ST用GT用を作りました。パッチの部分は変更なしです。
これでしばらく動作テストしてみたいです。

カーネル解析で気になる部分があるのですが、ファンクションのどれを使うとあの部分に
行くのかまだわかっていません。なので、相変わらず危ないです。

2月24日
FAT16をHDD対応にしました。ST用だけです。
ブートセクタの位置がどうなるのかわからないので、使う人が位置を確かめてFAT16に設定します。

ウチのHDD(560MBだと思うのですが、98に519MBと言われてしまう)を16bitFATでフォーマット
したら、ブートセクタの位置は100hセクタだったので、FAT16パッチの論理ブロック番号は100hに
設定してあります。オプションなしで起動すると、現在の設定が表示されます。

設定を変えるときは FAT16ST /Sxxxh のように入力します。20hのように16進数で、最後にhを
付けないと・・・大変なことになるのかな。設定できないですね。
ZIP、MOはいままでどおり、FATサイズをF0hに変更したので、230MのMOをクラスタサイズ4KBで
フォーマットしても大丈夫かな。試してみないとわからないですね。

FAT16を解除したとき、MEGA-SCSIからカーネルをコピー、ドライブ登録テーブルを元の値に戻します。
空いているHDDをお持ちの方、100MBのEVA再生してみません?

HDD対応版  と  

2月23日
HDDを使ったテストに再挑戦しました。容量519MB、クラスタサイズ16KBでフォーマットです。
100MBのファイルでEVAの再生テストがしたかったのです。
でもウチにはEVA用ファイルはないので、デジタルプラレールから100MBのファイルをコピーして、
パッチあてEVAで再生してみましたが、ファイルの最後まで正常?に再生されたようです。

なにしろ画面を見ても、正常なのか異常なのかわからないのです。
でもエラーが出なかったので、いいことにしよう。

そろそろHDD対応にしようかな。MOよりトラブルが少ないかも知れない。
HDDの容量によってブートセクタの位置が変わる?
そのあたりがわからないので、使う人が自分でブートセクタを探して、FAT16に設定するのなら
作れそう。

2月22日
つじかわさんのEVA-00P.COMにパッチをあてて、16bitFAT対応にしました。
ZIPとEVA用ファイルをお持ちの方、テストしてみません?
うまくいけば100MBのEVA用ファイルとか・・・・作れそうな気がします。
EVA-00.COMを解析しなければ。

MSXで16bitFATフォーマット出来るといいですね。誰か作る人いないかしら。
パーティション分割なし、ZIPの論理フォーマットくらいならSHEMで出来るけど面倒です。

2月15日
セクタサイズ16KBは大きすぎました。
MMで大量にファイルを削除したら「ディレクトリがいっぱいです」なんてエラーが出るし、
その後の動作は不安定だし。

FAT16を使うとすればZIPかMO(230MB)ですよね。クラスタサイズ2KBでは遅いし、8KBなら
MEGA-SCSIのフォーマットと同じなので遅くはないけど、小さいファイルでも8KB取られちゃうし、
それで中間のクラスタサイズ4KBでフォーマットしてみました。
フォーマットするとき、用途に合わせてクラスタサイズを選べるといいのかも。

   容量
      	Win95での表示  : 100,528,128バイト
	MSX の表示 :  100,593,664バイト
   クラスタサイズ  :       4,096バイト
   FATサイズ   :      96セクタ

Win95の容量計算ってどんなことするのでしょう。16bitFATにすると、ブートセクタの
総セクタ数に情報が書かれないので、クラスタ総数の計算が出来ません。


このフォーマット、いい感じですよ。MSXでもWin95でもファイルのリード、コピーが出来ます。
大量のファイル削除も大丈夫でした。スピードも中間を取っただけあって、そこそこです。
しばらく100MBHDDを使ってみます。HDDの後ろの方をMEGA-SCSIでフォーマットできたらいいなぁ。


MMのファイル表示って、ひとつのディレクトリで255個まで? 
どうしてそれ以上は表示されないの? パッチのせいではないです。

2月12日
98ノートでHDDのフォーマットが出来ましたが、容量が519Mになってしまいます。

				容量 : 544,047,104バイト
 	アロケーションユニットサイズ :      16,384バイト
      アロケーションユニット数 :    33,206個

98で大量のファイルをHDDにコピー、階層も地下6階くらいまで掘ってみました。
次にMSXの電源を入れてSHEMを起動、HDDの中身を調べました。
セクタ00hはパーティション情報なのでしょうか。IPL1の文字列がありますが、ディスクに関する
情報はないです。なんとブートセクタは100hにありました。これで正常?

	セクタサイズ  : 200hバイト
	クラスタサイズ :  20hセクタ(16,384バイト)
	FATサイズ  :  82hセクタ


FAT16を駐在させた後、SHEMを使ってMEGA-SCSIのドライブ登録テーブルの開始ブロックを00,01,00に
書き替えると・・・MMでのディレクトリ表示が速くなってる。MMでCD−ROMのディレクトリを
表示させたときよりちょっと遅いかな。それにしても100MHDDより519MHDDの方が速いなんて。
クラスタサイズが大きいから?

ディスク容量が544,980,992バイトと表示されるのは、クラスタ総数の計算がアバウトだからです。
(FATサイズ − 1)* 100h + F0h なんてやってます。


ファイルの読み出しは階層の深いところ、ディスクの後ろのほうを試してみましたが、今のところ
読めてます。MMで単純なファイルのコピーは大丈夫みたいです。
これからファイルの削除とか、NGLOADでゲームセーブとか試してみます。


2月10日 昨日の実験では、HDDのセクタ00hをブートセクタ、セクタ01h〜C0hを第1FAT セクタC1h〜180hを第2FAT、セクタ181h〜1A0hをルートディレクトリというように フォーマットしましたが、これではWin95がHDDを認識しませんね。 それにHDDの容量が32Mになってしまいます。 今日はHDDのセクタ00h〜1FhにWin95用ZIPのセクタ00h〜1Fhをコピーして、 完全なZIPフォーマットHDDにしてみました。 FAT16パッチでMEGA-SCSIのドライブ登録テーブル、開始ブロックを00,00,20にすると 100MのHDDとしてMSXからもWin95からも、ファイルの読み書きが出来ました。 FAT16パッチでMOを使うとき、ドライブ登録テーブルの開始ブロックを00,00,00に していますが、たぶん違ってますね。MOもはじめの20hセクタくらいを何かに 使っている? Windows95のフォーマットについて知りたいのですが、なにか良い本がありますか?

2月9日
急にHDDで試してみたくなって、HDDを認識するようにFAT16にパッチあてました。
98ノートにHDDを繋いでフォーマットしようと思ったら・・・外付けHDDが
ドライブD〜Tに分割されているのです。
この状態でどうすればフォーマット出来るの?

他機種はよくわからないので、MSXでZIPフォーマットをかけてみました。
560MのHDDが100Mになってしまいましたが、読み書きの実験をするだけなので。

MM上で12bitFATのZIPから16bitFATのHDDに、ディレクトリを含めたファイルの
コピーをしました。HDDなら速いかなと思ったのに、結構時間がかかります。
ZIPはクラスタサイズが4セクタなので、大きなファイルではFAT書き込みに時間が
かかるのかも知れません。それにFATのサイズも大きいから、空きFAT探しも大変。

フォーマットの形式って決まっているのですか?
ZIPのクラスタサイズを8セクタに増やしたら・・・・少しは時間短縮になるのかな。

2月5日
にせカーネルを使う方法、駄目かも知れません。ROMゲームの起動、短いファイルのコピーが
出来たので良いかなと思ったのですが、Mikasen.さんのところでは「どうにも不安定」でした。
Mikasen.さんと私では環境や使い方に相当違いがありますから、たぶん彼が使って駄目なら
使い物になりません。CDエクステンションと一緒に使うのは、諦めようかな。

FAT16は1/19版が最新のファイルです。
書き込みが出来るとか大きなファイルのコピーもOKとか書きましたが、私が試した限りでは
という但し書きが付くので、どんな環境でもこの通りに動作するわけではないです、たぶん。

私のMSX環境を書きます。
tR−ST(RAM 1M)、 MEGA-SCSI、 HDD(560M)、 ZIP、 CD−ROM

パソコンの操作はおばさんレベルなので、MMを使っているくらいで難しい設定など
いっさいしていません。そういう状態なら書き込めるということなのでしょう。

大勢のテスターがいて、どんな条件で動作してどうするとコケるのか、調べられるといいのでしょう。
そのうち他の方が良い物を作ってくれると思うので、私は自己満足の範囲で作ります。

2月2日
昨日の方法は無理があったようで、もっと単純な方法に変えました。
FAT16のためにセグメントを2枚使います。1枚にカーネルをコピー、パッチをあてて
にせカーネルとして使います。F2D0hを書き換えるだけで、にせカーネルが使えます。
あちこちにパッチをあてるので、常駐解除したとき元に戻すのが大変なのでこうしました。


もう1枚にパッチのプログラムを入れて、CDエクステンションのようにページ1に
置いて使います。ページ1切り替えルーチンは、にせカーネルの3F00h〜にあります。


ようやくCDエクステンションと一緒に使えるようになりました。
解析が不十分で、FAT16を先に常駐させると、CDエクステンションを起動した途端に
ハングします。なので、先にCDエクステンション、次にFAT16の順に常駐させて下さい。
解除するときは、先にFAT16、次にCDエクステンションの順です。

CD−ROMドライブとZIP(またはMO)をお持ちの方、HDDを切り離して
安全にお試しいただけます。

2月1日
CDエクステンションと一緒に使えるように、いろいろと考えましたがうまくいきません。
どうして喧嘩しちゃうのだろう。

FAT16のパッチを置く場所がないので、セグメントをひとつ確保しました。そこにカーネルを
コピーしてパッチあてて、空いているスペース3E55h〜3FACh、02B0h〜0231hにパッチの
プログラムを置きました。

ファンクションコールを使うとページ0はF2D0hのセグメントになりますが、0271hから
ページ3のルーチンをコール、ページ0をコピー&パッチのセグメントに切り替えます。
ジャンプアドレスのテーブルはF2D0hの方を参照して、目的のファンクションにジャンプ。

とこんな感じなのですが、CDエクステンションと一緒に使うとMMが使えません。
DOS2のコマンドラインからDIRしたら、ファイル表示は正常でした。SHEMも起動
出来ましたが、終了するとCOMMAND2.COMを入れてねの連続で、DOS2に戻れません。

CDエクステンションをもっと解析しないと駄目ですね。
難しいんだもん。たろうさん、助けて。

0271hの時点でファンクションコールに使うドライブを知る方法ってないでしょうか。

1月25日

最近MEGASCSI.TBLというファイルを見かけなくなりました。
HDDだけでなくMSX用のZIPからもMEGASCSI.TBLが消えていました。
もしかして消してしまったのではとSHEMでディレクトリを見ると、確かにファイルはありました。
でもMMで表示されないのです。

これが不可視属性というものですか。MMにパッチあてたから表示されなくなったのね。

CDエクステンションって凄いです。CD−ROMのファイルをオープンすると、
データセグメントにはNULというファイル名でFIBが作られるのです。
それでDOS2はファイルハンドルの数を間違えることがないのですね。

1月22日

リングを見ながら98ノートの電源を入れたら・・・・ピピピピって音がして起動しないのです。
そしたらHELPキーがロック状態になってました。
家の中にリングの本とかビデオとか、やたらに置いてあるので怖いです。

MM.COM(ver 2.07K)は3E0Fhの CAh,FCh,3Eh を C3h,FCh,3Eh に書き換えれば、
FAT16でMMが使えます。というか、ディレクトリが正しく表示されます。

1月20日

FAT16ですがMMが使えないとさすがに不便なので、MMでファイル表示出来るようにパッチを
あてました。MM.COM(ver 2.07A)の3D5DhにCAh,4Ah,3Ehという所があります。
そこをC3h,4Ah,3Ehにします。やはりMMは便利ですね。
後はCDエクステンションと一緒に使えるようにしたいです。

1月19日

ウチのSTにGTのカーネルを入れて、動作テストしました。9MbのファイルをHDDから
ZIP、ZIPからHDDにコピーしましたが、正常にコピー出来ました。
ST用、GT用とも順調に動いています。

後はMikasen.さんが細かいところのチェックをして下さるとか。私はリード/ライトくらいしか
出来ないので、パソコンに詳しい人が使うといろいろ問題も出てくると思います。たのしみです。

MSXで16bitFATのMOを読みたいと言ったのは、Mikasen.さんなのです。
CDエクステンションにパッチあてたら読めるんじゃないかと。それでCDエクステンションを
解析したら、もの凄く複雑で難しかったので、DOS2パッチの方が簡単かもと解析をはじめました。

16bitFATのリード/ライトは12bitFATより簡単です。クラスタからセクタの換算も23bitで計算
するだけ。DOS2ってクラスタは16bitで扱っているし、クラスタ番号のbit7だけでROOTかSUBか
判定するのを止めてくれれば、もう少し楽だったのに。

キャッシュが難解でした。フラッシュとか意味を知らなかったから。
BUFFERの1バイトの空きスペースは何のためだったのかな。
あれが無かったらFAT16は作れなかったです。

FAT16パッチです。

1月18日

下のパッチ、1ヶ所間違いがありました。DELルーチンです。
HDDが飛んだという報告があったので、再現してみようと思いました。
その前にHDDに入っているファイルをZIPにコピーしなくては、私は問題のFAT16を使い
MM上でHDDからZIPにコピーしちゃいました。怖いもの知らずです。

問題のカーネルと環境でテストしましたが、HDDを飛ばすことは出来ませんでした。
ウチのHDDはタフです。FAT16のパッチをあてるアドレスが1ヶ所違っていることが
わかったので、訂正しました。DELしてもハングしません。

GT版もテストしたいのですが、STにGTのカーネル入れてもいいの?

1月14日

FAT16パッチは開発中なため、何が起こるかわかりません。
もしお使いになるときはZIPの読み出しだけにして下さい。
使用後はFAT16を解除した後、MSXをリセットして下さい。

1月12日

私、犯人を間違えてました。怪しいのは1C53hではなく2F54h〜のルーチンでした。
BUFFERにリードするとき、全てのドライブでセクタ番号を24bit化するパッチをあてました。
と言ってもZIP以外は最上位8bitは0ですから簡単。ZIPはFATとルートディレクトリは
最上位8bitは0、サブディレクトリとファイルのリード/ライトのときはセクタの換算結果を
入れます。こうしてセクタ番号を24bit保存すれば、完璧な気がするのですが・・・

ディスクアクセスはZIPはMEGA-SCSIの拡張入出力、その他のドライブは互換入出力を
使っています。

これでMKDIRも大丈夫。ファイルのコピーも出来てます。
GT版も作ったので、試したい方はどうぞ。
FAT16.LZH

1月8日

FAT16パッチの最大の難関はBUFFERですね。
BUFFERにリードするセクタがFATのときはbit16-23を00、その他はクラスタからセクタ変換の後に
BUFFERリードなので、計算結果をbit16-23に入れるようにしてみました。

すると今度は[ . ][ .. ]がセクタを間違えることなく出来ていました。
が、ルートディレクトリにはサブディレクトリが作られていません。サブディレクトリは
ルートディレクトリのセクタ+10000hに入っていました。

これで、怪しいところが分かりました。1C53h〜のルーチンです。明日試してみよう。

1月7日

FAT16パッチは、いろいろ改善しているうちに最悪な方向に行ってしまいました。
パート2のパッチはうまく動きません。もう一度考え直して作りました。

MMからディレクトリ付きのCOPYをしてみると、サブディレクトリも出来ているし、ファイルも
しっかりCOPY出来ていました。サブディレクトリからDIRすると、何か変です。[ . ][ .. ]が無い。

サブディレクトリを作ったとき、ZIPは3FDBhクラスタ(10105hセクタ)まで埋まっていました。
ディレクトリを見るとサブディレクトリは3FDChクラスタに作られていました。
ほんとに出来ているかSHEMでセクタリードすると・・・ないんです。もしかしたらと思って
セクタ番号を-10000hしてリードすると、こんな所にありました。と言うわけで、ルートから
サブを作ると、セクタ番号を間違えます。危ないです。

でもCOPYしたファイルのディレクトリはちゃんと3FDChクラスタにあるし、ファイルも場所を
間違えずにCOPYされていました。

ルートからサブを作るときに場所を間違えるバージョンです。


FAT16パッチ開発日記に戻る

トップページに戻る