天天看點

NESASM教程——第六天——跳轉和按鍵處理

【讀取按鍵】

我們假設你要讀取的是一個普通的方形nes搖桿,而不是一些其他亂七八糟的東西。為了知道一個按鍵是否按下,你一次一鍵地讀取0x4016(搖桿1)或0x4017(搖桿2)。如果按鍵按下,右邊的bit0将被置位(1)。你用1同它相“與”,若結果不為0則跳轉。在你讀取任何内容之前,你需要先複位搖桿(選通)。

【選通/複位】

為了選通/複位搖桿,我們寫入一個1然後一個0到0x4016(搖桿1)或0x4017(搖桿2)。可以這麼搞:

對,就這樣!之後可以真正讀取搖桿資訊。

【讀取順序】

在對0x4016或0x4017進行的的每個讀取操作,你獲得了不同按鍵的狀态,這些被讀出按鍵的順序為:

讀取序号  |   對應按鍵

1.    a

2.    b

3.    select

4.    start

5.    up

6.    down

7.    left

8.    right

那麼在我們搞些事情之前先學習一些條件和跳轉指令怎麼樣?

【條件跳轉】

我們在大多數指令中設定了一些特定“條件”,他們是:

eq——equal-zero, 等于0

ne——not equal,不等于0

lt——less than,小于0

gt——greater than, 大于0

pl——plus,正數

mi——minus,負數

cc——carry clear,進位标志為0

cs——carry set,進位标志為1

vc——overflow clear,溢出标志為0

vs——overflow set, 溢出标志為1

這些條件會被大多數指令設定,甚至包括資料載入。所有這些條件都有一個分支指令。在條件碼前加上“b”就構成了條件跳轉指令,例如:

我希望你已經發現規律了。我相信隻有ne和eq條件能被一個非比較指令影響。

以防萬一你不知道,偷偷告訴你,一個label(标簽)就是一個名稱後面跟上冒号,例如

我希望你懂了。記住:标簽很好玩。

【讀取按鍵的一個小栗子】

說夠了。上代碼:

希望你不認為這太難。

個人認為gba是更容易程式設計的。是以對我而言,nes程式需要更多學習來搞明白。

【複習今天内容】

首先我想提一點,你可能知道我的gba 彙編系列教程了,或許你也知道我的x86(dos)彙編教程?在三門彙編語言中穿梭有時讓人抓狂,是以如果你看到一些奇怪的或者錯誤,讓我知道就行。謝謝。

按鍵檢測不那麼激情澎湃,但我可以告訴你後面更精彩。。。

繼續閱讀