Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikibooksThe Free Textbook Project
Search

NES Programming

25% developed
From Wikibooks, open books for an open world
Nintendo Entertainment System
Wikipedia has related information at Nintendo Entertainment System.

This book is an open work designed for people interested in learning to program for the NES (Nintendo Entertainment System).

Hardware specifications

[edit |edit source]
An annotated MOS 6502 die.
  • CPU - Ricoh 2A03 CPU which is a MOS 6502 without a decimal mode.
    • Clocked 1.789773Mhz for NTSC (System 21.47727Mhz / 12) and 1.773447Mhz for PAL (System 26.601171Mhz / 15)
  • Memory - 2 KB
  • Video
    • Ricoh 2C02 PPU (Picture Processing Unit)
    • Resolution - 256 x 240 pixels (Only 256 x 224 pixels are visible on NTSC)
    • Colors - Fixed 52 (44 colors, 5 grays and 3 duplicated)
    • Palette
      • Background: 4 Palettes x 3 Colors + 1 Back Color
      • Sprites: 4 Palettes x 3 Colors
    • Tiles - 8 x 8 pixels tiled background
    • Sprites - Up to 64 8x8-pixel or 8x16 pixel sprites but only 8 can be displayed per scan-line
  • Sound
    • 2 Pulse wave channels
    • 1 Triangle wave channel
    • 1 Noise channel
    • 1 DPCM channel

NES 2A03 CPU memory map

[edit |edit source]
Address Range (Hexadecimal)SizeNotes (Page size is 256 bytes)
$0000–$00FF256 bytesZero Page — Special Zero Page addressing modes give faster memory read/write access
$0100–$01FF256 bytesStack memory
$0200–$07FF1536 bytesRAM
$0800–$0FFF2048 bytesMirror of $0000–$07FF$0800–$08FF Zero Page
$0900–$09FF Stack
$0A00–$0FFF RAM
$1000–$17FF2048 bytesMirror of $0000–$07FF$1000–$10FF Zero Page
$1100–$11FF Stack
$1200–$17FF RAM
$1800–$1FFF2048 bytesMirror of $0000–$07FF$1800–$18FF Zero Page
$1900–$19FF Stack
$1A00–$1FFF RAM
$2000–$20078 bytesInput/Output registers
$2008–$3FFF8184 bytesMirror of $2000–$2007 (multiple times)
$4000–$401F32 bytesInput/Output registers
$4020–$5FFF8160 bytesExpansion ROM — Used with Nintendo's MMC5 to expand the capabilities of VRAM.
$6000–$7FFF8192 bytesSRAM — Save Ram used to save data between game plays.
$8000–$FFFF32768 bytesPRG-ROM
$FFFA–$FFFB2 bytesAddress of Non Maskable Interrupt (NMI) handler routine
$FFFC–$FFFD2 bytesAddress of Power on reset handler routine
$FFFE–$FFFF2 bytesAddress of Break (BRK instruction) handler routine

Tutorials

[edit |edit source]

Appendices

[edit |edit source]

Hardware I/O ports

[edit |edit source]

The NES has I/O ports located at addresses $2000-$2007 (hexadecimal) and $4000-$4017.

PPU

[edit |edit source]
  • $2000 - write only - PPU Control Register 1
  • $2001 - write only - PPU Control Register 2
  • $2002 - read only - PPU Status Register

Video control

[edit |edit source]
  • Sprites
    • $2003 - write only - Sprite Memory Address
    • $2004 - read / write - Sprite Memory Data
    • $2005 - write only - Background Scroll

PPU (continued)

[edit |edit source]
  • $2006 - write only - PPU Memory Address - indexing into PPU memory location
  • $2007 - read / write - PPU Memory Data - data to read from a PPU memory location or write to a PPU memory location

Sound

[edit |edit source]
  • Square wave 1
    • $4000 - Register 1 - Bits:
      • 0-3: volume / envelope decay rate
      • 4: envelope decay disable
      • 5: length counter clock disable / envelope decay looping enable
      • 6-7: duty cycle type (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
      • 7random number type generation
    • $400F - Register 4 - Same as Square wave 1

DMC

[edit |edit source]
  • $4010 - Register 1 - Bits:
    • 0-3: sample rate
    • 4-7: unused?
  • $4011 - Register 2 - Bits:
    • 0-7: volume
  • $4012 - Register 3 - Bits:
    • 0-7: voice table start address(N*0x40+0xc000)
  • $4013 - Register 4 - Bits:
    • 0-7: voice table byte size(N*16+1)

Sprites (continued)

[edit |edit source]
  • $4014 - write only - DMA Access to the Sprite Memory

Sound (continued)

[edit |edit source]
  • $4015 - read / write - enable/disable individual sound channels

Joystick

[edit |edit source]
  • $4016 - read / write - Joystick 1
  • $4017 - read / write - Joystick 2

External links

[edit |edit source]
  • Super NES Programming
  • More info can be found onIRC, 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.
Retrieved from "https://en.wikibooks.org/w/index.php?title=NES_Programming&oldid=4227926"
Categories:
Hidden categories:

[8]ページ先頭

©2009-2025 Movatter.jp