The codehandler on the Wii side is inserted in some commonly called function like the function to wait for vertical blank. When it gets a chance to run, it performs the virtual machine functions of interpreting the gecko codes, and services the debug commands pending on the EXI port if any are ready.
The command codes all start with a byte to indicate what the command is, and the command byte is followed by zero or more bytes of associated data. Here is a list of codes. The byte values are in hex (base 16), so if "10" appears it isn't ten, it's sixteen. The codes seem to be
using binary coded decimal.
* 01 [4 bytes address] [4 bytes data] = Write a byte to memory * 02 [4 bytes address] [4 bytes data] = Write a word (16 bits) to memory * 03 [4 bytes address] [4 bytes data] = Write a double word (32 bits) to memory * 06 = Freeze program * 07 = Unfreeze program * 08 = Resume program, but remain frozen (single frame advance) * NOTE THIS IS A WORK IN PROGRESS * 09 [data] = Breakpoints (ibp) * 10 [data] = Breakpoints (dbp) * 2f [data] = upbpdata * 30 [data?] = getbpdata * 38 [data] = cancelbreakpoints * 40 [data] = sendcheats * 41 [data] = uploadcode * 44 [data] = breakpoints (step) * 50 [data] = pausestatus * 60 [data] = executecodes * 89 [data] = breakpoints (aligned dbp) * 99 [data] = versionnumber
== Files ==