패미컴 프로그래밍
보이기
위키백과에 이 문서와 관련된 정보가 있습니다. 패밀리 컴퓨터 |
하드웨어 사양
[+/-]- CPU - 리코 2A03 CPU (십진 모드가 제외된 MOS 6502)
- 클럭 - 1.789773MHz (NTSC) (시스템 21.47727MHz / 12),1.773447MHz (PAL) (시스템 26.601171MHz / 15)
- 메모리 - 2 KB
- 비디오
- 리코 2C02 PPU (픽쳐 프로세싱 유닛)
- 해상도 - 256 x 240 픽셀 (NTSC에서 256 x 224만 표시될 수 있다.)
- 색상 - 고정 52색 (44색,5회색조,3복제색)
- 팔레트
- BG: 4팔레트 x 3색 + 1배경색
- 스프라이트: 4팔레트 x 3색
- 타일 - 8 x 8픽셀 타일 배경
- 스프라이트 - 8x8 픽셀이나 8x16 픽셀 스프라이트를 최대 64개까지 표시할 수 있지만 스캔라인 당 8개만 표시할 수 있다.
- 사운드
- 2 x 펄스파 채널
- 1 x 삼각파 채널
- 1 x 노이즈 채널
- 1 DPCM 채널
패미컴 2A03 CPU 메모리 맵
[+/-]어드레스 범위 (16진) | 크기 | 주석 (페이지 사이즈는 256 바이트) | |
---|---|---|---|
$0000–$00FF | 256바이트 | 제로 페이지 — 특수 제로 페이지 어드레싱 모드는 고속 메모리 READ/WRITE 액세스를 제공 | |
$0100–$01FF | 256바이트 | 스택 메모리 | |
$0200–$07FF | 1536바이트 | RAM | |
$0800–$0FFF | 2048바이트 | $0000–$07FF의 미러 | $0800–$08FF 제로 페이지 $0900–$09FF 스택 $0A00–$0FFF RAM |
$1000–$17FF | 2048바이트 | $0000–$07FF의 미러 | $1000–$10FF 제로 페이지 $1100–$11FF 스택 $1200–$17FF RAM |
$1800–$1FFF | 2048바이트 | $0000–$07FF의 미러 | $1800–$18FF 제로 페이지 $1900–$19FF 스택 $1A00–$1FFF RAM |
$2000–$2007 | 8바이트 | 입출력 레지스터 | |
$2008–$3FFF | 8184바이트 | $2000–$2007의 미러 (multiple times) | |
$4000–$401F | 32바이트 | 입출력 레지스터 | |
$4020–$5FFF | 8160바이트 | 확장 ROM — VRAM의 성능을 강화하기 위해 닌텐도 MMC5와 사용되었다. | |
$6000–$7FFF | 8192바이트 | SRAM — Save Ram used to save data between game plays. | |
$8000–$FFFF | 32768바이트 | PRG-ROM | |
$FFFA–$FFFB | 2바이트 | 비마스커블 인터럽트 (NMI) 핸들러 루틴 어드레스 | |
$FFFC–$FFFD | 2바이트 | 전원 ON 리셋 핸들러 루틴 어드레스 | |
$FFFE–$FFFF | 2바이트 | 브레이크 (BRK 명령) 핸들러 루틴 어드레스 |
강좌
[+/-]부록
[+/-]하드웨어 I/O 포트
[+/-]패미컴은 $2000-$2007(16진)과 $4000-$4017 어드레스에 있는 I/O 포트를 가지고 있다.
PPU
[+/-]- $2000 - WRITE ONLY - PPU 컨트롤 레지스터 1
- $2001 - WRITE ONLY - PPU 컨트롤 레지스터 2
- $2002 - READ ONLY - PPU 스테이터스 레지스터
비디오 제어
[+/-]- 스프라이트
- $2003 - WRITE ONLY - 스프라이트 메모리 어드레스
- $2004 - READ/WRITE - 스프라이트 메모리 데이터
- $2005 - WRITE ONLY - BG 스크롤
PPU (계속)
[+/-]- $2006 - WRITE ONLY - PPU 메모리 어드레스 - indexing into PPU memory location
- $2007 - READ/WRITE - PPU 메모리 데이터 - data to read from a PPU memory location or write to a PPU memory location
사운드
[+/-]- 사각파 1
- $4000 - 레지스터 1 - 비트:
- 0-3: 볼륨/엔벌로프 디케이 rate
- 4: 엔벌로프 디케이 disable
- 5: length counter clock disable / 엔벌로프 디케이 반복 enable
- 6-7: 듀티 사이클 타입 (unused on noise channel)
- $4001 - Register 2 - Bits:
- 0-2: right shift amount
- 3: decrease / increase (1/0) wavelength
- 4-6: sweep update rate
- 7: sweep enable
- $4002 - Register 3 - Bits:
- 0-7 Eight LSB of wavelength
- $4003 - Register 4 - Bits:
- 0-2: 3 MSB of wavelength (unused on noise channel)
- 3-7: length counter load register
- $4000 - 레지스터 1 - 비트:
- Square wave 2
- $4004 - Register 1 - Same as Square wave 1
- $4005 - Register 2 - Same as Square wave 1
- $4006 - Register 3 - Same as Square wave 1
- $4007 - Register 4 - Same as Square wave 1
- Triangle
- $4008 - Register 1 - Bits:
- 0-6 linear counter load register
- 7 length counter clock disable / linear counter start
- $4009 - Unused Register
- $400A - Register 3 - Same as Square wave 1
- $400B - Register 4 - Same as Square wave 1
- $4008 - Register 1 - Bits:
- Noise
- $400C - Register 1 - Same as Square wave 1
- $400D - Unused Register
- $400E - Register 3 - Bits:
- 0-3 playback sample rate
- 4-6 unused
- 7 random number type generation
- $400F - Register 4 - Same as Square wave 1
DMC
[+/-]- $4010 - 레지스터 1 - 비트:
- 0-3: sample rate
- 4-7: 미사용?
- $4011 - 레지스터 2 - 비트:
- 0-7: 볼륨
- $4012 - 레지스터 3 - 비트:
- 0-7: voice table start address(N*0x40+0xc000)
- $4013 - 레지스터 4 - 비트:
- 0-7: voice table byte size(N*16+1)
스프라이트 (계속)
[+/-]- $4014 - write only - DMA Access to the Sprite Memory
사운드 (계속)
[+/-]- $4015 - read / write - enable/disable individual sound channels
조이스틱
[+/-]- $4016 - read / write - Joystick 1
- $4017 - read / write - Joystick 2
외부 링크
[+/-]- More info can be found on IRC, on the EFnet server, in channel #nesdev
- NesDev, contains detailed technical documents, tools, and examples.
- P65 Assembler, an assembler written in Perl for the 6502 family of processors with support for programming the NES.