경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!=== PPUDATA - VRAM 데이터 ($2007 읽기/쓰기) === ---- 7 bit 0 ---- ---- DDDD DDDD |||| |||| ++++-++++- VRAM 데이터 VRAM 읽기/쓰기 데이터 레지스터. 접근 후, 비디오 메모리 주소는 $2000의 비트 2에 의해 결정된 양만큼 증가한다. [[#PPUMASK|PPUMASK]]로 배경/스프라이트 렌더링 플래그를 비활성화하여 화면이 꺼지거나 수직 블랭킹 중에 이 포트를 통해 VRAM에서 데이터를 읽거나 쓸 수 있다. 이 레지스터에 접근하면 VRAM 주소가 증가하므로, 그래픽 결함을 유발하고 쓰기 시 예측할 수 없는 VRAM 주소에 쓰게 되므로 수직 또는 강제 블랭킹 외부에서는 접근해서는 안 된다. 그러나 소수의 게임은 렌더링 중에 PPUDATA에서 읽는 것으로 알려져 있으며, 이로 인해 스크롤 위치가 변경된다. [[PPU scrolling#$2007 reads and writes|PPU 스크롤링]] 및 [[Tricky-to-emulate games]]를 참조하라. VRAM 읽기 및 쓰기는 렌더링이 사용하는 것과 동일한 내부 주소 레지스터를 공유한다. 따라서 비디오 메모리에 데이터를 로드한 후, 프로그램은 잘못된 스크롤링을 피하기 위해 [[#PPUSCROLL|PPUSCROLL]] 및 [[#PPUCTRL|PPUCTRL]] (비트 1-0) 쓰기로 스크롤 위치를 다시 로드해야 한다. {{Anchor|The PPUDATA read buffer (post-fetch)}} ==== PPUDATA 읽기 버퍼 ==== PPUDATA에서 읽는 것은 현재 VRAM 주소의 값을 직접 반환하는 것이 아니라 내부 읽기 버퍼의 내용을 반환한다. 이 읽기 버퍼는 모든 PPUDATA 읽기에서 업데이트되지만, 이전 내용이 CPU로 반환된 ''후에만'' 업데이트되므로 PPUDATA 읽기를 효과적으로 하나 지연시킨다. 이는 PPU 버스 읽기가 너무 느려서 CPU 읽기를 서비스할 시간에 완료할 수 없기 때문이다. 이 읽기 버퍼 때문에, PPUADDR을 통해 VRAM 주소를 설정한 후에는 먼저 PPUDATA를 읽어 읽기 버퍼를 준비(결과 무시)한 다음 원하는 데이터를 읽어야 한다. 읽기 버퍼는 PPUDATA 읽기에서만 업데이트된다는 점에 유의하라. 쓰기나 렌더링과 같은 다른 PPU 프로세스에는 영향을 받지 않으며, 다음 읽기까지 값을 무기한 유지한다. ==== 팔레트 RAM 읽기 ==== 이후 PPU는 $3F00-$3FFF에서 팔레트 데이터를 읽는 신뢰할 수 없는 기능을 추가했다. 이러한 읽기는 팔레트 RAM이 PPU 주소 공간에 오버레이된 PPU 내부의 별도 메모리 공간이므로 표준 VRAM 읽기와 다르게 작동한다. 참조된 6비트 팔레트 데이터는 내부 읽기 버퍼로 가지 않고 즉시 반환되므로 준비 읽기가 필요하지 않다. 동시에 PPU는 지정된 주소의 PPU 메모리에서 팔레트 데이터 "아래"에서 일반 읽기를 수행하고 이 읽기 결과는 평소와 같이 읽기 버퍼로 들어간다. 읽기 버퍼의 이전 내용은 팔레트를 읽을 때 버려지지만, 주소를 팔레트 RAM 외부로 변경하고 한 번 읽으면 이 그림자 메모리([[PPU 메모리 맵|일반적으로 미러링된 네임테이블]])의 내용에 접근할 수 있다. 팔레트 RAM 읽기를 지원하지 않는 PPU에서는 이 메모리 범위가 나머지 PPU 메모리와 동일하게 동작한다. 이 기능은 2C02G, 2C02H 및 PAL PPU에서 지원된다. 팔레트를 읽을 때 반환되는 바이트는 상위 2비트에 [[Open_bus_behavior#PPU_open_bus|PPU 열린 버스]]를 포함하며, 값은 그레이스케일 모드에 의해 수정된 후 반환된다. 그레이스케일 모드가 활성화되면 하위 4비트가 지워진다. 불행히도 일부 콘솔에서는 마스터 클럭에 대한 4개의 CPU/PPU 정렬 중 하나에서 팔레트 읽기가 손상될 수 있다. 이 손상은 레지스터 접근을 나타내는 [[PPU pinout|PPU /CS]] 신호가 언제 비활성화되는지에 따라 다르며, 이는 콘솔마다 다르다. 이 기능이 모든 PPU에 있는 것은 아니라는 점과 결합하여 개발자는 팔레트 RAM에서 읽는 것에 의존해서는 안 된다. ==== DPCM 샘플과의 읽기 충돌 ==== 현재 DPCM 샘플을 재생 중인 경우, APU의 샘플 가져오기 중단이 $2007을 읽는 명령어와 동시에 발생하면 추가 읽기 사이클이 발생할 가능성이 있다. 이로 인해 추가 증가가 발생하고 바이트가 건너뛰어져 잘못된 데이터가 읽힌다. 참조: [[APU_DMC#Conflict with controller and PPU read|APU DMC]] {{Anchor|OAMDMA}}{{Anchor|Reg4014}} 요약: 한식구 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 한식구위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요! 자동 편집 스팸으로부터 위키를 보호하기 위해, 다음 CAPTCHA를 풀어주세요: 취소 편집 도움말 (새 창에서 열림)