マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

BIOSを使って画面を塗りつぶすプログラムをエミュレートした

前回は、一部の命令だけエミュレートし、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