【发布时间】:2017-11-20 20:53:49
【问题描述】:
我正在为大学的汇编课程制作一个小游戏,其中我们使用 DosBox。游戏中有一个小的聊天窗口,但也有一些形状。我必须进入图形模式来绘制形状,但是在图形模式下字体看起来又大又丑。有没有办法在两种模式之间混合?也许有一半的屏幕是图形的,另一半是文本的?如果不是,我可以将图形模式字体变小或调整我想要的字符外观吗?
【问题讨论】:
-
据我所知,VGA 无法从两种视频模式(如 Commodore 和 Atari 在 8b 和 16b IIRC 中)组成屏幕。但是您可以使用 640x480 16 色模式 (
mov ax,12hint 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。