Open bus behavior

From NESdev Wiki
Revision as of 08:06, 27 August 2017 by Rainwarrior (talk | contribs) (connected -> active (what's the easiest way to describe this? was trying not to go for jargon like tri-state...))
Jump to navigationJump to search

When the CPU attempts to read from an address which has no devices active, the result is open bus behavior. The value that results from a read in such a region is undefined, but on specific hardware predictable results may appear.

For example, a few games may make reads to the region $6000-7FFF, but have no WRAM present here. This can be a problem for emulators, as the original iNES file format had no way to specify a lack of WRAM, leaving the emulator to provide WRAM behavior in that region by default.

On a standard NES the common open bus behaviour appears to result in the last value read from the bus before this read. For many instructions this will be the high byte of the address being read, though for immediate instructions it will simply be the last byte of the instruction. A DMC DMA may also alter the last value read if it interrupts an instruction.PLEASE VERIFY

Open bus behavior is relatively rare. In general, where games rely on it, it seems to be unintentional due to a programming error. Known examples:

  • Castlevania - Just after the introduction will read a few values from ~$7FFX before the first stage begins.
  • Low G Man - WRAM instead of open bus behavior may cause a crash Chapter 1 Scene 3B a few seconds into the boss fight music, or graphical glitches when using the boomerang weapon.[1]
  • Battletoads & Double Dragon - At the end of the first level, reads a values from ~$600X when the Abobo boss finished destroying the wall. A value of $00 read here will crash the game.[2]

See Also

References

  1. Forum post: Low G Man "plays nice with emulators" patch
  2. Forum post: Battletoads Double Dragon Powerpak Freeze