Signetics 2650 & 2636 编程/对象
PVI 最强大的功能是它的四个可重编程对象。一些资料指出这款 Signetics 芯片(约 1977 年)是首个商用可用的在视频芯片上实现内存映射对象的硬件。
本教程的代码可以在 教程代码 - 对象 中找到。它生成了这里显示的静态屏幕。有四个对象,分别为 1、2、3 和 4,它们的颜色和大小各不相同。还有对象 1、2 和 4 的副本。
这是对这些对象进行编程的代码部分。它来自由 WinArcadia 汇编器创建的列表文件。
;set the colour of the four objects: 002D 0403 : lodi,r0 %00000011 002F CC1FC1 : stra,r0 colours12 ; obj 1 white, 2 red 0032 0429 : lodi,r0 %00101001 0034 CC1FC2 : stra,r0 colours34 ; obj 3 green, 4 yellow ; set the size of the four objects: 0037 04E4 : lodi,r0 %11100100 0039 CC1FC0 : stra,r0 objectsize ; load the shape and size of the four objects: 003C 070E : lodi,r3 $0E :loopISe: 003E 0F4059 : loda,r0 one,r3- 0041 CF7F00 : stra,r0 shape1,r3 0044 0F6067 : loda,r0 two,r3 0047 CF7F10 : stra,r0 shape2,r3 004A 0F6075 : loda,r0 three,r3 004D CF7F20 : stra,r0 shape3,r3 0050 0F6083 : loda,r0 four,r3 0053 CF7F40 : stra,r0 shape4,r3 0056 5B66 : brnr,r3 loopISe
让我们逐一看看每个部分。
黑色 | 111 |
蓝色 | 110 |
绿色 | 101 |
青色 | 100 |
红色 | 011 |
洋红色 | 010 |
黄色 | 001 |
白色 | 000 |
一个对象内的像素颜色都相同。每个对象的颜色由 PVI 寄存器 $1FC1 和 $1FC2 中的三个位设置(共有八种颜色可选)。
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|
$1FC1 | X | X | R1 | G1 | B1 | R2 | G2 | B2 |
$1FC2 | X | X | R3 | G3 | B3 | R4 | G4 | B4 |
程序设置
$1FC1 = 00000011 = 00 000 011 = 白色 红色
$1FC2 = 00101001 = 00 101 001 = 绿色 黄色
放大倍率 | 大小 | 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 |
每个对象的大小可以独立设置为四种不同的尺寸之一。每个对象可以有 10、20、40 或 80 行的高度,宽度也按类似的方式缩放,分别为 8、16、32 或 64 个水平时钟周期。单个像素不是正方形,它们大约是高度的两倍宽,在设计形状时这一点很重要。
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
1FC0 | 对象 4 的大小 | 对象 3 的大小 | 对象 2 的大小 | 对象 1 的大小 |
程序设置
$1FC0 = 11100100 = 11 10 01 00 = x8 x4 x2 x1
0 | 对象的形状, 8 位的 10 行 |
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
A | 对象的水平坐标 |
B | 副本的水平坐标 |
C | 对象的垂直坐标 |
D | 副本的垂直偏移量 |
四个对象的形状和位置分别由 14 个称为对象描述符的寄存器定义,这些寄存器按顺序排列为 10 个字节的形状数据、一个水平坐标 (HC)、一个副本的水平坐标 (HCB)、一个垂直坐标 (VC) 和一个副本的垂直偏移量 (VCB)。
对这些对象进行编程的代码将来自表一、表二、表三、表四的数据块复制到对象描述符 $1F00、$1F10、$1F20 和 $1F40。寄存器 R3 用作索引寄存器,循环运行 14 次,在每次循环中设置四个对象描述符中的一个字节。
在定义形状的对象描述符的十个字节中,设置为零的位是透明的,而设置为一的位显示为已编程的颜色。
屏幕上任何主对象的坐标都由其相应的水平 (HC) 和垂直 (VC) 坐标设置,原点位于屏幕的左上角。坐标可以是任何八位值,但大于 227 的水平坐标会将对象推到屏幕的右侧,而大于 252 的垂直坐标会将对象推到屏幕的底部。
这些对象的强大功能来自这样一个事实,即它们可以在屏幕上更下方再次输出。一次又一次地……事实上,一次可以在屏幕上显示多达 80 个对象。这些被称为副本。副本对象始终位于其前一个对象的下方,它们不能重叠。副本的水平坐标只是它距屏幕左边缘的距离,与原始副本的指定方式相同。副本的垂直位置更复杂,它是相对于其前一个对象的垂直偏移量。
也可以在副本之间重新编程对象的形状、大小和颜色,但这需要一些实时编程,将在后面的教程中讨论。
|
对象 1 的水平坐标为 10,其副本的坐标也是如此。其垂直坐标为 20,其所有副本都相对于其前一个对象垂直偏移 20。
对象 2 的副本向左偏移了 5 个像素,并垂直偏移了 10 个像素。
对象 3 是单独的。它的副本通过将垂直偏移量设置为 250 被推到了屏幕底部。
对象 4 的副本全部紧贴在一起。这是通过将偏移量设置为 255 实现的。这可能看起来有点奇怪,但如果将 255 转换为 8 位二进制,然后将其解释为带符号的二进制补码,我们就会得到 -1。这是因为 VCB 必须设置为“要跳过的行数 - 1”。如果你想要 1 行的间隙,则将 VCB 设置为 0,依此类推。
- 更改对象的大小。
- 更改对象的形状。
- 更改对象的位置。
- 更改对象副本的位置。