В графических режимах видео параметр BL
для функции BIOS 09h определяет только цвет переднего плана. Он всегда применяется на черном фоне.
Ниже моя реализация расширения функциональности этой функции. Теперь 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 остановится у правого края экрана.
Возможно, вы захотите прочитать Отображение символов с DOS или BIOS , чтобы узнать больше о том, как достичь ваших текущих и будущих целей.