『作りながら学ぶOSカーネル』 Chapter 01を読んでのつぶやき
IBM-PCのVRAMの属性について動作確認してみた。
; ; VRAMの属性バイトの確認 ; [org 0x7c00] start: mov ax, 0xb800 ; VRAMセグメント mov es, ax xor di, di mov ax, 0x0741 ; 黒背景, 白文字, 'A' mov dx, 0x0041 ; 黒背景, 黒文字, 'A' mov cx, 16 ; 16回(色)ループ .@loop push cx mov cx, 40 ; 最初の40文字は背景色を変更 rep stosw add ax, 0x1000 ; 背景色+1 xchg ax, dx ; 次の40文字は文字色を変更 mov cx, 40 rep stosw add ax, 0x0100 ; 文字色+1 xchg ax, dx pop cx loop .@loop jmp $ times 510 - ($ - $$) db 0 dw 0xaa55
つぶやき
気になった箇所についてのつぶやき。つぶやきなので裏付けを取るところまではやりません。あと「てにをは」、誤字脱字レベルのものについてはスルーします。
p9
シリアル通信でプログラムをRAMに保存するプログラムを入れておき、(中略)この実行でRAMに入ったプログラムにジャンプして作動するといった方法を利用するのが一般的と言えます。
全然一般的じゃないと思いますけどね。運用時としたらROM(いまどきはフラッシュメモリか)に入れるだろうし、デバッグ時だとICEが多いんじゃないかな。
p10
ここを特にMBR領域と呼ぶ
ハードディスクおよびハードディスクと同様にパーティションに分割して使用できる記憶デバイスなら先頭にはMBRがあり、そこにはパーティション情報も含まれますね。でも、ここではフロッピーディスクを使用すわけだし、ハードディスク先頭ではなく、その中のパーティションテーブルの先頭セクタに含まれるIPL(Initial Program Loader)の方がより正確でしょう。
p11
mov cx, 0x7ff
これは80×25=2000=0x7d0ですね。
mov edi, 0
なぜediなんだろ。
p12
exe,comの形式になっているファイルは、(中略)実行可能ファイルの頭の部分にヘッダを置いて、
EXE形式の場合はリロケーション情報などを含むヘッダがありますが、COM形式にはありません。メモリにロードされるとPSPがつくのは一緒ですが。
p16
00000000 EA0F00C007 jmp 0x7c0:0xf
細かいけれど、これは[org 0]のboo.binの逆アセンブルリストではなく、後で出てくる[org 10]のもの。実際中段ころの箇条書きでは EA0500C007となってて正しいのだけれど、このリストではEA0F00C007なわけです。
でもp17の2行目では、EA0F00C007となっており、混在してしまってます。
p19
リアルモードでは、プログラムは同時に1つしか動作させることができません。
保護モードでも同じ。
p20
一般的に0x07C0番地は
CPUのハードウェア的なファームウェア
マイクロコードのことかな?
p23
0xFFFF領域
0x10000領域
0xB800:0000〜0xB800:1000, 0xB800:1001〜0xB800:2000
正しくは 0xB800:0000〜0xB800:0FFF, 0xB800:1000〜0xB800:1FFF でしょう。
p24
図1-5
文字色と背景色の位置が逆。
d7 文字を点滅 d6-d4 背景色 d3 文字色高輝度 d2-d0 文字色