跳转到内容

Signetics 2650 & 2636 编程/编程颜色

75% developed
来自 Wikibooks,开放世界中的开放书籍

教程 — 编程颜色

[编辑 | 编辑源代码]

这系列的控制台能使用的颜色调色板非常有限。PVI 有三个数字(即要么开要么关)颜色信号,它们连接到 PAL 编码器的红、绿和蓝输入端。这将系统限制为八种颜色:黑、红、绿、蓝、青、洋红、黄和白。

乍一看这似乎很简单,但有两个其他信号会影响显示屏上的颜色,这使得它变得复杂起来

  • PVI 的 OBJ/SCR 输出端,它会在显示对象或分数数字时变为低电平。请记住:SCR 是分数,而不是屏幕!
  • 74LS138 '效果' 寄存器的第 5 位。

另一个复杂之处在于,一些控制台(如 Interton VC4000)使用这些信号来改变颜色的亮度,而另一些控制台则使用它来反转颜色。本页面的其余部分适用于颜色反转方法,特别是 Voltmace 数据库中实现的方法。

硬件描述

[编辑 | 编辑源代码]
Voltmace 数据库视频游戏控制台中的颜色控制电路的方框图。

连接到 PAL 编码器的三个有效电平颜色输入端直接连接到 PVI 的有效低电平颜色输出端:RGB

连接到 PAL 编码器的有效电平 INV 输入端是从一个线与电路导出的,该电路包含一个开集电极晶体管、开漏 OBJ/SCR 和一个上拉电阻。这两个器件中的任何一个都可以将反转输入拉至低逻辑电平。

INVERT 信号通过写入十六进制 D 型触发器 74LS378 的第 5 位(在内存地址 $1E80 处)来设置。将 1 写入该位会导致晶体管导通,并无论 OBJ/SCR 的状态如何,都将 PAL 编码器的 INV 输入拉至逻辑 0。

寄存器

[编辑 | 编辑源代码]

所有颜色信息都由四个寄存器控制,三个在 PVI 中,一个在逻辑芯片中。请注意,这些寄存器都是只写寄存器。程序员需要自行跟踪寄存器中的内容。

$1E80 '效果' 寄存器

[编辑 | 编辑源代码]
7 6 5 4 3 2 1 0
- - INVERT - - - - -

该寄存器中的其他位由音频电路使用。

$1FC1 颜色对象 1 & 2

[编辑 | 编辑源代码]
7 6 5 4 3 2 1 0
X X R1 G1 B1 R2 G2 B2

$1FC2 颜色对象 3 & 4

[编辑 | 编辑源代码]
7 6 5 4 3 2 1 0
X X R3 G3 B3 R4 G4 B4

$1FC6 背景和屏幕 — 启用和颜色

[编辑 | 编辑源代码]
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

教程程序

[编辑 | 编辑源代码]
在 Voltmace 数据库游戏机上演示颜色编程

此教程的代码可以在 Signetics 2650 & 2636 编程/教程代码 - 编程颜色 找到。运行此程序后,您应该看到一个静态屏幕,如下所示

四个对象以不同的颜色编程。当第一行对象显示后,效果寄存器中的 反转 位被设置为 1。这会反转屏幕的颜色(黄色 110 变为蓝色 001),并且背景从黑色切换到白色。

请注意,此转换之上和之下的对象和分数数字是相同的。还要注意,分数是为背景编程的颜色反转。

  1. 将四个对象的颜色更改为红色、青色、黄色和蓝色。
  2. 将背景网格的初始颜色更改为青色。
  3. 将分数的颜色更改为洋红色。


华夏公益教科书