어셈블리 키 스트로크 (CCS64)를 비교하고 싶습니다. 내가 행에서 같은 키를 입력하면 내가 뭔가를 예를 수행 할 : = 수행이키 입력 비교 - 어셈블리 CCS64
하지만이를 입력하면 : B = 할 뭔가 다른
제안 사항?
어셈블리 키 스트로크 (CCS64)를 비교하고 싶습니다. 내가 행에서 같은 키를 입력하면 내가 뭔가를 예를 수행 할 : = 수행이키 입력 비교 - 어셈블리 CCS64
하지만이를 입력하면 : B = 할 뭔가 다른
제안 사항?
내가 원했던 것처럼 당신에게 예를 준비했습니다. 행의 동일한 키를 두 번 누르면 테두리 색이 빨간색으로 바뀌고 그렇지 않으면 검은 색으로 유지됩니다.
경고! 이 예제에서는 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
우수 설명 및 소스 코드 샘플! @Emir Akaydın. 대단히 감사합니다. –
감사합니다. http://10print.org/에서 영감을 얻어 우분투 12.04의 VICE 에뮬레이터에서 일부 C64 어셈블리를 실행하려고합니다. 책의 234 페이지에있는 "10 PRINT"예제를 컴파일하는 방법은 아직 확실하지 않지만 acme을 사용하여 위의 코드를 성공적으로 컴파일 할 수 있습니다. "keycomp.prg"프로그램을 만듭니다.이 프로그램은 x64 keycomp.prg 명령을 사용하여 VICE로 실행할 수 있습니다. 고맙습니다! –
편집 : "10 PRINT"예제도 작동합니다. 에뮬레이터에로드 한 직후에 미로 프로그램 시작 준비 프롬프트에서 "SYS 4096"을 실행해야합니다. –
저는 C64 사람이 아니지만 6502 어셈블리를 알고 있습니다. 목표를 달성하려면 두 가지를 알아야합니다. 첫 번째 방법은 6502 어셈블리 언어를 아직 모르는 경우 해당 언어를 배우는 것입니다. 예를 들어, This page에는 우수한 자원이 있습니다.
두 번째는 C64 아키텍처 및 OS에 대해 알아야합니다. Commodore에서 Kernal라고 말하면 빠른 Google이 올바른 방향으로 안내해야합니다.
하지만 대안이 있습니다. ISO-C 컴파일러, 6502 어셈블러, 링커 및 기타 6502 관련 도구로 구성된 뛰어난 프리웨어 패키지 cc65을 언제든지 사용할 수 있습니다. 아타리 8 비트, 애플 II, 물론 Commodore 64를 포함한 모든 대중적인 6502 플랫폼을 지원합니다. 문서의 양이 많고 메일 링리스트에있는 사람들이 유용합니다. 힌트로 키보드 입력 및 화면 출력 기능은 conio.h에 정의되어 있습니다.
당신이 코모도 64 에뮬레이터 CCS64 또는 DSP를위한 TI의 코드 컴포저 스튜디오 (Code Composer Studio)에 대해 얘기하는 - 당신은 당신이 여기에서 찾을 수있는
ACME Crossassembler
를 사용하여이 코드를 컴파일 할 수 있습니까? –Commodore 64 에뮬레이터 CCS64 :) – Oakin
OK - 그렇다면 6502 어셈블러를 의미하는 것입니까? –