Код:
5B00 POP HL ; тот же адрес, куда перемещен код, #5B00
LD DE,#004E
ADD HL,DE ; HL указывает на данные о грузимых блоках
LD E,(HL)
INC HL
LD D,(HL) ; стартовый адрес первого блока
INC HL
LD SP,#5C80 ; стек слишком низко для DOS, еще ниже
; он снова перемещается, так что
; безболезненно поднимаем на #5E80
; т.к. блоки грузятся намного выше
PUSH DE ;1 --- 1 --- этот кусок надо переделать
LD E,(HL) ;1 достаточно старшего байта
INC HL ;1 только помещаемого в B, т.к. грузить
LD D,(HL) ;1 будем секторами, только для длины #416A
POP IX ;2 выйдет #42 сектора. Старт-ад надо в HL,
PUSH HL ;1 а не IX. Еще надо LD C,5 и LD DE,(#5CF4)
XOR A ;1 это все не нужно, и даст нам место
DEC A ;1
SCF ;1
EX AF,AF' ;1=11 байт
CALL #056C ; --- 1 --- а вызывать надо будет #3D13
DI
POP HL
INC HL ; хотя адрес-длина блока вынесены, и все
LD E,(HL) ; похоже на подпрограмму, второй блок
INC HL ; грузится уже этим местом программы
LD D,(HL)
INC HL
PUSH DE ;1 --- 2 --- отсюда начнем переделку куска
LD E,(HL) ;1 аналогично первому
INC HL ;1
LD D,(HL) ;1
POP IX ;2
XOR A ;1
DEC A ;1
SCF ;1
EX AF,AF' ;1=10 байт
CALL #056C ; --- 2 ---
DI ; дальше все оставляем, код можно изменить
LD DE,#004C ; так, чтоб даже данные старт-длины не
LD HL,#5B00 ; менять (судя по копирующей процедуре
ADD HL,DE ; слева, они куда-то еще переносятся,
LD DE,#4000 ; вдруг нужны в неизменном виде?
LD A,#06 ; :) хотя вряд ли)
LD BC,#0020
LDIR
INC D
LD E,#00
DEC A
JR NZ,$-#09
LD SP,#401F
JP #4200
5B4C NOP
DEC DE
5B4E JR NZ,$+#80 ; но это данные, байты DB #20, #7E, #6A, #41
LD L,D
LD B,C
5B52 ADC DD ; DB #8A, #BF, #77, #40
CP A
LD (HL),A
LD B,B