「手探りでCUI OS作成に挑む」連載
この記事は「手探りでCUI OS作成に挑む」連載の一部です。
全体の目次は「手探りでCUI OS作成に挑む」連載目次を御覧下さい。
ソースコードはこちら:
https://github.com/ooe1220/sourouOS/tree/20250707
実行
以下は、実行している HELLO.COM のソースコードです:
org 0x100 ; COMは必ず0x100から開始(セグメントは自由)
mov ah, 0009h
mov dx, msg
int 21h
mov ax, 4C00h
int 21h
msg db 'Hello, World!$'
times 512 - ($ - $$) db 0 ; 1セクタ分埋める
以下の記事でこのCOMファイルがMS-DOSでも動くことを検証済みです。
https://qiita.com/earthen94/items/1eaac11be54002519349
現在の問題
実行の流れとしては、以下の手順を踏んでいます:
HELLO.COM と入力
ルートディレクトリを参照し、HELLO.COM の開始クラスタを探す
本来はそのクラスタからファイル全体を読み込むべきですが、現時点では仮実装 として、固定のLBA位置から1クラスタ分だけ読み込んでいます
又、FAT表は一切参照していません。
そのため、複数クラスタにまたがるファイルは正しく読み込めません。
主な実装
driver/disk.asmの改善
syscall/int21.asm
の2点です。
disk.asmの改善に関しては以下の記事を参照
https://qiita.com/earthen94/items/1b3b3371be3782d0a735
int21.asmはMS-DOSとの互換性を持たせたシステムコール(API)の実装部分です。