|
City
#39
14 января 2000 |
|
Ликбез - полный дизассемблер ПЗУ (часть 30).

┌─────────────────────────────────────────────────┐
│ ************* ЛИКБЕЗ **************** │
└─────────────────────────────────────────────────┘
(c) П.Ю.Федин
╔═════════════════════════════════════════════════╗
║ ║
║ ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ ║
║ ║
║ TR-DOS 5.04T (5.03) ║
║ ║
║ ДЛЯ ПРОФЕССИОНАЛОВ, ║
║ ║
║ А ТАКЖЕ ДЛЯ ТЕХ, ║
║ ║
║ КТО ХОЧЕТ ИМИ СТАТЬ. ║
║ ║
╚═════════════════════════════════════════════════╝
пpодолжение
Адрес 6565. Выполнение команды PEEK. Установите
23825 и 23611.
6565 LD A,255;код функции PEEK
JR 6571 ;выполнение команды
───────────────────────────────────────────────────
Адрес 6569. Выполнение команды POKE. Установите
23825 и 23611.
Используется также с адреса 6571 (выполнение коман-
ды LOAD, PEEK или POKE; Установите 23825 и 23611, а
в аккумулятор поместите код функции).
6569 LD A,238 ;код функции POKE
6571 LD (23824),A;установка кода функции
JP 6168 ;выполнение команды
───────────────────────────────────────────────────
Адрес 6577. Выполнение команды MERGE. Установите
23825 и 23611.
6577 LD A,255 ;использовалась рабочая область
LD (23839),A
Ошибка!!! Флаг состояния рабочей области находится
по адресу 23829.
CALL 6266 ;обработка параметров
CALL 7541 ;если идет проверка на синтаксис
,то возврат
LD A,(23781) ;расширение файла B ?
CP "B"
JP NZ,7450 ;если нет, то ошибка
LD BC,(23782);установка длины файла для заг-
рузки
LD (23771),BC
PUSH BC ;сохранение ее
INC BC ;оставим место для байта 128
RST 32 ;выделение места в рабочей обла-
сти
DEFW #0030
LD (HL),128 ;маркер конца программы
EX DE,HL ;переброска адреса загрузки в HL
POP DE ;снятие со стека длины файла
PUSH HL ;сохранение адреса загрузки
LD DE,(23787);берем адрес файла на диске
CALL 6427 ;загружать весь файл
LD A,(23772) ;берем длину файла в блоках
LD B,A
CALL 6226 ;операция со всем файлом
CALL 6433 ;загрузка файла
POP HL ;восстанавливаем адрес загрузки
LD DE,(23635);берем адрес программы на бейси-
ке
RST 32 ;объединение программ
DEFW #08D2
JP 993 ;сообщение O.K.
───────────────────────────────────────────────────
Адрес 6642. Проверка места в памяти для резервиро-
вания нового пространства вместо старого. В HL -
старая длина, в DE - новая.
Используется также с адреса 6653 (проверка наличия
пространства в памяти; длина пространства должна
быть в DE).
6642 EX DE,HL
SCF ;вычисление разности длин
SBC HL,DE
RET C ;если новая длина меньше старой, то
возврат
LD DE,10 ;должно остаться еще 10 байтов
ADD HL,DE
LD B,H ;переброска разности длин в BC
LD C,L
6653 RST 32 ;проверка наличия пространства в
памяти
DEFW #1F05
RET ;возврат
пpодолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 25 ноября