2011-10-31 4 views
4

어셈블리 키 스트로크 (CCS64)를 비교하고 싶습니다. 내가 행에서 같은 키를 입력하면 내가 뭔가를 예를 수행 할 : = 수행이키 입력 비교 - 어셈블리 CCS64

하지만이를 입력하면 : B = 할 뭔가 다른

제안 사항?

+0

당신이 코모도 64 에뮬레이터 CCS64 또는 DSP를위한 TI의 코드 컴포저 스튜디오 (Code Composer Studio)에 대해 얘기하는 - 당신은 당신이 여기에서 찾을 수있는 ACME Crossassembler를 사용하여이 코드를 컴파일 할 수 있습니까? –

+0

Commodore 64 에뮬레이터 CCS64 :) – Oakin

+0

OK - 그렇다면 6502 어셈블러를 의미하는 것입니까? –

답변

7

내가 원했던 것처럼 당신에게 예를 준비했습니다. 행의 동일한 키를 두 번 누르면 테두리 색이 빨간색으로 바뀌고 그렇지 않으면 검은 색으로 유지됩니다.

경고! 이 예제에서는 kernal 루틴을 사용합니다. 거기에 아무런 문제가 없습니다. 그러나 $ffd2 (출력 벡터, chrout) 및 $ffe4 (키로드에서 가져 오기) 커널 호출을 사용하지 않고도이 작업을 수행 할 수있는 낮은 수준의 방법이 있습니다. 그러나 이해하기가 훨씬 더 복잡하기 때문에이 예제를 선호합니다.

배경 (커널 호출)이 무슨 일이 일어나고 있는지 알고 싶다면 AAY64 문서에서 kernal 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 (키로드에서 가져 오기) : http://unusedino.de/ec64/technical/aay/c64/romffe4.htm

opcode 및 주소의 링크를 눌러 더 자세히 탐색 할 수 있습니다.

다음은 예제 코드입니다. >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 
+0

우수 설명 및 소스 코드 샘플! @Emir Akaydın. 대단히 감사합니다. –

+0

감사합니다. http://10print.org/에서 영감을 얻어 우분투 12.04의 VICE 에뮬레이터에서 일부 C64 어셈블리를 실행하려고합니다. 책의 234 페이지에있는 "10 PRINT"예제를 컴파일하는 방법은 아직 확실하지 않지만 acme을 사용하여 위의 코드를 성공적으로 컴파일 할 수 있습니다. "keycomp.prg"프로그램을 만듭니다.이 프로그램은 x64 keycomp.prg 명령을 사용하여 VICE로 실행할 수 있습니다. 고맙습니다! –

+0

편집 : "10 PRINT"예제도 작동합니다. 에뮬레이터에로드 한 직후에 미로 프로그램 시작 준비 프롬프트에서 "SYS 4096"을 실행해야합니다. –

2

저는 C64 사람이 아니지만 6502 어셈블리를 알고 있습니다. 목표를 달성하려면 두 가지를 알아야합니다. 첫 번째 방법은 6502 어셈블리 언어를 아직 모르는 경우 해당 언어를 배우는 것입니다. 예를 들어, This page에는 우수한 자원이 있습니다.

두 번째는 C64 아키텍처 및 OS에 대해 알아야합니다. Commodore에서 Kernal라고 말하면 빠른 Google이 올바른 방향으로 안내해야합니다.

하지만 대안이 있습니다. ISO-C 컴파일러, 6502 어셈블러, 링커 및 기타 6502 관련 도구로 구성된 뛰어난 프리웨어 패키지 cc65을 언제든지 사용할 수 있습니다. 아타리 8 비트, 애플 II, 물론 Commodore 64를 포함한 모든 대중적인 6502 플랫폼을 지원합니다. 문서의 양이 많고 메일 링리스트에있는 사람들이 유용합니다. 힌트로 키보드 입력 및 화면 출력 기능은 conio.h에 정의되어 있습니다.