OSっぽいなにかを作ってみた
つくったもの
ブログ用
— SmarterThanMonkey (@SmThMonkey) 2017年12月10日
OS作ってみた(大嘘) pic.twitter.com/UACWtUvM6d
コマンドなんてなかった...。
見た本
自作エミュレータで学ぶx86アーキテクチャ-コンピュータが動く仕組みを徹底理解!
本当は、CPUの仕組みを勉強できたらいいなと思ってその本を読んでいたんですが、
シミュレータを作っていくのがめんどうくさくて、実装編だけ読みました。
実装編のサンプルプログラム(アセンブリ)を、USBメモリの最初の512byte(ブートセクタ?)に書き込み、
そのUSBメモリをパソコンにさしてから起動すると、文字が表示されます。
BIOSの機能を使って、文字を表示しているらしいです。
ここで、
「キーの入力に対して、何かしらの文字を表示できたらOSっぽくなるんじゃね?」
と思ったので、実装編のプログラムを改造して作ってみました。
正直なところ、"わかんないけど試す"というやりかたで作ったので、よくわかってません。
細かい話はわからないので、
軽く、自分が付け加えた部分だけ紹介します。
本にのってなかった部分
1.入力を受け取る
mov ah, 0x00 ;ahレジスタに0x00をいれる int 0x16
このあと、キーボードのキーが押されると、ahレジスタにスキャンコードがセットされます。
押したときはメイクコード、離したときはブレイクコードがセットされます。
(参考:0から作るソフトウェア開発)
例えば、割り込みのあとにエンターキーを押すと、ahレジスタに0x1c(エンターキーのメイクコード)がセットされます。
2.シャットダウン(のつもり)
int 0x19
シャットダウンのつもりで加えたんですが、
これをやるとハードディスクに入っているOSが起動してしまいます。
動画の後にパソコンのハードディスクにはいってるlinuxが起動してます。
感想
実際に動くっておもしろい!
アセンブリとか全然わからないんですが、
サンプルコードの空気を見ながら調べているうちにそれっぽいものができたので、
「あれもこれも調べないと! アアア!! この本ゴツイなオイ!」 となるよりも、
必要な部分だけペラペラと読んで実際に作ってみるのが自分には合っているのかな
と思いました。(おしまい)
参考:
https://www.embeddedarm.com/documentation/third-party/x86-ebios-43.pdf