|
City
#24
12 августа 1999 |
|
Ликбез - полный дизассемблер ПЗУ (часть 16).

┌─────────────────────────────────────────────────┐
│ ************** ЛИКБЕЗ **************** │
└─────────────────────────────────────────────────┘
(c) П.Ю.Федин
╔═════════════════════════════════════════════════╗
║ ║
║ ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ ║
║ ║
║ TR-DOS 5.04T (5.03) ║
║ ║
║ ДЛЯ ПРОФЕССИОНАЛОВ, ║
║ ║
║ А ТАКЖЕ ДЛЯ ТЕХ, ║
║ ║
║ КТО ХОЧЕТ ИМИ СТАТЬ. ║
║ ║
╚═════════════════════════════════════════════════╝
пpодолжение
Адрес 1921. Стирание файлов. Вход: установите
23773, 23781, и произведите поиск файла. Программа
устанавливает 23816 и 23815.
1921 XOR A ;обнуление количества стертых
файлов
LD (23815),A
JR 1952 ;стирание файлов
───────────────────────────────────────────────────
Адрес 1927. Выполнение команды ERASE. Установите
23825 и 23611.
1927 CALL 7647 ;прием имени файла на стек каль-
кулятора
CALL 7541 ;если идет проверка на синтаксис,
то возврат
CALL 4142 ;прием расширения файла
XOR A ;пока ничего не стерто
LD (23815),A
CALL 10543 ;установка и проверка имени сти-
раемого файла
CALL 1952 ;стирание файла
JP NZ,1399 ;если стерли файл не в конце ка-
талога, то проверка, сколько
файлов стерли
JP 993 ;сообщение O.K.
───────────────────────────────────────────────────
Адрес 1952. Стирание файлов.Вход: установите 23773,
23781, обнулите 23815 и произведите поиск файла.
Программа устанавливает 23816 и 23815.
1952 LD A,(23773) ;сохранение первого символа име-
ни файла
LD (23816),A
RET NZ ;если файл не был найден,то воз-
врат
LD HL,23815 ;стерт еще один файл
INC (HL)
PUSH BC ;сохранение номера файла
CALL 1021 ;чтение в буфер сектора 8 дорож-
ки 0
LD A,(24073) ;берем количество файлов на дис-
ке
POP BC ;восстановление номера файла
INC C ;этот файл последний ?
CP C
JR NZ,1980 ;если нет, то стирание обычным
порядком
DEC A ;на диске теперь на 1 файл мень-
ше
LD (24073),A
XOR A ;стираемый файл в конце каталога
1980 PUSH AF ;сохранение признака метода сти-
рания
JR Z,1987 ;если файл не в конце каталога,
LD HL,24089 ;то увеличение на 1 количества
стертых файлов
INC (HL)
1987 PUSH BC ;сохранение номера стираемого
файла
CALL 7747 ;перезапись сектора 8 дорожки 0
POP BC ;восстановление номера стираемо-
го файла
DEC C
CALL 5725 ;загрузка описателя файла
POP AF ;восстановление флага метода
стирания
JP Z,2002 ;если файл в конце каталога, то
первый символ имени будет CHR$0
LD A,1 ;иначе он будет CHR$ 1
2002 LD (23773),A ;установка первого символа имени
PUSH AF ;сохранение метода стирания
CALL 7744 ;запись описателя файла
LD A,(23816) ;восстановление первого символа
имени файла
LD (23773),A
POP AF ;восстановление метода стирания
JR Z,2023 ;если стерт файл в конце катало-
га, то реорганизация описателя
диска
CALL 7347 ;поиск следующего файла с таким
именем
JR 1952 ;стирание его, если он есть
2023 CALL 1021 ;чтение сектора 8 дорожки 0
LD HL,(23787);установка нового начала свобод-
ного места
LD (24070),HL
LD DE,(23786);установка нового количества
свободных секторов
LD HL,(24074)
LD D,0
ADD HL,DE
LD (24074),HL
JP 7747 ;перезапись сектора 8 дорожки 0
и возврат
───────────────────────────────────────────────────
Адрес 2048. Позиционирование с быстрой скоростью
перемещения головки. Поместите физический номер до-
рожки в регистр данных, а команду позиционирования
- в аккумулятор.
2048 AND 252 ;позиционировать с быстрой скоростью
JP 15770;выдача команды и ожидание INTRQ
пpодолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 13 ноября