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