INT 10h (AH=4,5)
ビデオBIOSサービスルーチンを順に試す。
INT 10h AH=4:ライトペンの位置を取得
MOV AX, 0400h ; ライトペン位置の取得 INT 0x10 CALL puthex ; AX: ペンからのシグナル MOV SI, crlf ; 改行 CALL puts ; MOV AX, BX ; CALL puthex ; BX: ピクセルカラム? MOV SI, crlf ; 改行 CALL puts ; MOV AX, CX ; CALL puthex ; CX: ピクセル行? MOV SI, crlf ; 改行 CALL puts ; MOV AX, DX ; CALL puthex ; DX: 文字行文字桁 MOV SI, crlf ; 改行 CALL puts ;
ダメ元で、やってみたところ、全レジスタ0で返ってきた。
今時、ライトペンなんて無いような気もするけど、一応、確認。
INT 10h AH=5:表示ページの切り替え
MOV AX, 0501h ; 表示ページの選択 INT 0x10
こちらも、ダメ元で、やってみたら、切り替わったよ!!
ちょっと、びっくり。
実機で試してないけれど、一応、有効っぽい。
これって、バンク切り替えかと思っていたけれど、
はて?どうやって実装しているのかな?
ついでに、ちょっと待ちルーチンを用意したんだけど、
こいつがちょっと微妙。
INT 15h AH=86:Waitサービス
MOV CX, 1000 MUL CX ; DX:AX←AX*CX(AX*1000) MOV CX, DX ; CX←DX(積の上位部分をCXに移す) MOV DX, AX ; DX←AX(積の下位部分をDXに移す) MOV AX, 8600h ; AH=86h:Wait INT 15h ; 拡張BIOSサービス
Waitサービスでは、CX:DXで指定されたマイクロ秒単位待つって事だから、
上記のルーチンで、AX=1000を指定すれば、1秒待つはずなんだけどな〜。
どうも、それよりも短い時間で復帰しちゃう感じなんだよな〜。
これも、実機で試せば、ちゃんと待ってくれるのかな?
後で必ず試してみよう。