|
City
#18
09 июля 1999 |
|
Ликбез - полный дизассемблер ПЗУ (часть 13).

---------------------------------------------------
ЛИКБЕЗ
---------------------------------------------------
(c) П.Ю.Федин
╔═════════════════════════════════════════════════╗
║ ║
║ ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ ║
║ ║
║ TR-DOS 5.04T (5.03) ║
║ ║
║ ДЛЯ ПРОФЕССИОНАЛОВ, ║
║ ║
║ А ТАКЖЕ ДЛЯ ТЕХ, ║
║ ║
║ КТО ХОЧЕТ ИМИ СТАТЬ. ║
║ ║
╚═════════════════════════════════════════════════╝
пpодолжение
───────────────────────────────────────────────────
Адрес 864. Текст заставки TR-DOS.
864 DEFB 22,1,15
DEFM "* TR-DOS Ver 5.04T*"
DEFB 13,13,127
DEFM " 1986 Technology Research ltd."
DEFB 22,5,11
DEFM "(U.K.)"
DEFB 22,7,5
DEFM "BETA 128"
DEFB 0
───────────────────────────────────────────────────
Адрес 940. Завершение выдачи каталога.
940 CALL 1021 ;загрузка в буфер сектора 8 до-
рожки 0
CALL 15744 ;перевод строки
CALL 15744 ;еще раз
LD BC,(24074);берем количество свободных сек-
торов на диске
CALL 7593 ;печать его
LD HL,10706 ;печать FREE
RST 24
JP 467 ;завершение
───────────────────────────────────────────────────
Адрес 960. Переход к подпрограмме завершения.
960 JP 467
───────────────────────────────────────────────────
Адрес 963. Печать сообщения об ошибке. В HL устано-
вите адрес сообщения, в A - код ошибки.
963 PUSH AF ;сохранение кода ошибки
LD A,(23822);ошибка произошла при автозагруз-
ке ?
CP 254
JR NZ,973 ;если нет, то установка кода
ошибки
POP AF ;снятие со стека кода ошибки
RET ;возврат
973 POP AF ;восстановление кода ошибки
LD (23823),A;установка кода ошибки
LD A,(23829);печать сообщений разрешена ?
OR A
CALL Z,9991 ;если да, то печать сообщения
Ошибка!! Перед печатью надо открыть поток 0 и очис-
тить низ экрана.
RET ;возврат
───────────────────────────────────────────────────
Адрес 993. Вывод сообщения O.K.
993 LD HL,10086;адрес сообщения O.K.
XOR A ;код ошибки - 0
JP 7242 ;выдача сообщения и завершение
───────────────────────────────────────────────────
Адрес 1000. Загрузка сектора 0 дорожки 0 в буфер.
Обнуляет 23756. Используется также с адресов:
1004 - загрузка сектора дорожки 0 в буфер. Устано-
вите 23756.
1010 - загрузка сектора в буфер, номер сектора в E,
дорожки - в D.
1000 XOR A ;текущий сектор 0
LD (23756),A
1004 LD DE,(23756);берем номер сектора
LD D,0 ;дорожка 0
1010 CALL 10570 ;создание буфера
LD HL,23845 ;загружать в буфер
LD B,1 ;1 сектор
JP 7741 ;загрузка сектора
───────────────────────────────────────────────────
Адрес 1021. Загрузка в буфер сектора 8 дорожки 0.
Установите 23820.
1021 CALL 10570;создание буфера, если его нет
LD DE,8 ;дорожка 0, сектор 8
JR 1010 ;загрузка сектора в буфер
───────────────────────────────────────────────────
Адрес 1029. Настройка на диск. Меняет переменную с
типом дисковода.
1029 CALL 1021 ;чтение в буфер сектора 8 дорожки
0
LD A,(24076);диск от TR-DOS ?
CP 16
JR Z,1045 ;если да, то установка типа дис-
ковода
LD HL,10722 ;адрес сообщеня DISC ERROR
RST 24 ;печать сообщения
JR 960 ;завершение
Внимание, ошибка!! Неправильно обрабатывается ошиб-
ка. Здесь программа должна быть такой:
LD HL,10722
LD A,7
JP 7242
А в этом случае ваша программа не получит код ошиб-
ки, а внизу экрана совершенно не к месту появится
DISC ERROR.
CALL 15889 ;берем тип дисковода
RES 0,(HL) ;установка типа дисковода под тип
диска
RES 1,(HL) ;и возврат
LD A,(24072)
BIT 0,A
JR NZ,1061
SET 0,(HL)
1061 BIT 3,A
RET NZ
SET 1,(HL)
RET
Ошибка!!! Перед установкой типа надо бы проверить
совместимость диска и дисковода.
пpодолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 18 ноября