あんたいとる

無駄の中に宝がある!

30日でできる! OS自作入門(五日目)

構造体と文字表示とGDT/IDT初期化

新しく学んだ知識

構造体

struct BOOTINFO {             /* 構造体名 */
    char *vram;              /*構造体のメンバのデータ型 */
    int xsize, ysize;
     ...
};

struct BOOTINFO abc;        /* 構造体 BOOTINFO型の変数 abcの宣言 */
struct BOOTINFO *abc;       /* 構造体 BOOTINFO型を指すポインタ変数 abcの宣言 */
abc = (struct BOOTINFO *) 0x0ff0;

文字表示

extern char hankaku[4096]; で文字を外部から読み込むようにしてから、画面に文字が表示されなくなった。
hankaku.txtを makefont.exeで hankaku.binに変換し、その次に bin2obj.extで hankaku.obj に変換する箇所が上手く変換出来ていないように思う。
原因の追究はあきらめてhankaku.txtをC言語に変換したファイル というのがあったので、このファイル(hankaku.c)を hankaku.gas→hankaku.nas→hankaku.objへ変換する方法で対処(あわせてMakefileを修正)。

spintfの使い方

#include <stdio.h>
sprintf(番地, 書式, 値, 値, 値...)
書式で使える指定  説明
%d ただの10進数
%5d 5桁で10進数。123だったら" 123"のようにスペースを入れて5桁にする。
%05d 5桁で10進数。123だったら"00123"のようにゼロを入れて5桁にする。
%x ただの16進数。 アルファベット部分はabcdefを使う。
%X ただの16進数。アルファベット部分はABCDEFを使う。
%5x 5桁で16進数。456だったら" 1c8"のようにスペースを入れて5桁にする。
%05x 5桁で16進数。456だったら"001c8"のように ゼロを入れて5桁にする。

GDT/IDT初期化

用語  説明
GDT global (segment) descriptor tableの略。メモリのどこかにセグメントの設定を並べて、その先頭の番地と有効設定個数をCPUのGDTRという特別なレジスタに設定する。
IDT Interrupt descriptor tableの略。割込み願望0-255に対して発生時に呼び出す関数を設定している表。

5日目の感想

プログラムを打ち込んでいるだけで、理解はできていない。
30日ではとても終われそうにない。