Skip to main content

  | मौसम…

411 समाचार
Public archive edition · Attributed source reporting with original dates · AI drafts are excluded

411 REFERENCE · Wikibooks

NES Programming

Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.

right|thumb|300px|Nintendo Entertainment System 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 thumb|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 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 Introduction: A few words on assembly /Initializing the NES/ Appendices The NES memory map Hardware I/O ports The NES has I/O ports located at addresses $2000-$2007 (hexadecimal) and $4000-$4017. PPU $2000 - write only - PPU Control Register 1 $2001 - write only - PPU Control Register 2 $2002 - read only - PPU Status Register Video control Sprites $2003 - write only - Sprite Memory Address $2004 - read / write - Sprite Memory Data $2005 - write only - Background Scroll PPU (continued) $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 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 7 random number type generation $400F - Register 4 - Same as Square wave 1 DMC $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) $4014 - write only - DMA Access to the Sprite Memory Sound (continued) $4015 - read / write - enable/disable individual sound channels Joystick $4016 - read / write - Joystick 1 $4017 - read / write - Joystick 2 External links Super NES Programming 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. Console game programming N 25% ko:패미컴 프로그래밍