Last active
June 28, 2017 06:44
-
-
Save kencoba/267324bc8ca8d6b4e38e3645f406d6e6 to your computer and use it in GitHub Desktop.
translate nask code in the book "OS自作入門(川合秀実)" to nasm code.
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
; % nasm -f bin -o yohooos.img yohooos.asm -l yohooos.lst | |
; 川合秀実著,「OS自作入門」のコードほぼそのまま | |
; TAB=4 | |
ORG 0x7c00 ; このプログラムがどこに読み込まれるのか | |
; 以下は標準的なFAT12フォーマットフロッピーディスクのための記述 | |
start: JMP entry | |
DB 0x90 | |
DB "YOHOOIPL" ; ブートセクタの名前を自由に書いてよい(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 "YOHOO-OS " ; ディスクの名前(11バイト) | |
DB "FAT12 " ; フォーマットの名前(8バイト) | |
RESB 18 ; とりあえず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 ; SIに1を足す | |
CMP AL,0 | |
JE fin | |
MOV AH,0x0e ; 一文字表示ファンクション | |
MOV BX,15 ; カラーコード | |
INT 0x10 ; ビデオBIOS呼び出し | |
JMP putloop | |
fin: | |
HLT ; 何かあるまでCPUを停止させる | |
JMP fin ; 無限ループ | |
msg: | |
DB 0x0a, 0x0a ; 改行を2つ | |
DB "YOHOO, WORLD" | |
DB 0x0a ; 改行 | |
DB 0 | |
marker: RESB 0x01fe-(marker-start) ; "0x7dfeまでを0x00で埋める命令" だったが、naskとnasmで動作が違うため修正 | |
DB 0x55, 0xaa | |
; 以下はブートセクタ以外の部分の記述 | |
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 | |
RESB 4600 | |
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 | |
RESB 1469432 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment