PC-9821Ap/U2でFreeBSDを使う


動機

数年前、知人が私的に催している企画のページを担当することになりまして、こちらも含めてHTML書きに四苦八苦しています。んで、勉強ついでにCGIやら何やらも書きたいと思い、練習のためにFreeBSD(98) Rev.4.4をインストールしてみました。最近ははやらないですが(皮肉)サーバーに実際にプログラムを実行させてデバッグするわけには行かないので。ちょうどルーターにもつながっているのでCGIデバッグ用のローカルサーバに仕上げてみました。
Apにした理由は

です。
 まあ、いばることではないのですが、インストール時に事故りまして(滝汗)わざわざしょうも無い事件の顛末を述べる次第です。不具合とは、Windows95では正常に動くのに、mfsrootFDを入れた後のデバイス表示のときに、<ISA bus on motherboard>という表示が出たところでハングアップするというものです。Apでは使えないのかとも一瞬思いましたが、そんなことがあるわけもなく、違うバージョンのFreeBSDで動作報告もきちんとあります。そんなもので何が原因かわからず、コンフィグレーションでいろいろドライバを外したりしても結局同じで、問題の切り分けのため、ボードを色々抜いたり、CPUを元に戻したりしてみたりして見たところ、IF-2769が原因でした。
 ではIF-2769はFreeBSDでは使えないのかというと、そうではなく、違うバージョンのFreeBSDでは動作報告もきちんとあります。98stationの資料を見ると、ディップスイッチの設定がありまして、これにお世話になってみると、PnPが無効になっていなかったみたいで(汗)、こいつがくさそうです。具体的にはSW1-1(ON:PnP無効/OFF:PnP有効)を1-2(ON:BIOS-ROM有効/OFF:BIOS-ROM無効)と同じくします。こうすると、さっきまでの苦労が嘘のように解決しました。それでもDOSやWindowsでは動いてるから原因究明上困ったもんだ(汗)。

IDE-BIOS書き換え後の手当て

PC-9821Ap/U2のROM書き換えで書きましたように、IDE-BIOSを書き換えて6Y080L0(Maxtor)という80GBのIDE-HDDに載せ変えました。Windows95とDOSにそれぞれ2GBずつ割り当て、後ろにFreeBSD(98)Rev4.9をインストールしようとしたんですが、お〜い、8GB認識になっとるぞ(T_T)。勘弁してよー。ったく何で全パラメータをINT 1Bh Func.84hから取得せんのじゃ。HDDが使い切れんぞ。さて、どうしたものか・・・。いつ頃からかは分からないんですが、ATAドライバではAp/U2ではハングアップするので、wd.cを使うしかないんですよね。wd.cをいじらないとだめと。lbasizeとか言うのがwd.cの中にあってそこから割り算でシリンダ数を取得しているようなので、lbasizeの取得方法を追っていけばいいことになります。書きなおしたのは「for larger than 40MB」付近で、以下のようにしたところ、起動時に80GBと認識されるようになりましたとさ。(^o^)/

#ifdef PC98
	/* for larger than 40MB */
	{
	  long cyl = wp->wdp_cylinders * wp->wdp_heads * wp->wdp_sectors;

	  if ( du->dk_unit > 1 ) {
		if(cyl<17*8*65536){	
	 	 wp->wdp_sectors = 17;
		 wp->wdp_heads = 8;
		}
		else if((cyl=wp->wdp_lbasize)<(wp->wdp_heads * wp->wdp_sectors * 65536)){
		}
		else{
		 wp->wdp_sectors = 255;
		 wp->wdp_heads = 16;
		}
		
	  } else {
		 wp->wdp_sectors = bootinfo.bi_bios_geom[du->dk_unit] & 0xff;
		 wp->wdp_heads = (bootinfo.bi_bios_geom[du->dk_unit] >> 8) & 0xff;
		 if(wp->wdp_sectors > 17){
			cyl = wp->wdp_lbasize;
		 }
	  }

	  wp->wdp_cylinders = cyl / (wp->wdp_heads * wp->wdp_sectors);
	}
#endif