DosBox如何修复字符属性?
DosBox how to fix character attribute?
我写汇编代码就是为了写一个蓝底白前景的字符。它在 emu8086 的模拟器中工作,但是当我在 DosBox 上打开它时,它不显示背景颜色。
使用 Emu8086:
使用 DosBox:
mov ax,0012h
int 10h
mov ah,9
mov al,31h
mov bl,1fh
int 10h
在图形视频模式下,BIOS 函数 09h 的 BL
参数仅定义前景色。它始终应用于黑色背景。
下面是我对这个函数功能的扩展实现。现在 BL
拥有一个属性(前景颜色和背景颜色),就像在文本视频模式中一样。
仅在图形视频模式下有效
; IN (al,bl,cx) OUT ()
EnhancedWriteCharacterWithAttribute:
pusha
mov bh, 0 ;Display page 0
mov bp, bx
push ax
shr bl, 4 ;Get background color (high nibble)
mov ax, 09DBh ;ASCII DBh is full block character
int 10h ;BIOS.WriteCharacterAndAttribute
xor bx, bp ;Anticipate upcoming 'xor'
and bl, 15 ;Get foreground color (low nibble)
or bl, 128 ;Have BIOS 'xor' it
pop ax
int 10h ;BIOS.WriteCharacterAndAttribute
popa
ret
这样使用:
mov ax, 0012h ; BIOS.SetVideo 640x480x16
int 10h
mov al, "1" ; Character
mov bl, 1Fh ; Attribute
mov cx, 80 ; Repetition count
call EnhancedWriteCharacterWithAttribute
注意
在CX
中提供大量重复计数的文本视频模式可以一次写入整个屏幕。这在图形视频模式下是不可能的,因为 BIOS 将停止在屏幕的右边缘。
您可能想阅读 Displaying characters with DOS or BIOS 以了解有关如何实现当前和未来目标的更多信息。
我写汇编代码就是为了写一个蓝底白前景的字符。它在 emu8086 的模拟器中工作,但是当我在 DosBox 上打开它时,它不显示背景颜色。
使用 Emu8086:
使用 DosBox:
mov ax,0012h
int 10h
mov ah,9
mov al,31h
mov bl,1fh
int 10h
在图形视频模式下,BIOS 函数 09h 的 BL
参数仅定义前景色。它始终应用于黑色背景。
下面是我对这个函数功能的扩展实现。现在 BL
拥有一个属性(前景颜色和背景颜色),就像在文本视频模式中一样。
仅在图形视频模式下有效
; IN (al,bl,cx) OUT ()
EnhancedWriteCharacterWithAttribute:
pusha
mov bh, 0 ;Display page 0
mov bp, bx
push ax
shr bl, 4 ;Get background color (high nibble)
mov ax, 09DBh ;ASCII DBh is full block character
int 10h ;BIOS.WriteCharacterAndAttribute
xor bx, bp ;Anticipate upcoming 'xor'
and bl, 15 ;Get foreground color (low nibble)
or bl, 128 ;Have BIOS 'xor' it
pop ax
int 10h ;BIOS.WriteCharacterAndAttribute
popa
ret
这样使用:
mov ax, 0012h ; BIOS.SetVideo 640x480x16
int 10h
mov al, "1" ; Character
mov bl, 1Fh ; Attribute
mov cx, 80 ; Repetition count
call EnhancedWriteCharacterWithAttribute
注意
在CX
中提供大量重复计数的文本视频模式可以一次写入整个屏幕。这在图形视频模式下是不可能的,因为 BIOS 将停止在屏幕的右边缘。
您可能想阅读 Displaying characters with DOS or BIOS 以了解有关如何实现当前和未来目标的更多信息。