Signetics 2650 & 2636 编程/编程颜色
这系列的控制台能使用的颜色调色板非常有限。PVI 有三个数字(即要么开要么关)颜色信号,它们连接到 PAL 编码器的红、绿和蓝输入端。这将系统限制为八种颜色:黑、红、绿、蓝、青、洋红、黄和白。
乍一看这似乎很简单,但有两个其他信号会影响显示屏上的颜色,这使得它变得复杂起来
- PVI 的 OBJ/SCR 输出端,它会在显示对象或分数数字时变为低电平。请记住:SCR 是分数,而不是屏幕!
- 74LS138 '效果' 寄存器的第 5 位。
另一个复杂之处在于,一些控制台(如 Interton VC4000)使用这些信号来改变颜色的亮度,而另一些控制台则使用它来反转颜色。本页面的其余部分适用于颜色反转方法,特别是 Voltmace 数据库中实现的方法。
连接到 PAL 编码器的三个有效电平颜色输入端直接连接到 PVI 的有效低电平颜色输出端:R、G、B。
连接到 PAL 编码器的有效电平 INV 输入端是从一个线与电路导出的,该电路包含一个开集电极晶体管、开漏 OBJ/SCR 和一个上拉电阻。这两个器件中的任何一个都可以将反转输入拉至低逻辑电平。
INVERT 信号通过写入十六进制 D 型触发器 74LS378 的第 5 位(在内存地址 $1E80 处)来设置。将 1 写入该位会导致晶体管导通,并无论 OBJ/SCR 的状态如何,都将 PAL 编码器的 INV 输入拉至逻辑 0。
所有颜色信息都由四个寄存器控制,三个在 PVI 中,一个在逻辑芯片中。请注意,这些寄存器都是只写寄存器。程序员需要自行跟踪寄存器中的内容。
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
- | - | INVERT | - | - | - | - | - |
该寄存器中的其他位由音频电路使用。
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
X | X | R1 | G1 | B1 | R2 | G2 | B2 |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
X | X | R3 | G3 | B3 | R4 | G4 | B4 |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
X | R | G | B | 背景 启用 |
R | G | B |
X | 背景颜色 | 屏幕颜色 |
如果背景启用设置为零,则屏幕和背景网格都将从 PVI 输出为 '111'。
如果背景网格不用于图形,则定义它的寄存器($1F80 - $1FAC)可用于变量存储。通过将背景和屏幕设置为相同的颜色,它们在显示屏上隐藏起来。
如果您觉得硬件描述难以理解,因为它包含多个反转,那么您并不孤单。在编程颜色时,您只需要使用下面的表格。
颜色 | 对象 | 背景或屏幕 | |
INVERT = 0 | INVERT = 1 | ||
黑色 | 111 | 000 | 111 |
蓝色 | 110 | 001 | 110 |
绿色 | 101 | 010 | 101 |
青色 | 100 | 011 | 100 |
红色 | 011 | 100 | 011 |
洋红色 | 010 | 101 | 010 |
黄色 | 001 | 110 | 001 |
白色 | 000 | 111 | 000 |
分数颜色无法独立编程;它始终是为背景编程的颜色反转。
对象颜色和分数颜色都不会受到 74LS138 '效果' 寄存器的第 5 位状态的影响,因为在显示它们时,OBJ/SCR 将为低电平。
INVERT 位在一些游戏中使用,例如 Interton 的超级太空,作为屏幕保护程序。虽然将 INVERT 位正常设置为 0 非常诱人,但最好将其正常设置为 1。这样,对象、分数、背景和屏幕的颜色代码就相同,并且将处于负逻辑状态,即 0 使颜色打开。
所有颜色都由这四个寄存器设置
effects equ $1E80 colours12 equ $1FC1 colours34 equ $1FC2 backgnd equ $1FC6
在程序的早期清除效果寄存器是一个好主意。这不仅会关闭颜色反转,还会关闭音频。
eorz r0 stra,r0 effects
或者,如上所述,可以关闭音频并打开颜色反转,以便所有颜色都可以使用相同的代码编程。
lodi,r0 $20 stra,r0 effects
请记住,对象的颜色始终为低电平有效,因此 RGB 序列 101 将显示为绿色,等等。
lodi,r0 %00010101 ; XX / 011 / 110 stra,r0 colours12 ; / obj1 red / obj2 blue
背景和屏幕颜色取决于反转位的状态。当反转位为 0 时,它们的的颜色始终为高电平有效,因此 RGB 序列 010 将显示为绿色,等等。
eorz r0 stra,r0 effects ; invert bit = 0 lodi,r0 %00001110 ; X / 100 / 1 / 001 stra,r0 backgnd ; / background red / enabled / screen blue
相反,当反转位为 1 时,它们的的颜色为低电平有效,因此 RGB 序列 101 将显示为绿色,等等。
lodi,r0 $20 stra,r0 effects ; invert bit = 1 lodi,r0 %00001110 ; X / 011 / 1 / 110 stra,r0 backgnd ; / background red / enabled / screen blue
此教程的代码可以在 Signetics 2650 & 2636 编程/教程代码 - 编程颜色 找到。运行此程序后,您应该看到一个静态屏幕,如下所示
四个对象以不同的颜色编程。当第一行对象显示后,效果寄存器中的 反转 位被设置为 1。这会反转屏幕的颜色(黄色 110 变为蓝色 001),并且背景从黑色切换到白色。
请注意,此转换之上和之下的对象和分数数字是相同的。还要注意,分数是为背景编程的颜色反转。
- 将四个对象的颜色更改为红色、青色、黄色和蓝色。
- 将背景网格的初始颜色更改为青色。
- 将分数的颜色更改为洋红色。