@@@ @@@@ @ @ @ @ @ @ @ @ @ @ @ @@ @@@@ @@@ @@@ @ @ @ @ @@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @@ @@@@ @ @ @ @ @ @ @ @@ @ @ @ @ @ @ @@ @@ @@ @@@ @@ @ @@ @@@@ @@@@ @ @@@ @ @ @ (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 продолжение следует ...