はりぼて日記
12月 22 (金曜日) 2006 | ||
17:24
|
五日目2
|
|
五日目 〜2。
うーむ。構造体そのものはそんなわけで解っている。structを使って定義し、HariMain内で宣言して使えるようにすると・・・ struct BOOTINFO *binfo; ・・・え”? *binfo? binfoじゃなくて? *? え〜???? ひええぇぇぇ!!! わっかんね〜!!(泣 ・ ・ ・ ・・・ぁ〜 あ〜 あぁ〜!なるほどそういうことか! 前後の読み込みが足りなかった。なるほど。これは、「俗にいう変数宣言」じゃないんだ。極論すれば、「メモリのアドレスに名前をつけて扱いやすくしたい」というだけのことなのか!。勘違いしてた。 ええと、まず、一個前のソースでやってるよね。つまり、 binfo_scrnx = (short *) 0x0ff4; とか。これはどういう意味かって言うと、書き方が特殊なので「あれれ?」と思ったけどなんのことはない。 「メモリ番地 0x0ff4〜0x0ff5(2バイト分)を、binfo_scrnxっていう名前でアクセスできるようにしてくれ」 ってだけのことじゃマイカ。例の「型キャスト&省略」タイプの書き方なのでわからんかった。キャストや省略を無視して書けば、 short *binfo_scrnx; binfo_scrnx = 0x0ff4; と、こうしているだけなんですなぁ。なるほどなるほど。 で!!!! 同じようなことを構造体で一まとめにしてやっちゃおうってわけね。なるほど〜。 ちょっと変則的だけど、私はこんなふうに理解してみた。 たとえば、 struct BOOTINFO binfo; と普通に「binfo構造体」を定義する。その場合、定義どおりに、あるどこかのメモリ番地にbinfo用のエリアが予約される。(これはたぶん、毎回不定のはず。)じゃ、たとえば解りやすく、0x1000に割り当てられたとしよう。そうすると、 0x1000 char cyls 0x1001 char leds 0x1002 char vmode 0x1003 char reserve 0x1004 shor scrnx 0x1005 〃 0x1006 shor scrny 0x1007 〃 0x1008 char *vram (ポインタすなわちメモリアドレス用なので4バイト) 0x1009 〃 0x1010 〃 0x1011 〃 っとまあ、こういう感じになるわけだ。 ・・・・・で!!!!! この、毎回ちがうアドレスに設定される binfo構造体の開始アドレスを、0x0ff0 に強制的に設定したいわけ。(0x0ff0〜12バイトの部分には、asmhead.nasによってグラフィック関係の値がすでにセットされているので)そのための方法が、 struct BOOTINFO binfo; じゃなくて、 struct BOOTINFO *binfo; binfo = 0x0ff0; になるわけだ!(例によって型キャストとかはちょっと省略してある)なるほどなるほど〜!!! シンプルに分解したら、やっと解ったぞ! |
||
(1) 2 3 4 5 6 7 8 9 10 »  |
PopnupBlog V3 Denali created by Bluemoon inc. |