░░▓▓ ██▓▓░░░░░▓▓█▓░░
▒▒▒▒▒▒▒▓▓▒▒▒▒▒▒▒▒▒▓████▓▓██▓▓██████▓▓█████▒░░░░░
░░░░▒▒▓▓▓▓▓▓▓█████▓▓███████▓████▓▓▓██▓▓█▓▓▓▓▓▓▓▓███▒
░▓██████▓██████▓███▓▓░░██████▓░███▓███████▓██▓█▓▓▒░
▓▓▓▓▓▓▓█▓▓▓█▓██▓▓████░░████████░█████ ▒▒█████▓▓▓▓██████▓█
░▒▓▓▓▓█▓█████▓▓ ███▓▓▓▓█░▓▓▓███▓▒ ▒▓▓███▓▓██▓▓▓▓██░░▒▒▓▓▓
░▒▓▓▓▓████▓▓ ▓░ ░████▓█░░██▓▓██▒ ░ ░██▓▓█▓▓▓▓███▓ ░█▒
░░░▒███████▓ █▓░ █▓▓███▓▓██████▓▓▒ ░ ░████▓▓▒▓▓█▓ ▓█ ▓▓▓
▓██▓▓█▓▓▓█▓ ▒▓░ ▓▓ ▓█▓ ▓█ ▓▒ ▓▓▒ ▒▓▒ ░█▒▓▓ ▓░▓▓
░▒▒▒▓▓▓░░█▒ ▓▓░ ▒ ░█▓ █▓ ▒▓█▓ ░▓ ░ ░▓ ░▒█░▓▓ ▓▓▓▓
▓███▓░░▒ ▓█▓ ▓░ ▓░ ░▓ ▒ ░██░ ▒▓ ░ ░█ ▓▒ █▓▓▓
▒▒▓▓▓ ▓█▓░ ▓█░ ░ █ ▓▒ ░▓▓ ░▒ ▒▓▓▓▒░ ░▓▓▓█▓
▒██████▓░░▓▓█▓ ▓███░▓░█░░▓█▓▓▓█░░░▓██▓░░▓▓▓▓ ░░██░░░▓▓▓▒▓
░░░░░▒▓▓▓▓▓██░░▓▓▓▓▓▓▓▓▓███████▓▓███▓▓█████▓▓▓░░▓▓▓░█▓▓▓▓▒▒▒░
░▒▒▒▓▓▓▓▓███░░░██▓▓▓██░░▓██▓▓▓▓▓▓▓░░░▓▓▓▓▓▓▓███░▓▓▓
░▓████▓▓█████▓▓▓███████▓▓████▓▓▓░░▓█▓▓▓▓▓▓▓▓▒▒▒░░
░░ ░░▒░▒▒▒░▒▒░░░▒░▒▓▓▒▒▒░▒▒░▒░░░░░░░░▓▓▓░░
(c) П.Федин
ПОЛНОЕ ОПИСАНИЕ + ПОЛНЫЙ ДИЗАССЕМБЛЕР ПЗУ TR-DOS 5.04 (5.03)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ДЛЯ ПРОФЕССИОНАЛОВ, А ТАКЖЕ ДЛЯ ТЕХ, КТО ХОЧЕТ ИМИ СТАТЬ
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
продолжение
LD C,127 ;адрес регистра данных
LD A,E ;установка номера дорожки
OUT (63),A
LD HL,(23784);берем адрес таблицы секторов для проверки
8330 LD B,3 ;3 попытки
LD A,(HL) ;берем номер сектора из таблицы
OUT (95),A ;установка сектора
PUSH HL ;сохранение адреса таблицы секторов
8336 DI ;запрет прерываний
LD A,128 ;чтение сектора
OUT (31),A
PUSH BC ;сохранение количества попыток
CALL 16357 ;чтение данных по адресу из HL (в пзу, не
страшно)
IN A,(31) ;все в порядке ?
AND 127
POP BC ;восстановление счетчика попыток
JR Z,8358 ;если все в порядке, то следующий сектор
DJNZ 8336 ;следующая попытка
LD HL,23766 ;есть 1 битый сектор
INC (HL)
8358 POP HL ;восстановление адреса таблицы секторов
LD A,(HL) ;берем номер текущего сектора
INC HL ;берем адрес номера следующего сектора
CP 1 ;конец таблицы ?
JR NZ,8330 ;если нет, то повтор
EI ;разрешение прерываний
RET ;возврат
────────────────────────────────────────────────────────────────
Адрес 8367. Запись байта 1 раз. В регистр D поместите байт, в
C - 127 и выдайте команду записи на вг-93. Используется также с
адреса 8369 (запись байта несколько раз; все для 8367 плюс в B
количество выдач).
8367 LD B,1 ;запись 1 раз
8369 IN A,(255);ожидание DRQ или INTRQ
AND 192
JR Z,8369
RET M ;если поступил INTRQ, то возврат
OUT (C),D ;выдача байта
DJNZ 8369 ;повтор до конца
RET ;возврат
────────────────────────────────────────────────────────────────
Адрес 8381. Форматирование диска. Установите 23770, 23767, 23782
и 23784.
8381 LD HL,23767 ;берем число форматируемых дорожек
LD B,(HL)
XOR A ;дорожки проверять
INC HL
LD (HL),A
LD E,255 ;начнем с дорожки 0
PUSH BC ;сохранение количества дорожек
8390 INC E ;следующая дорожка
LD A,E
LD B,27 ;позиционирование
CALL 15940
CALL 8171 ;выбор верхней стороны диска
CALL 13021 ;печать номера дорожки и форматирование ее
LD A,(23770);берем флаг количества сторон
CP 128 ;форматировать 2 стороны ?
JR NZ,8417 ;если да, то
CALL 8182 ;выбор нижней стороны диска
CALL 13071 ;печать номера дорожки и форматирование ее
8417 POP BC ;восстановление количества дорожек
DJNZ 8390 ;если еще не все, то повтор
RET ;возврат
────────────────────────────────────────────────────────────────
Адрес 8421. Удаление буфера с изменением памяти. На входе уста-
новите переменные 23734, 23800, 23820 и 23832. Выход: в 23832
записывается 255, а если в 23820 выл 0, то туда также засылается
255. Используется также с адреса 8433 (изменение памяти, работа-
ет только с 23734 и 23832).
8421 PUSH AF ;сохранение AF
LD A,(23800);ничего не делать ?
CP 255
JR Z,8476 ;если да, то возврат
POP AF ;восстановление AF
CALL 10608 ;удаление буфера
8433 PUSH AF ;сохранение AF
LD A,(23734);изменение разрешено ?
CP 244
JR Z,8476 ;если нет, то возврат
XOR A
LD HL,23832 ;подтверждение есть ?
OR (HL)
LD (HL),255 ;в следующий раз подтверждение будет
JR Z,8476 ;если его не было, то возврат
LD A,(23820);буфер есть ?
OR A
LD HL,23747 ;начало первого блока
LD DE,23859 ;начало второго блока
JR NZ,8465 ;если есть буфер, то второй блок смещен на 257
LD DE,24116 ;байтов
8465 LD B,45 ;длина блоков - 45 байтов
8467 LD C,(HL) ;меняем блоки местами
LD A,(DE)
LD (HL),A
LD A,C
LD (DE),A
INC HL
INC DE
DJNZ 8467
8476 POP AF ;восстановление AF
RET ;возврат
────────────────────────────────────────────────────────────────
Адрес 8478. Очистка буфера редактора.
8478 LD HL,(23641);берем адрес буфера редактора
LD (HL),13 ;ENTER
LD (23643),HL;установка курсора
INC HL ;конец области
LD (HL),128
RET ;возврат
────────────────────────────────────────────────────────────────
Адрес 8490. Восстановление командной строки. Установите 23840.
8490 LD DE,(23641);символы переносить в буфер редактора
LD HL,23840 ;из 23840
CALL 688 ;перенос символов
RET ;возврат
продолжение следует ...
Other articles: