跳轉到內容

Signetics 2650 & 2636 程式設計/物件

75% developed
來自 Wikibooks,開放的書籍,開放的世界

教程 — 物件

[編輯 | 編輯原始碼]
另請參見:PVI - 物件

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

物件描述符

[編輯 | 編輯原始碼]
物件描述符 1、2、3 或 4
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 物件 2 物件 3 物件 4
HC 10 40 60 100
HCB 10 35 120 110
VC 20 60 90 0
VCB 20 10 250 255
 

物件 1 的水平座標為 10,其副本的座標也是如此。其垂直座標為 20,其所有副本都相對於其前一個物件垂直偏移 20。

物件 2 的副本向左偏移了 5 個畫素,並垂直偏移了 10 個畫素。

物件 3 是單獨的。它的副本透過將垂直偏移量設定為 250 被推到了螢幕底部。

物件 4 的副本全部緊貼在一起。這是透過將偏移量設定為 255 實現的。這可能看起來有點奇怪,但如果將 255 轉換為 8 位二進位制,然後將其解釋為帶符號的二進位制補碼,我們就會得到 -1。這是因為 VCB 必須設定為“要跳過的行數 - 1”。如果你想要 1 行的間隙,則將 VCB 設定為 0,依此類推。

  1. 更改物件的大小。
  2. 更改物件的形狀。
  3. 更改物件的位置。
  4. 更改物件副本的位置。


華夏公益教科書