有沒有辦法在使用埠 3C8h 更改其值后恢復標準調色板(256)?這是我如何改變它。
proc copyPal
mov si, offset palette
mov cx, 256
mov dx, 3C8h
mov al, 0
out dx, al
inc dx
palLoop:
mov al, [si 2]
shr al, 2
out dx, al
mov al, [si 1]
shr al, 2
out dx, al
mov al, [si]
out dx, al
add si, 4
loop palLoop
ret
endp copyPal
uj5u.com熱心網友回復:
您可以以類似的方式讀取 256 個顏色暫存器。只需使用 03C7h 處的 PEL 地址讀取模式暫存器即可。
接下來的代碼要求段暫存器DS和ES相等并且方向標志是清除的(cld)。
PreservePal:
mov di, offset Buffer768
mov cx, 256
mov dx, 03C7h ; Address
mov al, 0
out dx, al
mov dx, 03C9h ; Data
palLoop:
in al, dx ; Red
stosb
in al, dx ; Green
stosb
in al, dx ; Blue
stosb
loop palLoop
ret
要恢復,請使用下一個代碼:
RestorePal:
mov si, offset Buffer768
mov cx, 256
mov dx, 03C8h ; Address
mov al, 0
out dx, al
mov dx, 03C9h ; Data
palLoop:
lodsb
out dx, al ; Red
lodsb
out dx, al ; Green
lodsb
out dx, al ; Blue
loop palLoop
ret
請注意,您的調色板緩沖區有 1024 位元組(每位元組 8 位,因此轉換因子為 4),而我的Buffer768有 768 位元組(每位元組 6 位,因此不需要轉換)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/443204.html
