実験パート8

2001年5月13日 〜 12月30日


12月30日 できました。turbo-RでATA-IDEをマスターにして、FAT16ドライブから起動できます。 IDEのBIOSは結構謎だらけで、turbo-R内蔵のDiskROMには勝てるのに、MegaSCSIには負けます。 MegaSCSIと一緒に使うときは、小さい番号のスロットにMegaSCSIを挿さないと、MSXが フリーズします。もう少し動作テストして、パッチは来年作ります。 皆様、良いお年をお迎え下さい。
12月29日 マスター乗っ取りの仕組み、わかったような気がします。 FD99hが00の時だけ、無条件でそのI/FがH.RUNCの設定・システムセグメントの割り付け等を する。01〜7Fならバージョンを比較して大きい方のI/Fが各設定をし直す。ですか? FD99hにはディスクI/Fの数が入ることになる? 他のカートリッジも含まれるのでしょうか。 何となくわかったところで、IDE I/Fパッチに挑戦します。 その前におせち料理に挑戦かも。
12月28日 T博士からMegaSCSI情報をいただきました。感謝です。博士は気付いているかしら。 DOS ver2.20でも3ヶ所書き替えるだけでver2.3xに勝てるのです。MegaSCSIの2.20は turbo-Rに挿してもMASTERになれるのに、ATA-IDEの2.20は同様に書き替えてもMASTERに なれません。調べてみたら、IDEではDOSバージョン比較ルーチンに行ってません。 H.RUNCの設定をしないので、他のDiskROMに負けてしまう? turbo-Rのカーネルに入れ替えるか、バージョン比較ルーチンを実行するようにパッチを あてるか。パッチの方が簡単かな。
12月24日 tRにIDEインターフェースだけ差して起動すると、MASTERは内臓DiskROMのスロットに なるのですね。普通のver2.20の場合、DOSのバージョン比較にパッチあてるだけでは MASTERになれないのですね。T博士が昔おっしゃっていたのは、このことですか。 MegaSCSIとATA-IDEの両方を持っている人なら、8ドライブでFAT16が使えますが、IDE だけ持っている人は起動ドライブはFAT12のままですね。どうしましょう。 MegaSCSIがMASTERを乗っ取る仕組みを探って、IDEにパッチをあてる? たぶん企業秘密でしょうから、T博士にお聞きしても教えていただけないでしょうね。 H.RUNCですか。この部分、昔から理解出来なかったところです。 気合いを入れて解析しなければ。でも大掃除もしなければ。
12月21日 FAT16ドライブからの起動、できました。 DOS2ではブートセクタの +20hに'VOL_ID'の文字列があるとき、DOS2ディスクと判定され ます。FAT16フォーマットではブートセクタの +20hから、セクタ総数が書かれているので、 この判定方法ではDOS1ディスクになってしまいます。 DOS1とDOS2を区別する方法を変えてみました。ブートセクタの +1Ehが18h(JR xx)に なっていたらDOS2。ちょっと変ですか?でもうまく行きましたよ。 MegaSCSIでは8ドライブでFAT16が使えることになります。次はいよいよATA-IDE。 それが成功したら、RAMDISKとFORMATをどうするか考えます。 難しいことはいつも後回し。 ・追加実験 MegaSCSIで2GBのパーティションから起動できました。 MSX-DOS ver 2.20/2.30を使いましたが、両方ともOKです。 ATA-IDEのFAT16パーティションからの起動は、DiskBASIC ver 2.0になってしまいます。 IDEインターフェース内蔵DOSは、ver 2.20です。実験にはtRを使っているので、MegaSCSI ATA-IDEともver 2.20を使うときは、こちらがマスターになるようにパッチあてています。 同じDOSを使っているのに・・・FAT16パッチはDOSのバージョンでパッチするアドレスが 違うだけで内容は一緒です。すると両者の違いはインターフェース用のパッチですね。 MegaSCSIの勝ちみたい。
12月20日 MegaSCSIで起動ドライブを変更する方法、T博士に教えていただきましたが、なんかうまく 変更できません。仕方なくカーネル書き替えでBドライブから起動できるようにしました。 FAT16パッチ済みMegaSCSIで、FAT16ドライブから起動する実験。 その1  Aドライブ: 似非RAMディスク  Bドライブ: MO(FAT12)  BドライブのMOからDOS2起動できました。 その2  Aドライブ: 似非RAMディスク  Bドライブ: MO(FAT16) DiskBASICが起動、デフォルトドライブはA:でした。 FAT16なMOのブートセクタが読めないのかな。デフォルトがAドライブというのが変かも。 ドライブ変更パッチにたどり着く前に、問題が発生しているかも知れません。 明日DOS2解析します。
12月18日 パッチが無効にされてしまうのは、やはりT博士の陰謀でした。 FAT16ドライブから起動する実験をしたいのですが、MegaSCSIではHDDから起動する方法が わからないし、ATA-IDEではHDDをFAT16フォーマットする方法がわかりません。
12月16日 FAT16パッチはDIR用バッファに16KBのマッパーRAMセグメントを使用します。 MEGASCSI直パッチでは、MSX起動時にシステムセグメントを1枚多く割り付けることに なります。システムセグメントの割り付けは、MEGASCSIのBANK02、495Chルーチンなので、 ここにパッチをあててみました。ところがT博士の陰謀なのか、DOS2開発者のせいなのか わかりませんが、このルーチンは書き替えても元に戻されてしまいます。 仕方なくBANK02の410Fhルーチンに、セグメント割り付け&割り付けテーブル書き替え パッチを仕込みました。 DRAMモード、ROMモードの両方で動作テストしましたが、システムセグメントの割り付けは うまくいきました。MSXの起動乗っ取りって気持ちいいですね。
12月15日 MEGASCSIカーネルに直接FAT16パッチをあててしまう計画、うまくいってます。 これはサンライズのATA-IDEユーザーのために実験しているのです。 ATA-IDEはAドライブがいきなりHDDだったり、そうするとHDDをFAT12とFAT16のパーティ ションに分けないといけないし、けっこう使いにくいです。 それでMSX起動時から、両方のFATシステムに対応できるようにしてみました。 FORMATの外部コマンド化は面倒です。フロッピーディスクのFORMATって必要? やっぱり無いと困るね。DOS2ファンクションの67hルーチンをそのまま使おうと思ったの ですが、やたらにサブルーチンをコールしているので、切り取るわけにも行かないし。
12月14日 MEGASCSIにパッチあてて、MSXを起動したときからFAT12/FAT16の両方が使えるように してみました。FORMATとRAMDISKは外部コマンド化する予定。
7月23日 最近は何もしていません。CPパッチの説明書も書いてないし、MM解析もそのまま。 この部屋には冷房が無いので、日中は蒸し風呂状態。思い切って涼しい部屋に引っ越し したら、側でテレビをかける人がいて集中出来ない。しかたなく蒸し風呂に帰りました。 夏の間MSXが使えないと困るので、コジマで安売りのエアコン買っちゃった。 取り付けに1週間かかるらしいけど、そしたら復活できるかな。 DOS2のファンクションコールで、各ファンクションに行く前にドライブ番号を知る方法 ないかしら。CDエクステンションでやっていたような気がするけど。
7月4日 CPパッチ、一応完成です。 存在しないパーティション番号を指定すると、'Illegal partition number'のエラーに なります。単純にパーティションリンクの終わりを見つけてエラーにしているだけです。 フォーマッタによってはパーティションリンクの構造が違っているかも知れません。 なので正常動作しないこともあります。 MM解析しよう。
7月2日 CPパッチは、SFORM2で似非ASPIフォーマットしたディスク・他機種でフォーマットした ディスクのときは、セクタ0からパーティションのリンクをたどって行きます。 SFORM2で普通のフォーマットのときは、従来通りMEGASCSI.TBLのファイルを読みます。 これで一件落着と思ったら・・・存在しないパーティションの番号を指定してもエラーに なりません。 100MBのZIPに32MBのパーティションを3つ作りました。似非ASPIなのでパーティション0は ダミー、パーティションは1〜3が使えます。CP-004.COMでパーティション番号6に切り替 えると'Illegal partition number'のエラーを出さずにパーティション3に切り替えてしまう。 CPパッチではパーティションの番号分リンクをたどっているだけなので、セクターさえ読め ればエラーにはならないのです。困ったね。 切り替えたパーティションの先頭がブートセクタならOKとか。 ブートセクタかどうかを見分ける方法は? 'MEGASCSI' 'FAT12' 'FAT16'の文字を探す?
6月25日 MMを少しだけ解析しました。問題のパッチをあてた部分です。 Sort結果が書き込まれない原因はわかりましたが、解決法がいまいち。どうしようかな。 ファンクション31hでディスクパラメータを獲得した後の処理なので、FAT16 ver0.09が 常駐していれば簡単にFAT16ドライブを見分けて、CD-ROMドライブと同じルーチンに飛ば すこともできます。 でも他機種でフォーマットしたFAT12ディスクでは、ディレクトリエントリ数が0200hに なるので・・・大丈夫なのかな。MMのセクタアクセスは、ディレクトリエントリ数00FFh 以下で正常動作するような気がします。 セクタ直読み書きルーチンにパッチをあてるのは至難のわざ。
6月22日 MM.COM ver2.07のパッチですが、見直す必要が出てきました。 パッチ済みのMM上でSort結果を書き込んでも、ディスクに書き込まれません。 これは随分前にMikasen.さんから指摘されていましたが、そのままにしていました。 Sortってディレクトリを並べ替えて、ディスクのディレクトリに書いてしまうのですね。 凄い。MMパッチは、全てのドライブでCD-ROMドライブと同様なファイル表示にしています。 そうするとディスクに書けないのですね。なんかわかったような気もしますが。 MM解析しなくちゃ。
6月21日 CPパッチ(CP-003.COM)で不具合が見つかりました。  [GRAPH]+[ESC]でMEGASCSIのテーブルを初期化、ESET.COMでドライブを割り当てた  状態で CP-003 B: のように実行すると、MSXがハングします。  同じ状態で CP B: の場合は current partition = ?? と表示されます。 Current partitionの表示では、MEGASCSI.TBLのファイルからドライブ登録テーブルと 同じデータを探しています。見つからない場合、256回ファイルから探しますが、 普通はMEGASCSI.TBLのファイルサイズを越えてしまい、エラー(??)になります。 CP-003ではファイルを読むわけではないので、エラーになりません。256回も探し ていると、延々とディスクアクセスしています。 探す回数を5回に減らしたら、current partition = ?? と表示されました。 CPパッチはまだまだ改良が必要ですが、しばらくは CP-003a.COMで様子を見ることに します。
6月18日 FAT16パッチver0.09とCPパッチを再アップしました。
6月17日 ver0.09動作不良の原因がわかりました。家のアセンブラです。 bit 7,(ix+1dh)がアセンブルできない事をすっかり忘れていました。 欠陥バージョンを使うと、セクタ番号が010000hより大きいとき、ファイルの半端な部分が 正常に書き込まれません。そうとも知らず欠陥バージョンを使ってver0.09をMOにコピー したので、しかもMOはセクタ039B6Chあたりに書き込むことになるので、ver0.09の最後 の部分は完全に破壊された状態。それをアップしたので使った方は異常動作、うちでは動 いているので動作不良に気付かない。 原因がはっきりしたので、なおしますね。 下の文章、MMを疑ったりしてごめんなさい。
6月15日 ver0.09ですが動作不良の報告が入っています。 問題のGTカーネルで試したのですが、家のSTでは正常にファイルアクセスできるので、 原因がわからず困っています。環境の違いなのかな。他の人はどんな環境で使っているの だろう。というわけで、昔MikasenさんにいただいたMEGASCSIのイメージを使ってみました。 Mikasenさんの環境でver0.09を使うと、FAT16ドライブで地下3階くらいのsub directory が読めません。FAT16ドライブのディレクトリ表示で、ロングファイルネームの残骸?が 表示されます。 MMを私が使っている物に差し替えると、両方の現象が直りました。 MikasenさんはMMを便利に使いこなしていたはず。便利にしちゃうとFAT16パッチとぶつ かる?
6月13日 先日アップしたFAT16パッチver0.09ですが、もしかしたらファイルが違っていたかも知れ ません。tRのST、GTカーネルで動作テスト済みのファイルに差し替えました。 230MBのMOをSFORM2.COMでフォーマット(似非ASPIではない)、何の実験でしょう。 VAIOで読んだとき、どのパーティションが表示されるかの実験でした。どこだと思います? パーティション0は認識されません。パーティション1は表示されますが、フォーマット してないと言われてしまう。普通に読み出せるのはパーティション2から最後まで。 SFORM2.COMで普通にフォーマットすると、パーティションのリンク情報が変でしょ? リンクをたどってパーティション切り替えすると、パーティション0と1は表示できなく て正解みたいです。
6月12日 CP.COM ver0.09aのパッチ版(試作品)です。MEGASCSI.TBL読み出しルーチンにパッチをあて てます。 このパッチでは似非ASPIではないディスクが、パーティション切り替えできません。 MEGASCSI用のCP.COMとFAT16用のCP16.COMを一緒にしたくて作ったのに。 SFORM2にもパッチあてるとか。だって似非ASPIじゃないフォーマットって、リンク情報が 変ですもの。 それともリンク情報が変なディスクだけ、MEGASCSI.TBLを参照する? 色々考えたら、似非ASPIじゃないフォーマットは素直にMEGASCSI.TBLを読んだ方が良いで すね。 実験中に気付いたこと: ・DOSドライブ登録テーブルのブロック数が、何かのはずみで 00 00 00に書き換えられて しまうと、CPが使えません。こうなったとき、自動で修復してくれるといいですね。
6月11日 CPパッチ、できました。 似非ASPIフォーマットでMEGASCSI.TBLを削除したMO、WindowsでフォーマットしたFAT12, 16混在のHDDでテストしましたが、順調にパーティション切り替えできました。 今のところcurrent partition表示も大丈夫そうです。
6月4日 ver0.09をアップしました。次はCPですね。 ATA-IDEで使えるかどうかのテストをしました。 IDEFDISK.COMでのフォーマットは、ブートセクタにFATシステムの種類を書き込むので、 ver0.09でも使えます。なので、MegaSCSI onlyを消した物に変えておきました。
6月3日 ver0.09のドキュメントを書かなければ。その前にCP.COMパッチを作らなければ。 暇な主婦だったのに、最近は時間を仕事に奪われてしまうので。時間を奪う物がもうひと つありました。足し算クロス。子どもがゲームしている間の暇つぶしにちょうど良いので すが、おもしろくってつい家でもやってしまう。そして連珠。このゲーム、MSXを相手 にしているとは思えないです。機械相手に熱くなってもしょうがないのに。 ver0.08からの変更点  オプション無し ・・・FAT16インストール /R ・・・ FAT16切り離し  /D ・・・ ドライブ情報  /H ・・・ ヘルプ
6月2日 FATの判別方法について、2人の方からアドバイスをいただきました。 ありがとうございました。こんな感じにしてみました。
6月1日 久しぶりのバージョンアップです。 FAT16パッチver0.09は他機種でフォーマットしたFAT12にも対応しました。 といっても、FATの判別をブートセクタに書かれた'FAT16'の文字を探す方法に変えただけ です。なのでフォーマッタがFAT12とかFAT16とか書いてくれないと使えませんが。 FAT12とFAT16の判別は、データセグメントのディスク情報書き込みルーチンに仕込みまし た。FAT16ドライブではメディアIDのbit7を0にします。これはデータセグメントだけ で、ページ3のDPBに書き込まれるメディアIDは、ブートセクタのメディアIDと同 じ物です。 FAT16パッチのソース見たの何カ月ぶりだろう。完全に忘れてます。 マシン語のわかるおばあちゃんを目指すのは大変そう。
5月21日 CP16にCP.COMの機能をプラスしようか、CP.COMパッチでFAT16にも対応させようか迷って います。でもCP.COMにパッチあてたほうが安全な気がします。早速CPの解析。ソース無い からね。ソースがあったとしても、たぶん意味がわからない。
5月19日 FAT12、FAT16共通のPartition changerのテストをしました。 使用したフォーマッタは下の4つ、HDDはLogitecのUltraSCSI対応10GBです。   SFORM2.COM(似非ASPI) ・・・・・・MEGASCSI専用FAT12フォーマッタ   Logitecのディスクフォーマッタ・・・FAT12 〜 FAT32までのフォーマットができます   LogitecのSCSI disk formatter ・・・32MB以下のパーティションもFAT16になってしまう   I-O DATAのASPIFORM.EXE  ・・・・・FAT16、FAT32専用 テストの結果1〜9までのパーティションは全て切り替えできました。 パーティションFFまで対応すれば、MEGASCSI.TBL無しでパーティション切り替えできます。 その気になったところで一気に作ってしまいたいのですが、CP.COMを改造しても良い? CPって[/F /W /I]なオプションが使えるの?知らなかった。 対応していないフォーマッタのために、パーティションの先頭ブロック指定は残しておこう。
5月18日 FAT12、FAT16共通のPartition changerを作りました。CP16.COMに手を加えただけなので、 HDDのパーティション1〜9だけの対応です。本物のCP.COMはwrite protectとか設定でき ますけど、こちらは何も無し。 パーティションってFFまであるの? そこまで使う人いる?
5月17日 I-O DATAのSCSIボードに付いていたASPIFORM.EXEというフォーマッタを使ってみましたが、 パーティションのリンク情報ってフォーマッタ毎に微妙に違いますね。 CP16.COMはLogitecのディスクフォーマッタ専用かも知れません。 手持ちの3つのフォーマッタの内2つは、パーティションのリンク方法がSFORM2とほぼ同 じ。どうやら愛用しているフォーマッタが特殊だったようです。FAT12〜32までのフォー マットが出来て、便利なのだけど。 さて、どうしよう。フォーマッタの判別・・・ SFORM2フォーマットは、ブロック0にMEGASCSIの文字列が書き込まれるので区別できるけど。
5月16日 FAT12、FAT16共通のパーティション切り替えツールを考えています。(考えているだけ) HDDはFATの種類に関係なく、ブロック0からリンクをたどっていけば切り替え出来るはず。 ZIP(100MB)も出来そう。MOは・・・出来るね。じゃ、作れるかな。 後はWindowsでフォーマットしたFAT12をFAT16と間違えないように、FAT16パッチをバー ジョンアップ。それが一番難しそう。だってFAT12とFAT16の見分け方がわからない。 総クラスタ数とFATのセクタ数あたりから判別できる?
5月13日 FAT16パッチ関係に手を着けるのは久しぶりです。 1台のHDDを、FAT12とFAT16のパーティションに分けて使う方法を質問されました。 MSX用のFAT16フォーマッタが無いので、こんな時は困りますね。 私なら・・・Logitecのディスクフォーマッタで、FAT16のパーティションを作成、次に MSXを起動してSHEMでFAT12パーティションを作成。この方法で作ったFAT12パーティ ションは、CP16.COMで切り替えることになりますが。 ある方の実験 SFORM2.COM(Ctrl+Stop)でFAT12パーティションをひとつだけ作成、メルコのハードディス クユーティリティーでFAT16パーティション作成。FAT12はCP.COMで、FAT16はCP16.COMの ブロック指定で切り替える。 面白いなぁと思ったので、真似して10GBのHDDをSFORM2.COMでフォーマット。止め損なっ てパーティションを255個作ってしまった。SFORM2(ASPI)でフォーマットしたHDDを、 Windowsなどで読むときは、ブロック0からパーティションのリンクをたどって行くわけ でしょ。試しに、あるパーティションのブートセクタからリンク情報を消してみると、 Winでその先のパーティションが表示されなくなった。 CP.COMもパーティションのリンクをたどる方法にすれば・・・ MEGASCSI.TBLが無くてもパーティションの切り替えが出来るのでは。 そうすればWinでフォーマットしても、MSXでフォーマットしても、同じパーティション 切り替えツールが使えて便利な気がします。 実験の続き。 SFORM2フォーマットの残りを、LogitecのSCSIディスクフォーマッタでFAT16フォーマット。 この方法、よくわからないけど危なそうです。何だろう、リンクの書き方が違うのかな。 パーティション 容量  開始ブロック Partition 1 4MB 0014h Partition 2 32MB 2014h Partition 3 2047MB 3F00h Partition 4 2047MB 3FFB04h LogitecでフォーマットしたPartition 3の開始ブロックが変です。これではPartition 2が 壊れてしまいます。う〜ん、フォーマッタの違いか。
FAT16開発日記に戻る

トップページに戻る