30日OS自作入門28日目(Win10)
はじめに
今回の開発でOS自体の開発は終わりになるようです。長ったけどなんか悲しい気分ですね。(まだアプリケーションもあるので、終わったわけではないですが…)
目次
ファイルと日本語表示
alloca(1)
手始めに、素数のを表示するプログラムを作るようです。
その過程で、sosu2.cを作るときに出る。
Warning : can't link __alloca
なんだこいつ…
こいつのせいでビルドも通らないよ…的な状況になってしまします。
なにやらsosu2君がなかなかコンパイルを通してくれないので、著者の.hrbを利用させてもらってごり押ししました。
実行すると
30日自作OS本(harib25a)
— 猫(1010) (@Wagahaiha_toto) 2020年2月21日
素数表示がすごく早かった。
alloca関数ってページング方式で必要なやつなのかな? pic.twitter.com/nuGUMoBmhA
allocaというのは、ページング方式等で4KB以上を扱う場合に利用する関数のようですね。
alloca(2)(harib25b)
実際にalloca関数を作るようです。
alloca関数がお願いされていることというのは、EAXに入っている数値分のバイトをスタックに追加してほしいということになります。しかし、スタック領域にはJMPする先の番地も記録しているので、そこを注意してやるといった感じですね。
これにより、スタック領域で大きい変数を使えるようになったので、WinheloとWinhelo2を変更して実行してみると
30日自作OS本(harib25b)
— 猫(1010) (@Wagahaiha_toto) 2020年2月21日
alloca関数のおかげで、めっちゃすっきりしました。(意味深) pic.twitter.com/X996UPGHdl
ファイルAPI(harib25c)
・構造体TASKにファイルハンドラを含めたのは、hrb_apiからも使えるようにするため
・cmd_appの処理は、アプリがクローズしないで終了したファイルハンドラが迷子にならないように
・app_make.txtに一部変化があるので注意
実行すると
30日自作OS本(harib25c)
— 猫(1010) (@Wagahaiha_toto) 2020年2月21日
ついに!アプリケーションからファイルにアクセスできるようになったぁ! pic.twitter.com/RmFKgHvhPZ
コマンドラインAPI(harib25d)
コマンドラインに入力した文字を取得することができるAPI
これがあれば、CLIアプリケーションの幅が大幅に広がりますね。
修正内容はかなり単純なので、コードを見たほうがわかりやすいと感じます。
実行すると
30日自作OS本(harib25d)
— 猫(1010) (@Wagahaiha_toto) 2020年2月21日
Typeコマンドがアプリケーションになった。これで強制終了もかけることができる。 pic.twitter.com/hF6AXSBX5o
日本語表示(1)(harib25e)
ついに来たぁ!nihonngo!日本語!
・構造体TASKに、管理用変数を入れることによりコンソールごとに変更が可能になる
・日本語ファイルを読み込めたかの判定は、01区01点が0x00であるかで判定
・
実行すると
30日自作OS本(harib25e)
— 猫(1010) (@Wagahaiha_toto) 2020年2月22日
日本語~(半角のみ) pic.twitter.com/1nido3FoSv
日本語表示(2)(harib25f)
全角文字は半角文字より複雑で、以下のようないろいろな要素を使って扱うようです。
・1バイト目が区で、2バイト目が点
・task->langbyte1は全角の1バイト目を暗記しておくのに使う
・改行の際には、1バイト目が干渉しないようにその分を進めておく
・シフトJSなので、組み込むipl10.nasはシフトJSにエンコードしておく
注)このipl10.nasを読み込む際は、Shift-JSでないと読み取れない
実行すると
30日自作OS本(harib25f)
— 猫(1010) (@Wagahaiha_toto) 2020年2月23日
一部バグがあるけど、全角が表示できるようになった☺ pic.twitter.com/NoOfa0Zt5Z
日本語表示(3)(harib25g)
前回の漢字コードが一部欠損していた原因は、ipl10.nasによって読み込まれる大きさを超えていたからのようです。
なので、CYLSを20に変更すればいいようですね。
あとは、当時Linuxで使われていた日本語EUCを実装するそうで、langmodeが2として入るようです。
実行すると
30日自作OS本(harib25g)
— 猫(1010) (@Wagahaiha_toto) 2020年2月23日
日本語EUCにも対応したのと、現在のモードがなんなのかを表示するAPIが追加された。(reflesh当たりにまだバグがあるみたいだけど…) pic.twitter.com/s3M3v5iQm5
メモ
・バイナリデータでファイルの種類の判別をするのは見にくいから、ファイルの先頭に指定の文字形式で記載できるようにする?(ただの思い付き)
最後に
次のharib26aでOS自体は完成のようですね。あと少しだけど、マイペースにやっていきまーす!