경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!=== PPUADDR - VRAM 주소 ($2006 쓰기) === ---- 1번째 쓰기 2번째 쓰기 15 bit 8 7 bit 0 ---- ---- ---- ---- ..AA AAAA AAAA AAAA || |||| |||| |||| ++-++++--++++-++++- VRAM 주소 CPU와 PPU는 별도의 버스에 있기 때문에 어느 쪽도 다른 쪽의 메모리에 직접 접근할 수 없다. CPU는 PPU의 한 쌍의 레지스터를 통해 VRAM에 쓴다. 먼저 [[#PPUADDR|PPUADDR]]에 주소를 로드한 다음 [[#PPUDATA|PPUDATA]]에 데이터를 반복적으로 쓴다. 각 PPUDATA 접근은 [[#PPUCTRL|PPUCTRL]]에 구성된 대로 주소를 자동으로 1 또는 32만큼 증가시키므로 VRAM 주소는 모든 데이터 쓰기 시리즈에 대해 한 번만 설정하면 된다. 16비트 주소는 PPUADDR에 한 번에 한 바이트씩, 상위 바이트부터 쓴다. 이것이 첫 번째 쓰기인지 두 번째 쓰기인지는 PPU의 [[#Internal_registers|내부 w 레지스터]]에 의해 추적되며, 이는 [[#PPUSCROLL|PPUSCROLL]]과 공유된다. w가 0이 아니거나 그 상태를 알 수 없는 경우, 주소를 쓰기 전에 [[#PPUSTATUS|PPUSTATUS]]를 읽어 지워야 한다. 예를 들어, w가 0으로 알려진 후 VRAM 주소를 $2108로 설정하려면: lda #$21 sta PPUADDR lda #$08 sta PPUADDR [[PPU 메모리 맵|PPU 주소 공간]]은 14비트로, $0000-$3FFF에 걸쳐 있다. 이 레지스터에 기록된 값의 비트 14와 15는 무시된다. 그러나 PPUADDR에 기록된 데이터를 보유하는 [[#Internal_registers|내부 t 레지스터]]의 비트 14는 PPUADDR 상위 바이트를 쓸 때 0으로 강제된다. 이 세부 사항은 VRAM 주소를 설정하기 위해 PPUADDR을 사용할 때는 중요하지 않지만, 화면 중간 스크롤을 제어하는 데 사용할 때는 중요한 제한 사항이다(자세한 내용은 [[PPU scrolling]] 참조). ==== 참고 ==== 화면 새로 고침 중 [[#PPUSCROLL|PPUSCROLL]] 및 [[#PPUADDR|PPUADDR]]에 접근하면 흥미로운 래스터 효과가 발생한다. 각 스캔라인의 시작 위치는 네임테이블 메모리의 모든 픽셀 위치로 설정할 수 있다. 자세한 내용은 [[PPU scrolling]]을 참조하라. ==== 팔레트 손상 ==== 특정 상황에서 PPU 팔레트의 항목이 손상될 수 있다. 이것이 정확히 어떻게 또는 왜 발생하는지는 불분명하지만, NTSC PPU의 모든 리비전은 적어도 어느 정도 취약한 것으로 보인다.<ref>[//forums.nesdev.org/viewtopic.php?t=23209 렌더링 중 PPU가 꺼졌을 때 팔레트 변색 문제] N·K의 스레드</ref> 팔레트 메모리에 쓰기를 마쳤을 때의 해결 방법은 항상 다음과 같다. # 필요한 경우 주소를 업데이트하여 $3F00, $3F10, $3F20 또는 다른 미러를 가리키도록 한다. # 그런 다음에만 주소를 팔레트 메모리 외부를 가리키도록 변경한다. 이 해결 방법을 구현하는 코드 조각은 수많은 게임에 존재한다.<ref>[//forums.nesdev.org/viewtopic.php?p=280899#p280899 이상한 PPU 쓰기] Fiskbit의 스레드</ref> lda #$3F sta PPUADDR lda #0 sta PPUADDR sta PPUADDR sta PPUADDR ==== 버스 충돌 ==== 래스터 효과 중, PPUADDR에 대한 두 번째 쓰기가 특정 시간에 발생하면 최대 한 축의 스크롤링이 기록된 값과 현재 값의 비트 AND로 설정된다. 두 번째 쓰기를 완료하는 유일한 안전한 시간은 블랭킹 중이다. 더 구체적인 타이밍은 [[PPU scrolling]]을 참조하라. [//forums.nesdev.org/viewtopic.php?p=230391#p230391] {{Anchor|PPUDATA}}{{Anchor|Reg2007}}{{Anchor|Data_($2007)_<>_read/write}} 요약: 한식구 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 한식구위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요! 자동 편집 스팸으로부터 위키를 보호하기 위해, 다음 CAPTCHA를 풀어주세요: 취소 편집 도움말 (새 창에서 열림)