前回は、一部の命令だけエミュレートし、BIOS使って画面に関する操作をするINT 0x10を無視したので、画面の変化はなかった。しかし、今回、色は固定であるもののドットを表示するという命令をエミュレートしたため、画面に変化を加えることができた。ただし、座標に関して不完全なところがあり、エミュレトするプログラムを変更した。座標に関するエミュレートで失敗したのは、画面の大きさを超えた座標を指定した場合どうするかというときだ。座標が画面の大きさを超えたとき、新しい座標を(座標 mod 画面のサイズ)としたが、どうやらこれでは駄目だったらしい。なので諦めた。なので、新しいプログラムのソースと、エミュレート中のスクリーンショットを載せておく。新しく作ったプログラムはBIOSを呼び出して画面を1ドットずつ埋めていくというものだ。エミュレータのソースが大きくなったので今度githubに載せておく。以下スクリーンショットとプログラムのソース
ORG 0x7C00 ;画面初期化 MOV AH, 0x00 MOV AL, 0x03 INT 0x10 ;ビデオモード設定 ;VGAグラフィックス、640x480x4bitカラー MOV AL, 0x12 INT 0x10 MOV AH, 0x0C MOV DX, 0 MOV AL, 1 next_y: MOV CX, 0 next_x: INT 0x10 ADD CX, 1 CMP CX, 640 JNE next_x ADD DX, 1 CMP DX, 480 JNE next_y fin: JMP fin TIMES 510-($-$$) DB 0 DB 0x55, 0xAA