[040424/040428]

メモリ拡張用ルーチンを、先頭セクタに埋め込んでみました  追記あり

PC11032MB拡張メモリを起動/活性化するルーチン(over16sの代理)を、ディスクのMBRやOSのIPL部(?)に埋め込んでみました。
(OSが切り替わっても、トータル・メモリ28MBを維持できないかと思って)

実は、先回のトライ以降、Win2000を、1GBのマイクロ・ドライブ(MD)へCDROMから直接インストールできないか(執念深く)調べているのですが、(CDROMの中身を書き換えずに)インストールするには、28MBを維持しておく必要があり、そのための苦肉の策/案でもあります。

FDやPCHDT(PCカード型HD)では何とか働きますが、拡張メモリ板側に時間遅延回路を入れてあるせいか、MDやCFではルーチンが働き過ぎて目論見通りには行きませんでした。それ以外にも問題があって、結局、CDROMからのインストールは、いずれも未達成。(x_x;?
−−−−−−−−−−−−−−−−−−−−−−−−−
事の次第
あるルートから、「外付けCDROMから、OSがセットアップできるFD」を入手しました。これを使えば、マイクロ・ドライブ側へ「OSの素」を入れておかなくても、素直にCDROMからインストールできるのでは?と考えました。(何せ、これを入れた上に、インストールに空き領域800MB以上を要求されますので、1GBではとても足りないんです)

[1] そこで、まず(DOSNET.INF、TXTSETUP.SIF書き換え済みの)i386をコピーした仮CDROMを作ってやってみました。始めは順調に行くように見えましたが、ところがドッコイ!途中でエラー発生。
次のファイルをコピーできませんでした。
appser~1.cls

なんて警告が出て来ました。慌てて基のCDROMに替えて、これを読ませましたが、後から出るわ出るわ!(xxxx~1.xxx とチルダの付いたファイルは全部ダメ。勘定したら30個以上ありました)
これの結末は...インストール不成功。(途中で止まってしまいました)

[2] 次に、上記の「セットアップできるFD」の先頭セクタ(IPL部?)に、左上図のような「メモリ拡張ルーチン」を手動で書き込んでおきました。
210番地以降を使った理由は、ここはエラー・メッセージだけ(?)なので、本来のプログラムに影響はないと見たからです。
書き込みには清十郎さんEXDEB.EXEを使わせて頂きました。感謝![(_'_)] (SYMDEB.EXEでは、ディスク/CFのセクタが上手く読めなかったため)
この「FD」を使って32MBに設定した上で、基のWin2000のCDROMからインストールを開始。必要ファイル全部を読み込んだ後で、やはり次のようなのが出て来ました。
メモリは、28MB以上必要です。
その段階で、(Win95のコマンドを立ち上げて)mDの先頭セクタに同じようなルーチンを書き込んでみたら、28MBにはなるのですが、何と!繰り返しリセットが掛かって次へ進めませんでした。(これも、最後はインストール不成功)

[3] 上記の段階で、兎に角メモリ・レジスタを手動で書き換えて28MBにしてMDで立ち上げてみたら、今度は次の奴。
File \$WIN_NT$.~BT\ntkrnlmp.exe could not be loaded.
The error code is 4
結局、ここで行き止まり!

詰まるところ、どの方法でも不成功だったという事です。(T_T;?
唯一の収穫は、MBRや先頭セクタにでも、「メモリ拡張用ルーチン(レジスタ書き換えプログラム)」が置けるって判った事くらいでしょうか。(しかし、それにも落し穴がありますが)

拡張用ルーチンと埋め込み場所.

上図は、Win95が入ったディスクのMBRの先頭と後尾の例です。DOSなどでは多少位置や構造、メッセージが英文/日本語など、違っていますが、基本的にはよく似ています。
また、ディスクの先頭セクタ(IPL部?)も、これに類似。

MBR部IPL部も、「メモリ拡張用ルーチン(サイズ決め撃ち型)」の置き場として使えそうです。
(ただし、拡張メモリ板上の遅延回路の遅延時間の関係で、このままでは上手く働きませんが...)

セクタの書き換えや修復
MBR部は、MBRIMAGEでファイルにセーブし、EXDEBSYMDEBで書き替えて、再度MBRIMAGEでリストアしました。
IPL部は、EXDEBで、-l100 2 0 2 や -w100 2 0 2 などとし、100番地以降を使って読み/書きしました。
MBRを元に戻すには、PC-DOSディスクなどで fdisk/mbr とやれば、簡単に戻りますし、また、IPL部は、(ディスク上のOS用の)起動FDで立ち上げて、sys c: とすれば、戻ります。
ただし、修復した後、直ぐに電源スイッチを入れて働かせると、一見消えていないような動作をする事があります。なので、十分本体を休養(?)させてやった後に、電源を入れた方がいいようです。

遅延時間のこと
32MB拡張メモリ板上に形成した(C,R,74VHC32を使った)回路での遅延時間は、およそ数十msecにしてありますが、実際どの程度必要なのかはよく判りません。
現状(autoexec.batでの読み込み)では今の遅延時間で問題無いようですが、MBRに埋め込む場合を考えると、もっと短くしても/した方がいいのかも知れません。

現状でMBRやIPLにルーチンを埋め込んでちゃんと働くのは、FDとPCカード・スロットに差したPCHDTだけ。これは多分、そのセクタを読むまでにある程度時間が掛かり、遅延期間が終わって正常待機状態になっているせいでしょう。
MDCFでは、"繰り返しリセット"が起きます。これは拡張メモリ板の遅延期間中にセクタが読み込まれ、実メモリが拡張されていない状態でチェック・処理しているようです。それで、"サイズ異常"になっているせいだろうと思います。
(拡張メモリ板側の遅延時間を短縮・調整すれば、上手く行くかも知れないのですが、そこまで作業を広げる余裕が無いもので、また別の機会に)

最後に
今回も失敗に終わりましたが、途中またもやみみさん名高さん(現、とふ屋)にはお世話になりました。感謝![(_'_)] (何とか、仕返しを、いやお返しをしたいものですが、力不足ゆえままなりませぬ。何卒お許しを!w(^-^;m)
*追記 [0428]
拡張メモリ28MBは、残念ながら、WinNT,Win2000には受け入れられませんでした。立ち上がり途中で、異常停止してしまいます。
また、Win95,Win98でも、これらをインストールしようとした場合には、途中で異常が発生します。(SUWIN異常) (x_x;?

どうやら、いずれも(真剣に?)ハードウェア・チェックをするためらしいのですが、(今のBIOSを騙す方式では)それをすり抜けられないようです。
ならば、BIOSそのものを書き替えられればいいのですが、(失敗すれば、本体が一巻の終わりになるし、第一、BIOS内容も判らないので)そうも行きません。
従って、この28MB拡張メモリは、Win95,OS/2,そしてLinux(それに多分Win98も)での"アプリケーション専用"と言えそうです。或いは、無難に考えるなら半分の16MB(トータル20MB)で使う事でしょうね。
C(pF)正否
104
×
154
×
174
×
204
×
224
474
尚、遅延回路のキャパシタCを替えて、「正常に28MBになる遅延時間(*注:下記)」を調べてみました。が、よく考えると、使うCFのタイプによって応答時間なども変わるので、データはあまり役に立ちそうにありません。
しかし、折角採ったデータなので、一応表にしておきます。(丸印が、正常に28MBになるC値)

本体クロックは40MHz、OSはPC-DOS、実験CFは16MB(メルコRCF-X)、抵抗Rは1MΩ、キャパシタCを10nF〜50nFの範囲で変更して、結果は右表。C・R積=約22msec辺りが、この場合の閾値のようです。

*注:遅延時間=「BIOSがメモリ・チェックをする間、32MBの内の上位半分16MBを遮蔽(目隠し)しておく時間」の意。

遅延回路の例


[表紙頁]へ  関連記事の目次へ  [一言板]へ