|
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одолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 15 ноября