在 DOS 下关闭和打开显示器!
;
; Turn Off Video
;
call disable_video_display_3c0
call disable_video_display_3c4
call disable_horz_vert_retrace
;
; Turn On Video
;
call enable_horz_vert_retrace
call enable_video_display_3c0
call enable_video_display_3c4
IO_DELAY MACRO
push ax
in al, 061H
pop ax
ENDM
disable_video_display_3c0 PROC NEAR PUBLIC
push ax
mov ah, 00000000b
jmp enable_display_3c0_00
disable_video_display_3c0 ENDP
enable_video_display_3c0 PROC NEAR PUBLIC
push ax
mov ah, 00100000b
enable_display_3c0_00::
call video_display_3c0_on_off
pop ax
ret
enable_video_display_3c0 ENDP
attribute_addr_reg dW 03c0h
input_status_reg_1_color_reg dW 03dah
input_status_reg_1_mono_reg EQU 03bah
video_display_3c0_on_off PROC NEAR PUBLIC
push dx
call clear_attribute_flipflop
mov dx, attribute_addr_reg
in al, dx
and al, 11011111b
or al, ah
call clear_attribute_flipflop
out dx, al
pop dx
ret
video_display_3c0_on_off ENDP
clear_attribute_flipflop PROC NEAR PUBLIC
push ax
push dx
mov dx, input_status_reg_1_color_reg
in al, dx
IO_DELAY
mov dl, low input_status_reg_1_mono_reg
in al, dx
pop dx
pop ax
ret
clear_attribute_flipflop ENDP
disable_video_display_3c4 PROC NEAR PUBLIC
push ax
mov ah, 00100000b
jmp enable_display_3c4_00
disable_video_display_3c4 ENDP
enable_video_display_3c4 PROC NEAR PUBLIC
push ax
mov ah, 00000000b
enable_display_3c4_00::
call video_display_3c4_on_off
pop ax
ret
enable_video_display_3c4 ENDP
sequencer_addr_reg dW 03c4h
clocking_mode_reg_idx db 01h
video_display_3c4_on_off PROC NEAR PUBLIC
push dx
mov dx, sequencer_addr_reg
in al, dx
IO_DELAY
push ax
mov al, clocking_mode_reg_idx
out dx, al
IO_DELAY
inc dx
in al, dx
and al, 11011111b
;---------------------------------------;
enb_dis_horz_vert_retrace_10::
or al, ah
out dx, al
IO_DELAY
dec dx
pop ax
out dx, al
pop dx
ret
video_display_3c4_on_off ENDP
disable_horz_vert_retrace PROC NEAR PUBLIC
push ax
mov ah, 00000000b
jmp enable_horz_vert_retrace_00
disable_horz_vert_retrace ENDP
enable_horz_vert_retrace PROC NEAR PUBLIC
push ax
mov ah, 10000000b
enable_horz_vert_retrace_00::
call enb_dis_horz_vert_retrace
pop ax
ret
enable_horz_vert_retrace ENDP
miscellaneous_out_reg_read_mode dW 03cch
crt_addr_reg_mono EQU 03b4h
crt_addr_reg_color EQU 03d4h
crtc_mode_cntl_reg_index db 017h
enb_dis_horz_vert_retrace PROC NEAR PUBLIC
push dx
mov dx, miscellaneous_out_reg_read_mode
in al, dx
test al, 00000001b
mov dl, low crt_addr_reg_mono
jz enb_dis_horz_vert_retrace_01;
mov dl, low crt_addr_reg_color
enb_dis_horz_vert_retrace_01:
in al, dx
IO_DELAY
push ax
mov al, crtc_mode_cntl_reg_index
out dx, al
IO_DELAY
inc dx
in al, dx
and al, 01111111b
jmp enb_dis_horz_vert_retrace_10
enb_dis_horz_vert_retrace ENDP
[ Last edited by CrispH on 2007-10-26 at 04:41 PM ]