Signetics 2650 & 2636 程式設計/BCD 算術
微處理器以二進位制格式表示數字並執行算術運算的自然方式。人類更喜歡十進位制記數法,因此當計算機想要與我們交流時,它必須將一種格式轉換為另一種格式。另一種選擇是強制計算機對二進位制編碼的十進位制進行運算,其中每個十進位制數字(0-9)由 4 位表示。可以用這四位表示的其他六個數 A16 - F16 毫無意義,這使得二進位制運算比純粹的二進位制格式更復雜。例如,如果我們在二進位制中進行 8 + 4 的加法,結果是 C16,在 BCD 中是毫無意義的。為了得到正確的結果,我們必須加上六,得到 1216。‘1’被進位到下一個最重要的數字。
這些影片遊戲機中 BCD 的主要用途是顯示得分,這是一個通常只增量的數字,因此我們在此的討論將侷限於 BCD 數字的加法。如果您的遊戲需要減法、帶符號整數運算或除法,下面參考文獻中列出的應用備忘錄將提供幫助。
2650 微處理器具有兩個有助於 BCD 算術的功能。除了記錄第 7 位進位的進位標誌 (C) 之外,還有一個數位間標誌 (IDC),它記錄第 3 位的進位。還有一個特殊的指令,十進位制調整暫存器 DAR,它在算術運算後檢查這些標誌,並對高半位元組(第 4-7 位)和低半位元組(第 0-3 位)進行適當的調整。在最高半位元組的情況下,如果 C 為 0,則加上 1010;對於最低半位元組,如果 IDC 為 0,則加上 1010。
下面列出的程式將一個 8 位數加到一個 16 位數,這將可能滿足這些控制檯中大部分得分處理需求。得分的 MSB 儲存在 1F50 中,得分的 LSB 儲存在 1F51 中。不要忘記得分暫存器 1FC8 和 1FC9 是隻寫暫存器,因此無法從它們中檢索當前得分,必須將其儲存在其他地方。
WinArcadia 偵錯程式可用於逐步執行此程式以瞭解其工作原理。增量值和初始 16 位值需要使用記憶體編輯器設定。
0000 1F0004 :
0003 17 :
0004 7620 :
0006 7708 :
0008 7501 :
000A 0C1F51 :
000D 0D1F50 :
0010 0F1F52 :
0013 8466 :
0015 8566 :
0017 7501 :
0019 83 :
001A 94 :
001B 8500 :
001D 95 :
001E CC1F51 :
0021 CD1F50 :
0024 1B60 :
:
:
:
:
:
:
:
|
bcta,un start ; reset vector
retc,un ; interrupt vector
start: ppsu intinhibit ;inhibit interrupts
loop: ppsl withcarry
cpsl carry
loda,r0 lsbA ; get the score
loda,r1 msbA
loda,r3 inc ; get the increment
addi,r0 H'66'
addi,r1 H'66'
cpsl H'01' ; clear carry
addz r3 ; perform BCD addition, scoreX = scoreX + r3
dar,r0
addi,r1 H'00'
dar,r1
stra,r0 lsbA ; save result
stra,r1 msbA
bctr,un loop
msbA equ $1F50
lsbA equ $1F51
inc equ $1F52
carry equ $01
withcarry equ $08
intinhibit equ $20
|