The patch

parche/dunkshot_msx2.ips: 292 bytes, 164 bytes of the cartridge changed in 24 stretches. On an MSX2 it puts the game in SCREEN 4, eight sprites per line, and shows only the table sorted by depth (The flicker). On an MSX1 the same file plays as the original.

What the V9938 changes

SCREEN 4 (mode G3) is SCREEN 2 with sprites in mode 2: same pattern, name and colour tables, so the game's graphics need no change. Three things differ:

Below the 16 KB of an MSX1 the game leaves only 0x3C00-0x3FFF unused (the sprite patterns end at 0x3BBF), so: colours at 0x3C00-0x3DFF, attributes at 0x3E00, and the second table the MSX1 alternates at 0x3F00. On an MSX1, R5 = 0x7C or 0x7E points at those two tables; on an MSX2, R5 is always 0x7F and the VDP shows 0x3E00 both frames, the list sorted by depth of 0xE7B0, from which the colours are taken. No pattern moves.

What changes in the cartridge

TRADE on an MSX2: the sample figure keeps its colours

Where the new code lives

In the 0xFF filler at 0xBFD4-0xBFFD and in three orphan routines of the cartridge that nobody calls (0x6EA0, 0x6F30, 0x7AAE), found when the disassembly was traced. Their listing is parche/parche_msx2.asm; the original code around every patched byte is in src/dunkshot.asm.

pieceaddressbytes
hook after INIGRP0xBFD431
register 5 by machine0xBFF311
sprite colour table0x6EA038
end of list, 0xD0 and 0xD80x6EC914
colours of the sample figure0x6F3022
second copy and colours0x7AAE9