mozyのかきおき

mozyの読書感想文や思考置き場

30日でできるOS自作入門【15日目】

f:id:mozy_ok:20181130220523p:plain

概要

これはMozyの1人アドベントカレンダー 2018 の15日目の記事です。

adventar.org

書こうとした経緯は、こちら

mozy-ok.hatenablog.com

今日の内容

  • bootpack.cを改造して、模様をかけるようにした

今日やったこと

bootpack.c

void io_hlt(void);
void write_mem8(int addr, int data);

void HariMain(void)
{
    int i;

    for (i = 0xa0000; i <= 0xaffff; i++) {
        write_mem8(i, 15); /* MOV BYTE [i],15 */
    }

    for (;;) {
        io_hlt();
    }
}

f:id:mozy_ok:20181215233844p:plain
変わった? (真っ白に変わっている)

試しに、write_mem8(i, 14)としてみたところ

f:id:mozy_ok:20181215233938p:plain
黄色? クリーム色?

うーん確かに変わっている。数字によって変わるってことね。
しかし面白くないので、模様をかけるようにするぞ。
write_mem8の部分を以下のように変更した。
bootpack.c

 for (i = 0xa0000; i <= 0xaffff; i++) {
        write_mem8(i, i & 0x0f);
    }

& はAND演算子のことで、このように番地の値に0x0fをANDすると、番地の下位4bitだけが、そのまま残って、他のビットは全て0となる。こうなると書き込まれる値が、

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00 01 02....

てな感じに繰り返されるので

f:id:mozy_ok:20181215234540p:plain
しましま模様になるぞ

ハマりポイント

特になかったぞ。順調だ。説明が丁寧な本っていいね。

知ったこと

なるほど。こうやって直接VRAMを扱うことで表示を作れたりするのね。
bit演算を考えてグラフィックを作るのも面白いなと思った。
これでどうにかドラえもんとか描けないなかなぁ。