These are the notes I have on it. You should take a look at its boot ROM and run it in an emulator with a debugger to see what it does. The Genie intercepts reads from $8000-$FFFF. It can intercept up to three addresses, and either unconditionally cause a new value to be read back, or do that only if the byte that would have been read back matches some compare value. The compare feature is basically a cheap way to make it work with bank switching, without it having to know exactly how it works, though it wouldn't work if a game happened to have the same byte at that address in different banks that get selected, and you wanted to patch in only one bank.
Original code writes 0 to $FFF0, $FFF1, $FFF0. Not sure whether this causes the GG to do anything. Original code then writes registers in reverse order. GG fills unused codes with $FF. $8000 should be written last, with low bit set, then written with zero.
Code: Select all
$8000 -DDDCCCG Disables, Compare enables, Genie enable
$8001 0HHHHHHH High bits of address (bit 15 assumed 1)
$8002 LLLLLLLL Low bits of address
$8003 CCCCCCCC Compare value (0 if unused)
$8004 RRRRRRRR Replacement value
$8005-$8008 Second code, same as above
$8009-$800C Third code, same as above
I believe the disables and enables have the lowest bit corresdponding to the first code, highest bit the last.
EDIT: corrected $FF00 to $FFF0.