┌─────────────────────────────────────────────────┐ │ ************* ЛИКБЕЗ **************** │ └─────────────────────────────────────────────────┘ (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одолжение следует ...