City
#23
06 августа 1999 |
|
Ликбез - полный дизассемблер ПЗУ (часть 15).
▒▒▒ ▒ ▒ ▒ ▒ ▒▒▒▒ ▒▒▒▒ ▒▒ ▒┌ ▒│ ▒│ ▒│ ▒│▒┌┘ ▒┌──┘ ▒┌──┘ ▒┌ ▒│ ▒│ ▒│ ▒│ ▒▒│ ▒▒┌┘ ▒▒▒▒ ▒▒▒ ▒┌┘ ▒│ ▒│ ▒│▒ ▒│ ▒ ▒ ▒┌ ▒│ ▒┌─┘ ▒ ▒│ ▒│ ▒▒┌┘▒│ ▒│ ▒ ▒│ ▒│ ▒│ ▒ ▒│ ▒│ ▒│ ▒┌┘ ▒│ ▒│ ▒│ ▒▒▒▒│ ▒▒▒▒ ▒▒┌┘ ┘ ┘ ┘ ┘ ┘ ┘ ───┘ ───┘ ─┘ (c) П.Ю.Федин ╔═════════════════════════════════════════════════╗ ║ ║ ║ ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ ║ ║ ║ ║ TR-DOS 5.04T (5.03) ║ ║ ║ ║ ДЛЯ ПРОФЕССИОНАЛОВ, ║ ║ ║ ║ А ТАКЖЕ ДЛЯ ТЕХ, ║ ║ ║ ║ КТО ХОЧЕТ ИМИ СТАТЬ. ║ ║ ║ ╚═════════════════════════════════════════════════╝ пpодолжение Адрес 1680. Выполнение команды COPY. Установите 23825 и 23611. 1680 LD HL,(23825);берем адрес второго символа ко- мандной строки INC HL LD A,(HL) ;берем этот символ AND 223 ;буква заглавная CP "S" ;это "S" ? JP Z,4960 ;если да, то копируем 1 файл на одном дисководе CP "B" ;это "B" ? JP Z,5420 ;если да, то копирование всего диска на одном дисководе CALL 7629 ;прием имен файлов CALL 7541 ;если идет проверка на синтак- сис, то возврат CALL 5743 ;выделение места в памяти CALL 4142 ;прием расширения файла CALL 7344 ;установка старого имени файла LD A,(23798) ;сохранение номера дисковода - источника LD (23800),A JP NZ,1483 ;если файл не найден, то провер- ка COPY "*","*" Ошибка!!! COPY "*","*" надо проверять всегда, иначе при наличии на диске файла с именем "*" скопируется только этот файл, а в целом тут должно быть так: LD (23800),A PUSH AF CALL 1483 POP AF JP NZ,985 А в подпрограмме 1483 вместо JP NZ,985 должно быть RET NZ. CALL 5725 ;чтение описателя файла LD HL,23782 ;сохранение его части LD DE,23789 LD BC,7 LDIR CALL 7344 ;установка нового имени файла PUSH AF ;сохранение результата проверки PUSH BC ;и номера файла LD A,(23798) ;сохранение номера дисковода - приемника LD (23801),A LD A,(23800) ;выбор дисковода - источника CALL 15819 CALL 1029 ;настройка на диск LD A,(23801) ;выбор дисковода - приемника CALL 15819 CALL 1029 ;настройка на диск POP BC ;восстановление номера файла POP AF ;и результата проверки нового имени файла JR NZ,1779 ;если файл не найден, то копиро- вание файла CALL 1460 ;проверка файла с расширением "#" JR NZ,1779 ;если копируется другой блок, то копируем его CALL 1409 ;запрос OVERWRITE ? JP NZ,993 ;если был ответ N, то O.K. 1779 CALL 1596 ;копирование файла CALL 7747 ;перезапись сектора с описателем файла LD A,(23781) ;берем расширение файла CP "#" ;это "#" ? JP NZ,993 ;если нет, то O.K. LD A,10 ;файл искать по 10 байтам LD (23814),A LD HL,23782 ;следующий блок INC (HL) LD A,(23800) ;выбор дисковода - источника CALL 15819 CALL 1460 ;поиск блока JP NZ,993 ;если не нашли, то O.K. CALL 5725 ;чтение его описателя LD HL,23782 ;сохранение его части LD DE,23789 LD BC,7 LDIR LD A,(23801) ;выбор дисковода - приемника CALL 15819 CALL 1029 ;настройка на диск JR 1779 ;повтор ─────────────────────────────────────────────────── Адрес 1839. Копирование файла при двух дисководах. Установите 23793, 23843, 23800, 23801, 23794, 23759 и 23787. 1839 LD A,(23793) ;берем количество секторов OR A ;все скопировали ? RET Z ;если да, то возврат PUSH HL ;сохранение HL LD HL,23843 ;адрес переменной с длиной рабо- чей области памяти SUB (HL) ;области хватит ? POP HL ;восстановление HL JR NC,1909 ;если рабочей области не хватит, то копируем часть файла LD A,(23793) ;копируем весь остаток LD B,A *OR A ;скопировали все LD (23793),A 1860 PUSH BC ;сохранение количества копируе- мых сектоpов LD A,(23800) ;выбор дисковода-источника CALL 15819 POP BC ;восстановление количества копи- руемых секторов PUSH BC ;и снова сохранение его LD HL,(23759);берем адрес рабочей области па- мяти PUSH HL ;сохраняем его LD DE,(23794);берем адрес части файла на дис- ке-источнике CALL 7741 ;загрузка секторов LD HL,(23796);установка адреса следующей гру- ппы секторов LD (23794),HL;на диске-источнике LD A,(23801) ;выбор дисковода-приемника CALL 15819 POP HL ;восстановление адреса рабочей области памяти POP BC ;и количества копируемых секто- ров LD DE,(23787);берем адрес части файла на дис- ке-приемнике CALL 7757 ;запись секторов LD HL,(23796);установка адреса следующей гру- ппы секторов LD (23787),HL;на диске-приемнике JR 1839 ;повтор 1909 LD (23793),A ;установка оставшегося количест- ва секторов PUSH HL ;сохранение HL LD HL,23843 ;копируем столько секторов, ско- лько LD B,(HL) ;поместится в рабочую область POP HL ;восстановление HL *OR A ;обнуление аккумулятора JR 1860 ;копирование секторов пpодолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября