Mr Do. Information:

Input information

Player 1 control input is mapped to memory location 0xA000
Player 2 control input is mapped to memory location 0xA001
Action button is bit 0x10, active low (0)

ROM verification

Mr. Do rom verification only takes place in test mode (hold down player 1 or player 2's action button (not start button)

The Mr. Do rom verification is as follows:

for address in current_rom_bank
register a = register a + (address)

That is a adds up the values of each address in a ROM bank. Once all addresses are added up in a bank, the value of a is compared to register e

register e = 0 for rom bank 0
register e = 1 for rom bank 1
register e = 2 for rom bank 2
register e = 3 for rom bank 3

This index is later used to print out which rom bank is bad if any are bad. I am assuming the last byte in each rom bank is used to ensure that the code equals the number of the rom bank, though I do not know that for sure

Video Information

From what I can gather with Mr. Do, Mr. Do has a set of tiles, 32 high and 24 wide. addresses start from 0x8c80 (lower left corner) and move the column and then right till it hits the top right corner at address 0x8f7f.

Each of these locations has a corresponding memory location that maps the foreground and background color.
These color locations are are 0x8880 - 0x8b7F

The high 4 bits is the background color, the low 4 bits is the foreground color *Note some bit patters seem to shift from colors to altered graphic tiles Note the top and bottom row are actually invisible, so addresses 0x8c80,0x8c9F,0x8ca0,0x8cb0...0x8f7f are not actualy shown

memory written to "non-invisible locations" from 0x8c0-0xb7F will show characters if there correpsonding color location has a valid color.

The character codes are

The information below has not been proven and right now theory/speculation

address 0x0038 seems to be the start of a loop (well 0x00B8) is. Mr do will often loop on a jr and loop indefinitely, but before these lines are hit the instruction im 1 is set which waits for an interupt and the loop is broken when the CPU receives and interupt (which it proceeds to jump to 0x0038) when that occurs. I believe these infinite loops are enter when the system is finished drawing the screen and is waiting for the screen redraw)

sprites - 0x8080 - 0x837f seem to be graphical position for sprites, 0x89 looks like a "white outline square"

0x8480 - 0x875F - also seem to be graphics positions for sprites, FB looks like a white outline square while the corresponding addresses 0x8080-0x837f are 0x89