汇编源代码之图形显示方式屏幕的保存和恢复
2009-01-28 09:37:10 来源:WEB开发网TEST_VGA PROC
push 0 ;检测是否安装鼠标驱动程序
pop ds
cmp word ptr ds:[33h*4],0
jz no_mouse
or cs:flag,10000000b ;has mouse installed
no_mouse:
push cs
pop ds
mov ah,1bh ;检测是否是 VGA 以上显示卡
xor bx,bx
mov di,offset file_end
int 10h
cmp al,1bh
jnz tv_no_vga
mov ax,4f00h ;检测是否支持 VESA 功能
mov di,offset file_end
int 10h
cmp al,4fh
jz tv_is_vesa
mov dx,3c4h ;检测是否 TVGA 9000 卡
mov al,0eh ;这一段是照抄的,找不到资料
out dx,al
inc dx
in al,dx
mov bl,al
xor al,al
out dx,al
in al,dx
xchg al,bl
out dx,al
test bl,2
jnz tv_is_tvga
mov dx,3cdh ;检测是否 ET6000 卡
in al,dx
mov ah,al
mov al,11h
out dx,al
in al,dx
xchg ah,al
out dx,al
cmp ah,11h
jz tv_is_tseng
mov vga_type,4
ret
tv_is_vesa:
mov vga_type,1
ret
tv_is_tvga:
mov vga_type,2
ret
tv_is_tseng:
mov vga_type,3
ret
tv_no_vga:
int 20h ;非 VGA 卡退出
TEST_VGA ENDP
...
;================================================================
;保存显示缓冲区内容并设置新的显示模式到 80 x 25 文本 (模式 3)
SAVE_SCR PROC
push ds
push es
test flag,10000000b ;见前面
jz ss_no_mouse
mov ax,16h ;保存鼠标状态
mov dx,offset mouse_buffer
int 33h
ss_no_mouse:
mov ax,1c01h ;保存视频状态
mov bx,offset video_buffer
mov cx,7
int 10h
mov ah,0fh ;保存原显示模式
int 10h
mov video_mode,al
cmp al,3 ;80 x 25 x 16 色
jz ss_mode3
cmp al,7 ;80 x 25 黑白
jz ss_mode7
xor ax,ax ;以下为图形方式保存显示缓冲区
call vga_page
call vga_base
call save_vram
mov ax,0083h ;设置新的显示模式,不清除显示内存
int 10h
push 0b800h
pop ds ;保存显示内存
更多精彩
赞助商链接