2010-07-08 1 views
5

사전에이 주제에 대한 지식이 매우 희미하고 열심히 찾았 기 때문에이 질문의 개방성과 일반적인 우울함에 대해 사과드립니다. 내 문제를 설명하기까지. 나는 정말로 게시하고 싶지 않았지만 완전히 완전하게 붙어 있습니다.기본 NES 에뮬레이션 이론 - 나는 갇혔다

NES 에뮬레이터를 시작했습니다. 그것은 해석되었으므로 (그래서 동적 recomp).

Atm ROM (매퍼 0 롬)을로드 및 매핑하고 인터럽트 및 PPU를 처리해야하는 위치까지 초기화 코드를 실행할 수 있습니다. 그게 내가 붙어있는 곳이야.

다음은 내 emu atm의 출력 예입니다. 실행은 8000에서 시작되고 800a에서 무한 루프를 쳤습니다. 거기에서 어떻게 진행해야할지 모릅니다.

8002: LDA #$10 ; read immediate value to set PPU control registers 
8004: STA $2000 ; store value 
8007: LDX #$FF ; load immediate value into X register 
8009: TXS   ; store X register into stack 
800a: LDA $2002 ; read PPU flags into accumulator (set N flag based on bit 7) 
800d: BPL   ; test N flag, branch to 800a if not positive, (N is set) 
800a: LDA $2002 
800d: BPL 
800a: LDA $2002 
800d: BPL 
800a: LDA $2002 
800d: BPL 
etc, etc etc (inf loop) 

그래서 제 질문은 사람이 사이클 카운트 같은 것들, 인터럽트 등 (즉, 하나 개의 전체 240 주사선 화면을 그릴과에 이동을 포함하여, 나를 위해 렌더링 PPU를 통해 기초 한 반복을 설명하시기 바랍니다 수있다 다음 것).

+0

6502 태그를 추가하는 데 사용되는 –

+1

http://nesdev.parodius.com/에서 게시하면 결과가 훨씬 빠르고 효율적으로 향상됩니다. 그것이 바로 틈새 주제에 대한 것입니다. –

+0

나는 이미 거기에 글을 올렸지 만, 5 일 후에 나는 1 개의 답을 가지고 있으며, 본질적으로 문서를 읽었다. (나는 100 번이나 있지만, 나는 아직도 혼란 스럽다.) –

답변

0

거기에는 에뮬레이터가 있습니다. 해당 소스에서 응답을 보셨습니까? 대개는 성능을 위해 쓰여졌 고 읽을 수는 없지만 당신을 즐겁게하는 재미있는 음식을 발견 할 수 있습니다. 인터럽트가 실행될 때까지 기다리는 코드이며 그 인터럽트를 실행 했습니까? 인터럽트가 리턴 주소를 수정하고 프로그램을 계속 진행할 수 있습니까? 레지스터에서 비트를 폴링하는 무한 루프입니까? 아니면 자기 자신에게 무조건적인 가지입니까?

+0

문제는 인터럽트 처리가 없다는 것입니다. 말 그대로 메모리 맵에서 opcode를 가져 와서 실행하고 카운터를 증가시킵니다. 그게 모두 잘 작동하고있어. CPU주기와 주 루프와의 관계를 이해할 때 막혔습니다. 나는 에뮬레이터가 어떻게 처리되어야하는지에 관한 기본적인 의사 코드를 찾고있다. –

+0

인터럽트가 아닌가요? 확실히 비디오 렌더링과 다른 이유로 인해 forground 작업이 기다리고있는 하드웨어 인터럽트가있을 것입니다. 인터럽트 루틴은 메모리 위치를 설정하거나이 경우에는 플래그를 기다립니다. 소행성에 대한 비슷한 무한 루프로 어려움을 겪었습니다. 그렇지 않으면 문제를 해결하기 위해 더 많은 정보가 필요합니다. –

+0

감사합니다. 나는 그것을 분류했다. LOL @이 질문은 내가 그것을 썼을 때 너무 혼란 스러웠다. –