|
City
#35
04 декабря 1999 |
|
Ликбез - полный дизассемблер ПЗУ (часть 27).

┌─────────────────────────────────────────────────┐
│ ************* ЛИКБЕЗ ****************** │
└─────────────────────────────────────────────────┘
(c) П.Ю.Федин
╔═════════════════════════════════════════════════╗
║ ║
║ ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ ║
║ ║
║ TR-DOS 5.04T (5.03) ║
║ ║
║ ДЛЯ ПРОФЕССИОНАЛОВ, ║
║ ║
║ А ТАКЖЕ ДЛЯ ТЕХ, ║
║ ║
║ КТО ХОЧЕТ ИМИ СТАТЬ. ║
║ ║
╚═════════════════════════════════════════════════╝
пpодолжение
Адрес 6053. Перемещение файла. Установите 23763,
23843, 23759, 23765 и 23767.
6053 LD A,(23763) ;перемещен весь файл ?
OR A
RET Z ;если да, то возврат
PUSH HL ;сохранение HL
LD HL,23843 ;буфера хватит на остаток ?
SUB (HL)
POP HL ;восстановление HL
JR NC,6109 ;если буфера не хватит, то пере-
мещаем часть файла
LD A,(23763) ;берем количество оставшихся се-
кторов
LD B,A
XOR A ;переместили все
LD (23763),A
6074 PUSH BC ;сохранение количества перемеща-
емых секторов
LD HL,(23759);берем адрес рабочей области
PUSH HL ;сохранение его
LD DE,(23765);берем адрес части перемещаемого
файла на старом месте
CALL 7741 ;загрузка секторов
LD HL,(23796);установка адреса следующей час-
ти файла
LD (23765),HL
POP HL ;восстановление адреса рабочей
области
POP BC ;и количества перемещаемых сек-
торов
LD DE,(23767);берем адрес части перемещаемого
файла на новом месте
CALL 7757 ;запись секторов
LD HL,(23796);установка адреса следующей час-
ти файла
LD (23767),HL
JR 6053 ;повтор
6109 LD (23763),A ;установка количества оставшихся
секторов
PUSH HL ;сохранение HL
LD HL,23843 ;берем длину рабочей области в
секторах
LD B,(HL)
POP HL ;восстановление HL
XOR A ;обнуление аккумулятора
JR 6074 ;перемещение секторов
───────────────────────────────────────────────────
Адрес 6121. Загрузка в буфер сектора с описателем
файла и перенос описателя. В регистре C- номер фай-
ла, в A- направление перемещения (0 - в переменные,
иначе - в прочитанный сектор).
6121 PUSH AF ;сохранение направления перемеще-
ния
LD HL,23756;первый сектор каталога - 0
LD (HL),0
LD A,C ;определение номера сектора с опи-
сателем файла
6128 SUB 16
JR C,6135
INC (HL)
JR 6128
6135 ADD A,16 ;берем номер описателя в секторе
LD C,A
PUSH BC ;сохраним его
CALL 1004 ;загрузка в буфер сектора с описа-
телем
POP BC ;восстановление номера описателя в
секторе
POP AF ;и направление перемещения
CALL 7332 ;определение адреса описателя фай-
ла в буфере
LD DE,23773;берем второй адрес для LDIR
LD BC,16 ;берем длину описателя
OR A ;установка направления перемещения
JR Z,6157
EX DE,HL
6157 LDIR ;перенос описателя файла
RET ;возврат
───────────────────────────────────────────────────
Адрес 6160. Выполнение команды VERIFY. Установите
23825 и 23611. Используется также с адресов:
6165 - выполнение команды LOAD. Установите 23825 и
23611;
6168 - выполнение команды LOAD, PEEK или POKE. Ус-
тановите 23825, 23611 и 23824.
6160 LD A,255 ;верификация файла
LD (23801),A
6165 CALL 6226 ;обнуление 23824
6168 CALL 6198 ;обработка параметров и загрузка
файла
CALL 7541 ;если идет проверка на синтаксис,
то возврат
LD A,255 ;выполняется команда LOAD
LD (23824),A
LD A,(23801);выполняется VERIFY ?
CP 255
JP Z,993 ;если да, то O.K.
LD A,(23781);расширение файла B ?
CP "B"
Внимание! Если была операция с одним сектором фай-
ла, то надо выходить независимо от расширения.
JP Z,298 ;если да, то обработка строки ав-
тостарта
JP 993 ;иначе O.K.
пpодолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 3 ноября