Myths: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
(→‎Old tutorials: people need to know WHY the gbaguy tutorial is wrong - explicitly point out some of its mistakes)
mNo edit summary
Line 48: Line 48:


'''Fact:''' Old tutorials like these are full of cargo-cult programming because the authors apparently didn't fully understand the hardware. For example, this tutorial in particular treats the [[PPU registers|OAM address]] register as 16-bit (just like $2006) and attempts to initialize variables in [[wikipedia:.bss|system RAM]] using .db statements - a lot of the programs don't even work on a NES. [http://nesdev.parodius.com/NES101.zip NES 101] and [http://nintendoage.com/forum/messageview.cfm?catid=22&threadid=7155 Nerdy Nights] are considered better.
'''Fact:''' Old tutorials like these are full of cargo-cult programming because the authors apparently didn't fully understand the hardware. For example, this tutorial in particular treats the [[PPU registers|OAM address]] register as 16-bit (just like $2006) and attempts to initialize variables in [[wikipedia:.bss|system RAM]] using .db statements - a lot of the programs don't even work on a NES. [http://nesdev.parodius.com/NES101.zip NES 101] and [http://nintendoage.com/forum/messageview.cfm?catid=22&threadid=7155 Nerdy Nights] are considered better.
== PPU details ==
'''Myth:''' The sprite address ($2003) must be cleared on VBlank ending.
'''Fact:''' Some chinese games have glitched or fully messed up sprites if you don't set $2003 to zero on VBlank end. Unfortunately, nothing was confirmed about it until then.

Revision as of 23:15, 2 February 2011

This page documents some myths about the NES hardware that originate in obsolete documents and emulators.

NTSC picture height

Myth: The NTSC NES picture is 224 pixels tall.

Fact: The NTSC NES picture is 240 pixels tall. The PPU fetches and generates a signal for all 240 lines, even if TVs cut off the edges.

Some emulators simulate overscan in order to hide nametable mirroring glitches. For example, PocketNES for Game Boy Advance hides the top 16 pixels, the bottom 11, and 8 on the left and right sides. The Mega Man Anniversary Collection (GameCube/XBOX/PS2) likewise hides the top/bottom 8 pixels, plus an extended left/right clipping in order to hide the attribute color warp "glitch" in both sides. The Wii Virtual Console (NES) does not display the top and bottom 8 lines.

Scrolling registers

Myth: You always need to use the VRAM address register ($2006) to scroll.

Fact: The proper way to set the scroll position is to write the upper bits of the X and Y coordinates to PPUCTRL ($2000), and then bits 0-7 of the X and Y coordinates to PPUSCROLL ($2005). The NES will update the VRAM address register for you near the end of the pre-render scanline (261 on NTSC, 311 on PAL).

The only time you need to use $2006 to scroll, as described in Loopy's document "The skinny on NES scrolling", is if you're trying to change the vertical part of the scroll position during rendering time. This could happen if you turn rendering on late to free up more VRAM update time or if you are splitting the screen. Nintendo's Super Mario Bros. zeroes $2006 to set the scroll, but given that this was one of the first games with a scroll split, it might just be another example of imperfect hardware understanding. Launch titles tend to be full of these in part because the hardware itself may have been a moving target during the game's development. Another example is the horrible code in Tetris for Game Boy.

Mappers

Myth: The VRC6 is a very complex mapper even superior to the MMC5.

Fact: The VRC6 is a decent mapper able to do standard PRG and CHR bankswitching, a CPU cycle counter, and have 3 extra sound channels. The MMC5 have extended video possibilities, a true scanline counter, and countless features that the VRC6 lacks, but only have 2 extra sound channels. Rumor has been made that the VRC6 was supperior to the MMC5 because the MMC5 Castlevania III was censored, and (like other 72-pin games) didn't use extra sound. For the truth Castlevania III doesn't even come close to using all MMC5 capabilities, and it likely used MMC5 because it supported the VRC6's PRG ROM bankswitching mode and was cheaper than Konami getting the VRC6 approved through NOA and NOE.

Largest game

Myth: Dragon Quest/Warrior IV (DQ4) is the largest NES game, having 1 MiB (1048576 bytes) of ROM.

Fact: All versions of DQ4 and the English version of Dragon Warrior III use SUROM. This board allows games to be as big as Mega Man VI, with 512 KiB PRG ROM and 8 KiB CHR RAM. This rumor was due to a 1MB overdump of DQ4 floating around.

Games larger than DQ4 include the following:

  • The largest licensed Famicom game is Metal Slader Glory (512 KiB PRG + 512 KiB CHR + MMC5).
  • The largest licensed NES game is Kirby's Adventure (512 KiB PRG + 256 KiB CHR + MMC3).
  • The largest unlicensed non-pirate NES game is Action 52 (1536 KiB PRG + 512 KiB CHR + custom mapper).
  • One large "Hong Kong Original" port is Final Fantasy VII (2048 KiB PRG + CHR RAM).
  • Some pirate multicarts are 4 MiB or larger. These cannot be represented in the the original iNES format, which has a practical limit of 2048 KiB PRG ROM and 1024 KiB CHR ROM. Use NES 2.0 instead.

Old programs

Myth: If a binary file has a .nes file extension, it will work as intended on an NES, and I should tweak my emulator to match how it is supposed to work.

Fact: No. Especially older NES programs tend to have been tested only on bad emulators. Your college-project emulator should match the behavior of an NES or at least that of an accurate emulator. Dirty iNES headers might break it.

A lot of emulators, especially prior to about 2005, were based on incomplete knowledge of how the NES works. Some old demos expect all internal memory ($0000-$07FF) to be $00. Since then, public knowledge of the quirks of the NES hardware behavior has grown, and emulators such as Nintendulator and Nestopia more faithfully reproduce the misbehaviors in sloppy or cargo-cult-programmed code. See Program Compatibility for a list of programs known to work and known not to work on an NES.

Old tutorials

Myth: GBAGuy's NES tutorial is worth following.

Fact: Old tutorials like these are full of cargo-cult programming because the authors apparently didn't fully understand the hardware. For example, this tutorial in particular treats the OAM address register as 16-bit (just like $2006) and attempts to initialize variables in system RAM using .db statements - a lot of the programs don't even work on a NES. NES 101 and Nerdy Nights are considered better.

PPU details

Myth: The sprite address ($2003) must be cleared on VBlank ending.

Fact: Some chinese games have glitched or fully messed up sprites if you don't set $2003 to zero on VBlank end. Unfortunately, nothing was confirmed about it until then.