よもぎのメモ帳

備忘録的な感じで技術的なことをストックしていきます。

よもぎのOS自作入門 19日目/30日

はじめに

これは2020年夏休み企画「30日でOS自作してみよう!」19日目の記事です。

企画についてはこちら

y0m0g1.hatenablog.com

昨日やったことを書いていきます。

昨日の進捗

f:id:y0m0g1:20200909173018p:plain
初めてのアプリケーション

catコマンドを追加し、hltコマンドで起動する何もしないアプリケーションを動かしました

昨日やったこと

最初にcatコマンドを実装しました。 MS-DOSでいうところのtypeコマンドなわけですが、このcattypeの文字列長の違いで苦しめられました。*1 ファイルタイプ*2をチェックするところもfile.type & 0x18 == 0としなきゃいけないところをfile.type & 0x10 == 0としていたし。*3 ずっとfile not found.って表示されてめうってなっていました。

f:id:y0m0g1:20200909173807p:plain
ファイルを表示(1)

f:id:y0m0g1:20200909173831p:plain
ファイルを表示(2)

よくみるとちょっとだけ表示が崩れています。♪と◎みたいな文字が割と見えます。 これはCR+LFで、制御文字をそのまんま表示しちゃっているからです。*4 よしなにして

f:id:y0m0g1:20200909174117p:plain
ファイルを表示(再)

このあと、512バイト以上のファイルを取り扱えるようにFATに対応しました。 FATでは、FAT*5に次のクラスター位置の情報が並べられています。 3バイトに2つ分の次のクラスター位置の情報が並べており、例えばAB CD EFDAB EFCにデコードされます。 *6

そして長くなったファイルを分割しました。これは特に話すことはないので割愛。

このあと初めてのアプリケーションを作ります。HLT命令をループするだけなので特に何もなく停止します。 アセンブリ言語で書きました。

今日も一日頑張るぞい!

*1:本ではtypeコマンドだけど、私はcatコマンドのほうがしっくりくるのでそっちに。ファイル名の引数をとってくるのに、スペースのあと!じゃなくて5文字目以降みたいな感じでやってた。それを4文字目以降みたいに変えなきゃいけない

*2:アクセス権限みたいな感じ

*3:8と0って小さいと見分けづらいよね

*4:本当はTabも崩れるけど、私はTabキー4スペース派なのでここに現れない

*5:File Allocation Table

*6:この例ではAB CD EFの3バイトの中に、次はDABという情報と次はEFCという情報がある