4

アセンブリ(CCS64)のキーストロークを比較したいと思います。同じキーを続けて入力する場合は、次の例を実行します。A A=これを実行する

しかし、私がこれを入力した場合:A B=何か他のことをする

提案?

4

2 に答える 2

9

私はあなたが望んでいたようにあなたに例を用意しました。同じキーを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
于 2011-11-25T08:07:58.727 に答える
3

私はC64の人ではありませんが、6502アセンブリを知っています。あなたはあなたの目標を達成するために2つのことを知る必要があります。1つ目は、6502アセンブリ言語についてまだ知らない場合は、それを学ぶことです。このページには、たとえば優れたリソースがあります。

2つ目は、C64アーキテクチャとOSについて学ぶことです。それはコモドールスピーチでカーナルと呼ばれています、速いグーグルはあなたを正しい方向に向けるべきです。

しかし、別の方法があります。ほぼISO準拠のCコンパイラ、6502アセンブラ、リンカ、およびその他の6502関連ツールのカップルで構成される優れたフリーウェアパッケージであるcc65をいつでも使用できます。Atari 8ビット、Apple II、そしてもちろんコモドール64を含むすべての人気のある6502プラットフォームをサポートしています。大量のドキュメントがあり、メーリングリストの人々は親切で親切です。ヒントとして、キーボード入力および画面出力機能はconio.hで定義されています。

于 2011-11-07T10:50:28.263 に答える