FPGA開発日記

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

「30日でできる!OS自作入門」を読み始めた (28日目 ファイルの操作と日本語表示)

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

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

28日目はファイル操作と日本語のサポートを行う。

ファイル操作については、APIをいくつか追加した。

  • ファイルのオープン
    • EDX = 21
    • EBX = ファイル名
    • EAX(戻り値) = ファイルハンドル
  • ファイルのクローズ
  • ファイルのシーク
    • EDX = 23
    • EAX = ファイルハンドル
    • ECX = シークのモンド(0=シークの原点はファイルの先頭、1=シークの原点は現在のアクセス位置、2=シークの原点はファイルの終端)
    • EBX = シーク量
  • ファイルサイズの取得
    • EDX = 24
    • EAX = ファイルハンドル
    • ECX = ファイルサイズ取得モード (0=普通のファイルサイズ、1=現在の読み込み位置はファイルの先頭から何バイト目か、2=ファイルの終端から見た現在位置までのバイト数)
    • EAX = ファイルサイズ(OSから返される)
  • コマンドラインの取得
    • EDX = 26
    • EBX = コマンドラインを格納する番地
    • ECX = 何バイトまで格納できるか
    • EAX(戻り値) = 何バイト格納したか

というわけで、typeiplコマンドを実装して、ipl10.nasを表示するコマンドを作った。

f:id:msyksphinz:20180527030815g:plain
図. `typeipl` コマンドを作って、ファイルを表示する。

次に、日本語対応を行う。日本語フォントを格納したファイルは、edimgコマンドなどを作って加工するようなのだが、これはとりあえずそのまま使わせてもらうことにした。 nihongo.fnt ファイルはそのままディスクイメージに挿入する。

そしたら、日本語の表示を実装する。基本は日本語Shift JISだが、EUCも実装していく。

最初に勘違いしていたのだが、フォントのアドレスを計算するのに、文字コードunsigned charではなくcharで計算していたため、符号付きとして計算されてしまっていた。 これで随分とはまってしまった。

void putfonts8_asc (unsigned char *vram, int xsize, int x, int y, char c, unsigned char *s)   // unsigned char *s を最初char *s としており、符号付として計算されてしまった。
f:id:msyksphinz:20180527031212g:plain
f:id:msyksphinz:20180527031239g:plain
f:id:msyksphinz:20180527031321g:plain