패미컴 프로그래밍

닌텐도 엔터테인먼트 시스템(NES)(현대 컴보이)
(북미,유럽판 패미컴)
위키백과 위키백과에 이 문서와
관련된 정보가 있습니다.
패밀리 컴퓨터

하드웨어 사양

+/-
  • 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 포트를 가지고 있다.

  • $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
  • 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
  • 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
  • $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.