DosBox как исправить атрибут персонажа? - PullRequest
2 голосов
/ 19 мая 2019

Я написал свой ассемблерный код только для того, чтобы написать символ с синим фоном и белым передним планом.Он работает в эмуляторе emu8086, но когда я открываю его в DosBox, он не показывает цвет фона.

С Emu8086: With Emu8086

С DosBox: Wtih DosBox

mov ax,0012h
int 10h

mov ah,9
mov al,31h
mov bl,1fh
int 10h

1 Ответ

3 голосов
/ 19 мая 2019

В графических режимах видео параметр 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 , чтобы узнать больше о том, как достичь ваших текущих и будущих целей.

...