跳转到内容

Signetics 2650 & 2636 编程/2636 PVI

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

Signetics 2636 可编程视频接口 (PVI) 是一款 40 引脚 DIL 芯片,它处理控制台中的许多功能

  • 视频生成
    • 屏幕颜色
    • 背景网格
    • 得分数字
    • 四个对象(精灵)
    • 对象完成和碰撞检测
  • 方波音频
  • 模拟操纵杆的 A/D 转换
  • 内存和输入/输出设备的芯片选择信号
  • 37 字节的暂存器内存

所有这些功能都是通过读取和写入 PVI 中的各种寄存器来实现的。

PVI 的图形功能
       屏幕颜色

     得分数字      对象      背景网格      对象复制

PVI 寄存器

[编辑 | 编辑源代码]

在内部,PVI 寄存器位于地址 $F00 到 $FFF。在控制台的内存映射中,它们位于地址 $1F00 到 $1FFF。程序员只需要关心这些后者的地址,因此这些将是我们在本书中使用的地址。出于同样的原因,我们还将忽略内存映射重复的区域。

请注意,某些控制寄存器是只写寄存器。如果程序需要知道其中任何一个的内容,则必须将副本保存在其他地方。对一台控制台上的某些寄存器进行的测试表明,如果尝试进行读取操作,则内容将被破坏。

PVI 寄存器
1F00 对象描述符 1
1F0E 2 字节的暂存器
1F10 对象描述符 2
1F1E 2 字节的暂存器
1F20 对象描述符 3
1F2E XXXXXXXXXXXXXXXXX
1F40 对象描述符 4
1F4E 32 字节的暂存器
1F6E XXXXXXXXXXXXXXXXX
1F80 背景垂直
条定义
1FA8 背景水平
条扩展
1FAD 1 字节的暂存器
1FAE XXXXXXXXXXXXXXXXX
1FC0 控制寄存器
1FD0 复制 1FC0
1FE0 复制 1FC0
1FF0 复制 1FC0
对象描述符 1、2、3 或 4
0 对象的形状,
10 行 8 位
1
2
3
4
5
6
7
8
9
A 对象的水平坐标
B 复制的水平坐标
C 对象的垂直坐标
D 复制的垂直偏移量
控制寄存器
字节 7 6 5 4 3 2 1 0 读/写 功能
1FC0 对象 4 大小 对象 3 大小 对象 2 大小 对象 1 大小 只写 对象的大小
1FC1   R1 G1 B1 R2 G2 B2 只写 对象的颜色
1FC2   R3 G3 B3 R4 G4 B4 只写
1FC3   格式 位置 只写 得分格式和位置
1FC4      
1FC5  
1FC6  
网格颜色
R G B
网格启用
屏幕颜色
R G B
只写 网格启用和颜色
1FC7 声音 只写 音调周期
1FC8 得分数字 1 得分数字 2 只写 四个得分数字的值
1FC9 得分数字 3 得分数字 4
1FCA
对象/网格碰撞
1 2 3 4
对象显示完成
1 2 3 4
只读 碰撞状态。对象显示完成。VRLE 设置在 VRST 的前沿。所有位在读取时或 VRST 的后沿复位。
1FCB   VRLE
对象间碰撞
1/2 1/3 1/4 2/3 2/4 3/4
1FCC A/D 电位器 1 只读 A/D 值,仅在 VRST 期间有效。
1FCD A/D 电位器 2
1FCE      
1FCF  

PVI 有四个可编程的二维对象,可以放置在屏幕上的任何位置,以单一的 3 位颜色以四种不同大小之一显示。据说 PVI 是第一个具有此功能的设备。这种图形样式后来被称为精灵,但我们将在本书中坚持使用“对象”,因为它是在 Signetics 数据表中使用的术语。

对象形状

[编辑 | 编辑源代码]

对象的形状设置在一个 10 字节的数组中。设置为零的位是透明的,而设置为一的位显示为选定的颜色。

对象颜色

[编辑 | 编辑源代码]

对象颜色由寄存器 $1FC1 和 $1FC2 设置。有关详细信息,请参阅 编程颜色

对象大小

[编辑 | 编辑源代码]

对象可以以四种不同的尺寸显示,如寄存器 $1FCO 中的两位设置。

放大倍数 尺寸 MSB LSB
x1 8 x 10 0 0
x2 16 x 20 0 1
x4 32 x 40 1 0
x8 64 x 80 1 1

对象位置

[编辑 | 编辑源代码]

对象的位置是根据屏幕左上角电视扫描的原点确定的。

水平坐标(即 $1F0A)设置为在光栅线开始后跳过的水平时钟数,然后显示对象。它可以在显示对象时更改,在这种情况下,对象的其余部分将被移位。对象的垂直坐标(即 $1F0C)使用 8 位无符号值设置,该值等于跳过的行数,然后显示对象。此值必须在 VRST 的后沿之前设置。

对象复制

[编辑 | 编辑源代码]

屏幕下方可以显示一个或多个重复对象。重复对象的水平坐标(即 $1F0B)的设置方式与原始对象相同。重复对象的垂直坐标设置为在显示其前一个对象的最后一行后“要跳过的行数 - 1”。

PVI 在 HRST 期间的每一行读取重复对象的水平坐标,因此如果在显示重复对象期间更改了该坐标,则重复对象的其余部分将出现在不同的位置。必须在对象完成状态位由该对象的先前出现设置之前,对重复对象的垂直坐标进行编程。

对象完成

[编辑 | 编辑源代码]

当对象的最后一行显示后,寄存器 $1FCA 中会设置一个对象完成位,并且 PVI 会为微处理器生成一个中断信号。

对象碰撞

[编辑 | 编辑源代码]

如果对象与背景网格重叠,则寄存器 $1FCA 中会设置一个对象/网格碰撞位。如果两个对象重叠,则寄存器 $1FCB 中会设置一个对象间碰撞位。

另请参阅:教程 - 得分

四个得分数字可以显示为两个独立的两位数,也可以显示为一个四位数。它们可以显示在屏幕的顶部或底部,或者通过在第 40 行到第 199 行之间的垂直扫描期间重新编程,它们可以同时出现在顶部和底部。显示模式由寄存器 $1FC3 的格式和位置位确定。

$1FC3 7 6 5 4 3 2 1
格式
0
位置
0 两个两位数 顶部
1 一个四位数 底部

每个得分数字宽 12 个时钟周期,高 20 行。

顶部位置对应于背景网格的第 0 行到第 19 行,或垂直坐标 20 到 39。底部位置对应于第 180 行到第 199 行,或垂直坐标 200 到 219。

得分的颜色与为背景网格编程的颜色相反。请参阅:编程颜色

得分数字的水平位置
  1 2 3 4 外观
格式 = 0 28 44 76 92 12  34
格式 = 1 28 44 60 76 1234

寄存器 $1FC8 和 $1FC9 中的四个得分数字可以设置为 0 到 F 的任何十六进制值。值 0-9 显示为数字,A-F 显示为空白。

背景网格

[编辑 | 编辑源代码]

PVI 具有一个可编程的背景网格,该网格由一个 16 宽 20 深的元素数组组成。

这些元素是垂直条,宽一个像素,排列成成对的水平行;每对中的第一行深两个光栅行,第二行深 18 个光栅行。通过在内存地址 $1F80 - $1FA7 处位于 40 字节数组中设置一个位,可以打开或关闭这 320 个垂直条中的每一个。

垂直条可以水平扩展,由五个寄存器 $1FA8 - $1FAC 控制。五个扩展寄存器中的每一个都控制四行连续的垂直条。

扩展寄存器
寄存器 7 6 5 4 3 2 1 0
  扩展组 x1、x2、x4 扩展行 x8
$1FA8 行 1-4 4B 4A 3 2B 2A 1
$1FA9 行 5-8 8B 8A 7 6B 6A 5
$1FAA 行 9-12 12B 12A 11 10B 10A 9
$1FAB 行 13-16 16B 16A 15 14B 14A 13
$1FAC 行 17-20 20B 20A 19 18B 18A 17
     
组扩展
扩展    7        6    
x1 0 0
x2 0 1
x1 1 0
x4 1 1

扩展寄存器的位 5-0 使所有水平行中的垂直条都能够扩展到 8 个像素。18 行垂直条被分成两部分(A 和 B),每部分 9 行,从而可以将条的顶部和底部部分分别扩展 1、2 或 4 个像素。

扩展寄存器的位 7-6 使四行组中的所有垂直条都能够扩展到 1、2 或 4 个像素。

背景网格的颜色由寄存器 $1FC6 中的位 2-0 设置。通过设置寄存器 $1FC6 中的位 3 来启用背景网格。如果未启用背景网格,则寄存器 $1F80-$1FAC 可用作暂存内存,总共 45 字节,此外还有 37 字节的暂存内存。

PVI 可以生成单个音频方波输出。其频率由寄存器 $1FC7 设置。如果此值为 0,则方波将被抑制,否则其周期为 2(n+1)TH,其中 n 是在 $1FC7 中设置的值,TH 是水平复位周期。对于 PAL 系统,这简化为 128(n+1)μs。

如果在音频输出期间更改了声音寄存器,则更改将在音频信号的下一个负或正转换之前不会生效。

请参阅PVI 音频频率图表以获取可获得频率的表格。

模拟到数字转换

[编辑 | 编辑源代码]

PVI 中的两个模拟到数字转换器用于确定模拟操纵杆的位置。由处理器的标志输出驱动的外部电路用于选择来自水平或垂直电位器的输入。

转换过程发生在视频扫描的活动部分。必须在垂直复位期间从 $1FCC 和 $1FCD 读取生成的数字值才能获得有效结果。

参考文献

[编辑 | 编辑源代码]
华夏公益教科书