Up: Map Next: 23884
23820: Game loader - load game code and set execution starting address
First short block of data on the tape.
Start by copying the routine below, starting at 23834, to near the top of RAM (65000)
23820 LD HL,23834
23823 LD DE,65000
23826 LD BC,60 60 bytes of code to copy
23829 LDIR Copy the code
23831 JP 65000 ...now jump there and execute the code
Start of code that is copied to 65000
23834 LD SP,65530 Put the stack pointer (nearly) at the top of RAM
23837 LD IX,25001 IX = address pointer at start of data block to LOAD
23841 LD DE,39000 Data block length (code up to RAM address 64000)
23844 LD A,255 Indicates a data block to load (rather than header)
23846 SCF Sets the carry flag, which tells the ROM routine to perform a LOAD
The next 4 instructions are part of the ROM loading routine just before 1377, executed here just before the jump there at 23854 (as it's loading data, not a header block).
23847 INC D
23848 EX AF,AF'
23849 DEC D
23850 DI
23851 LD HL,65023 This is the address that the code in the following instructions (starting from 23857) will be at after the copy at the start of this routine.
23854 JP 1377 Launch the ROM loading routine
The following code is copied to 65023 and is executed from there once the game has loaded (see this address for disassembly).
23857 LD HL,25001
23860 LD DE,39000
23863 LD A,(HL)
23864 XOR 102
23866 RRCA
23867 XOR L
23868 LD (HL),A
23869 INC HL
23870 DEC DE
23871 LD A,D
23872 OR E
23873 JR NZ,23863
23875 LD A,2
23877 LD (23659),A
23880 EI
23881 JP 62283
Up: Map Next: 23884