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

┌─────────────────────────────────────────────────┐
│ ************* ЛИКБЕЗ **************** │
└─────────────────────────────────────────────────┘
(c) П.Ю.Федин
╔═════════════════════════════════════════════════╗
║ ║
║ ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ ║
║ ║
║ TR-DOS 5.04T (5.03) ║
║ ║
║ ДЛЯ ПРОФЕССИОНАЛОВ, ║
║ ║
║ А ТАКЖЕ ДЛЯ ТЕХ, ║
║ ║
║ КТО ХОЧЕТ ИМИ СТАТЬ. ║
║ ║
╚═════════════════════════════════════════════════╝
пpодолжение
Адрес 5803. Выполнение команды MOVE. Установите
23611.
5803 CALL 7541 ;если идет проверка на синтак-
сис, то возврат
CALL 5743 ;резервирование места в памяти
CALL 1029 ;настройка на диск
LD A,(24089) ;стертые файлы на диске есть ?
OR A
JP Z,993 ;если нет, то сообщение O.K.
LD HL,0 ;пока освободилось 0 секторов
LD (23769),HL
LD C,255 ;начнем с файла номер 0
5827 INC C ;следующий файл
CALL 5715 ;он стерт ?
JR NZ,5827 ;если нет, то следующий файл
LD A,C ;сохранение номера стираемого
файла
LD (23764),A
LD HL,(23787);берем адрес стираемого файла на
диске
LD (23765),HL;сохраняем его
CALL 5783 ;приращение счетчика освободив-
шихся секторов
5846 INC C ;следующий файл
CALL 5715 ;он стерт ?
JR Z,5846 ;если да, то следующий файл
CP 0 ;это конец каталога ?
JP NZ,5904 ;если нет, то меняем файлы мес-
тами
LD A,(23764) ;берем номер стираемого файла
LD C,A
5861 INC C ;следующий файл
CALL 5715 ;это конец каталога ?
CP 0
JR Z,5996 ;если да, то реорганизация опи-
сателя диска
XOR A ;конец каталога
LD (23773),A
CALL 7744 ;запись описателя файла
CALL 5783 ;приращение счетчика освободив-
шихся секторов
JR 5861 ;повтор
5904 LD A,(23786) ;берем размер перемещаемого фай-
ла в секторах
LD (23763),A ;сохраняем его
LD (23761),A
LD HL,(23787);берем адрес перемещаемого файла
на диске
LD (23765),HL;сохраняем его
PUSH BC ;сохранение номера перемещаемого
файла
CALL 6053 ;перемещение файла
POP BC ;восстановление номера перемеща-
емого файла
LD HL,(23796);перемещение продолжится с этого
места
LD (23765),HL
LD (23787),HL
XOR A ;размер стертого файла - 0 сек-
торов
LD (23786),A
LD A,(23773) ;сохранение первого символа име-
ни файла
PUSH AF
LD A,1 ;файл стерт
LD (23773),A
CALL 7744 ;запись описателя стертого файла
POP AF ;восстановление первого символа
имени файла
LD (23773),A
LD A,(23764) ;берем номер стертого файла
LD C,A
LD HL,(23771);установка нового адреса переме-
щенного файла
LD (23787),HL;на диске
LD A,(23761) ;восстановление размера переме-
щенного файла
LD (23786),A ;на диске
CALL 7744 ;запись описателя перемещенного
файла
LD A,(23764) ;берем номер файла после переме-
щенного
INC A
LD C,A
CALL 5725 ;чтение его описателя
LD HL,(23765);установка его нового адреса на
диске
LD (23787),HL
CALL 7744 ;запись его описателя
LD A,(23764) ;берем номер перемещенного файла
LD C,A
JP 5827 ;повтор
───────────────────────────────────────────────────
Адpес 5996. Реорганизация описателя диска. Устано-
вите 23759, 23769 и 23765.
5996 LD HL,(23759);берем адрес рабочего простран-
ства
LD BC,4096 ;сокращаем его на 4096 байтов
CALL 7726
CALL 1021 ;загрузка в буфер сектора 8 до-
рожки 0
LD HL,(24074);увеличение количества свободно-
го места на
LD DE,(23769);диске
ADD HL,DE
LD (24074),HL
LD A,(24073) ;уменьшение количества файлов на
диске на
LD HL,24089 ;число стертых
SUB (HL)
LD (24073),A
LD (HL),0 ;на диске больше нет стертых
файлов
LD HL,(23765);установка нового адреса свобод-
ного места на
LD (24070),HL;диске
PUSH AF ;сохранение количества файлов на
диске
CALL 7747 ;запись сектора 8 дорожки 0
POP AF ;восстановление количества фай-
лов на диске
LD C,A
CALL 5725 ;чтение описателя файла за пос-
ледним
XOR A ;это конец каталога
LD (23773),A
JP 1385 ;запись описателя файла и завер-
шение
пpодолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 13 ноября