City
#27
09 сентября 1999 |
|
Ликбез - полный дизассемблер ПЗУ (часть 20).
┌─────────────────────────────────────────────────┐ │ ************* ЛИКБЕЗ **************** │ └─────────────────────────────────────────────────┘ (c) П.Ю.Федин ╔═════════════════════════════════════════════════╗ ║ ║ ║ ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ ║ ║ ║ ║ TR-DOS 5.04T (5.03) ║ ║ ║ ║ ДЛЯ ПРОФЕССИОНАЛОВ, ║ ║ ║ ║ А ТАКЖЕ ДЛЯ ТЕХ, ║ ║ ║ ║ КТО ХОЧЕТ ИМИ СТАТЬ. ║ ║ ║ ╚═════════════════════════════════════════════════╝ пpодолжение Адрес 4558. Выполнение команды LIST. Установите 23825 и 23611. 4558 CALL 1067 ;проверка второго символа строки LD BC,2 ;по умолчанию печатать в поток 2 LD (23771),BC JR Z,4163 ;если второй символ строки ENTER , то вывод каталога CP "#" ;если второй символ строки "#" ? JR NZ,4600 ;если нет, то установка дисково- да LD (23645),HL;установка CH_ADD CALL 7691 ;прием номера потока CALL 7564 ;берем текущий символ CP 13 ;это ENTER ? JR Z,4163 ;если да, то вывод каталога CP "," ;это "," ? JP NZ,7450 ;если нет, то ошибка CALL 7722 ;следующий символ CALL 7613 ;прием имени дисковода на стек калькулятора JR 4603 ;установка дисковода 4600 CALL 7647 ;установка CH_ADD и прием имени дисковода на стек калькулятора 4603 CALL 7541 ;если идет проверка на синтаксис , то возврат CALL 7605 ;снятие имени дисковода со стека калькулятора EX DE,HL ;переброска его адреса в HL CALL 7297 ;установка дисковода 4613 CALL 7541 ;если идет проверка на синтаксис , то возврат LD A,(23798) ;загрузка имени дисковода в23801 LD (23801),A CALL 1029 ;настройка на диск LD A,(23771) ;берем номер потока CP 2 ;это 2 ? PUSH AF ;сохраняем его CALL Z,7555 ;если да, то очистка экрана POP AF ;восстановление номера потока CP 17 ;он больше 16 ? JP NC,7450 ;если да,то ошибка CALL 7556 ;открытие потока LD A,255 ;буфер не убирать, память не из- менять LD (23800),A CALL 4433 ;выделение памяти в рабочей об- ласти LD HL,24070 ;начало описателя диска в буфере LD DE,(23759);берем адрес WORKSP LD BC,32 ;длина описателя диска LDIR ;сохранение описателя диска CALL 1000 ;загрузка в буфер сектора 0 до- рожки 0 LD HL,23845 ;адрес буфера PUSH HL ;сохранение его 4670 LD HL,4275 ;адрес сообщения TITLE: PUSH BC ;сохранение BC RST 24 ;печать TITLE: LD HL,(23759);берем адрес WORKSP LD BC,20 ;20-й байт ADD HL,BC RST 24 ;печать имени диска LD HL,4282 ;печать DISC DRIVE: RST 24 LD A,(23798) ;берем номер дисковода ADD A,"A" ;вычисление имени дисковода CALL 15746 ;печать его CALL 15744 ;перевод строки LD HL,(23759);3-й байт описателя диска LD BC,3 ADD HL,BC LD A,(HL) ;берем количество файлов на дис- ке LD HL,(23759);19-й байт LD BC,19 ADD HL,BC SUB (HL) ;вычисление количества нестертых файлов PUSH HL ;сохранение адреса 19-го байта описателя диска CALL 7587 ;печать количества нестертых файлов LD HL,4266 ;печать FILE(S) RST 24 LD HL,(23759);2-й байт описателя диска LD BC,2 ADD HL,BC LD A,(HL) ;берем тип диска LD HL,4302 ;адрес сообщения 40 TRACKS,S.SI- DE CP 25 ;это 25 ? JR Z,4754 ;если да, то печать сообщения LD HL,4322 ;адрес сообщения 80 TRACKS,S.SI- DE CP 24 ;это 24 ? JR Z,4754 ;если да, то печать сообщения LD HL,4342 ;адрес сообщения 40 TRACKS,D.SI- DE CP 23 ;это 23 ? JR Z,4754 ;если да, то печать сообщения LD HL,4362 ;адpес сообщения 80 TRACKS,D.SI- DE пpодолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября