Na szybko rzuciłem okiem na ten własny loader. Są pewne podobieństwa, aczkolwiek timingi są różne. Dlatego też żaden z programów nie potrafi ich poprawnie zinterpretować danych.
Loader:
INC IX
DEC DE
EX AF, AF'
LD B, $C1
LD L, $01
L_FEE8: CALL L_FF24
RET NC
LD A, $C8
CP B
RL L
LD B, $BF
JR NC, L_FEE8
LD A, H
XOR L
LD H, A
LD A, D
OR E
JR NZ, $FECF
RET
ROM:
new byte can now be collected from the tape.
05C2 LD-NEXT INC IX Increase the 'destination'.
05C4 LD-DEC DEC DE Decrease the 'counter'.
EX AF,A'F' Save the flags.
LD B,+B2 Set the timing constant.
05C8 LD-MARKER LD L,+01 Clear the 'object' register apart
from a 'marker' bit.
The 'LD-8-BITS' loop is used to build up a byte in the L register.
05CA LD-8-BITS CALL 05E3,LD-EDGE-2 Find the length of the 'off' and
'on' pulses of the next bit.
RET NC Return if the time period is
exceeded. (Carry flag reset.)
LD A,+CB Compare the length against
approx. 2,400 T states; resetting
CP B the carry flag for a '0' and
setting it for a '1'.
RL L Include the new bit in the L
register.
LD B,+B0 Set the timing constant for the
next bit.
JP NC,05CA,LD-8-BITS Jump back whilst there are still
bits to be fetched.
The 'parity matching' byte has to be updated with each new byte.
LD A,H Fetch the 'parity matching'
XOR L byte and include the new byte.
LD H,A Save it once again.
Passes round the loop are made until the 'counter' reaches zero. At that point the 'parity matching' byte should be holding zero.
LD A,D Make a further pass if the DE
OR E register pair does not hold
JR NZ,05A9,LD-LOOP zero.
LD A,H Fetch the 'parity matching'
byte.
CP +01 Return with the carry flat set
RET if the value is zero.
(Carry flag reset if in error.)