実験パート5

 FAT16パッチ、次の目標はHDD完全対応?


12月31日

DOS/Vのパーティション関係、直しました。これでパーティションを探せるはず。
FAT16ドライブで仮想FDってほんとに出来るのかな。原理がわかっていないので。
セクタリードなんて使っていたら駄目ですね。
そんなときは奥の手、パッチ済みカーネルをMEGA-SCSIに入れてしまう。


今年はいろいろあって活動できない期間もありましたが、復活できて良かったです。
できればMikasen.さんが復活して下されば・・・無理でしょうか。

FAT005.COMです。

Mikasen.さんの230MBのMOを読むために作ったFAT16パッチですが、今ではすっかり
10GBのHDD用になってしまいました。パーティションサイズ2GBなんて当たり前という
感じでやってますから、恐ろしいですね。
dirコマンド高速化、クラスタ番号FFF6hまで対応と、指摘されていた問題はクリアしました。
他にあったかな?

来年はひたすら動作テストですね。今回みたいに変な使い方をすれば、いろいろ間違いや
バグが見えるかも知れません。


皆さん、良いお年をお迎え下さい。

12月30日

また間違いを見つけてしまった。
DOS/Vのパーティションのリンクをたどる方法ですが、意味を取り違えていました。
年内に直せるかな。

HDDをFAT12と16でフォーマットする方法、よく考えたら昨日のでは駄目ですね。
他機種で32MBのパーティションを作っておいて、それをMSXでFAT12フォーマットすれば
使えそうな気がします。って、もう実験済み。仮想FDが使えました。
パーティション切り替えはFAT16でやれば・・・・ 切り替えできない。
というわけで、間違いが見つかりました。

EP.COMですが、EVAみたいにFATCHAINを調べているからFAT16では使えない?
それならパッチで解決出来るかも知れません。
要するにファイルの開始クラスタを調べて、ドライブ登録テーブルに設定すればいいのですよね。
それってEVAですね。だからプログラムがEVAに似ている?
仮想FD、FATCHAINが繋がっていなくても使えるといいなぁ。作者さんにお願いしてみよう。

12月29日

FAT16パッチver 0.04eは解除時にセグメントを確保してしまうバグをなおしました。

家の10GBのHDD、FAT12とFAT16と2種類のフォーマットで使いたいのです。
そんなことができる?
出来るか出来ないか、試してみないとわからないので早速実験。

HDDはDOS/Vで先頭から2GBずつ、4つのパーティションに分割されていますが、
第1パーティションをMEGA-SCSI用にFAT12フォーマットすれば良いかな。
パーティションの先頭ブロックは003F00h、SHEMでMEGA-SCSIドライブ登録テーブルの
開始ブロックを003F00h、ブロック数を00FF08hに書き替え。セクタ00hにMSX用の
ブート情報を書き込み。
FATとルートディレクトリを32MB用に作って、MEGASCSI.TBLをセクタ28hに作成。

MEGASCSI.TBLがちょっとわからないです。
第1パーティションの開始ブロックは常に000014hなのでしょうか。
実験用HDDは元がDOS/Vフォーマットなので、第1パーティションが003F00h、MEGASCSI.TBLの
+5hを003F00h、+12hを003F00hにしてみました。

これでうまくいくのかな。CPでパーティション1を指定、Not a DOS diskだって。
手作業でドライブ登録テーブルを書き替え、MSXから32MBのパーティションと認識されました。
MMでファイルコピー出来るし、変なフォーマットでもつじつまが合っているから大丈夫なのか。

CPが使えないのは不便なので、なんとかしたいです。Not a DOS diskと言うことは、HDDのセクタ00hを
読んでいるのかな。MSXのブートセクタを100hバイトコピーしたら、CPのエラーメッセージが
変わりました。やっぱりセクタ00hを読んでる。

何故こんなフォーマットを考えたかというと、仮想FDが使いたいのです。
こればかりはMEGA-SCSI用にフォーマットしないと使えないですよね。
更に実験。変なフォーマットのHDDで仮想FDを試してみました。う〜ん、いけますよ。
ディスクチェンジもOK。CPをなんとかすれば、このフォーマット役に立つかも。

仮想FDの問題だけなら・・・セクタが連続していないファイルでも使えるように仮想FDを作り替える。
でもCP解析の方が簡単ですね、きっと。

12月26日

昨日のFAT16パッチ、「8GBをオーバーしても無視」のバグがありました。
FAT005.COM訂正版です。

MM上でCOPYのテストをしました。
A:似非RAM  B:HDD(98でFAT16format)  C:MO(DOS/V セミIBMformat) 
D:HDD partition1(DOS/V FAT16format)   E:HDD partition2(DOS/V FAT16format)
F:ZIP (FAT12format)

・D:\SUB1\FILE(342KB)を E: にコピー
・D:\SUB1\SUB2\FILE(519KB)を E:\SUB1 にコピー
・F:\SUB\FILE(16KB)を C:\SUB にコピー

上記のコピー作業、コピーしたファイルの読み出しは正常でした。
ただ98フォーマットのHDDが問題有りです。HDDの調子が悪いのか、フォーマットが原因なのか
わかりませんが、SHEMでセクタリードしたらそのまんまとか、ZTでファイルを読んでいたら
次のセクタを読みに行ったまま帰ってこないとか。
MSXがハングすることはないので、HDDがいけないような気がしますが。

それから↑でEドライブをTree表示するとエラーになります。
パーティション1なら出来るのに・・・MMの謎

12月25日

FAT自動判別、使えそうです。それでFAT16パッチを大幅に改造しました。
ver 0.05はCP.COM感覚で使って下さい。MEGA-SCSIのドライブ登録テーブルを書き替えます。
そのときにカーネルがFAT12用のままなら、FAT16パッチをあてます。
その他いろいろバグ取りをしました。

FAT005.COM 出来立てのテスト版です。気を付けて下さい。

使い方は今までと同じですが、内部がいろいろと変わっています。
・FAT16ドライブの登録はしません。従って似非RAM以外全てFAT16ドライブにしても良いことになります。
・ファンクション1Bhで空きクラスタを数えるときのバッファをページ2に取ります。
 (パッチ解除のとき、セグメントを確保してしまうバグを直しました)
・FAT16 /rで解除するとき、MEGA-SCSIのドライブ登録テーブルは元に戻しません。
 FAT12にするときはCPを使えば、テーブル書き替えてくれるので。

そのくらいかな。FAT自動判別にはDPB+10hのルートディレクトリのセクタ数を使っています。
FAT12でルートディレクトリが20hセクタなんてフォーマットには対応していません。

MOやZIPでFAT16ディスクからFAT12ディスクに変えたいときは、ディスクを入れ替えてから
CPでパーティションを指定するだけ、FAT16ディスクに戻すときは、FAT16 d: でドライブを
指定します。
ここまでテストしました。続きはまた明日。

12月23日

FATの自動判別を試してみました。DOS2ワークバンクのルートディレクトリのセクタ数(DPB+10h)が
20hならFAT16と判定しますが、これでいいのかな。
FAT12フォーマットでディレクトリエントリ数が200hなんて、そんなフォーマットないですよね。

論理ブロック数をセクタ総数にしたり、いろいろ直したくなってプログラムの大掃除をしましたが、
案の定うまく動かないです。結局プリントアウトして全部見直し。やっぱり紙の方が全体が見えて
いいですね。バージョンアップの途中で消えてしまった機能とか、見つけてしまいました。

私はZ80ASMというMSDOS用のアセンブラを使っています。JRが届かなくてもエラーにならないの。
プログラム組むの苦手なんだから、せめてJRが届かないよって言ってくれれば・・・
今年中に出来るといいなぁ。


12月15日

10GBのHDDを買って、初めてMEGA-SCSIの限界を知りました。
FAT16パッチは、ドライブ登録テーブルの論理ブロック数をFFFFFFhにしていますが、
セクタ総数にしたほうが良いのかも知れません。
8GBの境界線にかかってしまうパーティションは、ブロック数がセクタ総数より
少なくなりますが、8GBの限界までアクセスできる。

FAT12、FAT16を自動判別したいのですが、良い方法はないでしょうか。
FAT16ドライブにMOを設定して、FAT12のディスクを入れてMMで読み出したとします。
開始ブロックが違うので変なファイル名が表示されますが、CTRL+1でパーティションを
切り替えるとルートディレクトリが表示されますし、FATの読み出しをしない小さなファイルは
普通に使えます。DOS2の場合、FAT12とFAT16のプログラムの違いってFATの読み書きだけなのです。

FATの自動判別が出来れば、ドライブの登録や切り離しの必要がなくなるし、パッチが安定すれば
MGINSTでパッチあてて、そのままMEGA-SCSIに入れてしまえば・・・なんてね。
パッチよりDOS2のソース書き替えの方がいいなぁ。


MSXでFAT32って無理ですか?H8とか使って。
意味が分かってないので、無茶なことでも平気で考えてしまう。

12月14日

FAT16パッチの気になるところを直しました。
・HDDのパーティション設定で、そのパーティションが8GB(FFFFFFhセクタ)を越えて
 いないかチェックする。ついでにFAT16フォーマットのチェックも入れてみました。

・サブディレクトリの続きのクラスタ番号がFFxxhでも読み出せるように、DOS2ワーク
 BBE4hのチェックを書き替える。

・FAT16ドライブ登録時、DOS2ワーク内のDPB+1Eh〜をFFh,FFh,00h(ルートディレクトリ)にする。

12月13日

昨日失敗したファイルのコピー、何が原因だったのでしょう。
再現してみようと思い、FAT12のMOからFAT16のHDDに昨日と同じ順番でコピーしました。
ここで止まるはず・・・が、最後までコピー出来ちゃいました。どうなっているのか。

FAT16パッチの基本的な使い方は、他機種でフォーマットしたFAT16メディアをMSXで
読み出すことなので、書き込みテストはいらないのですけど、間違って書いちゃった時に
貴重なデータを壊すといけないから。


12月12日

MM上でFAT12のMOからFAT16のHDDに、大量のファイルをディレクトリごとコピーしました。
HDDのクラスタサイズは32KB、コピーしたファイルは.MPKとかなので小さいです。
309個コピーしたところで突然止まりました。ハングではなく無限ループに入った感じ。
PAUSEキーを押すとランプが付きます。リセットしてHDDを見ると、空のファイルはありません。
次にコピーするMOのファイルが読めなかったのかな。

またディレクトリごとコピーの続き、554個コピーしたところで同じように止まりました。
HDDの中を見ると、32MBの境界線みたいな危ないところで止まったわけではないです。
何故止まるのか・・・


12月11日(続きその2)

HDDの怪現象の意味、やっとわかりました。じゃいろさん、ありがとう。
8GBを越えてアクセスできるので、どうなっているのかと思ったら、オーバーした分は
HDDの頭に戻っていたのでした。ということは、初めの考えであっていたのですね。

パーティションをセットするとき、8GBを越えないかどうかのチェックを入れます。
今回は偶然、HDDのセクタ0000hを壊さなかったけど、パーティションサイズによっては
危ないですね。

動作テストってやはり危ないので、FAT04Dはしばらくの間使わないで下さい。
私のHDDはテスト用なので、いろいろやってみます。
やって欲しいことがありましたら、メールして下さい。


12月11日(続き)

セミIBMフォーマットのMO(230MB)、読めないことを確認しようと思いFAT04Dでテストすると
読めてしまいました。MMでtreeは・・・できるじゃないですか。どうして。

セミIBMフォーマットでは、FATの先頭がセクタ0001hにはなりませんが、MSX-DOS2はFATの先頭の
セクタ番号をブートセクタの情報から得ているので読めるのですね。今まで読めなかったのはどうして。

MMのtreeはMOのフォーマット次第で表示できたりエラーになったりのようです。
フォーマット済みMOは駄目みたい。フォーマットでそんなに違いが出る?
FAT04Dは今のところ順調です。


12月11日

FAT04Dのテストです。
10GBのHDDを2047MBずつ、4つのパーティションに分割しました。
各パーティションの開始ブロック番号はこうなっています。

Partition 1    003F00h〜
Partition 2    4039C5h〜
Partition 3    80348Ah〜
Partition 4    C02F4Fh〜

気になっていたのは第4パーティションが全部読めるかどうか。

1・FAT04Dで第4パーティションを指定
 ・SHEMでFF2ChクラスタまでのFATをFFhで埋める
 ・FF2Dhにサブディレクトリを作成
 ・サブに529932バイトのファイルをコピー(3FCD61h - 3FD1A0hセクタ)
 ・ZTでファイルの読み出しに成功

2・FATをFFBFhクラスタまで使用済みにする
 ・ファイルを3つコピーしてHDDの残りを埋める
 ・3つのファイルをZTで読み出し
 ・HDDの最後まで正常にアクセスできることを確認

MEGA-SCSIの仕組み、想像とは違っていたようです。
開始ブロックから最大FFFFFFhブロックのアクセスが出来るのでしょうか。
10GBのHDD、Partion5は開始ブロックがFFFFFFhを越えてしまうので、MSXからはアクセス
できませんよね。半端なサイズのパーティションを前に持ってきて、最後のパーティションの
開始ブロックがFFFFFFh以内になるよう調整すれば、MSXから10GBのHDDが全部読めますね。


12月10日

サブディレクトリ問題が一段落したので、次はHDDのパーティションです。
DOS/Vフォーマットは何となくわかったので、こんな感じでいいのかな・・・とやってみました。
FAT04D d:/p2 なんてやると、第2パーティションを割り当てます。

ところで、パーティション番号って1から始まるのですか? それとも0?
フォーマッタでは0からになってますが、第0パーティションなんて言葉、聞いたことないですし
パーティション番号は1〜4までにします。

パーティション番号を指定できるのは、DOS/Vの普通のフォーマットとPC-98のシリンダサイズ
100hセクタのフォーマットだけです。スーパーフロッピーではブートセクタがセクタ00hなので
オプションを /b0h にすればいいのかな。対応していないフォーマットのときは、ブートセクタの
位置を調べて /b オプションで指定して下さいね。

10GBのHDDを2047MBずつ4つのパーティションに分割、MSXでD,Eドライブに割り当ててみました。
ファイルの読み出し、ルートディレクトリへのファイルコピーは出来ています。
階層が深くなったときが問題ですね、きっと。
それからサブディレクトリのクラスタの続きがFF00hクラスタ以降にあるとき、たぶん読めません。
DOS2ワークBBE4hのチェックは、上位8バイトだけ。
サブディレクトリに作成できるファイルの数って、制限はないですよね。
このあたり、きちんと作らないといけないかも。


MEGA-SCSIの限界って8GBですか?
第4パーティションのブートセクタが C0 2F 4Fhセクタ、セクタ総数が 3F FA 86hなのです。
もしかして第4パーティションは最後まで読めない?

FAT04D.COM

動作テストしたら早速見つけてしまいました。大変。
FAT04B.COM  FAT04C.COMをダウンした方はすぐに捨てて下さい。
STではディスクバッファのフラッシュでルートディレクトリが壊れます。

FAT04Dは大丈夫ですが、リードだけにしてね。


12月8日

FAT16ドライブ登録時にワーク内のDPB+1EhをFFFFhにしたら、サブディレクトリ問題が解決しました。
これで全クラスタアクセス可能なはずです。MSXでFF00h以降のクラスタにサブディレクトリを作成、
MMでファイルをコピーしました。コピーしたファイルは正常に読み出せました。

FAT04C.COMです。
FAT04C使用中はファンクション14h,15h,67h,68hは使えません。


12月6日

FF00hクラスタ以降のサブディレクトリのファイル、やっと読み出せました。
でも問題はまだ残っています。

DOS2ワークのBA25hからワーク内のDPBアドレスが、ドライブAから順に書いてあります。
ページ3にあるDPBとはデータの並び順も大きさも違っています。DOS2ではページ3のDPBを
ほとんど使いません。ワーク内のDPBにはカレントディレクトリがルートかサブか、サブなら
クラスタ番号やサブディレクトリ名もここに書かれます。

私が困っているのは、DPBの初期値。カレントディレクトリのクラスタ(DPB+1Eh)がFF00hに
なっているのです。一度ドライブをアクセスすると、カレントディレクトリがルートになるので、
DPB+1EhはFFFFh(ルートの識別コード)になります。なので初期値もFFFFhにしてしまいたいのですが。

実験ではFAT04C.COMを駐在させて、全てのドライブのDPB+1EhをFFFFhに書き替えた後、カーネルに
パッチを追加しました。

MEGA-SCSIを解析しないとわからないのかな、DPBの初期値。


12月5日

2047MBのHDDを使った実験です。
VAIOでファイルをルートディレクトリにコピー、ファイルはFF08hクラスタから書き込まれました。
このファイルをFAT04B.COMで読み出せるか。う〜ん、読めますね。
ルートディレクトリのファイルなら全クラスタ読めるのでしょう。
後はサブディレクトリですね。


12月3日

アクセス数5000突破記念?に、DOS2ワークバンク内のBB80h〜BBFFhの解析に再挑戦しています。
今までBBE4h,BBE6h,BBE8hの意味が曖昧だったようです。この謎が解けないとFF00hクラスタ以降の
サブディレクトリにアクセス出来ないので、気合い入れて解析しないといけないですね。

私の頭は午前中が一番冴えています。特に前の晩に解析して分からないところがあった時、
翌朝もう一度見直すと解決の糸口が見えることが多いです。先日テレビでやってましたが
これって一夜漬けの勉強法なんですね。寝ている間に脳が・・・という。

今日は一夜漬けの準備ができなかったので、謎解きは来週にします。


11月30日

明日から12月ですね。大掃除とかお正月とか、主婦にとって嫌な季節になります。
2047MBのHDDでFF00hクラスタにサブディレクトリを作る実験をしました。結果は予想通り、
FF00hクラスタにはサブディレクトリを作れません。クラスタ番号の上位8バイトがFFhの
ときは、ルートディレクトリと判定するからです。これは私がしたこと。
DOS2ではもっとひどいです。クラスタ番号上位8バイトのビット7だけで判定しています。

VAIOでFF00hクラスタにサブディレクトリを作ってファイルをコピー、MSXで読み出せるか。
ファンクション5Ahを使ってカレントディレクトリをサブに変更すると、カレントディレクトリが
FF00hクラスタでサブディレクトリ名が書かれているという、MSX的には相当矛盾した状態になります。
勿論サブディレクトリに変更することはできません。

クラスタ番号でルートかサブか判定するのは難しそうなので、ディレクトリフラグを作ろうかな。
そっちの方が難しい?


11月28日

FAT16パッチに関係ない話です。
Almost Realが仮想FDで動かないと聞いて解析してました。海外物の解析はおもしろいです。
とにかく変わったことをしますよね。そしてAlmost Realも。

仮想FDで動かない原因は、DISK ROMのスロットワークに00,00,00を入れてるから。
日本のソフトではスロット関連が原因で動かない物がありましたが、こんなの初めて見ました。


DISK ROMの4022hを使ってDISK BASICを起動するとき、FF07h〜にジャンプ命令を書いておくと
好きなアドレスに飛べるのですね。Almost Realって凄いですよ。CHGETだってフック書き替えで
怪しいことやってるし、ワークエリアを使いこなしています。


11月24日

FATサイズ関係にパッチあてました。4ヶ所、以外と少ないです。
FATサイズが00hの時、100hとして扱います。これでパーティションサイズ2047MBのHDDに
アクセスできます。容量計算もあっているようです。

問題のクラスタ番号FF00h、どうしようかな。
ルートディレクトリのときは全てFFFFhにすれば、クラスタ番号と間違えないはず。
カーネルの1C53h〜の話しです。ルートディレクトリの識別コードFF00hの下位8バイトは、
ディレクトリエントリ数の下位8バイトをAND 0Fhしたものです。たぶん常に00hです。
ここをFFhにすればいいかなと思ったのですが・・・・そんなに甘くないですね。

という訳で、クラスタ番号は相変わらず0002h〜FEFFh対応です。
HDDを使う方、リードだけにして下さいね。テスト版なので危ないです。
動作テスト中に、tRが突然真っ暗になってしまったり、今日はちょっと恐かったです。
私の場合HDDが飛んでも大丈夫なのですが、tRが壊れたら困る。

テスト版 FAT04B.COM
FAT04B使用中はファンクション14h,15h,67h,68hは使えません。


11月19日

2047MBの場合、FATサイズは100hセクタになりますね。
MSXではFATサイズを1バイトで扱っているので、FATサイズ00hなら100hというふうに
パッチをあてようと思います。


11月15日

UltraSCSIの10GBのHDDをとうとう繋いでしまいました。
新しいことに挑戦するのって、なんかドキドキしていいですね。UltraSCSIなのに普通の
SCSIボードに繋いでも大丈夫なの?って、私のレベルがわかるでしょ。ど素人です。

VAIOで2047MBにパーティションを切って、適当にファイルをコピーしました。
MSXを起動、ESETで認識させて、FAT16 f: /b0h にして、SHEMでブロック0を見ると
パーティション情報は003EC1hブロック。003EC1hブロックをSHEMでリード、+1C6hに
第1パーティションのブロックのオフセットが書いてあります。00003Fh。

SHEMで003F00hブロックをリード、第1パーティションのブートセクタです。
クラスタサイズ40hセクタ、FATサイズ100hセクタ! この値、正常?
2047MBでパーティション切ったら、MSXでは読めないです。

2000MBにしたら、FAT16 f: /b3f00h でMSXから読み出せました。
ついでにMMでコピーの実験。同じドライブでサブディレクトリからサブディレクトリへ
ファイルをコピーしました。不思議なことにtree表示できてる。
MOでtreeを表示させるとエラーになるのに、HDDは大丈夫なんて。どうなってるの。


11月14日

DOS/VでのHDDのフォーマット、なんとなくわかったかも。パーティションを2つ作って
セクタ00hの情報から各パーティションのブートセクタの位置を突き止めました。

セクタ00hの +1C6hから3バイトに、パーティション情報が書いてあるセクタの番号。
パーティション情報のセクタの +1C6hから3バイトに、第1パーティションのブートセクタ、
+1D6hから3バイトに第2パーティションのブートセクタという感じでした。

HDDの中を確認しながら行うならこれで良いのですが、FAT16パッチでこれをやるのは・・・
これ以外のフォーマットがあるかも知れないし。HDD完全対応は難しそう。
HDDのフォーマットについては自己流解釈なので、突っ込みOKです。と言うか、教えて下さい。

MM上でFAT16ドライブからFAT16ドライブにコピーするとき、ディレクトリ付きでコピーすると
失敗するかも知れません。安全な方法は両方のドライブを目的のディレクトリにしておくこと。


11月13日続き

フォーマッタを変えてみましたが、結果は同じ。
第1パーティションのブートセクタの位置って、DOS/Vと98では違う?
HDDのセクタ0から、DOS/Vか98か見分ける方法ってないですか?

DOS/Vのパーティション情報・・・
第1パーティションはセクタ0の +1BFhから、ブートセクタの位置は +1C6h〜、
総セクタ数は +1CAh〜とか? 


11月13日

512MBのHDDを98でフォーマットすると、FATサイズがFFhセクタになるそうなので、
サブディレクトリをFF00hクラスタに作って、ルートと間違えるかどうか実験してみよう。

家のSCSI機器はこのように繋がっています。
    MSX - HDD(560MB?) - MO(230MB) - CD-ROM - ZIP - VAIO

フォーマットのために98ノートを繋ぐのが面倒なので、VAIOでフォーマットしました。
パーティションサイズ512MB、ASPIFORM.EXEでフォーマットしましたが、FAT16パッチで
読み出せません。SHEMで中を見ると、ブートセクタがブロック20hにありました。
そしてFATサイズが・・・100hセクタ。

どうして? 98とDOS/Vの違い? それともフォーマッタのせい?
フォーマッタの説明書に「ASPIFORM.EXEでパーティションの作成・フォーマットした
ハードディスクは、他のSCSIインターフェイスでは、互換性がありません」だって。
なんか他機種はわからないです。

それから、MOのセミIBMフォーマットを試したのですが、変なフォーマットですね。
ブートがセクタ00h、FATの先頭がセクタ08hなんて。
少しフォーマッタの研究をしないと駄目ですね。


11月12日

やりたいことがある時に限って暇がない。dirのスピードアップ、やっと完了です。
ファンクション1BhのFAT読み込み用に、専用バッファを16k確保しただけで
こんなに速くなるなんて。

バッファ用のメモリは、プライマリマッパーから割り付けています。
マッパーサポートルーチンや未使用セグメントが無い場合、エラー表示はしません。
従来通りバッファ無しになるので、遅いです。

FATサイズですが、FFhまで対応してました。
サブディレクトリのクラスタ番号がFF??hの時、どうなるのかな。
ルートディレクトリと間違えるかも知れない。
10GBのHDDが繋がったら、試してみよう。アレ本当に繋がるのかちょっと不安。


11月8日

5月から私のパワーが半減していることに気づいてましたか?
そろそろ引退かなと思ったのですが、まだやることが残っていました。

dirコマンドでディスクの空き容量計算に時間がかかりすぎる。
FATサイズがFFhセクタの時、アクセス出来ないクラスタがある。

dir問題は、FATリード用にセグメントを1枚確保するだけで、だいぶ速くなると思う。
DOS2のBUFFERSを10にするより、別にバッファを取ってFATを10セクタづつ読んだ方が
速いです。1セグメント確保すれば20hセクタ、う〜ん速そう。

ページ2をバッファのセグメントに切り替えたまま、FATのセクタを読み込む方法を
考えました。ファンクション2Fhを使うと、F2C7h〜F2CEhを書き換えない限り
0〜3以外のセグメントに直接リードできません。
MegaSCSIファンクションなら、これが出来るんですよね。以前解析したけど、
訳がわからなくて。もう一度挑戦しようかな。

dirはそれでいいと思います。
FATサイズFFhも大丈夫かも知れない。私、いろいろ勘違いしていたかも。

UltraSCSIのHDD(10GB)を買ってしまった。繋いだ途端に「しまった」なんて。
現在 MSX - HDD - MO - CDROM - ZIP - VAIO の順に繋いでいますがVAIOの
SCSIボードのIDがわかりません。普通は7だそうですが、調べる方法は?


10月23日

最近やる気ないです。なんだろう。
と言いながらMO(230Mb)専用FAT16フォーマッタを作りました。

息子にMOディスクの買い物を頼んだら、アンフォーマットのディスクを
買って来ちゃったのです。Windows用のSCSIフォーマッタを探すの面倒だし、
SHEMでフォーマットするのも面倒。それで作りました。
論理フォーマットすれば良いのですよね。

ブートセクタのWindows用のIPLがわからないので、ディスク情報だけ書きました。
従ってMSXでもWindowsでも起動用には使えません。
MSXしか持っていないけど、FAT16でフォーマットしてみたいときに試してみては。
230MbのMO専用です。

  A>MOFORM d:    ドライブd:のMOを論理フォーマットします。

  A>MOFORM d: /q  ドライブd:のMOをFATとディレクトリだけフォーマットします。

    
FAT16用論理フォーマッタ(230MbMO専用)


10月5日

1ヶ月ぶりの更新です。9月はなんか疲れて、やる気がなかったです。
Club MesxesのMSX Flash(#12?)を見ると、Japanese little girlがFAT16を作っているそうです。

ディレクトリエントリー数はパッチなしでいけますね。MO(230MB)で確かめました。
FAT16フォーマットすると、ディレクトリエントリー数は200hになるみたいです。
Windows95でルートディレクトリが一杯になるまでファイルをコピーしました。Long filenameを
使っていたりで、ルートディレクトリ20hセクタには241ファイルしか入りませんでした。

MSXをFAT16起動、dirコマンドでMOのファイルを表示すると・・・全てのファイルが表示されました。
ついでに一番後ろのファイルを読んでみましたが、正常に読み出せました。

なぜこんな実験をしたかというと、ディレクトリエントリー数ってディスクのブートセクタでは
2バイトで表記されているのに、DPBでは1バイト表記なのです。

パーティションサイズ32MBではエントリ数00F0h、DPBにはF0hが入りますが、230MBでは
0200h,DPBのエントリ数は00hになってしまいます。ちょっと困りますね。
しかし、DOS2は賢いです。ページ2に出すワークバンク内のDPBでは、ディレクトリエントリ数ではなく
ディレクトリのセクタ数を入れるようになっているのです。
なのでFAT16では20hセクタとなり、最後尾のファイルも読み出せるという訳です。


MSX2+、うっかりくん、DOS2 ver2.20を入れたMEGA-SCSIでFAT16を試しましたが、ver2.20は
駄目でした。バンク4,5はSTのAタイプと同じなのに。それともどこか違っている?
結局ターボRのカーネルなら、MSX2+でもFAT16が使えます。
そのかわりDIRが死ぬほど遅いです。


9月4日

3種類のカーネルでテストしました。今度は大丈夫。
FORMATとRAMDISKを潰してパッチを置いたので、MSXCDEX、LUNAのアドレスは完全にフリーになりました。
FAT16使用時にこれらを駐在させることもできます。LUNAはカーネルにパッチあてるので、FAT16を
解除するときは、LUNAのパッチを壊さないようにしています。

他にあのアドレスを使うソフトってあります?


9月3日

FAT16パッチがSTのAタイプ(と勝手に呼んでいます)で動かない原因がわかりました。
あまりにも単純なミスで、恥ずかしいから書くのやめよう。

LUNAとCDエクステンションと同時に使えるようにしました。LUNAがセクター番号を間違えるかなと
思ったのですが、大丈夫そうです。もう少しテストしてからアップします。


9月1日

Mikasen.さんにSTのカーネル(Aタイプ)を送っていただきました。
MGINSTしてFAT16パッチのテストをすると、やっぱり変です。読めるはずのファイルが読めない。
STカーネルAタイプの方、うまく動かないかも知れません。


8月31日

FORMAT(67h)を潰したついでに、RAMDISK(68h)もいらないかなって考えています。
FAT16パッチが駐在している間使用禁止になるだけなので、いらないファンクションがまだまだ出てきそう。
空きスペースが出来れば、徹底的にパッチあてますよ。
ディレクトリエントリ数とか、まだ手を着けていないところがあるので。

DOS2解析しながらFAT16パッチをもう一度考え直しています。
クラスタサイズが大きくなると書き込みがうまくいかないのは、BUFFERのせいだと思っていましたが
そんなことないですね。ファイルの書き込みでDISK BUFFERを使うのは、200hバイト未満の端数を書くときだけですね。
少なくてもクラスタサイズ8Kまでは、正常に読み書きできるはずなので、もう少しがんばろう。


8月30日

LUNA強制解除を付けてみました。でもインストールする順番を間違えると、何にもならないです。
CDEX,LUNA,FAT16の順にインストールし、解除は一番にFAT16、その後はどっちが先でもいいのかな。
動作テストはSTカーネル(Bタイプ)と、GTカーネルで行いました。

STカーネルAタイプでのテストは失敗に終わっています。
Mikasen.さんのMEGA-SCSIのファイルをMGLOADして実験したのです。
MSX SEED11号を読んだ人はわかると思いますが、こんな凄い物私には使えない〜。 

FAT16パッチがうまく動かないのは、カーネルに細工がしてあるからみたいです。
BANK0の4092hにパッチあててますね。他にもあるのでしょう。
解析するより本人に聞いた方が早いですね。でもそれではつまらないので、やっぱり解析かな。

FAT16パッチの弱点: カーネルパッチは早い者勝ち


8月29日

久しぶりにFAT16パッチに手を加えました。CDエクステンションと一緒に使えます。
LUNAをどうしようかな。FAT16側で一時的にLUNAを解除しようかと考えています。
フックとDISK ROMコールを元に戻せば、LUNAは使えないので。

それともFAT16ドライブだけLUNAを解除すれば良いのでしょうか。
そんなこと出来る?


8月19日

DOS2ファンクションコールの67h、FORMATを使用禁止にして、ここにFAT16のパッチルーチンを
置いてみようかと思っています。FA00h〜にルーチンを置くのは危なそうなので。
できれば3E55h〜3FFFhのルーチンも引っ越したいのです。そうすればCDエクステンションと
一緒に使えるし。使わないファンクションコールってないですか?


8月17日

FAT16完全対応のLDIRはとても便利です。/Dオプションが最高にいいですよ。
クラスタサイズが大きくなると、セクタの換算が結構面倒なのです。16進数の計算って苦手。
Tatsuさん、ありがとうございました。

ということで、私はバカな作業に戻ります。
解析するとき私は逆アセンブルリストを印刷して、いろいろと書き込んでいくのですが、
家の中を探してみると12C3h〜3E50h辺りまでの逆アセリストがありました。
すでにDOS2の2/3くらいは解析済みなのです。

解析し直してみると、あの頃理解できなかったところがわかるようになっていたり、
少しはレベルアップしたかも知れない。DOS2っておもしろいですよ。
謎解きだけで十分楽しめるので、改造ソースをアセンブルできなくてもいいです。


8月10日

TatsuさんのFAT16対応LDIRを試してみました。
やっぱりロングファイルネームを表示出来ると便利です。
FAT16パッチは、Windowsで書き込んだディスクをMSXで読み出すための物ですから。

それでFFFFhセクタ以降もなんとか読めないかと、LDIRを逆アセンブルしてみましたが、
Cの作り出すコードって・・・・
LDIRの原理がわからないし、プログラムの解析も出来ない。お手上げ状態です。

それでFAT16パッチに細工をして、FFFFh以降のサブディレクトリも表示出来るようにしました。
ところが今度はルートディレクトリが表示出来なくなって、あ〜ぁ、失敗です。
いっそのことFAT16パッチを作り替えてしまおうか。

本当はDOS2をFAT16専用に改造しようかと。家では似非RAM、FDD以外はFAT16を使っているので。


8月9日

バカなことだと思うのですが、急にやってみたくなったのだから仕方ないです。
私が欲しいのは、DOS2カーネルのうちマッパRAMにコピーされる部分のソース、
HOJAを使ったら簡単にソースファイルが出来ました。これで準備完了。

どうやら本当にやる気みたいですが、これっていけないこと?
個人で使うなら問題ない? 著作権とか版権とか難しいことはわかりません。
書き換えたソースをアセンブルして、MEGA-SCSIで改造版DOS2を使う実験がしたいのです。

でも著作権よりもっと心配なことがあります。家のアセンブラが使えるのかな。
こんな大きなファイルをアセンブルしたことないです。
出来なかったら、ソースを分割してアセンブルしようか。
こうやって色々考えるのが楽しいのですけど、やはり行動に移すのでしょうか。



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