[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