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,依此類推。
- 更改物件的大小。
- 更改物件的形狀。
- 更改物件的位置。
- 更改物件副本的位置。