The main problem is the firmware only reserve 32 bytes for storing the pointer to the reserved ram buffer for 16 roms (2 bytes), with programs that don't use/reserve a ram buffer (those game roms) is not too much problematic at first, because they ignore this buffer pointer parameter when is sent to them, but those pointers are saved in ram even if the rom doesn't use it.
But in the moment you have installed more than 16 roms, the ram after those 32 bytes is overwritten and you start to corrupt the first firmware jumps.
My solution was changing the place in ram where those variables are storaged to one with enough space to storage 32 pointers (64 bytes).
But the best solution for game roms, it's making a rom launcher and mark the games roms as not need to be initialized by the firmware.