[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[b-free: 1385] Re: HDからのブート




隆一です。


From: Takanori Hayashi <takanori@ohsaki.meidensha.co.jp>
Subject: [b-free: 1381] Re: HDからのブート
Date: Fri, 17 Apr 98 13:37:46 +0900

> 林です。
> 
> In message <19980417100916O.night@soft.hitachi.co.jp>
>    "[b-free: 1377] Re: HDからのブート (Re: Re^2: FD      で bootする方法を教えてください)"
>    "Ryuichi Naitoh <naitoh_r@soft.hitachi.co.jp>" wrote:
> naitoh_r> > BIOSのジオメトリの方が取得が難しいのでしょうか。
> naitoh_r> > INT13に何かなかったでしょうか?
> naitoh_r> > # INT13が使えない?
> naitoh_r> 
> naitoh_r> INT 13 は、16 bit mode 動作時しか使えないので、32bit mode で動いている 
> naitoh_r> 2nd boot では使えないんです。
> naitoh_r> 1st boot は INT 13 を使って 2nd boot を HD からロードしているので、
> naitoh_r> INT 13 は使えるんですがこちらは 512 bytes しかないし。。。
> 
> 32bitコードからINT13をコールするルーティングを2nd bootに実装する
> ってのは手間かけ過ぎですね(^_^;)。あるいはBIOS32を使うか。
> # BIOS32 32bitコードから使えるBIOSインタフェース規格です。
> # しかしBIOS32の使えるBIOSがどれだけあるのか・・・それが問題だ(^^;)

あるいは、BIOS で持っているジオメトリのデータを直接あさるという方法も
あるかもしれません。ただ、BIOS がどこにデータをもっているかが分からな
いとだめですが(BIOS によってまちまちのような気もするし)。


> naitoh_r> calc_N (int cylinder)
> naitoh_r> {
> naitoh_r>   int	N, N2;
> naitoh_r> 
> naitoh_r>   cylinder = ROUNDUP (cylinder, 1024);
> naitoh_r>   N = (cylinder - 1) / 1024;
> naitoh_r> 
> naitoh_r>   for (N2 = 1; N2 < N; N2 = N2 * 2)
> naitoh_r>     {
> naitoh_r>       ;
> naitoh_r>     }
> naitoh_r> 
> naitoh_r>   return (N + 1);
> naitoh_r> }
> 
> これじゃforループの意味が…???
> # 単にゴミが残ってるだけ?


さっそくバグが見つかってしまった :-(
正しくは、return (N2 + 1) ですね。for ループは、計算結果を 2 の累乗に
することを行っています(単に 1024 の倍数ではダメみたいです)。
たとえば、シリンダ数が 3000 のときには、calc_N の結果は、3 ではなく 4 
になります。
(いちいちループするより、もっと簡単な計算方法があるような気もしますが)


p----------------------------------------------------------------------q
| FROM R.Night                                                         |
| E-mail:                                                              |
|         rnaitoh@st.rim.or.jp                                         |
| Key fingerprint = 89 EB 77 95 40 C0 3C CC  37 A1 A7 FA 1C 66 FF D0   |
b----------------------------------------------------------------------d