내용을 " 2A03은 RP2A03의 약칭으로, NTSC 방식 NES CPU 칩의 일반적인 명칭이다. 이 칩은 MOS Technology 6502 프로세서(10진 모드 없음), 오디오, 조이패드, DMA 기능으로 구성된다. PAL 방식 시스템에서는 유사한 RP2A07을 사용하는데, 이 칩은 클럭 속도가 다르고 샘플 오디오 속도가 조정되었으며 DMA 버그가 수정되었다. ===2A03 레지스터 사양=== 2A03은 6502 코어..."(으)로 바꿈 태그: 대체됨 |
|||
| 7번째 줄: | 7번째 줄: | ||
===2A03 레지스터 사양=== | ===2A03 레지스터 사양=== | ||
여기서 레지스터란 CPU에서 여러 외부 장치를 조작하기 위해 메모리 공간 상에 예약된 공간을 의미한다. 즉, 이러한 주소에 읽기·쓰기 작업을 할 경우 RAM의 데이터를 조작하는게 아니라 다른 장치의 상태를 읽어오거나 명령 또는 데이터를 전달하는 것이 된다. | |||
2A03은 6502 코어의 레지스터 외에도 [[사운드]] 생성([[NES APU]] 참조), 조이스틱 입력, [[OAM DMA]] 전송을 위한 22개의 메모리 매핑 레지스터를 포함한다. | 2A03은 6502 코어의 레지스터 외에도 [[사운드]] 생성([[NES APU]] 참조), 조이스틱 입력, [[OAM DMA]] 전송을 위한 22개의 메모리 매핑 레지스터를 포함한다. | ||
2025년 9월 30일 (화) 16:38 판
2A03은 RP2A03의 약칭으로, NTSC 방식 NES CPU 칩의 일반적인 명칭이다.
이 칩은 MOS Technology 6502 프로세서(10진 모드 없음), 오디오, 조이패드, DMA 기능으로 구성된다.
PAL 방식 시스템에서는 유사한 RP2A07을 사용하는데, 이 칩은 클럭 속도가 다르고 샘플 오디오 속도가 조정되었으며 DMA 버그가 수정되었다.
2A03 레지스터 사양
여기서 레지스터란 CPU에서 여러 외부 장치를 조작하기 위해 메모리 공간 상에 예약된 공간을 의미한다. 즉, 이러한 주소에 읽기·쓰기 작업을 할 경우 RAM의 데이터를 조작하는게 아니라 다른 장치의 상태를 읽어오거나 명령 또는 데이터를 전달하는 것이 된다.
2A03은 6502 코어의 레지스터 외에도 사운드 생성(NES APU 참조), 조이스틱 입력, OAM DMA 전송을 위한 22개의 메모리 매핑 레지스터를 포함한다.
PPU 및 매퍼 레지스터의 주소와 달리, CPU 레지스터 주소는 완전히 디코딩된다.
이는 CPU 레지스터의 끝($4020)부터 주소 공간의 최상단($FFFF)까지의 전체 공간을 게임팩에서 사용할 수 있음을 의미한다.
$4018-$401F 범위는 정식 발매된 NES에서 아무 기능도 하지 않는다. 이 영역은 실제 생산품에는 적용되지 않은 2A03 기능을 위해 의도되었다.
다양한 2A03 리비전에는 테스트 레지스터(정상 작동 시 비활성화됨) 또는 회로의 나머지 부분과 연결이 끊긴 채 불완전하게 구현된 IRQ 카운터의 흔적이 포함되어 있다.
매퍼는 2A03과 충돌 없이 이 영역에 쓰기 가능한 레지스터를 배치할 수 있지만, DMA와의 충돌 때문에 읽기 가능한 레지스터를 배치하는 것은 피해야 한다. (이 문서의 의미는 MMC5에 설명하도록 하겠다.)
| 주소 | 이름 | 설명 (쓰기) | 설명 (읽기) |
|---|---|---|---|
| $4000 | SQ1_VOL (Pulse 1) | 듀티 사이클 및 볼륨 | 오픈 버스 |
| $4001 | SQ1_SWEEP | 스위프 제어 레지스터 | |
| $4002 | SQ1_LO | 주기의 하위 바이트 | |
| $4003 | SQ1_HI | 주기의 상위 바이트 및 길이 카운터 값 | |
| $4004 | SQ2_VOL (Pulse 2) | 듀티 사이클 및 볼륨 | |
| $4005 | SQ2_SWEEP | 스위프 제어 레지스터 | |
| $4006 | SQ2_LO | 주기의 하위 바이트 | |
| $4007 | SQ2_HI | 주기의 상위 바이트 및 길이 카운터 값 | |
| $4008 | TRI_LINEAR (Triangle) | 선형 카운터 | |
| $4009 | 사용 안 함 | ||
| $400A | TRI_LO | 주기의 하위 바이트 | |
| $400B | TRI_HI | 주기의 상위 바이트 및 길이 카운터 값 | |
| $400C | NOISE_VOL (Noise) | 볼륨 | |
| $400D | 사용 안 함 | ||
| $400E | NOISE_LO | 주기 및 파형 모양 | |
| $400F | NOISE_HI | 길이 카운터 값 | |
| $4010 | DMC_FREQ (DMC) | IRQ 플래그, 루프 플래그 및 주파수 | |
| $4011 | DMC_RAW | 7비트 DAC | |
| $4012 | DMC_START | 시작 주소 = $C000 + $40 * $xx | |
| $4013 | DMC_LEN | 샘플 길이 = $10 * $xx + 1 바이트 (128 * $xx + 8 샘플) | |
| $4014 | OAMDMA | OAM DMA: $xx00-$xxFF에서 OAMDATA($2004)를 통해 OAM으로 256바이트 복사 | |
| $4015 | SND_CHN | 사운드 채널 활성화 | 사운드 채널 및 IRQ 상태 |
| $4016 | JOY1 | 조이스틱 스트로브 | 조이스틱 1 데이터 |
| $4017 | JOY2 | 프레임 카운터 제어 | 조이스틱 2 데이터 |
| $4018-$401A | 일반적으로 비활성화된 APU 테스트 기능. (CPU 테스트 모드 참조) | ||
| $401C-$401F | 항상 비활성화된 미완성 IRQ 타이머 기능. (RP2A03 프로그래머블 인터벌 타이머 참조) |
명령어
6502/명령어 문서 참고.