0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CUIOS自作 COM実行機能

Posted at

「手探りでCUI OS作成に挑む」連載

この記事は「手探りでCUI OS作成に挑む」連載の一部です。
全体の目次は「手探りでCUI OS作成に挑む」連載目次を御覧下さい。

ソースコードはこちら:
https://github.com/ooe1220/sourouOS/tree/20250707

実行

DIR命令でCOMファイルを入力し実行します。
图片.png

以下は、実行している 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)の実装部分です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?