发现新的VGA模式(2016)

2021-03-30 00:13:38

鉴于Beckman主板上的CL-GD5429只有512KB的内存,但支持1280x1024模式(和1600x1200隔行扫描),我开始调查一年前高度分辨率模式的方法,2016年初的某个时间.1280x1024x4bpp使用640kb视频内存。如果我能找到减少1或2bpp的比特深度的方法,我会将内存用法降低到足以支持1280x1024在5429可用的限量内存中显示器。

拥有VGA上支持的常见模式的经验,我知道使用1和2BPP颜色深度有CGA兼容模式,因此这是我开始搜索的地方。但是,我很快意识到这些模式与内存没有效率。它们纯粹是为兼容性而设计的,没有别的,有效地是4BPP模式本身,屏蔽了2或3位,导致1和2BPP模式。这是一个死胡同。

但是,在我浏览5429技术参考手册期间,我注意到一对听起来有希望的比特。这两个是'转移和负载32'和#39;换档和装载16' VGA定序器中的位' s时钟寄存器(SR1)。

根据Cirrus逻辑技术参考,转移和负载32位,"根据下表控制图形控制器中的显示数据移位器:"

对我来说,这两个领域听起来可能就像1和2BPP模式的答案一样。一个'字符'在vga上进行图形时为8像素。由于VGA内存的组织(逻辑上)32位宽,8个4位像素通常适合一个单词,这意味着您将在每个字符时钟逻辑上加载视频移位寄存器。一起,' 4'视频移位器会一次向4位移动,每个像素一组4。但是,在2或1BPP模式中,每个单词的32像素分别为16或32像素,每个单词每个单词每个单词每个单词。因此,在这种情况下,您将每2或4个字符时钟加载一次数据移位器,因为现在一个单词相当于价值像素的字符数。虽然视频移位寄存器通常被认为是4个独立的8位移位寄存器,但我理论上(至少在这些模式中),换档寄存器实际彼此馈送,产生32位移位寄存器链,具有'水龙头和#39;每8位用于转到属性控制器的位(将4位值转换为将到Pallette DAC的8位颜色值)。

但是,这会带来另一个点:4位仍然转到属性控制器,即使在应该使用1或2位的这些情况下。当比特通过移位器移位时,它们会导致产生奇怪的颜色,并且较右侧像素的作用是更高的比特。例如,假设我们有一个装入这样的单色比特流,如下所示:

在第一个示例中,4位属性为0110,而在第二个中,它是0011.对于1BPP模式,我们实际上只关心该啃的LSB。幸运的是,有些方法可以在属性控制器中纠正它。首先,是使用'使能颜色平面' &#39中的位;颜色平面启用寄存器' (AR12)。这些位允许您和屏蔽属性中的其他位。使用值为0001的加载只选择1bpp模式的LSB,并且使用值为0101的加载选择2bpp模式的两个相关位。补救此问题的另一种方法是加载属性控制器调色板寄存器,使得所选颜色独立于不应影响颜色的比特。例如,使所有偶数属于一种颜色,而所有奇数属性都是另一种颜色,有效地忽略所有但LSB,给出相同的效果。类似地,使颜色0000,0010,1000和1010均有相同的有效忽略2bpp模式的位1和3。无论忽略无关位的方法都正确工作。这也是在VGA芯片组中提出潜在差异的点。它可能在某些芯片上,比特的角色可以颠倒。在某些芯片组上,应该使用的位是MSB,而忽略的位是3个较低位,并且类似于2BPP模式。我没有遇到这样的芯片,但这并不是意味着它没有存在(存在小的测试样本大小2)。

最后,定时问题似乎导致显示器在显示屏上正确开始之前重复左侧的前24个像素。这是通过正确设置另一个领域的解决方案来解决,这次在CRTC中。显示屏在&#39中启用偏斜字段;水平消隐结束寄存器' (CR3)应该设置为3,这似乎弥补了这个问题。

在2016年1月的某个时间,我终于成功地测试并实现了这个模式的1BPP变体。有些通过试验和错误,我能够找到关于显示的第三点,并且在许多实验之后,与各种'换档和装载'第一部分中描述的位设置。重要的是模式工作。然后,我变得好奇其他芯片组这种模式是可能的。我在CL-GD5429上证明了它,但它对他人有工作吗?不幸的是,我没有一个真正的IBM VGA控制器尝试这一点,但我也设法在我的Compaq 4 / 50cx上测试,它有某种WDC SVGA控制器。我最初有此问题,但最终我意识到使用笔记本电脑面板忽略各种CRTC寄存器中的设置,包括显示屏使能偏斜设置。通过更改为外部连接的VGA显示器,我能够改变正时和模式。给出了笔记本电脑中精确芯片的数据表,我确定我可以开发一个特定的修复,但这是模式的一个限制。如果在其他笔记本电脑上忽略了CRTC寄存器,这可能会导致同样的问题使得24像素重复发出不可装配。我在更现代化的奔腾4时代机器上测试了,但无论我尝试的内容如何,​​都无法获得这种模式。我怀疑图形芯片简单地支持它。一旦我设置班次和加载32位,我就在视频输出上奇怪了不稳定的行为。我也试图在我的现代英特尔I5笔记本电脑上运行,但是我可以让它启动DOS并运行我所做的QBASIC程序,所以我没有设法在这里测试它。

鉴于VGA寄存器中的其他差别比特和字段的目的似乎只是落入到另一个地方,一旦我开始致力于这一点,我理论大小IBM VGA芯片的设计者的意图是支持这些模式开始。但是,要使用它们的软件从未实施过,并且任何人都在低级软件中实现它们的文档太差了。此外,RAM的下降意味着很快VGA的低记忆变体将消失,这意味着大多数人支持640x480x4bpp,如果不是所有VGA卡在引入VGA控制器后即可。鉴于VGA卡几乎不支持任何更高的分辨率模式,比正常的640x480更高,都不需要尝试从可用的内存中挤出更多像素(正常VGA上256kb)。

我也没有知道这个模式有多少张不同的卡片。就此而言,我知道IBM VGA是否支持此模式。

无论如何,这些模式的有用性在VGA控制器上限制。他们确实允许的一件事是一个更大的虚拟帧缓冲器,VGA' S窗口进入CAN PAN并在内部滚动。谈论,即使使用1和2BPP模式,仍然完全支持平移和滚动,这似乎是在VGA硬件中对这些模式的计划支持的更多证据。通常,通过更改显示开始地址,您可以轻松实现1字达到VGA上的平移。 4BPP模式中的1字对应于8个像素。然而,VGA通过两个字段的组合支持32像素的硬件细腻平移。在1BPP模式下,1字平移最终产生32像素的平移。这与精细平移结合,仍然允许单个像素平移能力。这似乎建议VGA的创建者以1BPP模式设计,因此在4BPP模式下只需要8个像素的精细平移。用于&#39的字段;罚款'平移实际上是8像素粗&#39的组合;字节' CR8的平移场和AR13中的1像素精细平移场。它们一起给出了一个0-31像素的平移,结合了存储器地址字,允许完全平移任何图像。