OS自作入門-4日目

今日のタイトルは「C言語と画面表示の練習」
ほうほう。。。まぁ見たまんまの内容だな。
ちなみに飯(まんま)で変換できるんだが。。。IMEの仕様か?


さらっと眺めてるとVRAMにC言語から書き込もう!!ってな感じらしい。
で、当然C言語にはメモリに直接書き込む関数がないからアセンブラで書こう。
。。。ん?いやポインタとmalloc関数で書き込めるやん。mallocは違うのかな。


アセンブラはCPUの仕様によって使える命令とレジスタが変わってくるらしい。
ふーん。そりゃまぁそうかな。

8086→80186→286→386→486→Pentium→PentiumPro→PentiumuⅡ→...

が、インテルのCPU家計図らしい。ちなみに私は486ぐらいからしか聞いたことが無い。
んで、VRAM直接書き込む関数を作ってかきかきかき。。。


おぉ白い画面が。。。とりあえず、Windows色に変えてみる。。。16色だから3ぐらいかな。
こんなんね。

で、フィルタかけて。。。マスクって言うのかな良く分からんけど。しましまが出来ました。


次は、ポインタです!!C言語で私も初めに挫折しました。だって難いんだもん。
適当に真似してたら、見かけ上うまくいってて今に至ってるけど実はまだ理解してない罠。
ところがどっこい(いつの人だ)ポインタの考えをアセンブラに直すとすんげー分かりやすい。
てか、世の中のポインタ話は全部アセンブラで書き直せと声を大にして言いたい。
下は一般に配列って言われてるやつね。

i[2] → 2[i]

さて、皆さんはこれが等しいと思う?まぁこんな聞き方してるんだから等しいんだろって?
まぁ等しいんだけどさ。
これ、普通のC言語本だと絶対NGって理解するよ。てか私もNGだと思ってたよ。
でもね?

i[2] → *(a+2)
2[i] → *(2+a)
*(a+2) == *(2+a)
∴i[2] == 2[i]

なんかちょっと数学思い出したけど、まぁこうなるわけですよ。OK?
えーちなみにこの話は文章で本に書いてます、その辺はご勘弁を。


ついにCPUから各デバイスに命令を送れるようになった!!
まぁこれもなんか専用のレジスタがあってそこを利用するらしい。
もちろんC言語からはデバイスにIN,OUT出来ないからアセンブラ


で、これを利用してVRAMにかきかきかき。。。でけたーーーーー!!!

ふははは、怖かろう〜〜〜!!(イヤナニガ?)