Код:
/.../
LD IY,23610
XOR A
LD (23697),A;P_FLAG
LD A,7
LD (23693),A;ATTR_P
LD (23624),A;BORDCR
;Есть ли переменные TR-DOS?
LD HL,(23631)
OR A
LD BC,23845
SBC HL,BC
JR NC,$+4
RST 8
DEFB 1
;
;Упорядочивание информации о каналах
LD HL,(23631);CHANS
LD DE,21
ADD HL,DE
EX DE,HL
LD HL,(23635);PROG
OR A
SBC HL,DE
JR NC,$+6
LD (23568),HL;Надо для монитора "TURBO90"!
RST 0
LD C,L
LD B,H
EX DE,HL
CALL NZ,6632;Удаление систимной области
LD HL,5551;Данные каналов
LD DE,(23631);CHANS
LD BC,15
LDIR
EX DE,HL
LD DE,5
ADD HL,DE
LD (HL),#80
LD HL,5574;Данные связей
LD DE,23568;STRMS
LD BC,14
LDIR
EX DE,HL
LD B,25
LD (HL),C
INC HL
DJNZ $-2
LD (HL),#3C;CHARS
;
;Очистка BASIC-области и установка значения RAMTOP
LD HL,(23635);PROG
LD (23627),HL;VARS
LD SP,(23613);ERR_SP
LD HL,#1303
EX (SP),HL
LD BC,#5FFF;RAMTop=24575
CALL 7863;Устан.RAMTop
LD BC,#FFFE
XOR A
OUT (C),A
;
/.../
; Далее следуют процедуры, обеспечивающеи релоцируемость:
определяется адрес загрузки и код переносится на рабочий адрес.
;
;Устан.необход.сист.переменных
LD HL,#0040
LD (#5C38),HL;RASP
LD HL,#219
LD (23561),HL;REPDEL
LD HL,#FF58
LD (#5C7B),HL;UDG
XOR A
SBC HL,HL
LD (23623),A;SUBPPC
LD (23694),A;MASK_P
DEC A
LD (23610+54),A;b5=1 сигнал 48K
LD (23610),A;ERR_NR
LD (23680),HL;PR_CC
LD (23621),HL;PPC
LD (23696),HL;MASK_T,P_FLAG
LD (23728),HL;NMIADD
LD (23823),HL
LD (23799),HL
LD A,2
LD (23659),A;DF_SZ
LD A,9
LD (23814),A
LD A,201
LD (23746),A
LD A,(23798)
AND %11
LD (23833),A
RES 4,(IY+1)
;Установки для курсора:
RES 3,(IY+48);Устан. курсора:[L].
RES 4,(IY+48);Не [K].
SET 2,(IY+1);[L], а не [K].
SET 3,(IY+1);Ввод не [K].
;
;Проверка на 128K.
LD A,#10
LD HL,#C011
LD BC,#7FFD
OUT (C),A
LD (HL),B
OUT (C),L
LD (HL),A
OUT (C),A
CP (HL);Z=0,если 128K
LD (23388),A
JR Z,$+6
RES 5,(IY+54);сигнальный бит - 128K
;
;Очистка области на случай, если не загрузится каталог диска
LD HL,#6000
LD (HL),L
LD D,H
LD E,L
INC DE
LD BC,2304+487
LDIR
DEC H
DEC H
LD (HL),#10
LD A,L
SUB 5
LD L,A
LD (HL),1
;Загрузка каталога диска
LD SP,(23613)
LD HL,RUN1
EX (SP),HL
LD A,(23833)
LD C,1;Выбор дисковода
CALL 15635
LD C,#18;Настройка на диск
CALL 15635
LD HL,#6000;Чтение каталога диска
LD DE,0
LD BC,#1005
CALL 15635
RUN1 LD HL,0
LD (23823),HL
LD A,255
LD (23610),A
CALL STPDSK
/.../
; Далее происходит запуск TRDN.
;------
;Процедура останова дисковода (для TR-DOS 5.03 или 5.01).
STPDSK LD HL,19
LD C,L
CALL 15635
LD A,(23779)
CP #BD
JR NZ,$+10
LD HL,12151
LD DE,883
JR $+11
CP 7
RET NZ
LD HL,12225
LD DE,697
CALL stpdsk
EX DE,HL
LD A,(23830)
XOR 1
CALL stpdsk
LD A,(23830)
stpdsk PUSH HL
JP 15663
Прошу прощения за десятичные адреса в моем сообщении - они содержатся в той литературе, которую я обычно использую при кодинге.