┌──────────────────────────────────────────────────────────────┐
│ ** ЛИКБЕЗ ** │
└──────────────────────────────────────────────────────────────┘
(c) П.Федин
ПОЛНОЕ ОПИСАНИЕ + ПОЛНЫЙ ДИЗАССЕМБЛЕР ПЗУ TR-DOS 5.04T (5.03)
ДЛЯ ПРОФЕССИОНАЛОВ, А ТАКЖЕ ДЛЯ ТЕХ, КТО ХОЧЕТ ИМИ СТАТЬ
продолжение
Адрес 6657. Подготовка к загрузке программы на бейсике.
6657 LD DE,(23635);берем адрес начала программы на бейсике
LD HL,(23641);берем адрес конца программы на бейсике
DEC HL
PUSH HL ;сохранение начала и конца программы
PUSH DE
SBC HL,DE ;вычисление длины программы на бейсике
LD DE,(23782);берем длину программы с переменными
PUSH DE ;сохраняем ее
PUSH HL ;сохранение длины старой программы
LD HL,0 ;идет верификация ?
LD A,(23801)
CP 255
JR Z,6688 ;если да, то длину не меняем
LD HL,5 ;иначе увеличим ее на 5 байтов
6688 ADD HL,DE
LD (23771),HL;установка длины загрузки
POP HL ;восстановление длины старой программы
LD A,(23801) ;верификация ?
CP 255
JR NZ,6705 ;если нет, то подготовка памяти
POP DE ;снятие регистров со стека
POP DE
POP HL
JR 6728 ;возврат
6705 CALL 6642 ;проверка наличия места для программы
POP BC ;восстановление длины программы с переменными
POP DE ;восстановление начала программы
POP HL ;восстановление конца программы
PUSH BC ;сохранение длины программы
RST 32 ;стирание старой программы
DEFW #19E5
POP BC ;восстановление длины программы
CALL 7730 ;резервирование места для новой программы
INC HL ;установка переменной VARS
LD BC,(23784)
ADD HL,BC
LD (23627),HL
6728 LD HL,(23635);берем адрес загрузки программы
RET ;возврат
────────────────────────────────────────────────────────────────
Адрес 6732. Подготовка памяти к загрузке массива. Установите
23784, 23767, 23769 и 23801.
6732 LD DE,(23784);загружать весь файл
LD (23771),DE
LD HL,(23767);берем адрес массива в памяти
LD A,(23801) ;верификация ?
CP 255
RET Z ;если да, то возврат
LD HL,(23769);берем адрес загрузки файла
PUSH HL ;сохраняем его
6753 CALL 6642 ;проверка наличия места для массива
POP HL ;восстановление адреса загрузки файла
LD A,H ;он равен 0 ?
OR L
JR Z,6777 ;если да, то старый массив не убираем
LD HL,(23767);берем начало старого массива
DEC HL
DEC HL
DEC HL
LD BC,(23769);берем его длину
INC BC
INC BC
INC BC
CALL 7726 ;стирание старого массива
6777 LD HL,(23641);берем начало области переменных
DEC HL
LD BC,(23784);берем длину файла
PUSH BC ;сохраняем ее
INC BC
INC BC
INC BC
CALL 7730 ;резервирование места для нового массива
INC HL ;установка имени массива
LD A,(23762)
LD (HL),A
INC HL ;восстановление и установка длины массива
POP DE
LD (HL),E
INC HL
LD (HL),D
INC HL ;берем адрес тела массива
RET ;возврат
продолжение следует ...
Other articles: