FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

「30日でできる!OS自作入門」を読み始めた (1. 0日目、1日目、2日目)

遅まきながら、「30日でできるOS自作入門」を読み始めた。

といっても実は私が高校生くらいの時に購入して、GUIをいじりだしたあたりで挫折した記憶のある書籍である。 今回満を持してリベンジである。

30日でできる! OS自作入門

30日でできる! OS自作入門

第0日、第1日の内容は、まあ慣れていることもあって理解できる。

第2日目のあたりで、IPLは理解はしているつもりだけど人に説明できるかというと怪しいので、少し掘り下げて理解しておきたい。 まだ一行も手を動かしていないけど。

Raspberry-Piとか、RISC-Vの実装とかも絡めていければいいかなと思っている。 UNIXの動作の何たるかについては、「はじめてのOSコードリーディング」を一応読破したので、「意味不明!」ということは無いはず。

どれくらい時間がかかるのかわからないけど、頑張ろう。

はじめてのOSコードリーディング ~UNIX V6で学ぶカーネルのしくみ (Software Design plus)

はじめてのOSコードリーディング ~UNIX V6で学ぶカーネルのしくみ (Software Design plus)

3日目のブートプログラム

helloos.nas を作って、実行した。実行環境は、 Ubuntu 上で nasm と qemu-system-i386 をインストールしてコンパイル、実行した。

run: helloos.img
    qemu-system-i386 -fda $^

helloos.img: helloos.nas
    nasm -o $@ $^

clean:
    rm -rf helloos.img
 ORG     0x7c00
    JMP     entry
    
    DB      0x90
    DB      "HELLOIPL"
    DW      512
    DB      1
    DW      1
    DB      2
    DW      224
    DW      2880
    DB      0xf0
    DW      9
    DW      18
    DW      2
    DD      0
    DD      2880
    DB      0,0,0x29
    DD      0xffffffff
    DB      "HELLO-OS   "
    DB      "FAT12   "
    RESB    18

; Main Program

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      fin
    mov     ah, 0x0e
    mov     bx, 15
    int     0x10
    jmp     putloop

fin:
    hlt
    jmp fin

msg:
    DB      0x0a, 0x0a
    DB      "hello, world"
    DB      0x0a
    DB      0

    RESB    0x1fe-($-$$)

    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
f:id:msyksphinz:20180223000051p:plain
図. 第3日。IPLが動作した様子。