如何解决调色板不适用于VGA中的某些颜色
我正在尝试在DOSBox上的汇编器中设置VGA(640x480x16)调色板,但具体地说,颜色6、8-F不会改变。我试过使用中断,并直接通过端口使用其他颜色,但不适用于其他颜色。我在默认配置上使用DOSBox 0.74-3。这是我的代码
setpalete MACRO index,r,g,b
mov ax,1010h
mov bx,index
mov ch,r
mov cl,g
mov dh,b
int 10h
ENDM
Start:
mov ax,0A000h
mov es,ax
;set video mode to 640x480 16 color ah=0 al=12h int 10h
mov ax,12h
int 10h
setpalete 06h,030h,030h
mov dx,03C4h ;dx = indexregister
mov ah,06h ;Color
mov al,02h ;register select - map mask
out dx,ax ;select the bitplanes.
mov al,0FFh
mov di,0
mov cx,38400
rep stosb
这里是使用端口设置货盘
setpalete MACRO index,b
mov dx,3c8h
mov al,index
out dx,al
mov dx,3c9h
mov al,r
out dx,al ; set R
mov al,g
out dx,al ; set G
mov al,b
out dx,al ; set B
ENDM
预先感谢
解决方法
您的程序将颜色寄存器6 设置为某种灰色。您观察到的是,在16色视频模式12h中,调色板寄存器6映射到了颜色寄存器20(14h)。因此,请更改颜色寄存器20(14h)。调色板寄存器8(08h)至15(0Fh)的情况相同。
这是调色板寄存器(颜色值)和颜色寄存器(应更改的DAC寄存器)之间的连接。所有十六进制数字:
0 1 2 3 4 5 6 7 8 9 A B C D E F palette register
0 1 2 3 4 5 14 7 38 39 3A 3B 3C 3D 3E 3F color register
因此,例如,为了更新0Ah号调色板寄存器中的颜色,您应该更改3Ah号颜色寄存器。
此外,您的 setpalete 宏不会加载正确的RGB寄存器。这是正确的版本:
setpalete MACRO index,r,g,b
mov bx,index
mov dh,r
mov ch,g
mov cl,b
mov ax,1010h ; BIOS.SetIndividualColorRegister
int 10h
ENDM
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。