City
#29
19 сентября 1999 |
|
Ликбез - полный дизассемблер ПЗУ (часть 22).
┌─────────────────────────────────────────────────┐ │ ************** ЛИКБЕЗ ***************** │ └─────────────────────────────────────────────────┘ (c) П.Ю.Федин ╔═════════════════════════════════════════════════╗ ║ ║ ║ ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ ║ ║ ║ ║ TR-DOS 5.04T (5.03) ║ ║ ║ ║ ДЛЯ ПРОФЕССИОНАЛОВ, ║ ║ ║ ║ А ТАКЖЕ ДЛЯ ТЕХ, ║ ║ ║ ║ КТО ХОЧЕТ ИМИ СТАТЬ. ║ ║ ║ ╚═════════════════════════════════════════════════╝ пpодолжение Адрес 4960. Выполнение команды COPY S. Установите 23825 и 23611. 4960 CALL 7621 ;установка CH_ADD CALL 7722 ;следующий символ CALL 7613 ;прием имени файла на стек каль- кулятора CALL 7541 ;если идет проверка на синтаксис, то возврат CALL 5743 ;резервирование места в памяти LD HL,10154 ;печать INSERT SOURCE DISC CALL 9991 4981 CALL 4178 ;ввод символа с клавиатуры CP "Y" ;это Y ? JR NZ,4981 ;если нет, то повтор CALL 7583 ;очистка низа экрана CALL 4142 ;прием расширения файла CALL 7344 ;установка имени файла JP NZ,985 ;если такого файла нет, то ошиб- ка CALL 5047 ;копирование файла LD A,(23781);расширение файла # ? CP "#" JP NZ,993 ;если нет, то O.K. 5011 LD A,10 ;файл искать по 10 символам LD (23814),A LD HL,23782 ;следующий блок INC (HL) CALL 7575 ;очистка экрана LD HL,10154 ;печать INSERT SOURCE DISC CALL 9991 5029 CALL 4178 ;ввод клавиши CP "Y" ;это Y ? JR NZ,5029 ;если да, то повтор CALL 7347 ;поиск блока JP NZ,993 ;если не нашли, то O.K. CALL 5047 ;копирование блока JR 5011 ;повтор ─────────────────────────────────────────────────── Адрес 5047. Копирование файла при одном дисководе. Номер файла поместите в регистр C. 5047 CALL 5725 ;чтение описателя файла LD HL,23782 ;сохранение его части LD DE,23789 LD BC,7 LDIR LD A,(23793) ;установка объема файла в секто- рах LD (23824),A CALL 1029 ;настройка на диск CALL 15889 ;сохранение режима дисковода LD (23769),A LD A,255 ;первый проход LD (23841),A Внимание!! Эта переменная уже занята. В ней хранят- ся первые 3 символа командной строки. CALL 5201 ;копирование файла LD HL,(23839) ;берем адрес файла на диске - приемнике LD (23787),HL ;устанавливаем его LD HL,(23698) ;берем новый адрес свободного места на диске LD (24070),HL ;устанавливаем его LD HL,24073 ;записали 1 файл INC (HL) LD C,(HL) ;берем номер файла DEC C LD B,0 ;переводим его в двухбайтную форму PUSH BC ;сохраняем его LD DE,9 ;записывать сектор 8 дорожки 0 LD (23796),DE CALL 7747 ;запись сектора POP BC ;восстановление номера файла CALL 5739 ;чтение и замена описателя фай- ла CALL 7747 ;запись сектора с описателем RET ;возврат ─────────────────────────────────────────────────── Адрес 5123. Проверка наличия свободного места на диске-приемнике для команды COPY S. Поместите опи- сатель файла в 23773 и его часть в 23789 и устано- вите 23824. В дисководе должен быть диск-приемник. Подпрограмма устанавливает 23786, 23787 и 23839. 5123 XOR A ;не первый проход LD (23841),A CALL 1029 ;настройка на диск CALL 15889 ;берем режим дисковода LD (23770),A ;сохраняем его CALL 7347 ;поиск файла JP Z,7248 ;если нашли, то FILE EXISTS CALL 1021 ;загрузка в буфер сектора 8 до- рожки 0 LD A,(24073) ;берем количество файлов на дис- ке CP 128 ;их 128 ? JP Z,10019 ;если да, то DIRECTORY FULL LD HL,23789 ;восстановление описателя файла LD DE,23782 LD BC,7 LDIR CALL 1021 ;загрузка в буфер сектора 8 до- рожки 0 LD A,(23824) ;восстановление длины файла в секторах LD (23786),A LD DE,(23786);перевод ее в двухбайтную форму LD D,0 OR A ;сброс флага C LD HL,(24074);уменьшаем свободное место на диске SBC HL,DE JP C,7237 ;если его не хватило,то NO SPACE LD (24074),HL;установка нового количества свободного места на диске LD HL,(24070);берем адрес свободного места на диске LD (23787),HL;установка адреса файла на диске - приемнике LD (23839),HL;сохранение его Боже мой!!! Hу что это такое! Ведь эта переменная - флаг способа вызова TR-DOS. И на такой DOS все ра- ботают. Ужас какой-то. RET ;возвpат пpодолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября