해당 문서는 NesDev의 문서를 번역했습니다.
해당 문서의 전체 또는 일부는 NesDev의 문서를 번역했습니다. 원문서는 CC0 1.0 Universal이므로 가져와도 문제가 없습니다.
원글링크: [1]

PPU는 CPU의 주소 버스와 완전히 분리된 14비트(16kB) 주소 공간, $0000-$3FFF를 주소 지정한다. PPU 자체에서 직접 접근하거나, $2006과 $2007에 있는 메모리 매핑된 레지스터를 통해 CPU로 접근할 수 있다.

주소 범위 크기 설명 매핑 주체
$0000-$0FFF $1000 패턴 테이블 0 카트리지
$1000-$1FFF $1000 패턴 테이블 1 카트리지
$2000-$23BF $03c0 PPU 네임테이블 0 카트리지
$23C0-$23FF $0040 속성 테이블 0 카트리지
$2400-$27BF $03c0 네임테이블 1 카트리지
$27C0-$27FF $0040 속성 테이블 1 카트리지
$2800-$2BBF $03c0 네임테이블 2 카트리지
$2BC0-$2BFF $0040 속성 테이블 2 카트리지
$2C00-$2FBF $03c0 네임테이블 3 카트리지
$2FC0-$2FFF $0040 속성 테이블 3 카트리지
$3000-$3EFF $0F00 사용되지 않음 카트리지
$3F00-$3F1F $0020 팔레트 RAM 인덱스 PPU 내부
$3F20-$3FFF $00E0 $3F00-$3F1F의 미러 PPU 내부

하드웨어 매핑

NES에는 PPU 전용 2kB의 RAM이 있으며, 일반적으로 $2000-$2FFF의 네임테이블 주소 공간에 매핑되지만, 사용자 지정 카트리지 배선을 통해 재라우팅될 수 있다. 위의 매핑은 렌더링 중에 PPU가 데이터를 가져오는 데 사용하는 주소이다. PPU가 패턴, 네임테이블 및 속성 테이블 데이터를 가져오는 실제 장치는 카트리지에 의해 구성된다.

  • $0000-1FFF는 일반적으로 카트리지에 의해 CHR-ROM 또는 CHR-RAM에 매핑되며, 종종 뱅크 스위칭 메커니즘이 있다.
  • $2000-2FFF는 일반적으로 2kB NES 내부 VRAM에 매핑되어 카트리지에 의해 제어되는 미러링 구성으로 2개의 네임테이블을 제공하지만, 카트리지의 ROM 또는 RAM에 부분적으로 또는 완전히 다시 매핑될 수 있어 최대 4개의 동시 네임테이블을 허용한다.
  • $3000-3EFF는 일반적으로 $2000-2EFF의 2kB 영역의 미러이다. PPU는 이 주소 범위에서 렌더링하지 않으므로 이 공간은 거의 사용되지 않는다.
  • $3F00-3FFF는 구성할 수 없으며 항상 내부 팔레트 제어에 매핑된다.

OAM

또한 PPU는 내부에 객체 속성 메모리로 알려진 256바이트의 메모리를 포함하고 있으며, 이는 스프라이트가 렌더링되는 방식을 결정한다. CPU는 OAMADDR ($2003), OAMDATA ($2004), OAMDMA ($4014)의 메모리 매핑된 레지스터를 통해 이 메모리를 조작할 수 있다. OAM은 64개의 항목이 있는 배열로 볼 수 있다. 각 항목에는 스프라이트 Y 좌표, 스프라이트 타일 번호, 스프라이트 속성, 스프라이트 X 좌표의 4바이트가 있다.

주소 하위 니블 설명
$0, $4, $8, $C 스프라이트 Y 좌표
$1, $5, $9, $D 스프라이트 타일 #
$2, $6, $A, $E 스프라이트 속성
$3, $7, $B, $F 스프라이트 X 좌표