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

---------------------------------------------------
ЛИКБЕЗ
---------------------------------------------------
(c) П.Ю.Федин
╔═════════════════════════════════════════════════╗
║ ║
║ ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ ║
║ ║
║ TR-DOS 5.04T (5.03) ║
║ ║
║ ДЛЯ ПРОФЕССИОНАЛОВ, ║
║ ║
║ А ТАКЖЕ ДЛЯ ТЕХ, ║
║ ║
║ КТО ХОЧЕТ ИМИ СТАТЬ. ║
║ ║
╚═════════════════════════════════════════════════╝
пpодолжение
Регистр состояния 1818ВГ-93
После выполнения в регистре состояния будут нахо-
дится флаги, показывающие результат выполнения ко-
манды:
╔═══════════════╤═══════════════╗
║ │Разряд регистра║
║ Команда ├─┬─┬─┬─┬─┬─┬─┬─╢
║ │7│6│5│4│3│2│1│0║
╟───────────────┼─┼─┼─┼─┼─┼─┼─┼─╢
║Вспомогательная│R│P│H│F│C│T│I│Q║
║Чтение адреса │R│0│0│N│C│W│D│Q║
║Чтение сектора │R│0│A│N│C│W│D│Q║
║Чтение дорожки │R│0│0│0│0│W│D│Q║
║Запись сектора │R│P│E│N│C│W│D│Q║
║Запись дорожки │R│P│E│0│0│W│D│Q║
╚═══════════════╧═╧═╧═╧═╧═╧═╧═╧═╝
Значения флагов:
R - готовность дисковода (1 - не готов).
P - защита от записи.
H - загрузка головки.
E - ошибка записи.
A - тип адресной метки.
F - ошибка поиска.
N - массив не найден.
C - ошибка в контрольной сумме.
T - головка на дорожке 0 (сигнал TR00 от дисковода)
W - потеря данных.
I - индексный импульс.
D - запрос данных.
Q - занято (идет выполнение команды).
Порт 255.
Системный регистр служит для выбора дисководов и
выполнения других вспомогательных действий. Его
структура:
7 6 5 4 3 2 1 0
│ │ │ │ └─┴─Номер дисковода (0 - 3).
│ │ │ └─────Сброс ВГ-93, если 0.
│ │ └───────Загрузка головки.
│ └─────────Сторона диска (0 - нижняя).
└─────────────Метод записи (0 - FM, 1 - MFM).
При вводе из этого порта читаются сигналы:
бит 7 - INTRQ;
бит 6 - DRQ.
К сожалению, порты TR-DOS доступны только тогда,
когда включено ПЗУ TR-DOS, что очень затрудняет до-
ступ к ним. Но для записи в порты можно использо-
вать следующие подпрограммы:
12227 OUT (31),A
RET
7738 OUT (63),A
RET
8179 OUT (255),A
RET
12044 OUT (255),A
RET
10835 OUT (C),A
RET
Для чтения из портов подобных подпрограмм нет.
Коды ошибок:
В TR-DOS обработка ошибок реализована весьма не-
корректно, но все же можно различить ошибки, если
воспользоваться двумя переменными: 23610 и 23823.
╔══════════════╤══════════════════════╤═════╤═════╗
║Сообщение об │Значение │23610│23823║
║ошибке │ │ │ ║
╟──────────────┼──────────────────────┼─────┼─────╢
║O.K. │Нормальное завершение │ 255 │ 0 ║
║No file(s) │Требуемый файл не най-│ 255 │ 1 ║
║ │ден │ │ ║
║File exists │Файл уже существует │ 255 │ 2 ║
║No space │Нет места на диске │ 255 │ 3 ║
║Directory full│Нет места в каталоге │ 255 │ 4 ║
║ │диска │ │ ║
║Rec OF │Обращение к несущест- │ 255 │ 5 ║
║ │вующему сектору файла │ │ ║
║No disc │Нет диска в дисководе │ 26 │ 6 ║
║Disc error │Дисковая ошибка. Есть │ 26 │ 7 ║
║Trk XX sec XX │3 варианта:R - еще раз│ │ ║
║Retry,Abort, │попробовать,I - продо-│ │ ║
║Ignore? │лжить со дующего сек-│ │ ║
║ │тора, А- отказаться от│ │ ║
║ │операции │ │ ║
║Read only │Диск защищен от записи│ 26 │ 7 ║
║Trk XX sec XX │Есть 3 варианта ( смо-│ │ ║
║Retry,Abort, │трите выше) │ │ ║
║Ignore? │ │ │ ║
║Stream opened │Открываемый поток уже │ 25 │ 10 ║
║ │занят │ │ ║
║Not disk file │Закрываемый канал не │ 255 │ 11 ║
║ │принадлежит TR-DOS │ │ ║
║Array not │Требуемая переменная │ 255 │ 14 ║
║found │не найдена │ 1 │ 1 ║
║*BREAK* │Нажата клавиша BREAK │ 20 │ 20 ║
║ │ │ 12 │ 12 ║
║Out of RAM │Не хватает оперативной│ 3 │ 3 ║
║ │памяти │ │ ║
║Disc error │Диск не принадлежит │ 255 │ 0 ║
║ │TR-DOS │ │ ║
║Read only │Попытка записи на 40- │ 255 │ * ║
║ │дорожечный диск на 80-│ │ ║
║ │дорожечном дисководе │ │ ║
║*ERROR* │Прочие ошибки, в ос-│ 11 │ 12 ║
║ │новном синтаксические │ X │X+1 ║
╚══════════════╧══════════════════════╧═════╧═════╝
* - копия переменной с типом дисковода,
X - любое число.
В случае вывода сообщения Retry,Abort,Ignore? коды
ошибки устанавливаются при ответе A.
продолжение следует...
Другие статьи номера:
Похожие статьи:
В этот день... 28 октября