Are there any undocumented features of the GBC ?

Yes. The byte at location $143 in a ROM determines whether the GBC operates in GBC mode ($80 or $c0) or 4-color GB mode (any other value.) That is the official info anyway. Martin Korth has found that any of the following binary values at $143 cause strange sprite colors & white-only background colors always (X = don't care):

1XXX01XX
1XXX10XX
1XXX11XX

It is as if bits 2 and/or 3 being set cause the colo(u)r palette registers to be write-protected. On power up, the sprite palettes tend to be random pastel colo(u)rs & the background palettes are white.


If you read HDMA5 ($ff55) after starting an HDMA you will read back the tile count you wrote except the high bit will be 0. Every H-blank this count will decrement. After reaching $00 it will change to $ff indicating that HDMA has completed. (i.e. If bit 7 is 0 HDMA is busy, otherwise HDMA is done.)


There are also several undocumented registers (info from Dark Fader):

$FF6C - bit 0 can be read/written
$FF72-$FF74 - whole byte can be read/written
$FF75 - bit 4-6 can be read/written
$FF76-$FF77 - Read only & set to $00


For the record, Nintendo recommends against using undocumented registers in order that your code will work properly with future releases of hardware. It is not clear whether the bit that tells you that HDMA is done was accidentally undocumented or undocumented on purpose.