OS自作入門3日目おわり、4日目にちょっと手を出した #osdevjp

実はサポートサイトを見ていなくてCDの内容を参照しているときに???と思いながら読み進めていたのだった

30日でできる! OS自作入門 | マイナビブックス

書籍の中にコード全部載っているわけじゃないのでCDの中身を見ながら進めないとうまく進まないっぽい。

32bitモードのところ実装していて、なんかうまく動いてないのは32bitモード以降のコードをちゃんと入れれてなかったからか......。

zip展開してiso開くと/media/sei/HariboteOSあたりにマウントされたのでprojects/03_dayみていく。ありがてえ。。。

PIC無効化はこのへん使っていそう

The OUT instruction is very similar to the IN instruction. OUT outputs data from a given register (src) to a given output port (dest). In protected mode, the OUT instruction is frequently locked so normal users can't use it. X86 Assembly/Other Instructions - Wikibooks, open books for an open world

なるほど、ふつうのユーザーは使えない、理解。今から使えなくするんだな。

ポート番号0x21なんだろうと思ってググった 日記/2009/11/03/8259A(PIC)のIOポート番号が謎だった件 - Glamenv-Septzen.net

8259A、OS wikiにあるやん...!

(PIC)8259A - os-wiki

よくわかっていないけど割り込みのマスクの設定で0xFFすると全部マスクされるよう

Clears the interrupt flag. Hardware interrupts cannot interrupt execution. Programs can still generate interrupts, called software interrupts, and change the flow of execution. Non-maskable interrupts (NMI) cannot be blocked using this instruction. X86 Assembly/Other Instructions - Wikibooks, open books for an open world

CLIはハードウェア割り込みを無効にしてる。

説明Wikipediaにもあった

Interrupt flag - Wikipedia

waitkbdoutってなんだー?と思ったら後ろのほうで定義されてた

待ってるポート0x64とは、でここ読んでいた。なるほど。(なんか説明逆っぽいところあったのでTwitterで報告した)

0から作るOS開発 カーネルローダその3 プロテクティッドモードへの移行とA20

instrsetはnasmでは削除でいいらしい

tools/nask - hrb-wiki

ところでA20とは、でここみつけた。キーボードポートに繋がってたからキーボードポートで設定できるの、おおらかな時代という感じ...!!

gate A20

LGDTはOSしかつかわない、load gdtでgdtはglobal descripter table

X86 Assembly/Global Descriptor Table - Wikibooks, open books for an open world

LGDTにわたしてるGDTR0は後ろの方で定義されてるラベル この内容に基づいてGDTを設定する

なるほど、デフォルトだとGDTが16bitなんだな(確認したいけど確認するためにはアセンブリで数字表示とか書かないとだ...よ、余力があればで)

GDTここのページが説明詳しいけどちょっと読む元気がない、飛ばす。 Global Descriptor Table - OSDev Wiki

次にCR0設定している Control register - Wikipedia

ページ無効と32bitに移行

なんかなかなか動作しない。 bootpackからhltよべてなさそう。

結局memcpyのADD EDI, 4を忘れててコピーがちゃんとできてなかったのが問題だった....(爆死)

memcpy:
  MOV EAX, [ESI]
  ADD ESI, 4
  MOV [EDI], EAX
  ADD EDI, 4
  SUB ECX, 1
  JNZ memcpy
  RET

いいなと思ったらKyashでお金を下さい
20191128011151
GitHubスポンサーも受け付けています
https://github.com/sponsors/hanachin/