GBC CPU revisions
Warning! Super geeky content! Proceed with caution!
I've always found slight inconsistencies when coding software or developing hardware for the GBC. What works well on one system is occasionally buggy on others, and is typically temperature sensitive.
A few reports have come through regarding my ElCheapo SD V2.0 cart, in particular when a Version 03 GBC motherboard is running a GBC game in double-speed mode (not all games use this, pokemon for example doesn't) the Save State engine in my cart crashes and freezes the console when saving.
This doesn't happen on any other console, DMG, Pocket, GBA, SP, SGB, GBC versions 4*/5/6.
There is little information on the internet regarding the bugs in various GBC revisions but there is clearly a reason Nintendo/Sharp spent big $$$ re-designing the GBC CPU, 5 times throughout the consoles lifespan.
The known bugs in Version A,B+C CPU's range from Audio registers misbehaving, the external Audio In signal having different input impedance, an overall higher background noise generated by the CPU, and the double speed bug.
What isn't commonly known is the CPU under certain circumstances glitches and even crashes. After executing the double speed instruction macro, on some CPU revisions the following instruction is skipped or improperly executed. Nintendo's work-around was to add a NOP, a No Operation instruction following these buggy instructions so the code would behave predictably across the various versions.
It seems there are more instructions that suffer a similar bug. Calling, Jumping or Interrupting to a fixed address will rely on the address data being held steady on the bus. Instead of being latched and then setting the program counter to the new address, it mirrors what is on the bus to the program counter upper byte. This will usually result in no problems unless you swap the ROM out as is common in gamesharks and higher end flash carts.
The bugs don't stop there. The graphic engine was also overhauled between CPU revision C and D. The differences are minute, video data is sampled on the falling edge rather than the rising edge, line and frame sync pulses are changed in duration and not necessarily synced to the pixel clock.
The consequence of the changes can result in an unstable image under certain power and temperature conditions. For example, in Rev C CPU's, the line sync and dot clock occur exactly in sync. This is an issue when sampling the sync pulse on the rising edge of the dot clock. If the clock pulse arrives nanoseconds earlier than the sync pulse, it'll register as a 0. If it arrives after, it'll register as a 1. This nS delay is influenced by temperature and the length of the trace from point to point on the PCB.
Rev D+E CPU's have delayed the sync one half clock cycle to guarantee the data sampled on the rising edge is stable. I've never seen glitches in the genuine LCD but they must have been there for Nintendo to change the design this late in the lifecycle. There are also two models of GBC LCD!
A workaround for my GBC101 ribbon was to use the 'gizmo' on Rev C CPU's which adds a delay into the clock path, enough to guarantee the sampled data is stable. In later versions, propagation delays have been added to the logic to force a stable condition. This isn't ideal as the signal in your GBC can vary with the aging of the capacitors and a noisy power supply.
The solution? Two versions of GBC101 ribbon, one which samples on the Rising edge, one which samples on the falling edge. This guarantees a stable image regardless of temperature or battery level.
The same applies for the V2 cart. A V2.2 cart will soon be released specifically for v03 and some 04 motherboards to fix the GBC save bug.
If you look under your battery spring, you'll see a 2 digit value. Or none at all. None signifies v01.
- GBC-01 = CPU type A
- GBC-02 = CPU type B
- GBC-03 = CPU type C
- GBC-04 = CPU type C or D
- GBC-05 = CPU type D
- GBC-06 = CPU type E
Please take note of this when ordering GBC ribbons, or V2 flash carts to be sure to get the correct model for your system(s)!!!
I hope some or all of this made sense! It is important to select the correct Ribbon for your system! Read the CPU model off the CPU chip on your motherboard, and use this as a guide when ordering ribbons.
Thanks! I hope someone finds this useful.