City
#26
30 августа 1999 |
|
Ликбез - полное описание и диассемблер ПЗУ (часть 19).
│ ************** ЛИКБЕЗ *************** │ └─────────────────────────────────────────────────┘ (c) П.Ю.Федин ╔═════════════════════════════════════════════════╗ ║ ║ ║ ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ ║ ║ ║ ║ TR-DOS 5.04T (5.03) ║ ║ ║ ║ ДЛЯ ПРОФЕССИОНАЛОВ, ║ ║ ║ ║ А ТАКЖЕ ДЛЯ ТЕХ, ║ ║ ║ ║ КТО ХОЧЕТ ИМИ СТАТЬ. ║ ║ ║ ╚═════════════════════════════════════════════════╝ пpодолжение Адрес 4261. Сообщения команды LIST. 4261 DEFM " Del." 4265 DEFM " File(s)" DEFB 0 4275 DEFM "Title:" DEFB 160 4282 DEFB 23,17 DEFM "Disk Drive: " DEFB 0 4298 DEFB 23,16," ",0 4302 DEFM " 40 Track S.Side" DEFB 0 4322 DEFM " 80 Track S.Side" DEFB 0 4342 DEFM " 40 Track D.Side" DEFB 0 4362 DEFM " 80 Track D.Side" DEFB 0 4382 DEFB 23,16 DEFM " Free sector " DEFB 0 4398 DEFB 13,13 DEFM " File Name Start Length Line" DEFB 0 ─────────────────────────────────────────────────── Адрес 4433. Выделение 546 байтов в рабочей области. Устанавливает 23759. 4433 LD HL,(23649);берем адрес рабочей области LD (23759),HL;установка адреса пространства LD BC,546 ;выделять 546 байтов JP 7715 ;выделение области и возврат ─────────────────────────────────────────────────── Адрес 4445. Печать числа из HL с нулями. 4445 XOR A ;в числе 0 десятков тысяч LD DE,10000 4449 SBC HL,DE ;вычитание из числа 10000 JR C,4456 ;если получилось число меньше 10000, то следующий разряд INC A ;следующий десяток тысяч JR 4449 ;повтор 4556 ADD A,"0" ;печать десятков тысяч CALL 4520 ADD HL,DE ;восстановление остатка числа XOR A ;в числе 0 тысяч 4446 LD DE,1000 SBC HL,DE ;вычитание из числа 1000 JR C,4473 ;если получилось число меньше 1000, то следующий разряд INC A ;следующая тысяча JR 4446 ;повтор 4473 ADD A,"0" ;печать тысяч CALL 4520 ADD HL,DE ;восстановление остатка числа XOR A ;в числе 0 сотен LD DE,100 4483 SBC HL,DE ;вычитание из числа 100 JR C,4490 ;если получилось число меньше 100, то следующий разряд INC A ;следующая сотня JR 4483 ;повтор 4490 ADD A,"0" ;печать сотен CALL 4520 ADD HL,DE ;восстановление остатка числа XOR A ;в числе 0 десятков LD DE,10 4500 SBC HL,DE ;вычитание из числа 10 JR C,4507 ;если получилось число меньше 10, то следующий разряд INC A ;следующий десяток JR 4500 ;повтор 4507 ADD A,"0" ;печать десятков CALL 4520 ADD HL,DE ;восстановление остатка числа LD A,L ;печать единиц ADD A,"0" CALL 4520 RET ;возврат ─────────────────────────────────────────────────── Адрес 4520. То же, что и 15746. 4520 PUSH HL ;сохранение HL и DE PUSH DE CALL 15746;печать символа POP DE ;восстановление DE и HL POP HL RET ;возврат ─────────────────────────────────────────────────── Адрес 4528. Проверка достижения конца буфера при работе с каталогом. Установите 23801 и 23756, а в HL поместите текущий адрес буфера. Если конец буфе- ра достигнут, то в буфер загрузится следующий сек- тор каталога, а в HL будет 23845. 4528 PUSH HL ;сохранение HL и BC PUSH BC LD A,(23801) ;берем номер дисковода из 23801 LD HL,23798 ;берем номер текущего дисковода CP (HL) ;назначен другой дисковод ? CALL NZ,15819;если да, то выбор назначенного дисковода POP BC ;восстановление HL и BC POP HL CALL 1292 ;проверка достижения конца буфе- ра LD A,(HL) ;берем первый символ имени файла OR A ;конец каталога ? JP Z,467 ;если да, то завершение CP 1 ;файл стерт ? CALL Z,1287 ;если да, то пропуск файла RET NZ ;иначе возврат JR 4528 ;если файл был пропущен, то пов- тор пpодолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября