中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: 如何编程关闭显示器? 上一主题 | 下一主题
dsysps
初级用户





积分 98
发帖 34
注册 2006-11-3
状态 离线
『楼 主』:  如何编程关闭显示器?

项目中需要程序中定时关闭显示器,请问如何实现?

2007-2-2 01:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Michael
钻石会员





积分 10046
发帖 3039
注册 2002-11-11
状态 离线
『第 2 楼』:  

改变它的power scheme,不过在dos下没试过



简单就是美
2007-2-2 12:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zhgwbzhd
高级用户





积分 506
发帖 187
注册 2005-12-4
状态 离线
『第 3 楼』:  

是给他断电吗?估计困难点。
如果使用显示输出的中断,应该可以得了

2007-2-5 11:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dsysps
初级用户





积分 98
发帖 34
注册 2006-11-3
状态 离线
『第 4 楼』:  

BYTE vga_mode[64*2];
BYTE mode_bak[64*2];
void SaveMode()
{
        union REGS r;
        r.x.ax=0x4f04;
        r.x.dx=0x0001;
        r.x.cx=0x0001;
        _ES=FP_SEG(vga_mode);
        r.x.bx=FP_OFF(vga_mode);
        int86(0x10,&r,&r);       
                for(i=0;i<64*2;i++)
                mode_bak[i]=0x00;
}
//bClose=1:关闭显示;bClose=0:打开显示
void OpenClose(BYTE bClose)
{
        BYTE far * pp;
        pp=mode_bak;
        if(bClose==0)
        {
                pp=vga_mode;
        }               
        union REGS r;
        r.x.ax=0x4f04;
        r.x.dx=0x0002;
        _ES=FP_SEG(pp);
        r.x.bx=FP_OFF(pp);
        r.x.cx=0x0001;
        int86(0x10,&r,&r);
}

2007-3-15 21:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wzsunlight
初级用户





积分 107
发帖 52
注册 2007-3-10
状态 离线
『第 5 楼』:  

同意以上观点

2007-3-22 17:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
CrispH
初级用户





积分 108
发帖 49
注册 2007-3-9
状态 离线
『第 6 楼』:  

在 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 ]

2007-10-26 16:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
jojand
初级用户





积分 117
发帖 57
注册 2007-10-23
状态 离线
『第 7 楼』:  

执行以下的代码将关闭屏幕显示,键入任意键后开启屏幕显示:

mov ax,1201
mov bl,36
int 10
mov ax,0
int 16
mov ax,1200
mov bl,36
int 10

2007-10-30 14:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
CrispH
初级用户





积分 108
发帖 49
注册 2007-3-9
状态 离线
『第 8 楼』:  

INT 10H, AH = 12H, BL = 36, AL = 01 --> Video Refresh Disable
INT 16H, AH = 00H --> Waiting for keypress
INT 10H, AH =12H, BL = 36, AL = 00 --> Video Refresh Enable

2007-10-30 18:22
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bd123456789
中级用户





积分 360
发帖 216
注册 2007-5-29
状态 离线
『第 9 楼』:  测试出错

上面几位的代码我测试了几个,发现都不能正常关闭!

2008-1-11 21:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
CrispH
初级用户





积分 108
发帖 49
注册 2007-3-9
状态 离线
『第 10 楼』:  

真的吗?我测试了, 可以关闭,也可以开启啊!

2008-2-18 18:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Sufone
中级用户





积分 256
发帖 124
注册 2007-12-18
状态 离线
『第 11 楼』:  

7楼的肯定可以

2008-2-18 19:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dy2003310
初级用户





积分 180
发帖 68
注册 2006-12-21
来自 China
状态 离线
『第 12 楼』:  请教

7楼兄的在偶xp上测试不成功

2008-2-24 01:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Sufone
中级用户





积分 256
发帖 124
注册 2007-12-18
状态 离线
『第 13 楼』:  

XP接管了屏幕中断,在全屏模式的CMD中可以。

2008-2-27 22:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
geffhv
社区乞丐





积分 -51
发帖 8
注册 2007-12-17
来自 四川省南充市嘉陵区
状态 离线
『第 14 楼』:  

汇编在不同的机器上结果可能是不同的吗?》

2008-2-29 16:12
查看资料  发送邮件  发短消息 网志  OICQ (373414158)  编辑帖子  回复  引用回复
Sufone
中级用户





积分 256
发帖 124
注册 2007-12-18
状态 离线
『第 15 楼』:  

只要DOS能运行,那就肯定可以

2008-3-1 11:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: