回答
我準備了一個例子給你,就像你想要的一樣。如果連續兩次按下相同的按鍵,則邊框顏色將變爲紅色,否則保持黑色。
警告!此示例使用kernal
例程。沒有什麼不妥。但是在沒有使用$ffd2
(Output Vector,chrout)和$ffe4
(Get Keyboad)內核調用的情況下,還有一個較低級別的方法。但是因爲要理解起來要複雜得多,所以我首選這個例子。
如果您想知道幕後發生了什麼(內核調用),可以從AAY64
文檔中輕鬆跟蹤內核ROM代碼。這裏是鏈接:
主要AAY頁:http://www.the-dreams.de/aay.html
AAY64在線HTML版本:http://unusedino.de/ec64/technical/aay/c64/
籽粒ROM上市:http://unusedino.de/ec64/technical/aay/c64/krnromma.htm
$ffd2
(輸出向量,chrout):http://unusedino.de/ec64/technical/aay/c64/romffd2.htm
$ffe4
(Get Keyboad):http://unusedino.de/ec64/technical/aay/c64/romffe4.htm
您可以通過按操作碼和地址上的鏈接來瀏覽更深的內容。
這裏是示例代碼。你可以編譯使用ACME Crossassembler
,你可以在這裏找到這段代碼 - >http://www.esw-heim.tu-clausthal.de/~marco/smorbrod/acme/
!to "keycomp.prg",cbm
zpBuffer = $fa ; $fa-$fb are reserved for 2 bytes of key buffer
* = $0801
!byte $0c, $08, $00, $00, $9e, $32, $30, $36, $31, $00, $00, $00
* = $080d
; key buffer initialization
ldx #$f0 ; initialize key buffer
stx zpBuffer ; with two different
inx ; values to avoid instant
stx zpBuffer+1 ; match at the beginning
; border color initialization
lda #$00 ; set startup border color to black
sta $d020 ; which means "no match"
; main loop
mainloop
lda zpBuffer ; shift key buffer
sta zpBuffer+1 ; by one
readKey
jsr $ffe4 ; read key
beq readKey ; if no key pressed loop forever
jsr $ffd2 ; show key on the screen
sta zpBuffer ; store the key to key buffer
lda zpBuffer ; compare the last stored key
cmp zpBuffer+1 ; with the old key value
beq cmpMatch ; if there is a match jmp to cmpMatch
lda #$00 ; if two pressed keys are different
sta $d020 ; change border color to black
jmp cmpOut ; skip the other condition code block
cmpMatch
lda #$02 ; if there is a repeated key
sta $d020 ; change border color to red
cmpOut
jmp mainloop ; wait for the next key
優秀的描述和源代碼示例!非常感謝@EmirAkaydın。 – 2011-11-25 08:11:21
Akaydin謝謝你!受到http://10print.org/的啓發,我試圖在ubuntu 12.04上的VICE模擬器上運行一些C64程序集。仍不確定如何編譯本書第234頁的「10 PRINT」示例,但成功地使用acme編譯上面的代碼。創建「keycomp.prg」程序,該程序可以使用命令x64 keycomp.prg在VICE中運行。謝謝! –
編輯:「10 PRINT」的例子也適用,加載到模擬器後,需要運行「SYS 4096」在READY提示符爲迷宮程序啓動 –
我不是C64的人,但我知道6502大會。你需要知道兩件事才能實現你的目標。首先是學習6502彙編語言,如果你還不知道的話。例如,This page具有優秀的資源。
其次是瞭解C64體系結構和操作系統。它被稱爲內核在Commodore說,一個快速的谷歌應該指出你在正確的方向。
但有一個選擇。您始終可以使用cc65,這是一個優秀的免費軟件包,包含幾乎ISO-complient C編譯器,6502彙編器,鏈接器以及其他6502相關工具。它支持所有流行的6502平臺,包括Atari 8位,Apple II,當然還有Commodore 64.它擁有大量的文檔,郵件列表中的人員都很友善,樂於助人。作爲提示,鍵盤輸入和屏幕輸出功能在conio.h中定義。
- 1. 結果集比較實用程序
- 2. NDepend控制檯 - 比較程序集
- 3. 程序集比較兩個數字
- 4. 比較字符(ARM程序集)
- 5. 比較「鍵」值
- 6. 比較plist鍵
- 7. Python的 - 比較鍵
- 8. 比較有關鍵
- 9. 通過比較按鍵鍵
- 10. 比較uibutton點擊
- 11. 擊整數比較
- 12. 複合鍵,比較
- 13. 開始:比較程序塊
- 14. Hamcrest比較集合
- 15. 比較的集合
- 16. 比較數字集
- 17. 字符集比較
- 18. R:data.table比較行集
- 19. 比較數據集
- 20. 比較2個集
- 21. 收集值比較
- 22. 表子集比較
- 23. C++ std :: map鍵排序比較函數?
- 24. C#如何比較兩個有序集?
- 25. 比較多維HashMap的鍵
- 26. 比較兩個數據集的過程
- 27. 如何通過鍵比較兩個JavaPairRDD並比較值?
- 28. 比較Map鍵和comboBox.currentText()時應用程序崩潰;
- 29. 如何比較兩個字符串程序集
- 30. ARM中的程序集如何使用比較助記符?
你談論的Commodore 64模擬器CCS64或DSP的TI的Code Composer Studio的? –
Commodore 64仿真器CCS64 :) – Oakin
行 - 那麼這意味着6502彙編器,是嗎? –