アセンブリ(CCS64)のキーストロークを比較したいと思います。同じキーを続けて入力する場合は、次の例を実行します。A A=これを実行する
しかし、私がこれを入力した場合:A B=何か他のことをする
提案?
私はあなたが望んでいたようにあなたに例を用意しました。同じキーを2回続けて押すと、境界線の色が赤に変わり、それ以外の場合は黒のままになります。
警告!この例では、kernal
ルーチンを使用しています。それは何も悪いことではありません。$ffd2
ただし、(Output Vector、chrout)および$ffe4
(Get From Keyboad)カーネル呼び出しを使用せずにこれを行うための低レベルの方法もあります。しかし、理解するのははるかに複雑なので、私はこの例を好みました。
舞台裏で何が起こっているか(カーネル呼び出し)を知りたい場合は、AAY64
ドキュメントからカーネルROMコードを簡単に追跡できます。リンクは次のとおりです。
メインAAYページ:http ://www.the-dreams.de/aay.html
AAY64オンラインHTMLバージョン: http: //unusedino.de/ec64/technical/aay/c64/
Kernal ROMリスト: http: //unusedino.de/ec64/technical/aay/c64/krnromma.htm
$ffd2
(出力ベクトル、chrout): http: //unusedino.de/ec64/technical/aay/c64/romffd2.htm
$ffe4
(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
私はC64の人ではありませんが、6502アセンブリを知っています。あなたはあなたの目標を達成するために2つのことを知る必要があります。1つ目は、6502アセンブリ言語についてまだ知らない場合は、それを学ぶことです。このページには、たとえば優れたリソースがあります。
2つ目は、C64アーキテクチャとOSについて学ぶことです。それはコモドールスピーチでカーナルと呼ばれています、速いグーグルはあなたを正しい方向に向けるべきです。
しかし、別の方法があります。ほぼISO準拠のCコンパイラ、6502アセンブラ、リンカ、およびその他の6502関連ツールのカップルで構成される優れたフリーウェアパッケージであるcc65をいつでも使用できます。Atari 8ビット、Apple II、そしてもちろんコモドール64を含むすべての人気のある6502プラットフォームをサポートしています。大量のドキュメントがあり、メーリングリストの人々は親切で親切です。ヒントとして、キーボード入力および画面出力機能はconio.hで定義されています。