City
#19
14 июля 1999 |
|
Ликбез - полный дизассемблер ПЗУ (часть 14).
--------------------------------------------------- ЛИКБЕЗ --------------------------------------------------- (c) П.Ю.Федин ╔═════════════════════════════════════════════════╗ ║ ║ ║ ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ ║ ║ ║ ║ TR-DOS 5.04T (5.03) ║ ║ ║ ║ ДЛЯ ПРОФЕССИОНАЛОВ, ║ ║ ║ ║ А ТАКЖЕ ДЛЯ ТЕХ, ║ ║ ║ ║ КТО ХОЧЕТ ИМИ СТАТЬ. ║ ║ ║ ╚═════════════════════════════════════════════════╝ пpодолжение Адрес 1067. Проверка второго символа командной строки. Вход: установите 23825. На выходе будет ус- тановлен флаг Z, если это ENTER и сброшен, если нет 1067 LD HL,(23825);берем адрес начала строки кома- нды INC HL ;берем адрес ее второго символа LD A,(HL) ;берем этот символ CP 13 ;сравнение его с ENTER RET ;возврат ─────────────────────────────────────────────────── Адрес 1075. Выполнение команды CAT.Установите 23825 и 23611. Используется также с адреса 1145 (вывод каталога диска; в A - номер потока, в буфере - сек- тор 8 дорожки 0). 1075 CALL 1067 ;второй символ строки команды ENTER ? LD BC,2 ;каталог выводить в поток 2 LD (23771),BC JR Z,1130 ;если второй символ строки ENTER то вывод каталога CP "#" ;второй символ строки "#" ? JR NZ,1117 ;если нет, то установка дисково- да и вывод каталога LD (23645),HL;установка CH_ADD на второй сим- вол строки CALL 7691 ;установка номера потока CALL 7564 ;берем текущий символ CP 13 ;это ENTER ? JR Z,1130 ;если да, то вывод каталога CP "," ;это запятая ? JP NZ,7450 ;если нет, то синтаксическая ошибка CALL 7722 ;берем следующий символ CALL 7613 ;помещение имени дисковода на стек калькулятора JR 1120 ;установка дисковода и вывод ка- талога 1117 CALL 7647 ;установка CH_ADD и помещение имени дисковода на стек кальку- лятора 1120 CALL 7541 ;если строка проверяется на син- таксис, то возврат CALL 7605 ;снятие имени дисковода со стека калькулятора EX DE,HL CALL 7297 ;установка дисковода 1130 CALL 7541 ;если проверка на синтаксис, то возврат LD A,(23798) ;помещение номера дисковода в 23801 LD (23801),A CALL 1029 ;настройка на диск LD A,(23771) ;берем номер потока 1145 CP 2 ;выводим в поток 2 ? PUSH AF ;сохранение номера потока CALL Z,7575 ;если назначен поток 2, то очис- тка экрана POP AF ;восстановление номера потока CP 17 ;он больше 16 ? Ошибка!!! Всего потоков 15, а не 16. JP NC,7450 ;если да, то ошибка CALL 7556 ;открытие потока Ошибка!!! Надо бы проверить, подключен ли куда-ни- будь этот поток. LD A,255 ;установка 23800 в 255 LD (23800),A LD HL,10743 ;печать TITLE: RST 24 LD HL,24090 ;печать имени диска RST 24 CALL 15744 ;перевод строки LD A,(24073) ;вычисление количества нестертых файлов на диске LD HL,24089 SUB (HL) PUSH HL CALL 7587 ;печать его LD HL,10795 ;печать FILES RST 24 POP HL LD C,(HL) ;берем количество стертых файлов CALL 7588 ;печать его LD HL,10781 ;печать DEL.FILES RST 24 CALL 1000 ;загрузка в буфер сектора 0 до- рожки 0 LD HL,23845 ;берем начало буфера 1206 CALL 1270 ;проверка достижения конца ката- лога CALL 15744 ;перевод строки LD A,(23798) ;печать имени дисковода ADD A,"A" RST 16 LD B,2 ;печатаем по 2 имени в строке 1220 CALL 1270 ;если файл стерт, то пропуск его PUSH BC ;сохранение количества имен фай- лов в строке LD A,":" ;печать двоеточия RST 16 PUSH HL ;сохранение адреса текущего опи- сателя файла в буфере CALL 10552 ;печать имени и расширения файла LD BC,13 ;вычисление адреса, по которому находится POP HL ;размер файла в секторах PUSH HL ADD HL,BC LD C,(HL) ;берем размер файла PUSH BC ;сохраним его LD A,C ;перегрузим его в A LD B,2 ;вычисление количества пробелов перед числом CP 10 JR C,1247 DEC B CP 100 JR NC,1256 1251 LD A," " ;печать пробелов RST 16 DJNZ 1251 1256 POP BC ;восстановление размера файла CALL 7593 ;печать его POP HL ;восстановление адреса текущего описателя файла POP BC ;восстановление количества имен файлов в строке LD DE,16 ;следующий описатель ADD HL,DE DJNZ 1220 ;если напечатали только 1 файл, то печать второго JR 1206 ;следующая строка пpодолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября