City
#28
15 сентября 1999 |
|
Ликбез - полный дизассемблер ПЗУ (часть 21).
┌─────────────────────────────────────────────────┐ │ *************** ЛИКБЕЗ ****************** │ └─────────────────────────────────────────────────┘ (c) П.Ю.Федин ╔═════════════════════════════════════════════════╗ ║ ║ ║ ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ ║ ║ ║ ║ TR-DOS 5.04T (5.03) ║ ║ ║ ║ ДЛЯ ПРОФЕССИОНАЛОВ, ║ ║ ║ ║ А ТАКЖЕ ДЛЯ ТЕХ, ║ ║ ║ ║ КТО ХОЧЕТ ИМИ СТАТЬ. ║ ║ ║ ╚═════════════════════════════════════════════════╝ пpодолжение 4754 RST 24 ;печать сообщения POP HL ;восстановление адреса 19-го байта описателя диска LD C,(HL) ;берем количество стертых файлов CALL 7588 ;печать его LD HL,4261 ;печать DEL.FILES RST 24 LD HL,4382 ;печать FREE SECTORS: RST 24 LD HL,(23759);4-й байт LD BC,4 ADD HL,BC LD C,(HL) ;берем количество свободных сек- торов INC HL LD B,(HL) CALL 7593 ;печать его LD HL,4398 ;печать FILE NAME, START,LENGTH, LINE RST 24 POP BC ;восстановление BC и текущего адреса в буфеpе POP HL LD B,16 ;печатать информацию о 16 файлах 4789 CALL 4528 ;проверка достижения конца буфе- ра CALL 15744 ;перевод строки PUSH BC ;сохранение количества оставших- ся файлов PUSH HL ;и текущего адреса в буфеpе CALL 10552 ;печать имени и расширения файла LD BC,13 ;13-й байт описателя файла POP HL ;восстановление текущего адреса в буфере ADD HL,BC LD C,(HL) ;берем размер файла в секторах PUSH BC ;сохраняем его LD A,C ;загружаем его в C LD B,2 ;печатать 2 пробела перед числом CP 10 ;длина файла меньше 10 секторов? JR C,4816 ;если да, то печать пробелов DEC B ;печатать один пробел 4816 CP 100 ;длина файла меньше 100 секто- pов ? JR NC,4825 ;если нет, то пробелы не печа- тать 4820 LD A," " ;печать пробелов RST 16 DJNZ 4820 4825 POP BC ;восстановление длины файла в секторах CALL 7593 ;печать ее LD HL,4298 ;16 пробелов RST 24 POP HL ;восстановление адреса описателя файла в буфере PUSH HL ;и снова сохранение его LD BC,9 ;9-й байт описателя ADD HL,BC LD E,(HL) ;берем адрес загрузки файла INC HL LD D,(HL) PUSH HL ;сохранение текущего адреса в описателе файла EX DE,HL ;переброска адреса загрузки фай- ла в HL CALL 4445 ;печать его LD A," " ;пробел CALL 15746 POP HL ;восстановление текущего адреса в описателе файла INC HL ;следующий адрес LD E,(HL) ;берем длину файла INC HL LD D,(HL) EX DE,HL ;перенос ее в HL CALL 4445 ;печать ее POP HL ;восстановление адреса описателя файла PUSH HL ;и снова сохранение его LD BC,8 ;8-й байт ADD HL,BC LD A,(HL) ;берем расширение файла CP "B" ;это "B" ? CALL Z,4891 ;если да, то печать строки авто- запуска POP HL ;восстановление адреса описателя файла POP BC ;и счетчика файлов LD DE,16 ;адрес следующего описателя фай- ла ADD HL,DE DJNZ 4789 ;повтор до конца PUSH HL ;сохранение адреса описателя файла CALL 15744 ;2 раза перевод строки CALL 15744 JP 4760 ;повтор с самого начала ─────────────────────────────────────────────────── Адрес 4891. Печать строки автостарта прогpаммы на бейсике. В HL поместите адрес описателя файла плюс 8 и установите 23759. 4891 LD BC,5 ;берем адрес длины файла в сек- торах ADD HL,BC LD B,(HL) ;берем эту длину INC HL ;следующий адрес в описателе LD E,(HL) ;берем адрес файла на диске INC HL LD D,(HL) DEC B ;загружать будем 2 сектоpа JR Z,4917 DEC B JR Z,4917 ;если длина файла не больше 2-х секторов, то загрузка секторов LD A,16 ;на дорожке 16 секторов 4908 INC E ;следующий сектор CP E ;конец дорожки ? JR NZ,4915 ;если да, то LD E,0 ;следующий сектор 0 INC D ;и берем следующую дорожку 4915 DJNZ 4908 ;повтор до конца 4917 LD HL,(23759);берем адрес рабочей области LD BC,33 ;33 байта уже заняты ADD HL,BC LD B,2 ;загружать 2 сектора PUSH HL ;сохранение адреса загрузки сек- торов CALL 7741 ;загрузка секторов LD A,128 ;будем искать конец программы POP HL ;восстановление адреса секторов в памяти LD BC,512 ;длина области - 512 байтов CPIR ;поиск конца программы LD A,(HL) ;берем следующий байт CP 170 ;это 170 ? RET NZ ;если нет, то возврат INC HL ;берем номер строки автостарта LD C,(HL) INC HL LD B,(HL) LD A,B ;это 0 ? OR C RET Z ;если да, то возврат PUSH BC ;сохранение номера строки авто- старта LD A," " ;печать пробела CALL 15746 POP BC ;восстановление номера строки автостарта CALL 7593 ;печать его RET ;возврат пpодолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября