Save code

This is the program used to save the fast code block for Back to Skool.

If the load routine at 32815 is modified to set SP to something other than 33020 (so that the bytes in that area are not corrupted by stack operations), this is the result:

33013 21B481 LD HL,33204 33204 is where we go after loading has finished
33016 22195D LD (23833),HL
33019 D9 EXX After bytes 16384 to 32956 have been saved, a further 65535 bytes are saved, starting at 32971, moving forward in steps of 23 bytes, and ending at 32925 (32948 is missed out)
33020 011700 LD BC,23
33023 D9 EXX
33024 DD210040 LD IX,16384 Start saving at 16384 (first byte of display file)
33028 11BC40 LD DE,16572 16384 to 32956 will be saved first
33031 3EFF LD A,255
33033 21980C LD HL,3224
33036 08 EX AF,AF'
33037 13 INC DE
33038 DD2B DEC IX
33040 F3 DI
33041 3E02 LD A,2
33043 47 LD B,A
33044 10FE DJNZ 33044
33046 D3FE OUT (254),A
33048 EE0F XOR 15
33050 06A4 LD B,164
33052 2D DEC L
33053 20F5 JR NZ,33044
33055 05 DEC B
33056 25 DEC H
33057 F21481 JP P,33044
33060 062F LD B,47
33062 10FE DJNZ 33062
33064 D3FE OUT (254),A
33066 3E0D LD A,13
33068 0637 LD B,55
33070 10FE DJNZ 33070
33072 D3FE OUT (254),A
33074 010E1A LD BC,6670
33077 08 EX AF,AF'
33078 6F LD L,A
33079 C34381 JP 33091
33082 7A LD A,D
33083 7A LD A,D
33084 280C JR Z,33098
33086 DD6E00 LD L,(IX+0)
33089 7C LD A,H
33090 AD XOR L
33091 67 LD H,A
33092 3E01 LD A,1
33094 37 SCF
33095 C36181 JP 33121
33098 6C LD L,H
33099 18F4 JR 33089
33101 79 LD A,C
33102 CB78 BIT 7,B
33104 10FE DJNZ 33104
33106 3004 JR NC,33112
33108 0620 LD B,32
33110 10FE DJNZ 33110
33112 D3FE OUT (254),A
33114 061D LD B,29
33116 20EF JR NZ,33101
33118 05 DEC B
33119 AF XOR A
33120 3C INC A
33121 CB15 RL L
33123 C25081 JP NZ,33104
33126 1B DEC DE
33127 DD23 INC IX
33129 0610 LD B,16
33131 3E7F LD A,127
33133 DBFE IN A,(254)
33135 1F RRA
33136 D0 RET NC
33137 7A LD A,D Have we saved 16384 to 32956 yet?
33138 3C INC A
33139 C23A81 JP NZ,33082 Jump back if not
33142 7A LD A,D IX=32957 and DE=65535 the first time we get here
33143 B3 OR E
33144 280C JR Z,33158 Jump if we have now saved 32971 onwards
33146 DD6E0E LD L,(IX+14) IX+14=32971 the first time we get here
33149 7C LD A,H
33150 AD XOR L
33151 67 LD H,A
33152 3E01 LD A,1
33154 37 SCF
33155 C39D81 JP 33181
33158 2E00 LD L,0
33160 C9 RET
33161 79 LD A,C
33162 CB78 BIT 7,B
33164 10FE DJNZ 33164
33166 3004 JR NC,33172
33168 0620 LD B,32
33170 10FE DJNZ 33170
33172 D3FE OUT (254),A
33174 061D LD B,29
33176 20EF JR NZ,33161
33178 05 DEC B
33179 AF XOR A
33180 3C INC A
33181 CB15 RL L
33183 C28C81 JP NZ,33164
33186 1B DEC DE
33187 D9 EXX
33188 DD09 ADD IX,BC
33190 D9 EXX
33191 0610 LD B,16
33193 3E7F LD A,127
33195 DBFE IN A,(254)
33197 1F RRA
33198 C37681 JP 33142

The last few bytes of the first group (16384 to 32956) saved are important:
32952 20C3 JR NZ,32893 This replaces the "JR NZ,32907" in the load routine
32954 20 DEFB 32 These bytes will be loaded into addresses 32902, 32925 and 32948 (which already contain 32, 221 and 173) respectively by the load routine
32955 DD DEFB 221
32956 AD DEFB 173