如何在IBMPC BIOS图形模式16INT 10H / AX = 0010H中启用文本光标?

问题描述

进入图形视频模式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