Last active
August 29, 2015 14:12
-
-
Save akiyoshi83/2d2db3c8f3ff80bcf7a1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; hello-os | |
ORG 0x7c00 ; このプログラムがどこに読み込まれるのか | |
; 以下は標準的なFAT12フォーマットフロッピーディスクのための記述 | |
JMP SHORT entry | |
DB 0x90 | |
DB "HELLOIPL" ; ブートセクタの名前を自由に書いてよい(8バイト) | |
DW 512 ; 1セクタの大きさ(512にしなければいけない) | |
DB 1 ; クラスタの大きさ(1セクタにしなければいけない) | |
DW 1 ; FATがどこから始まるか(普通は1セクタ目からにする) | |
DB 2 ; FATの個数(2にしなければいけない) | |
DW 224 ; ルートディレクトリ領域の大きさ(普通は224エントリにする) | |
DW 2880 ; このドライブの大きさ(2880セクタにしなければいけない) | |
DB 0xf0 ; メディアのタイプ(0xf0にしなければいけない) | |
DW 9 ; FAT領域の長さ(9セクタにしなければいけない) | |
DW 18 ; 1トラックにいくつのセクタがあるか(18にしなければいけない) | |
DW 2 ; ヘッドの数(2にしなければいけない) | |
DD 0 ; パーティションを使ってないのでここは必ず0 | |
DD 2880 ; このドライブ大きさをもう一度書く | |
DB 0,0,0x29 ; よくわからないけどこの値にしておくといいらしい | |
DD 0xffffffff ; たぶんボリュームシリアル番号 | |
DB "HELLO-OS " ; ディスクの名前(11バイト) | |
DB "FAT12 " ; フォーマットの名前(8バイト) | |
TIMES 18 DB 0 ; とりあえず18バイトあけておく | |
; プログラム本体 | |
entry: | |
MOV AX,0 ; レジスタ初期化 | |
MOV SS,AX | |
MOV SP,0x7c00 | |
MOV DS,AX | |
MOV ES,AX | |
MOV SI,msg | |
putloop: | |
MOV AL,[SI] | |
ADD SI,1 | |
CMP AL,0 | |
JE SHORT fin | |
MOV AH,0x0e ; 一文字表示ファンクション | |
MOV BX,15 ; カラーコード | |
INT 0x10 ; ビデオBIOS呼び出し | |
JMP SHORT putloop | |
fin: | |
HLT ; 何かあるまでCPUを停止させる | |
JMP SHORT fin ; 無限ループ | |
msg: | |
DB 0x0a, 0x0a | |
DB "hello, world" | |
DB 0x0a | |
DB 0 | |
TIMES 0x01fe-($-$$) DB 0 | |
DB 0x55, 0xaa |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment