The BIOS really doesn't do much, it's about detecting a cartridge and enforcing region detection. Some emulators bypass the checks in order to avoid having to emulate the multi-slot nature of the system, and that would account for a lot of the time difference you see.
The r register is a bit odd, you can't set it in code. It's a counter that increments on every cycle, which provides a useful pattern for certain old memory chips, to help refresh their values and avoid data loss. The Z80 chip did this because it was useful at the time. Games use it as a random seed because its value is not deterministic, as the CPU clock runs for a while before the power stabilisation components allow it to start executing code. You could make a replacement BIOS, or a watchdog circuit on the expansion port using a CPLD or something, to watch the value and try to get the game start code to have a consistent value by halting the CPU or, in the BIOS case, executing code chunks that waste the right amount of time.
Some games may not use the r register for their RNG. There's no way way to be sure, except for reading the code.