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秒待つはずなんだけどな〜。
どうも、それよりも短い時間で復帰しちゃう感じなんだよな〜。
これも、実機で試せば、ちゃんと待ってくれるのかな?
後で必ず試してみよう。