メモ:「30日でできる!OS自作入門 」3日目
IPL - Initial Program Loader (初期プログラムローダー)
MBRから次のセクタを読む
MOV AX, 0x820
MOV ES, AX ; Buffer
MOV CH, 0 ; Cylinder 0
MOV DH, 0 ; Head 0
MOV CL, 2 ; Sector 0
MOV AH, 2 ; Disk Read, 3 write, 4 verify, 0x0c seek
MOV AL, 1 ; sector count 1
MOV BX, 0
MOV DL, 0 ; A drive
INT 0x13 ; Disk BIOS Call
JC error
JC = Jump if carry
ES:BX = ES x 16 + BX
Retry 処理追加
MOV SI, 0
retry:
....
ADD SI, 1
CMP SI, 5
JAE error ; 5回以上はエラー
MOV AH, 0
MOV DL, 0
INT 0x13
JMP retry
18 セクタ読む
readloop:
...
JNC next ; 読み取りOKなら、次のセクタ
...
next:
MOV AX, ES
ADD AX, 0x200 ; 1セクタ 512 バイト
MOV ES, AX ; ES += 512
ADD CL, 1
CMP CL, 18
JBE readloop
ヘッド2つ分とシリンダ10個分読む
CYLS EQU 10
....
JBE readloop
MOV CL, 1
ADD DH, 1
CMP DH, 2
JB readloop
MOV DH, 0
ADD CH, 1
CMP CH, CYLS
JB readloop
harib00e の ipl.nas と haribote.nas で haribote.imgを作成
- 0x2600 で HARIBOTESYS というファイル名
- 0x4200 で ファイルの中身
harib00f
- ORG 0xc200 を指定して、 IPL から 0xc200 に JMP
harib00g - Video Mode
MOV AL, 0x13 ; VGA, 320x200x8bit
MOV AH, 0
INT 0x10
これで真っ黒な画面を出すことが出来ました
qemu-system-i386 -drive format=raw,file=haribote.img,index=0,if=floppy
0x13 と 0x6a で qemu の画面サイズが変わることを確認
32bit mode
-
32bit モードでは BIOSは利用できない(初めて知った)
VMODE EQU 0xff2
SCRNX EQU 0xff4
SCRNY EQU 0xff6
VRAM EQU 0xff8MOV BYTE [VMODE], 8
MOV WORD [SCRNX], 320
MOV WORD [SCRNY], 200
MOV DWORD [VRAM], 0xa0000
LED の状態を取得
LEDS EQU 0xff1
MOV AH, 2
INT 0x16
MOV [LEDS], AL
C言語導入
- harib00i
cc1 → gocc1plus (c to gas compiler)
gas2nask (gas to nas compiler)
nask で (nas から obj)
obj2bim (obj からbim)
以下のエラーで遭遇
Warning : can't link _HariMain
bootpack.nas の __Z8HariMainv を _HariMain に手動で修正w
bim2hrb (bim to hrb)
copy /B asmhead.bin+bootpack.hrb haribote.sys を
cat asmhead.bin bootpack.hrb > haribote.sys に修正
qemuでBootできた!
- harib00j は io_hlt という関数をアセンブリで書いて C から呼び出すだけ
io_hlt も manglingされてたので手動で修正
asmhead.nas にもいろいろ実装されてるがあまりみれていない。
Author And Source
この問題について(メモ:「30日でできる!OS自作入門 」3日目), 我々は、より多くの情報をここで見つけました https://qiita.com/S-YOU/items/4f2160cf41adf614efc8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .