Categories: 技术

保持并修改模式

保持并修改模式(Hold-And-Modify 通常缩写为HAM)是Commodore Amiga计算机的显示模式。 它使用非常不寻常的技术来表示像素的颜色,允许更多的颜色出现在屏幕上。 HAM模式通常用于显示数字化的照片或视频帧,位图艺术和偶尔的动画。 在Amiga 1985年推出的时候,这款接近真实感的显示器对于家用电脑来说是前所未有的,并且它被广泛用于演示Amiga的图形功能。 但是,HAM具有严重的技术限制,不能将其用作通用显示模式。

背景
最初的Amiga芯片组采用带有12位RGB色彩空间的平面显示器,可产生4096种可能的颜色。

游戏区的位图被保存在称为芯片RAM的主存储器的一部分中,该存储器在显示系统和主CPU之间共享。 由于时间考虑,芯片组在绘制屏幕上的下一个像素之前,只有时间读取每像素6位。 为了减少描述图像所需的数据量并因此适合该限制,显示系统使用具有调色板的索引颜色系统。

硬件包含32个寄存器,可以将其设置为4096种可能的颜色中的任何一种,图像可以使用每像素5位访问这32个值中的任何一个。 第六个可用位被称为Extra Half-Brite的显示模式所使用,该模式将该像素的亮度降低了一半,为产生阴影效果提供了一种简便的方法。

保持和修改模式
当首次设计Amiga芯片组时,它直接在NTSC信号的色度,色调和亮度值上进行操作,这与早期使用电视机进行显示的家庭计算机很相似。 这导致通过设置扫描线开始处的颜色值并且然后使位图值仅修改亮度值而显着减少显示诸如黑色和白色电视的单色图像所需的存储器量的可能性。 由于模拟电视图像只能在多个像素之间从黑色变为白色,而不是立即从一个变为下一个,所以四个像素将足以提供可信的“黑白”图像,将存储所需的内存量减半图片。

随着Amiga设计从游戏机迁移到家用电脑,芯片组也从HSL颜色模型转移到现代RGB颜色模型。 引用杰伊Miner:

“ 保留和修改来自一次旅行,以查看飞行模拟器的行动,并且我对一种原始类型的虚拟现实有了一种想法。 芯片上的NTSC意味着你可以保持色调并通过仅改变四位来改变亮度。 当我们改为RGB时,我说这已经不再需要了,因为它没用,我请芯片布局人员把它关掉。 他回来说,这将在芯片中间留下一个大洞,或者进行为期三个月的重新设计,我们不能这么做。 我不认为有人会使用它。 我错了,因为这已经给Amiga带来了色彩方面的优势。 ”
保持 – 修改本质上是对原始亮度概念的修改,但这次允许修改三种​​颜色分量之一,即红色,绿色或蓝色。 HAM可以被认为是有损压缩技术; 在HAM6模式下,比赛场被编码为12比特彩色空间通常所需存储器的一半。 以水平色度分辨率为代价获得更大的整体色彩保真度。 当显示图形缓冲区时,HAM编码的色彩空间由显示硬件实时“解压缩”。

用法
当Amiga于1985年推出时,HAM模式比竞争系统提供了显着的优势。 HAM允许同时显示所有4096种颜色,但具有上述限制。 这种伪真实感显示对于当时的家用计算机来说是前所未有的,并且允许显示数字化照片和渲染3D图像。 相比之下,当时的IBM-PC标准EGA允许从64个调色板中获得16种屏幕色彩。EGA的继任者VGA于1987年发布,其旗舰游戏模式Mode 13h允许262,144种屏幕上的256种色彩。 HAM模式经常用于演示Amiga在商店展示和交易演示中的能力,因为竞争硬件无法匹配颜色深度。 由于上述限制,HAM主要用于显示静态图像,开发人员很大程度上避免使用游戏或需要动画的应用程序。

随着高级图形体系结构的推出,传统的平面图像可以具有256种颜色的调色板,提供显着更高的色彩保真度。 具有有限色彩分辨率的原始HAM模式对于AGA机器的用户来说吸引力要小得多,尽管它仍然是为了向后兼容而包含的。 由于平面256色调色板大大增加了艺术家的选项,而没有遭受HAM模式的缺点,所以新的HAM8模式对于AGA芯片组来说远不如HAM模式有用。 一个编程良好的切片平面模式可以证明比HAM8更有用。 尽管有限的视频缓冲区大小和有限的存储器带宽,但HAM的原始目的不再是相关的,它允许更多的颜色分辨率。

由于现代计算机具有高分辨率真彩色显示器,因此不再需要像HAM这样的显示技术。 由于现代图形硬件具有足够的内存带宽来使用打包像素,现在平面图形对于通用计算也已过时。

限制
HAM模式对赛场的每条水平线上的相邻像素的值进行限制。 为了相邻渲染两个任意颜色,可能需要最多两个中间像素才能更改为所需的颜色(如果红色,绿色和蓝色组件都必须全部修改)。 在最坏的情况下,这将水平色度分辨率从704像素降低到240像素(相比之下,像VHS这样的当代技术在0.4MHz时的色度分辨率为40)。 这个问题在具有强烈对比度(强烈的水平图像梯度)的区域尤其明显,其中可能出现不希望的多色人为因素或“边缘”。 各种渲染技术被用于最小化“边缘”的影响,并且HAM显示器通常被设计为包含细微的水平颜色梯度,避免垂直边缘和对比度。

在HAM模式下显示全彩色图像需要仔细的预处理。 因为HAM一次只能修改其中一个RGB组件,所以通过对这些转换使用其中一个预设颜色寄存器可以最好地实现沿着扫描线的快速颜色转换。 为了渲染任意图像,程序员可以选择首先检查原始图像中最明显的这些转换,然后将这些颜色分配给其中一个寄存器,这种技术称为自适应调色板。 但是,在原始HAM模式下只有16个可用寄存器,颜色保真度会有所下降。

另外,HAM模式不容易允许显示的任意动画。 例如,如果需要将游戏区域的任意部分移动到另一个屏幕位置,则可能必须在所有源线和目标线上重新计算保留和修改值,以正确显示图像(操作不是非常适合动画)。 具体而言,如果动画对象的最左边缘包含任何“修改”像素,或者如果对象右侧的图像包含任何“修改”像素,则必须重新计算这些“保留”和“修改”值。 尝试在屏幕上移动对象(例如使用阻击器)将会在该图像的左右边缘创建明显的边缘,除非图形是专门为避免这种情况而设计的。 为了避免重新计算Hold-and-Modify值和规避边缘,程序员必须确保每个blitter对象的最左侧像素和滚动playfield每行的最左侧像素是“set”像素。 调色板必须进行设计,以便它包含每个这样的最左边的像素。 或者,可以通过程序生成生成像素值来生成HAM显示,但这通常仅适用于合成图像,例如演示中使用的“彩虹”效果。

但是,请注意,“保持并修改”仅适用于球场像素。 每个扫描线128个像素的Sprite数据(在DMA模式下)仍然可以放置在HAM playfield的顶部。

实现
原始芯片组HAM模式(HAM6)
HAM6模式(以每像素6位数据命名)与原始芯片组一起引入,并保留在后来的增强型芯片组和高级图形架构中。 HAM6允许最多4096种颜色以320×200到360×576的分辨率同时显示。

Related Post

HAM6编码使用每像素六位:控制两位,数据四位。 如果两个控制位都设置为零,则剩余的四位用于索引16个预设颜色寄存器中的一个,以正常索引位图的形式操作。 其他三种可能的控制位模式表示应该使用扫描线上前一个像素的颜色(左边),而数据位应该用来修改红色,绿色或蓝色分量的值。 因此,有四种可能性:

设置:使用4位数据来索引16色调色板中的颜色。 为该像素使用该颜色。
修改红色:保留前一个像素的绿色和蓝色分量。 使用4位数据作为该像素的新红色分量。
修改绿色:保持前一个像素的红色和蓝色分量。 使用4位数据作为该像素的新绿色分量。
修改蓝色:保留前一个像素的红色和绿色分量。 使用4位数据作为此像素的新蓝色分量。
类似的模式,HAM5,也是可用的,但它是无用的。 在HAM5中,第六位始终为零,因此只能修改蓝色分量。

切片HAM模式(SHAM)
原始的Amiga芯片组包括一个称为“铜”的支持芯片,该芯片可独立于CPU和视频系统处理中断和其他定时和内务工作。 使用Copper时,可以在视频显示器处理垂直或水平空白中断(HBI)的同时,回拨CPU以执行短任务。 这允许程序员将机器代码绑定到显示器而不会引起视觉伪影,这使得许多视频效果更容易实现。

使用这种技术,程序员开发了切片HAM或SHAM模式,也称为动态HAM。 SHAM使用在选定的扫描线上调用的计算机代码,或者它们全部在HBI期间改变调色板。 这意味着每条扫描线都可以有自己的16基色。 这使得选择调色板变得简单多了,现在可以按照每行而不是按图像来完成调色板。 这种方法唯一的缺点是,图像不再仅仅存储在芯片RAM中,因为控制程序必须保存多个调色板,并且设置SHAM模式有一些复杂性。

这种技术不仅限于HAM,还广泛用于机器的更传统的图形模式。 动态高分辨率使用类似的调色板更改技术在高分辨率模型中每行生成16种颜色,而HAM仅限于低分辨率,但同时允许16种索引颜色以及它们的修改。

当HAM8被引入时,SHAM的想法就被弃用了,因为即使是未切割的HAM8图像,其颜色分辨率也比切片的HAM6图像要多得多。 但是,SHAM仍然是原始芯片组上Amigas上可用的最佳HAM模式。

高级图形体系结构HAM模式(HAM8)
随着1992年发布高级图形体系结构(AGA),原始HAM模式被重新命名为“HAM6”,并且引入了新的“HAM8”模式(编号后缀代表相应HAM模式使用的位平面)。 通过AGA,每个颜色分量不是4位,Amiga现在每个颜色分量高达8位,导致16,777,216种可能的颜色(24位颜色空间)。

HAM8的工作方式与HAM6相同,每个像素使用两个“控制”位,但每个像素有六位数据而不是四个。 设置操作从64种颜色而不是16种颜色的调色板中进行选择。修改操作修改红色,绿色或蓝色分量的六个最高有效位 – 颜色的两个最低有效位不能通过此操作进行更改并保留如最近设置的操作所设置的那样。 与HAM6相比,HAM8可以显示更多的屏幕颜色。 据报道,使用HAM8的最大屏幕色彩数量为262,144种颜色(18位RGB色彩空间)。 实际上,唯一屏幕颜色的最大数量可能大于262,144,具体取决于64色调色板中每个颜色分量的两个最低有效位。 理论上,所有1670万种颜色都可以用足够大的屏幕和适当的基础调色板来显示,但实际上达到完全精确度的限制意味着两个最低有效位通常被忽略。 通常,感知的HAM8色彩深度大致相当于高彩色显示。

HAM8的垂直显示分辨率与HAM6相同。 如前所述,水平分辨率可以是320(360,具有过扫描),加倍至640(720过扫描)或甚至四倍至1280像素(1440,具有过扫描)。 AGA芯片组还为传统的平面显示模式引入了更高的分辨率。 使用PAL模式时,HAM8图像中的像素总数不能超过829,440(1440×576),但可以使用第三方显示硬件(Indivision AGA闪烁固定器)超过1,310,720(1280×1024)。

像原始HAM模式一样,HAM8屏幕无法在任意位置显示任意颜色,因为每个像素都依赖于有限的调色板,或依赖于上一个像素的最多两个颜色分量。 和最初的HAM模式一样,设计师也可以选择“切分”显示器(见下文)以避开这些限制。 HAM7模式也可用,但没有广泛使用。

HAM仿真
HAM是Amiga及其独特芯片组所独有的。 为了允许直接渲染以HAM格式编码的传统图像,基于软件的HAM仿真器已经被开发出来,其不需要原始的显示硬件。 AmigaOS的4.0以前版本可以在本地Amiga芯片组的情况下使用HAM模式。 AmigaOS 4.0及更高版本,专为完全不同的硬件而设计,可在现代笨重的图形硬件上使用HAM仿真。 运行在非本地硬件上的专用Amiga仿真器可以通过仿真显示硬件来显示HAM模式。 但是,由于没有其他计算机体系结构使用HAM技术,因此在任何其他体系结构上查看HAM映像都需要对该映像文件进行编程解释。 忠实的基于软件的解码将产生相同的结果,从而避免显示设置之间的色彩保真度变化。

然而,如果目标仅仅是在非Amiga平台上显示SHAM图像,则可以基于通过铜表编程的调色板条目来预先计算所需的颜色值,而不管调色板是否被修改扫描线的中间。 始终可以将HAM或SHAM图像无损地上转换为32位调色板。

第三方HAM实施
由黑带生产的称为HAM-E的设备能够以原始芯片组的Amiga在低水平分辨率下生成具有HAM8色彩深度的图像。

Amiga将被设置为产生高分辨率图像(640像素宽,720过扫描)。 这需要每像素70纳秒使用四个位平面。 图像的前几行编码信息来配置HAM-E单元。 然后,每对像素用HAM-E单元的信息编码,该单元将信息转换成一个140纳秒像素(产生320像素宽的图像,或者在8个位平面的颜色深度处过滤扫描360度)。 HAM-E的质量因此与低分辨率HAM8图像相当。 HAM-E技术利用了以下事实:具有四个位平面的高分辨率图像比具有六个位平面的低分辨率图像提供更多的第三存储器带宽,并因此多出第三数据。

Share