跳轉到內容

Signetics 2650 & 2636 程式設計/BCD 算術

0% developed
來自華夏公益教科書,開放的書籍,為開放的世界

二進位制編碼的十進位制

[編輯 | 編輯原始碼]

微處理器以二進位制格式表示數字並執行算術運算的自然方式。人類更喜歡十進位制記數法,因此當計算機想要與我們交流時,它必須將一種格式轉換為另一種格式。另一種選擇是強制計算機對二進位制編碼的十進位制進行運算,其中每個十進位制數字(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   

參考文獻

[編輯 | 編輯原始碼]


華夏公益教科書