2020-08-01から1ヶ月間の記事一覧
1. メモリ管理の続き メモリの管理を0x1000バイト単位で管理することにする。 切り上げはどうするかというと、and演算を使う。i = i & 0xfffff000 とすれば、0x1000以下の数字を切り捨てられるので改造して、 i = (i + 0xfff) & 0xfffff000 とすれば切り上げ…
1. ソースの整理 長くなったbootpack.c の一部をkeyboard.c とmouse.c に分割。 2. メモリ容量チェック (1) まずはメモリの容量をチェック。その前に、キャッシュを停止する必要がある。 2.1 キャッシュとは キャッシュとは、CPU内部にある小さいメモリ。メ…
1. マウスの解読 (1) マウスから得たデータを解読して、それに合わせてマウスカーソルを動かすぞ。 マウスからのデータは3バイトずつ。あと、最初に0xfaが送られてくる。 0xfaは読み捨てるのと、3バイトずつのデータを1バイトずつ入手して、3バイト溜まるご…
1. キーコードを取得しよう ・キーボードからデータ(キーコード)を取得する まず、キーボードからデータを受け取った直後にPICに対して、IRQ1が発生したのを確認したよ〜ということを教えてあげる必要がある。 これをしないと、PICは次の入力に対して反応…
久しぶりにやる。 1. ソースファイル分割 2. Makefileの整理 3. ヘッダファイル整備 割愛 4. やり残した説明 load_gdtr関数 新たに追加したload_gdtr関数は、指定されたリミットとアドレスをGDTRという48ビットのレジスタに代入する関数。 48ビットレジスタ…
5日目。 1. 起動情報の受け取り bootpack.cでVRAMの場所とかサイズを生の数字で打ち込んだが、本来はこれらはasmhead.nasでメモした値を取得して使うべきである。 2. 構造体を使ってみる 起動情報のパラメタはまとめて構造体にしてしまう 3. 矢印表記を使っ…
1. C言語からメモリに書き込みたい アセンブリ言語とC言語の連携 画面に何か書き込むにはVRAMに何か書き込めばいい。とりあえずアセンブリ言語で書いてみる。 C言語でwrite_mem8が使われると、アセンブリ言語で書いた_write_mem8に飛ばされて、引数はESP(ス…
1. さあ本当のIPLを作ろう INT 0x13 → BIOS関数。ディスクの読み込み書き込み、etc… AH = 0x02 でディスクの読み込み。 指定されたレジスタに値を入れて関数呼び出し。 ディスクのどの場所を読み出すか? シリンダ、ヘッド、セクタを指定して場所を指定する…
1. テキストエディタ TeraPad、というものがオススメされている。まあ、Emacs を使う。 2. 開発再開 新しく出てきたアセンブリ言語の関数 ORG:実行時にPCのメモリのどこに読み込まれることになるかを教えるための命令。 JMP:goto文と一緒。 MOV:MOV AX, 0…
1日目です。メモ書き程度のものです。 1. とりあえずやってみる バイナリエディタというものがあるらしい。 Emacs でもバイナリの編集ができる。https://ayatakesi.github.io/emacs/24.5/Editing-Binary-Files.html 2. 結局何したの? PCの中心はCPUで、CPU…
はじめに 競技プログラミング純粋培養勢な僕ですが、他の技術にいろいろ興味が出てきた(無知過ぎて危機感を覚えてきた)ので、勉強しようと思った次第です。 まず「CPUの創りかた」を読みました。めちゃくちゃ面白かったです。実際に自作したらまたまとめる…