@@@ @@@@
@ @ @
@ @ @
@ @ @ @ @ @@ @@@@ @@@ @@@
@ @ @ @ @@@ @ @ @ @ @ @ @
@ @ @ @ @ @ @ @@ @@@@ @ @
@ @ @ @ @ @@ @ @ @ @ @ @ @@
@@ @@ @@@ @@ @ @@ @@@@ @@@@ @
@@@ @
@ @
(c) П.Федин @@@@
ПОЛНОЕ ОПИСАНИЕ + ПОЛНЫЙ ДИЗАССЕМБЛЕР ПЗУ TR-DOS 5.04 (5.03)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ДЛЯ ПРОФЕССИОНАЛОВ, А ТАКЖЕ ДЛЯ ТЕХ, КТО ХОЧЕТ ИМИ СТАТЬ
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
продолжение
Адрес 7852. Вычисление количества полных секторов файла из его
длины в байтах. В A должно быть количество секторов файла, а в
DE - длина загружаемой части файла.
7852 PUSH HL ;сохранение HL
LD H,A ;берем полную длину файла
LD L,0
PUSH HL ;сохраняем ее
SBC HL,DE ;она меньше длины загрузки ?
CALL C,7868;если да, то загружать весь файл
POP HL ;восстановление полной длины файла
LD A,H ;вычисление количества полных секторов из пол-
ной длины файла
POP HL ;восстановление HL
RET C ;если полная длина файла больше длины загрузки,
LD A,D ;то количество полных секторов берем из длины
загрузки
RET ;возврат
────────────────────────────────────────────────────────────────
Адрес 7868. Обнуление 23766 и установка флага C.
7868 XOR A
LD (23766),A
SCF
RET
────────────────────────────────────────────────────────────────
Адрес 7874. Выполнение команды FORMAT. Установите 23825 и 23611.
Используется также с адреса 7901 (повтор форматирования; устано-
вите 23773).
7874 LD HL,65535
LD (23767),HL;дорожки не проверять
LD (23769),HL;форматировать одну сторону диска
LD (23761),HL;ошибку при чтении адресного маркера игнори-
ровать
CALL 1067 ;следующий символ ENTER ?
JP Z,7450 ;если да, то ошибка
CALL 7647 ;прием имени диска на стек калькулятора
CALL 7541 ;если идет проверка на синтаксис, то возврат
CALL 7255 ;установка имени диска
7901 CALL 12800 ;выбор быстрого или обычного формата
AND 128 ;дисковод 40-дорожечный ?
LD A,40 ;форматировать 40 дорожек
JR Z,7192 ;если дисковод 80-дорожечный,
LD A,80 ;то форматировать 80 дорожек
7192 LD (23767),A ;установка количества дорожек
CALL 15768 ;восстановление
CALL 8182 ;выбор нижней стороны диска
CALL 16032 ;задержка в 2168937 тактов
LD E,1 ;форматирование дорожки с номером 1
CALL 8189
CALL 8171 ;выбор верхней стороны диска
LD E,0 ;форматирование дорожки с номером 0
CALL 8189
LD A,(23773) ;форматировать только одну сторону диска
CP "$"
JR Z,7963 ;если да, то форматирование диска
CALL 8182 ;выбор нижней стороны диска
CALL 16032 ;задержка в 2168937 тактов
CALL 16053 ;чтение адресного маркера
LD A,H ;номер дорожки - 1 ?
CP 1
JR NZ,7963 ;если нет, то форматирование диска
LD A,128 ;форматировать обе стороны диска
LD (23770),A
7963 CALL 8381 ;форматирование диска
LD HL,23845 ;адрес начала буфера
LD (HL),0 ;очистка первого байта
LD DE,23846 ;адрес второго байта буфера
LD BC,255 ;осталось очистить 255 байтов
LDIR ;очистка буфера
LD BC,23767 ;адрес переменной с количеством дорожек
LD DE,23770 ;адрес переменной с количеством сторон
LD A,(BC) ;форматировали 80 дорожек ?
CP 80
JR Z,8009 ;если да, то диск 80-дорожечный
LD A,(DE) ;форматировали 2 стороны ?
CP 128
JR Z,8002 ;если да, то диск 40-дорожечный двухсторонний
LD A,25 ;диск 40-дорожечный односторонний
LD HL,624 ;свободно 624 сектора
JR 8021 ;создание описателя диска
8002 LD A,23 ;диск 40-дорожечный двухсторонний
8004 LD HL,1264 ;свободно 1264 сектора
JR 8021 ;создание описателя диска
8009 LD A,(DE) ;форматировали 2 стороны ?
CP 128
LD A,24 ;если нет, то диск 80-дорожечный односторон-
ний
JR NZ,8004
LD A,22 ;иначе диск 80-дорожечный двухсторонний
LD HL,2544 ;свободно 2544 сектора
8021 LD (24072),A ;установка типа диска
LD (24074),HL;установка количества свободных секторов
LD A,1 ;первая свободная дорожка - 1
LD (24071),A
LD A,16 ;признак принадлежности диска к TR-DOS
LD (24076),A
LD HL,24079 ;9 байтов 32 с адреса 24079
LD DE,24080
LD BC,8
LD (HL),32
LDIR
LD HL,23773 ;установка имени диска
LD DE,24090
LD BC,8
LDIR
CALL 8171 ;выбор верхней стороны диска
LD B,1 ;записать 1 сектор
LD DE,8 ;сектор 8 дорожки 0
LD HL,23845 ;из буфера
CALL 7778 ;запись сектора
LD A,(23766) ;берем количество дефектных секторов
PUSH AF ;сохраняем его
XOR A ;расширение - CHR$ 0
CALL 12996 ;установка расширения и очистка низа экрана
LD HL,(24074);берем количество свободных секторов
LD (23767),HL;сохраняем его
LD HL,23773 ;печать имени диска
RST 24
LD A,13 ;перевод строки
RST 16
LD HL,(23767);восстановление количества свободных секторов
POP AF ;восстановление количества дефектных секторов
PUSH HL ;сохранение количества свободных секторов
LD D,0 ;перевод количества дефектных секторов в
LD E,A ;двухбайтную форму
SBC HL,DE ;вычисление количества хороших секторов
LD B,H ;переброска его в BC
LD C,L
CALL 7593 ;печать его
LD A,"/" ;печать "/"
RST 16
POP BC ;восстановление количества свободных секторов
CALL 7593 ;печать его
JP 12907 ;запрос повтора форматирования
────────────────────────────────────────────────────────────────
Адрес 8121. Таблица секторов для форматирования обычного диска.
Используется также с адреса 8122 для проверки дорожки.
8121 DEFB 1
8122 DEFB 9,2,10,3,11,4,12,5,13,6,14,7,15,8,16,1
продолжение следует ...
Other articles: