TASM 1.4 - Changing background color without clearing the screen?

前端 未结 1 1694
青春惊慌失措
青春惊慌失措 2021-01-16 08:32

I\'m using Tasm 1.4. I\'m trying to change the color of the background and text without clearing the previous text, but it always ends up on clearing the previous text altho

相关标签:
1条回答
  • 2021-01-16 08:42

    Just write to the video memory directly and be done with it. If you're in mode 03h, then you've got 80x25 chars on screen. Each char has 16bits associated with it. 8 bits for text/background colour and another 8 for the character displayed.

    The character to display is the first byte and the attributes are the second byte. You can find a brief description of the memory organization and attribute bits here: http://www.shikadi.net/moddingwiki/B800_Text

    Here's some code that will leave the text content unchanged and will just set the attribute byte for all text on an 80x25 screen. I use nasm these days, it's been 15 years since I last used tasm - I'm not sure if any of the syntax will need changing.

    ;********************************************************
    ; Sets the text-mode attributes for the whole 80x25 screen
    ; call  with AL = attribute (hi nibble = background, lo-nibble = foreground)
    ;********************************************************
    setTextAttributes:
        push    es              ; save the seg register
        mov     cx, 80*25       ; # of chars to do
        mov     bx, 0xB800      ; segment of the screen memory for this video mode
        mov     es, bx
        xor     di, di          ; point to char data of screen-pos 0,0
    .setTextAttributesLoop:
        inc     di              ; advance by 1 to point to the attribute, rather than the char
        stosb                   ; store our attribute byte to [es:di] and increment di. di now points to a character
        loop    .setTextAttributesLoop
        pop     es
        ret
    
    0 讨论(0)
提交回复
热议问题