In my favourite Spectrum Compilation from 1995 a snapshot of Everyone's A Wally had corrupt graphics on the menu and no loading screen but the game is perfectly playable, which is the main thing. On Unreal Speccy on Android the TZX version from World Of Spectrum the game takes the full time to load and there is no fast loading option for TZX on this emulator. Some TZX's load fast but this one doesn't. I thought for universal support I'd make a new Z80 snapshot.
1. Enable the time delay after loading in the TZX. Set to 10000ms (10s),
2. Load into SPIN Spectrum Emulator,
3. Enable a breakpoint in the SPIN debugger,
4. Add some code to change the border colour, wait for a keypress and continue,
5. Save a snapshot.
Using the SPIN debugger showed the code was in a tight loop immediately after loading. I believed this to be scaling the font because if it was exited early the font would be corrupt. Luckily there was a lot of space at around address 23460 where I could add a new routine before jumping to the main game loop. The game disables interrupts early on so we have to push the registers we use on the stack, enable interrupts, change the border colour to black (was white), wait for a keypress, disable interrupts and pop the registers we used on the stack and then return from the subroutine.
The bytes in memory from 23552 to 23733 are set aside for specific uses by the system. Source: WOS
We only have 92 bytes to easily play with. Working: 23552-23460=92
Call the patch routine in the load sequence
PATCH: PUSH HL PUSH AF EI LD A,0 ; 0 is the code for black. CALL 8859 ; set border colour. LD HL,23560 ; LAST K system variable. LD (HL),0 ; put null value there. loop: LD A,(HL) ; new value of LAST K. CP 0 ; is it still zero? JR Z,loop ; yes, so no key pressed. DI POP AF POP HL RET
CALL PATCH JP 33156