【问题标题】:Text mode and Graphics mode in DosBox for x86DosBox for x86 中的文本模式和图形模式
【发布时间】:2017-11-20 20:53:49
【问题描述】:

我正在为大学的汇编课程制作一个小游戏,其中我们使用 DosBox。游戏中有一个小的聊天窗口,但也有一些形状。我必须进入图形模式来绘制形状,但是在图形模式下字体看起来又大又丑。有没有办法在两种模式之间混合?也许有一半的屏幕是图形的,另一半是文本的?如果不是,我可以将图形模式字体变小或调整我想要的字符外观吗?

【问题讨论】:

  • 据我所知,VGA 无法从两种视频模式(如 Commodore 和 Atari 在 8b 和 16b IIRC 中)组成屏幕。但是您可以使用 640x480 16 色模式 (mov ax,12h int 10h) 以获得更精细的分辨率。准备好忍受在其中绘制任何东西的巨大痛苦(需要存储,并使用位平面),或者使用int 10h 的“绘制像素”,并且太老直到它完成绘制任何东西。 (即使有可能将真正的 VGA 弯曲到足够的程度,我怀疑它是否可以在模拟器下工作)
  • 字体变小 = "电脑说不"。至少只要您打算再次使用int 10h。您当然可以将自己的字体设计为像素数据,并创建自己的绘制字体例程(我自己做了,花了我大约 2-3 天 IIRC,在方格纸上绘制字体(大部分大小约为 5x8 像素),将其翻译成字节值,然后将它们从纸上写入计算机。还允许我使用可变字符宽度,为每个字形手动定义,因此输出是成比例的)。仍然是 320x200 的文本很糟糕。但是 256 种颜色对 16 种 ....
  • @Ped7g:那就不要使用模式10h。 Dosbox 模拟了许多 SVGA 适配器。实际上,如果想走普通的 VGA 路线,它在一定程度上也支持光栅技巧,尽管我也有点怀疑是否能够实现垂直文本/图形模式拆分。虽然这可能是一个有趣的小项目,但我怀疑它有点超出了这个问题的范围。
  • @doynax 是的。 SVGA 模式也是个好主意,它们和 0x12 模式(银行和/或位平面)一样糟糕,但至少分辨率会更好,颜色也会更好。无论如何,在 16b 实模式下除了 320x200 256col 之外的任何东西都很麻烦,我很高兴我们确实开始在 win32 下使用 DOS4GW 和 VBE2.0 以及后来的 DirectX 3.0 视频缓冲区......纯 16b DOS 只是痛苦。
  • @Ped7g:嗯,是的,在扩展模式下使用线性帧缓冲区。 Dosbox 支持它们,并且 32 位程序集更易于使用,即使它仍然是我们正在谈论的 x86

标签: assembly x86 dosbox


【解决方案1】:

你可以试试640x480 256色,只要你在配置文件中设置机器类型为:

machine=svga_s3

使用 int 10h 设置视频模式:

mov ax, 4f02h
mov bx, 101h
int 10h

还有很多其他视频模式以及 800x600、1024x768 等。

这是我通常使用的参考: http://www.wagemakers.be/english/doc/vga

此外,如果您处于图形模式,您可以创建自己的字符集。 只需将您的位图字符定义为变量,然后将它们写入从 a000:0000 开始的像素缓冲区。

从 0 到 0ffh 的字节值映射到 vga 调色板中的 256 种颜色之一(您可以搜索默认调色板)。因此,如果将值 4 写入 a000:0000,屏幕左上角的像素将设置为红色。

【讨论】:

  • 请注意,640x480@8bpp 是 300KiB 的内存,这不仅超出了 VGA 的能力,而且不能完全映射到 0a0000h 的标准 128KiB 孔中。除非在视频模式编号中设置了第 14 位,否则 VRAM 将存储在所述标准孔中。 Int 10h/AX=4f05可用于切换银行。
  • 是的,你是对的。我犯了一个错误。我编辑了关于像素缓冲区长度为 64,000 字节的部分。
猜你喜欢
  • 2012-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多