Here is a list of some non working games. Almost all games (except super edge grinder which is rather new, and must use a completely different loader than the others) seem to use a "2-step" loading procedure, where after initial loading of screen and game code (this part works ok), game code is executed, but then, they need to load extra files with game data (usually just before starting to play) and that's where i get "file not found" errors or game stops indefinetely, as they try to access disk drive. Note that, there are other games that use the same "2-step" loading procedure, but seem to work ok, and also, almost all games that load all files in "one step" and then game executes (without needing to load extra files), work ok too.
APB.bin => Makes nasty things with ROM-Banking (128KB-Game?!) and Base-Memory, ROM7-Init
IMHO This Version can only run, when you have special hardware for support.
Ghostb2.bin => Makes ROM7 init and resets all pointers (no special needs)
Infection => Do not run on your envoirement?
P47 => Same as APB.bin
Strider => Same as APB.bin
superedgegrinder => i dont know
Turrican 2 => NeedsROM-Banking (128KB-Games), ROM7-Init
With the Games Ghostb2.bin & Infection & Turrican 2 you can have success to get them running.
It seems as game code somehow overrides or resets the patched jumpblocks of amsdos routines.
The hole code (342bytes) is loaded in the 512byte of disk buffer area at &A9B0. Because this area is often overwritten,i'm using a "trick" to ensure that code will always be available, when needed: i use a much smaller code (only 35 bytes) placed in a supposedly "Safer" location (&b0c9), which reloads the hole code from serial interface back to &a9b0! This code is executed every time a CAS IN OPEN routine is called,so,in theory, code would be in it's place when needed...
Nice Idea, but you have the problem, that B0C9 is not reset-proof, so this should be overwritten often. Try the area BE00 and up.
I make a short look to your code:
;KL INIT ROM
LD HL,&BCCE
LD A,&C9
LD (HL),A
How do a game now reinit the ROM7, if a lot of AMSDOS-RAM is overwritten?
(ok, you do not need AMSDOS, but maybe the game)
;JUMP RESTORE
LD HL,&BD37
LD A,&C9
LD (HL),A
What do you do, when a game thinks, "I must reinit this area, because it's overwritten?"
Hmmm, IMHO is not the patching of BC77 your problem (forget the jumpblock), examine if b0c9 is your problem, what do you do when e.g. BC77 is empty (NOP,NOP,NOP)?