現代の量子力学

主に精進の様子を記録する日記帳です

2020-08-01から1ヶ月間の記事一覧

10日目 重ね合わせ処理

1. メモリ管理の続き メモリの管理を0x1000バイト単位で管理することにする。 切り上げはどうするかというと、and演算を使う。i = i & 0xfffff000 とすれば、0x1000以下の数字を切り捨てられるので改造して、 i = (i + 0xfff) & 0xfffff000 とすれば切り上げ…

9日目 メモリ管理

1. ソースの整理 長くなったbootpack.c の一部をkeyboard.c とmouse.c に分割。 2. メモリ容量チェック (1) まずはメモリの容量をチェック。その前に、キャッシュを停止する必要がある。 2.1 キャッシュとは キャッシュとは、CPU内部にある小さいメモリ。メ…

8日目 マウス制御と32ビットモード切り替え

1. マウスの解読 (1) マウスから得たデータを解読して、それに合わせてマウスカーソルを動かすぞ。 マウスからのデータは3バイトずつ。あと、最初に0xfaが送られてくる。 0xfaは読み捨てるのと、3バイトずつのデータを1バイトずつ入手して、3バイト溜まるご…

7日目 FIFOとマウス制御

1. キーコードを取得しよう ・キーボードからデータ(キーコード)を取得する まず、キーボードからデータを受け取った直後にPICに対して、IRQ1が発生したのを確認したよ〜ということを教えてあげる必要がある。 これをしないと、PICは次の入力に対して反応…

6日目 分割コンパイルと割り込み処理

久しぶりにやる。 1. ソースファイル分割 2. Makefileの整理 3. ヘッダファイル整備 割愛 4. やり残した説明 load_gdtr関数 新たに追加したload_gdtr関数は、指定されたリミットとアドレスをGDTRという48ビットのレジスタに代入する関数。 48ビットレジスタ…

5日目 構造体と文字表示とGDT/IDT初期化

5日目。 1. 起動情報の受け取り bootpack.cでVRAMの場所とかサイズを生の数字で打ち込んだが、本来はこれらはasmhead.nasでメモした値を取得して使うべきである。 2. 構造体を使ってみる 起動情報のパラメタはまとめて構造体にしてしまう 3. 矢印表記を使っ…

4日目 C言語と画面表示の練習

1. C言語からメモリに書き込みたい アセンブリ言語とC言語の連携 画面に何か書き込むにはVRAMに何か書き込めばいい。とりあえずアセンブリ言語で書いてみる。 C言語でwrite_mem8が使われると、アセンブリ言語で書いた_write_mem8に飛ばされて、引数はESP(ス…

3日目 32ビットモード突入とC言語導入

1. さあ本当のIPLを作ろう INT 0x13 → BIOS関数。ディスクの読み込み書き込み、etc… AH = 0x02 でディスクの読み込み。 指定されたレジスタに値を入れて関数呼び出し。 ディスクのどの場所を読み出すか? シリンダ、ヘッド、セクタを指定して場所を指定する…

2日目 アセンブラ学習とMakefile入門

1. テキストエディタ TeraPad、というものがオススメされている。まあ、Emacs を使う。 2. 開発再開 新しく出てきたアセンブリ言語の関数 ORG:実行時にPCのメモリのどこに読み込まれることになるかを教えるための命令。 JMP:goto文と一緒。 MOV:MOV AX, 0…

1日目 PCの仕組みからアセンブラ入門

1日目です。メモ書き程度のものです。 1. とりあえずやってみる バイナリエディタというものがあるらしい。 Emacs でもバイナリの編集ができる。https://ayatakesi.github.io/emacs/24.5/Editing-Binary-Files.html 2. 結局何したの? PCの中心はCPUで、CPU…

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

はじめに 競技プログラミング純粋培養勢な僕ですが、他の技術にいろいろ興味が出てきた(無知過ぎて危機感を覚えてきた)ので、勉強しようと思った次第です。 まず「CPUの創りかた」を読みました。めちゃくちゃ面白かったです。実際に自作したらまたまとめる…