【问题标题】:I am using DOS and I am trying to make the background white我正在使用 DOS,我正在尝试将背景设为白色
【发布时间】:2016-12-18 20:24:55
【问题描述】:

当我在 DOS 下写作时

tcc filename.c filename.exe

什么都没有发生。

#include <stdio.h>
#include <dos.h>
#include <stdlib.h>

void StartVidScreen (void){ //320x200
    }

    asm{

将视频模式屏幕设置为 320 x 200

        mov ah,0
        mov al,13h
        int 10h

我正在尝试将背景设置为白色,但它不起作用

        mov ah,0ffh
        mov al,' '
        int 10h
    }

void main(void)
 {
    StartVidScreen(); // Start Video Screen
}

【问题讨论】:

  • AFAIK 没有 BIOS 中断 10h 函数 0FFhspace 参数怎么可能做到这一点?
  • 我正在尝试将背景设置为白色,无论屏幕是 320x200 还是 640x480 都没有关系,不管是白色还是 11111111b,我都是中断事件的新手,所以任何人都可以帮忙??
  • @sharbel in 320x200 256 color 0xFF 不是“白色”。实际上在default DOS palette 它是黑色的。白色是默认 DOS 调色板中的 1531。但是那个int 10h 调用无论如何看起来都是无效的,所以我认为它甚至不会将屏幕设置为FF。但我对问题的第一部分更加困惑。什么是“什么都没有发生”,你能展示一下终端窗口的样子吗?并使用DIR检查当前目录中的文件。
  • DESQView/TopView 是窗口环境,稍早于微软使用您可能听说过或未听说过的小软件进入该领域。所以不是模拟器或显卡。很可能它在没有安装此软件的 PC 上什么都不做,更可能的是模拟器不会费心实现对它的支持。
  • 在调试此类问题时,与其使用白底白字的空格,不如使用更有趣的东西:mov ah,012h mov al,'x'

标签: c assembly dos


【解决方案1】:

由于我们处于 VGA 模式 13h,我将使用以下 int 10h 调用:

Function 10h, subfunction 10h:为 DAC(数模转换器)寄存器之一设置 RGB(红、绿、蓝)值。

输入

  • AX = 1010h
  • BX = DAC 寄存器编号 (0-255),在我们的例子中是寄存器 0
  • DH = 红色值 (0-63)。
  • CH = 绿色值 (0-63)。
  • CL = 蓝色值 (0-63)

所以要设置背景

mov ax,1010h
mov bx,0
mov dh,03fh
mov ch,03fh
mov cl,03fh
int 10h

在真正的老式硬件上测试,工作正常。

【讨论】:

    猜你喜欢
    • 2023-01-23
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多