2013-06-01 1 views
1

저는 6502 에뮬레이터를 만들고 있습니다. (그리고 그 후에는 NES 에뮬레이터를 갖기 위해 다른 NES 구성 요소를 에뮬레이션 할 것입니다.) 그리고 분기 - 조건 명령 (relative)을 보았습니다. 이제, 내가 궁금해하는 것은 바이트가 2의 보수로 저장되거나 정규 음수 바이트로 저장되는 것으로 간주되는 것입니까? 여기의 의미는 다음과 같습니다가이 예를 제공부호가있는 바이트가있는 6502의 분기 조건 명령?

6502 개 문서 중 하나 (물론 비공식)에서

: 문서에서

BEQ $A7 ;Branch-on-equal with value 0xA7 
$F0 $A7 ;Translation into hex 

를, 그것은 0xA7가 -39로 간주되어야하며, 표시되는 것을 말한다 다음과 같이 : (0부터 시작) 7 bith가 0 될 경우

1 0 1 0 0 1 1 1 ;-39 dec 

, 그냥 39 같습니다

0 0 1 0 0 1 1 1 ;39 dec 
1 0 1 0 0 1 1 1 

실제로 것 -89 : 그 의미 414,을 나는이 문서 정확한지 궁금하네요, 아니면 2의 보수를 사용하는 것으로 하죠?

자바에서 에뮬레이터를 프로그래밍하고 있기 때문에 바이트를 2의 보수로 해석하고 많은 지시 사항에서이를 보았습니다. 혼동.

+1

여기에 대한 몇 가지 논의가 있습니다 : http://forums.nesdev.com/viewtopic.php?t = 102. 결론은 틀린 것 같다. 2의 보수가되어야합니다. –

+0

프로세서에 대해 많이 알지는 못하지만 CPU가 2의 보수를 사용하여 이진수를 쉽게 추적 할 수 있다는 것을 알기 전에이 질문을했습니다. 잠깐 동안 나는 문서를 매우 숙련 된 사람들이 만들었다 고 생각하여 삭제하려고했는데, 틀린 것은 아니지만 운좋게도 나는 전체 CPU를 쓸모 없게 만들었습니다. 감사. 아이러니 컬하게도 나는 0x60 opcode 실수로 인해 중복 된 것을 발견했기 때문에 나는 여러 리소스를 참조로 사용하고있다. 최고가 되더라도 오류가 발생하기 쉽습니다. – ZimZim

+0

훌륭한 프로젝트입니다. 행운을 빕니다. :) – alex

답변

2

와우,이 기계를 웨이 백으로 설정하십시오! 70 년대와 80 년대에 Atari VCS, 컴퓨터 패밀리 및 코인 오프 아케이드 게임에서 수년간 '02 년 가족 모임에서 프로그램을 작성했습니다. 좋아요, 나는 모든 BEQ (동등한 분기 명령) 명령이 '제로 플래그'의 상태를 확인하고 그것이 설정되면 분기를 기억합니다. 제로 플래그는 비교 및 ​​수학 함수를 기반으로 설정/해제됩니다.

'02에 +/- 숫자를 묻는 것이므로 기본적으로 비트 7 인 기호 'N'을 기반으로하는 BPL (분기가 + 인 경우) 또는 BMI (분기 인 경우)가 필요할 수 있습니다. 누산기의 그래서 0을 감소 시키면 $ ff를 얻고 마이너스 'N'플래그를 설정합니다. 이 $ ff를 -1로 해석하면 2의 보수가됩니다.

업데이트 : 예, 아마도 약간 답습이었습니다. 그렇습니다. 예, 2의 보수이고, 오프셋은 가져올 다음 opcode의 주소와 같습니다. 즉 -2를 의미합니다. 또는 $ fe는 당신을 당신의 'BEQ'로 돌아 가게 할 것입니다. 따라서 $ F0 $ A7은 실제적으로 주소에서 2 바이트 앞의 89 바이트를 BEQ 주소로 매핑합니다

+0

하지만 opcode 필드의 컨텍스트에서 OP의 questin 당은 어떻습니까? –

+0

제가 제대로 이해했다면, 그의 마지막 줄은 "이 $ ff를 -1로 해석 할 것입니다. 이것은 2의 보수를 의미합니다." 그리고 그는 'N'플래그와 함께 BPL에 대해 이야기하고 있었으므로 실제로 opcode 필드의 컨텍스트에 있다고 가정했습니다. – ZimZim

+1

예, 아마도 약간 답답했습니다. 그렇습니다. 그렇습니다. 2의 보수이며, 오프셋은 -2 또는 $ fe가 가져올 다음 opcode의 주소와 같습니다. 다시 당신의 'BEQ'. 따라서 $ F0 $ A7은 사실 BEQ 주소보다 2 바이트 앞의 주소에서 89 바이트 뒤로 분기합니다 ... – Baratong