Been meaning to post this for sometime. Looking at the file date stamps about 3 years

Most tape loaders tended to copy the ROM code and change the lead-in from 256 zeros to 50 zeros. Others would send bytes directly to the VDP for the loading screen.
But the most complicated I came across was for JSW. It had two encrypted loaders, played music while loading, and send the load screen directly to VDP a byte at a time.
The initial Basic loader looks like this:
Code: Select all
CTRBADR:
0xFA52 00 F2 F8 02 00 00 00 00 00 00 00 0A F9 02 00 00 ................
0xFA62 00 00 00 00 00 22 F9 02 00 00 00 00 00 00 00 3A .....".........:
0xFA72 F9 02 00 00 00 00 00 00 ........
0xFA7A LSTPG: 00 ; Number of 32kb pages -1
0xFA7B VARNAM: C000 ; Bottom of variable names (Normally 0xC000)
0xFA7D VALBOT: C003 ; Bottom of variable values (Normally 0xC001)
0xFA7F CALCBOT: C00D ; Bottom of calculator stack (Normally 0xC001)
0xFA81 CALCST: C00D ; Top of calculator stack (Normally 0xC001)
0xFA83 KBDBUF: FB4B ; Addr of keyboard buffer (Normally 0xFB4B)
0xFA85 USYNT: 00 00 00 07 ; USER cmd word syntax bytes
0xFA89 USER: 21 00 81 ; User cmd word jump sv_address
LD HL, 0x8100
0xFA8C 0xFA8C: 3A 7A FA ; Unused
LD A, (FA7A)
0xFA8F IOPL: 18 ; List Device
0xFA90 REALBY: 06 ; PANEL breakpoint byte
JR +0x06
0xFA91 KBFLAG: 80 ; Key Lock statuses
; (2:Numlock,5:Scroll Lock,7:capslock)
0xFA92 STKLIM: F8F2 ; Top of free space (Normally 0xF8F2)
0xFA94 SYSTOP: FB4B ; Top of sysvars to save (Normally 0xFB4B)
0xFA96 SSTACK: 0048 ; Addr of machine stack (Z80 stack pointer)
LD C, B
0xFA98 USERINT: A7 28 02 ; Jump sv_addr used by user interrupt routine
; (See INTFFF (0xFD5E))
AND A
JR Z, +0x02
0xFA9B NODLOC: 26 41 7E ; Jump sv_addr used for NODE expansion
LD HL, 0x41
LD A, (HL)
0xFA9E FEXPAND: 07 77 2C ; Jump sv_addr used for PANEL expansion
RLCA
LD (HL), A
INC L
0xFAA1 USERNOD 20 FA E9 ; Jump sv_addr used for Noddy expansion
JR NZ, +0xFA
JP (HL)
0xFAA4 NBTOP: 80A8 ; Top of Noddy
0xFAA6 IOPL: 00 ; Top of Noddy page
0xFAA7 BASTOP: 80A8 ; Top of current Basic
0xFAA9 BASTPG: 00 ; Top of current Basic page
0xFAAA BASBOT: 4000 ; Bottom of Basic
BASTOP:
0xFAAC A8 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xFABC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xFACC ARRTOP: 022C ; Top of arrays
0xFACE ARRTPG: 00 ; Top of arrays page
0xFACF BASELIN: 8000 ;
0xFAD1 BASLNP: 00 ;
0xFAD2 PAGE: 00 ; Current page configuration
0xFAD3 CRNTPG: 00 ; Current Basic page
0xFAD4 PGN1: 00 ; Temp variable used by BASIC
0xFAD5 PGN2: 00 ; Temp variable used by BASIC
0xFAD6 PGTOP: 80A8 ;
GOSTACK:
0xFAD8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xFAE8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xFAF8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xFB08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xFB18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xFB28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0xFB38 00 00 00 00 00 00 00 00 00 .........
0xFB41 GOPTR: FAD8 ; Addr to return to after GOSUB
0xFB43 GOSNUM: 0000 ; No of nexted GOSUBs
0xFB45 CTYLST: 00 ; Keyboard Configuration
0xFB46 DATAAD: 8000 ; Data pointer
0xFB48 DATAPG: 80 ; Data pointer page
0xFB49 DESAVE: 801D ; Addr in BASIC when saved
Data After SYSVARS:
Basic Length: 80A8.
Basic:
[4000]: {0053}: 0 POKE 64151,0:SAVE "JET SET WILLY":VS 4:COLOUR 4,1:PAPER 1:INK 1:CLS :INK 4:CSR 4,21:USER "Jet Set Willy is Loading"
[4053]: {0055}: 10 ASSEM
{0018}: CODE
0x405A 11 00 01 LD DE,256
0x405D ED 53 67 FD LD (#FD67),DE
0x4061 21 00 F0 LD HL,#F000
0x4064 E5 PUSH HL
0x4065 CD AE 0A CALL #AAE
0x4068 E1 POP HL
0x4069 7E LOOP: LD A,(HL)
0x406A ED 67 RRD
0x406C 77 LD (HL),A
0x406D 2C INC L
0x406E 20 F9 JR NZ,LOOP
0x4070 E9 LD PC,HL
0x4071 C9 RET
Symbols:
LOOP 4069
Symbol Table dump:
0x4072 00 32 35 B6 00 01 01 00 00 00 23 46 44 36 B7 00 .25.......#FD6..
0x4082 01 05 00 00 00 23 46 30 30 B0 00 01 08 00 00 00 .....#F00.......
0x4092 23 41 41 C5 00 01 0C 00 00 02 0F 00 4C 4F 4F D0 #AA.........LOO.
0x40A2 00 00 01 15 00 FF ......
Number (00): String: 256
1 byte ptrs: 0x00 -
2 byte ptrs: 0x01 - 0x0001 (0x405b)
3 byte ptrs: 0x00 -
Number (00): String: #FD67
1 byte ptrs: 0x00 -
2 byte ptrs: 0x01 - 0x0005 (0x405f)
3 byte ptrs: 0x00 -
Number (00): String: #F000
1 byte ptrs: 0x00 -
2 byte ptrs: 0x01 - 0x0008 (0x4062)
3 byte ptrs: 0x00 -
Number (00): String: #AAE
1 byte ptrs: 0x00 -
2 byte ptrs: 0x01 - 0x000c (0x4066)
3 byte ptrs: 0x00 -
Label (02): Offset: 0x000f (0x4069)
String: LOOP
1 byte ptrs: 0x00 -
2 byte ptrs: 0x00 -
3 byte ptrs: 0x01 - 0x0015 (0x406f)
Padding:
0x40A8 c0 00 4d 45-4d 4f 54 45-43 48 20 20-20 20 20 20 ..MEMOTE CH......
0x40B8 20 20 20 20-20 20 20 20-20 20 20 20-20 20 20 20 ........ ........
0x40C8 20 20 20 20-20 20 20 20-20 20 20 20-20 20 20 20 ........ ........
0x40D8 20 20 20 20-20 20 20 20-20 20 20 20-20 20 20 20 ........ ........
0x40E8 20 20 20 20-20 20 20 20-20 20 20 20-20 20 20 20 ........ ........
0x40F8 20 20 20 20-20 20 20 20
RLCA M/c:
0x4100 88 00 78 80-00 80 f6 58-e1 85 78 92-1f e4 19 d1 ..x....X ..x.....
0x4110 7d e6 ce 7d-eb 4c 25 b2-3a 10 a9 b2-3a 10 ab b4 }..}.L%. :...:...
0x4120 36 36 bc 10-b4 b9 10 26-b7 b0 32 b4-37 b3 90 00 66.....& ..2.7...
0x4130 fa f2 88 00-80 f6 a9 b3-fe e6 57 05-f0 1f bd f6 ........ ..W.....
0x4140 a7 f6 af 57-bb 16 10 fc-f4 00 00 00-00 00 00 00 ...W.... ........
0x4150 00 00 00 00-00 00 00 00-00 00 00 00-00 00 00 00 ........ ........
0x4160 00 00 00 00-00 00 00 00-00 00 60 00-a6 a2 a6 a7 ........ ..`.....
0x4170 2a a2 a1 24-10 10 10 10-10 10 10 10-10 10 10 10 *..$.... ........
0x4180 10 10 10 10-10 10 10 10-10 10 10 10-10 10 10 10 ........ ........
0x4190 10 10 10 10-10 10 10 10-10 10 10 10-10 10 10 10 ........ ........
0x41A0 10 10 10 10-10 10 10 10-10 10 10 10-10 10 10 10 ........ ........
0x41B0 10 10 10 10-10 10 10 10-10 10 10 10-10 10 10 10 ........ ........
0x41C0 10 10 10 10-10 10 10 10-10 10 10 10-10 10 10 10 ........ ........
0x41D0 10 10 10 10-10 10 10 10-10 10 10 10-10 10 10 10 ........ ........
0x41E0 10 10 10 10-10 10 10 10-10 10 10 10-10 10 10 10 ........ ........
Noddy:
Basic Variables:
Remaining File Dump:
The M/c was stored in the Arrays area after basic, padded so that it existed at 0x4100 - 0x41FF (or 0x8100 to 0x81FF). It was a simple encryption, just RLCA'd each byte.