问题描述
进入图形视频模式16(INT 10H / AX = 0010)时,没有文本光标。
在具有运行DOS的板载VGA / AMIBIOS(1.16)的物理旧IBMPC和DOSBox中对此进行了尝试。
我尝试将它们弄乱,因为它们似乎仅是“文本模式”(不是图形):
- “光标形状”(
INT 10H/AH=01/CX=0D0EH
) - “光标模拟”(
INT 10H/AH=12H/AL=0/BL=34H
)
似乎光标应该易于打开和关闭,是否有其他BIOS功能可以打开它?
解决方法
模式10h是16色图形模式(640x350)。在图形模式下,尽管BIOS会跟踪其位置,但光标不会显示,仅此而已。
即使屏幕是所有像素都可寻址,BIOS仍为该隐形光标保持的位置将与字符单元布局(8x14)相对应。
如果要使用光标,则必须以图形方式(短线)自己绘制光标,或者可以显示文本字符和空格来创建闪烁字符的效果。
,EGA / VGA视频模式Nr。 10h是图形(640 * 350),请参见Interrupt List,并且您尝试弄乱的BIOS服务仅适用于文本模式。 恐怕您将不得不自己绘制光标。
另一方面,您可以将光标绘制为任意形状,并在图形模式下以像素粒度将其定位在屏幕上。
,在Dosbox下,您可以使用dos中断调用(int 0x33)来操纵鼠标。 我写了一个简单的示例,您可以使用fasm进行组合:
org 0x100
;; Init Data Segment
xor ax,ax
mov ds,ax
;; Init screen
mov ah,0x00 ; Set video mode
mov al,0x10 ; 640x350 graphics
int 0x10
mov ah,0x0b ; Set color palette
mov bh,0x00 ; Set current
mov bl,0x03 ; Color: Cyan
int 0x10
mov ax,0x0000 ; Reset mouse cursor
int 0x33
mov ax,01 ; Show mouse cursor
int 0x33
hang:
hlt
jmp hang
;; Magic number
times 510-($-$$) db 0
dw 0xaa55