【发布时间】:2017-01-13 05:54:57
【问题描述】:
我早就知道,通过使用 CRTC 将行高更改为两个像素,可以在 IBM CGA 上实现伪 160 x 100 图形模式。我这几天一直在尝试完成这个,走到了死胡同。
Intel® Open Source HD Graphics and Intel Iris™ Graphics Programmer's Reference Manual 声称我可以在第 45 页(或 PDF 中的第 59 页)通过写入最大扫描线寄存器来执行此操作,或者这就是我的解释。
我已经尝试直接写入内存地址 3B5,值为 00000001b,或者我相信 2 条扫描线的代码。当我在 DOSBox 中测试它时,这根本没有做任何事情。
如果您想查看我编写的将在 NASM 中组装的代码:
BITS 16
xor bx,bx
mov ax, 3b5h
mov es, ax
mov ah, 00000001b
mov BYTE [es:bx], ah ; write 00000001b to 0x03b5:0000, right?
cli
hlt
我对这种低级的东西还不是很有信心,如果有任何帮助,我将不胜感激。
【问题讨论】:
-
你在 DOSBOX 中配置了 CGA 图形适配器吗?
-
DOSBox 是一个模拟器/虚拟机。在其中运行的代码将看到整台机器,但其行为完全由 DOSBox 软件决定,而不是由运行 DOSBox 的主机的硬件决定。 Intel 手册可能是有关 VGA/CGA 的有用文档来源,但请记住,它记录的任何 Intel 特定功能或行为都不会在 DOSBox 中发生。如果您想对您的实际英特尔硬件进行编程,您可以在裸硬件上启动您的代码。另请参阅x86 tag wiki 以获取大量 x86 链接(无直接相关)。
-
获得伪 160x100 图形模式的更简单方法可能是使用标准 80x50 VGA 文本模式和具有 2x2 块字符的自定义字体。另一种选择是使用 VGA 的 320x200 图形模式,并在绘制像素时将像素的宽度和高度加倍。
-
我知道 DOSBox 是一个模拟器。我想让它在 DOSBox 中工作,因为 DOSBox 当前配置为在 CGA 中运行。由于我无法访问实际的硬件,所以我求助于模拟器。
标签: assembly x86 intel dosbox undocumented-behavior