@@@ @@@@
@ @ @
@ @ @
@ @ @ @ @ @@ @@@@ @@@ @@@
@ @ @ @ @@@ @ @ @ @ @ @ @
@ @ @ @ @ @ @ @@ @@@@ @ @
@ @ @ @ @ @@ @ @ @ @ @ @ @@
@@ @@ @@@ @@ @ @@ @@@@ @@@@ @
@@@ @
@ @
(c) П.Федин @@@@
ПОЛНОЕ ОПИСАНИЕ + ПОЛНЫЙ ДИЗАССЕМБЛЕР ПЗУ TR-DOS 5.04 (5.03)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ДЛЯ ПРОФЕССИОНАЛОВ, А ТАКЖЕ ДЛЯ ТЕХ, КТО ХОЧЕТ ИМИ СТАТЬ
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
продолжение
Адрес 7726. Удаление области памяти. В HL поместите начало об-
ласти, в DE - длину.
7726 RST 32
DEFW #19E8
RET
────────────────────────────────────────────────────────────────
Адрес 7734. Загрузка регистра дорожки. Установите 23761. При вы-
ходе по ошибке в 23831 помещается 255. Можно использовать с адр-
еса 7738 для прямого вывода в порт 63.
7734 CALL 16050;определение номера дорожки, на которой стоит головка
LD A,H ;установка регистра дорожки
7738 OUT (63),A
RET ;возврат
────────────────────────────────────────────────────────────────
Адрес 7741. Загрузка секторов. Вход: в HL - адрес загрузки,
в D - номер дорожки, в E - номер сектора, в B - кол-во секторов.
7741 XOR A ;признак загрузки
JR 7780;переход к подпрограмме загрузки / записи секторов
────────────────────────────────────────────────────────────────
Адрес 7744. Запись информации о файле. На входе в C должен быть
номер файла. Используется также с адресов:
7747 - запись сектора из буфера. Вход: в 23796 установите номер
сектора+1, а в 23797 - номер дорожки.
7757 - запись секторов. В HL - адрес, в D - номер дорожки, в E -
номер сектора, в B - кол-во секторов.
7780 - загрузка / запись секторов. Предварительные установки
как и для предыдущей подпрограммы плюс в A установите 0 для заг-
рузки или что-нибудь другое для записи.
7744 CALL 5739 ;чтение сектора с описателем файла и замена описателя
7747 LD DE,(23796);берем номер сектора для записи
DEC DE
LD B,1 ;записывать 1 сектор
LD HL,23845 ;записывать будем из буфера
7757 PUSH HL ;сохраним адрес секторов на диске и в памяти
PUSH DE
CALL 15889 ;берем тип дисковода
BIT 7,(HL) ;он 40-дорожечный ?
JR Z,7776 ;если да, то записывать можно
BIT 0,(HL) ;используем 40 дорожек на 80-дорожечном ?
JR NZ,7776 ;если нет, то записывать можно
LD HL,10712 ;адрес сообщения READ ONLY
JP 7465 ;переход на обработку ошибок
Внимание, ошибка!!! В аккумуляторе забыли установить код ошибки.
7776 POP DE ;восстановление адресов секторов
POP HL
7778 LD A,255 ;признак записи
7780 LD (23758),A ;установка признака операции
7783 LD (23796),DE;установка адреса секторов на диске
PUSH BC ;сохранение количества секторов
PUSH HL ;и адреса загрузки / записи
CALL 7734 ;чтение индексной области дорожки
POP HL ;восстановление адреса загрузки / записи
POP BC ;и количества секторов
XOR A ;количество секторов равно 0 ?
OR B
RET Z ;если да, то возврат
7797 PUSH BC ;сохраняем адрес и кол-во секторов
PUSH HL
CALL 16134 ;установка адреса загрузки / записи секторов
LD A,(23796) ;установка номера сектора
CALL 16130
LD A,(23797) ;позиционирование головки на дорожку
CALL 15971
LD A,(23758) ;берем флаг операции
OR A ;загрузка?
PUSH AF
CALL Z,16142 ;если да, то загрузка сектора
POP AF
CALL NZ,16138;иначе запись сектора
POP HL ;берем адрес следующего сектора
LD DE,256
ADD HL,DE
PUSH HL ;сохраняем его
LD A,16 ;на дорожке 16 секторов
LD HL,23796
INC (HL) ;следующий сектор
CP (HL) ;конец дорожки ?
JR NZ,7847 ;если да, то номер следующего сектора 0
LD (HL),0
LD HL,23797 ;и берем следующую дорожку
INC (HL)
7847 POP HL ;восстановление адреса следующего сектора
POP BC ;и количества секторов
DJNZ 7797 ;если не все, то повтор
RET ;возврат
продолжение следует ...
Other articles: