Color $0D games

From NESdev Wiki
Revision as of 19:15, 21 July 2023 by Krzysiobal (talk | contribs) (+sample images/videos and workarounds)
Jump to navigationJump to search

On an NES, the palette color $0D causes the signal to drop below the normal black level. This low voltage signal is sometimes mistaken by televisions for blanking signals, which can cause an unstable picture, or total picture loss on some devices. Other devices seem to process with signal without problem.

Games

Game Notes
Contra 100 in 1 Uses both for background color and one of the sprites' color; to apply a patch, change values at those offsets in ROM from $0D to $0F:

$388B, $388F, $3893, $3897, $389B, $389C, $389F, $38A3, $38A7

Contra 168 in 1 Uses both for background color and one of the sprites' color; to apply a patch, change values at those offsets in ROM from $0D to $0F:

$2451, $2455, $2459, $245D, $2461, $2462, 2465, $2469, $246D

Bee 52
Castelian
Cybernoid $0D is used as the background color.
The Fantastic Adventures of Dizzy
Game Genie The code entry screen uses it for its background.
The Immortal Also uses all three de-emphasis bits to compensate for the the user cranking up the TV set's brightness so that regular black ($xE/$xF) can be used as a darker shade of gray while color $0D is used as a black background color.
Indiana Jones and the Last Crusade (Taito) Used as the background color in the motorcycle level.
Indiana Jones and the Last Crusade (Ubisoft)
Maniac Mansion (US)
Micro Machines
MIG-29 Soviet Fighter
Quattro Sports
Quattro Adventures
Skate or Die 2 Used as the background color during the introduction cutscene sequence.
The Super Shinobi Unlicensed clone of Shinobi III.
Teenage Mutant Ninja Turtles Uses it for black outlines on sprites, the lack of large areas of this color mitigates the problem.
The Three Stooges Uses $xD colors that get turned to $0D during fades

Effects

Modern LCD TV and modern famiclone (probably RS-35) showing distorded image in Contra 168-in-1 cartridge
Different modern LCD TV with digital famiclone (connected via HDMI) shows $0D color to be displayed as gray in Super Robin Hood game
Modern 29" CRT TV with IQ502 rev 2 (UM6561 nes-on-chip) famiclone shows periodic loss of v-sync when the paper unrolls at the beginning of Fantastic Adventures of Dizzy game. Note that this TV has no problems with displaying $0D colors with different famiclones, and even using this famiclone - this is the only moment in this game that the problem manifests, though this game uses this color all the time
Same TV and console as above, No problems in the beginning screenshots, where $0d is used as universal background colors, while permanent v-sync loss during game, where $0d is used as blinking car's shadow color in Ultimate Stuntman game.


Because the signal created by $0D is outside the specifications for the video signal, there is a lot of variation in how display devices handle it. Here are some possible effects that may be seen when using $0D:

  • $0D appears the same black as the other black colors (e.g. $0F).
  • $0D appears slightly darker than other blacks.
  • $0D appears as gray.
  • The device renormalizes the range when $0D appears, slightly brightening all other colours while it is onscreen.
  • Wobbly or distorted image from loss of horizontal blanking stability (either permanent or periodic)
  • Loss of vertical blanking stability.
  • Total loss of picture.

These effects are more likely to occur when color $0D is used with the de-emphasis bits enabled, such as in The Immortal, as seen in these example videos.

Workarounds

  • Patch the game code to replace all the $0D writes with $0F. Because there are certainly many ROM locations that need to be changed, using ordinary Game Genie device to patch the code on the fly won't be sufficient and replacing the cartridge memory with updated version of code will be necessary
  • Use plug-thru device that will activate itself automatically when write of $0D is detected - because taking CPU off the bus is not possible, such device need to either "overcurrent" the data written from CPU to PPU (which is possible only in DIP40 chip console) or try to issue a short code that replaces the lastly written $0D to PPU with fixed value
  • If your TV has digital inputs (for example - HDMI), use RCA to HDMI adapter, whose analog to digital converter mich might cope better with the out-of-spec video signal
  • Modify the console video amplifier stage to raise the output voltage a little, for example by omiting the NPN transistor follower part of the video amplifier
  • And finally - change your TV, console and/or video adapter (if you are using one)

Tests

  • Palette test ROM - Displays NES palette, and can toggle $0D display.
  • NESPix - Native graphics editor that allows use of $0D, and can test it in various visual arrangements.
  • 240p test suite - TV testing program. Test cards with $0D include PLUGE, SMPTE color bars, Solid color screen, and IRE. PLUGE also includes emphasized $0D.

See also