14. Программирование машинного кода.
Включение стандартных программ TRDOS в программы машинного ко-
да производится относительно просто.ля программы требуется три эле-
мента:
1-машинный код,эквивалент BASIC TRDOS.
2-стандартная программа машинного кода для ввода пункта 1.
3-стандартная программа в машинных кодах для восстановления
системы до ее первоначального состояния,до вызова и выполнения ко-
манды.
Непосредственные ячейки (местоположение) памяти зависят от
программы в целом.В данном примере ячейки стандартной программы бу-
дут в 49000 для SAVE,в 49500 для LOAD и в 50000 для команд их вызо-
ва.Таким образом,элемент 1 будет на 49000 или на 495000,а элементы 2
и 3 на 50000.
Пример:
Адрес: Код: BASIC Примечания:
49000 234 REM Коды,как в приложении A SPECTRUM
49001 58 : ручной
49002 248 SAVE
49003 34 "
49004 69 E
49005 120 X
49006 97 @ Название файла "EXAMPLE"
49007 109 M
49008 112 P
49009 108 1
49010 101 E
49011 34 "
49012 13 ENTER Всегда заканчивается указанием
ENTER
Код для LOAD начинается в 49500 и представляет собой то же,что
и вышеприведенный,за исключением того что адрес 49502 содержит
239(LOAD) вместо 248(SAVE).
Эти две стандартные программы,LOAD и SAVE,могут быть расположе-
ны где угодно,но инициатор,который мы помещаем на 50000,требует из-
менения в адресе 50007-50008 (запись адреса стандартной программы)
и 50025-50026 (адрес стандартной программы LOAD) с тем ,чтобы ука-
зать на новые адреса.
Чтобы произвести перераспределение,следует переассеблировать
сам инициатор.Это показано ниже в мнемонике Z80 ниже даны только
280 мнемосхем.
CHADD EQU 23645 Местоположение переменной SOS CHADD
ORG XXXXX XXXXX-адрес этого кода.
LD HL,(CHADD) Начало записи истинного CHADD
LD (TEMP),HL Временное хранение истинного CHADD
LD HL,49000 Адрес стандартной программы SAVE
LD (CHADD),HL CHADD теперь указывает на нашу
стандартную программу.
CALL 15363 Ввод TRDOS SAVE через CHADD.
JP BACK Переход на ту точку,с которой вызвана
вся эта стандартная программа.
LD HL,(CHADD)
LD (TEMP),HL Стандартная программа для LOAD
повторяет вышеназванное,только с
измененным адресом.
LD HL,49500
CALL 15363
BACK LD HL,(TEMP) Начало восстановления CHADD
LD (CHADD),HL Повторная загрузка первоначального
CHADD
RET Возврат
TEMP Метка распределяющая память для
МЕТКИ временного хранения.
Вся стандартная программауказывающая на программы SAVE и
LOAD,вместе с конечной процедурой "возврат к точке захода",занимает
только 47 байтов.
15. Сообщения об ошибках.
15.1. Неавтономные сообщения.
Когда вы вводите команду в TRDOS, команда будет выполнена при
условии, что она достоверна.Если эта команда не относится к числу
вызванных TRDOS,(LOAD,RUN,FORMAT и т.д.) TRDOS проигнорирует ее.Ес-
ли имеется синтаксическая ошибка или ошибка возникает привыполнении
команды,на дисплее появится сообщение об ошибке.Ниже приведены со-
общения об ошибках и причины их вызывающие.
1-NO DISK (диск отсутствует)
диск отсутствует,или в дисководе неформатированный диск,или
открыта заслонка диска.На экране возникает команда после
подсказки A>,вы можете вставить диск и/или закрыть заслонку
дисковода и нажать ENTER для выполнения той же самой команды.
2-NO FILE(S) (нет файла(ов))
TRDOS не может найти файла на диске.Эта ошибка появляется
также в случае использования любой команды,которая неправиль-
но обозначает файл,например:
LOAD"TEST"CODE вместо того,чтобы LOAD"TEST"
ERASE"DUMMY1"DATA вместо того,чтобы ERASE"DUMMY2"DATA
3-*ERROR*
это сообщение появляется,если в команде,которую вы напечата-
ли,есть синтаксическая ошибка,например:
SAVE"CJ""
ERASE
ошибка в команде SAVE - это лишние кавычки,а название файла
отсутствует в команде ERASE.
4-OUT OF MEMORY (вне памяти)
это сообщение появится при загрузке программы с диска и при
отсутствии достаточного места в памяти для нее и при исполь-
зовании команды MOVE,если в наличии нет 4 Кбайт необходимого
рабочего пространства.Эта проблема обычно решается с помощью
сброса компьютера.
5-FILE EXISTS (файл существует)
файл того же названия и типа,который вы пытались записать,уже
существует на диске.
6-OVERWRITE EXISTING FILE ? (Y/N)
перезапись на существующий файл?(д/н).Это сообщение появляет-
ся при копировании всех файлов с одного диска на другой.Уже
существует файл с таким названием и такого же типа на диске
назначения.Вы можете ввести Y с целью перезаписи на существу-
ющий файл или N с целью игнорированния этого файла.
7-DISK ERROR (ошибка на диске)
на диске имеется неисправность на дорожке XX,в секторе YY,как
указано в сообщении.У вас есть три выбора:вы можете напечатаь
"R",чтобы сделать повторную попытку и,в большинстве случаев
успешно завершить повторную операцию; "A"-чтобы прервать опе-
рацию и вернутся в TRDOS; "I"-чтобы проигнорировать этот сек-
тор и продолжить работу с остальными операциями.
DISK ERROR
TRK XX SEC YY
RETRY,ABORT,IGNORE ?
8-WRITE PROTECT (защита от записи)
диск защищен от записи.Как и вышеприведенном варианте сущест-
вует три выбора.Однако нет смысла делать повторную попытку
если вы не изменили диск или не сделали его незащищенным.
DISK WRITE PROTECT
TRK 0 SEC 1
RETRY,ABORT,IGNORE ?
9-VERIFY ERROR (ошибка проверки)
это сообщение может появится,когда используется команда
VERIFY (проверка).Сообщение информирует,что файл на диске -
не тот же,что и файл в памяти.
15.2 Коды ошибок.
Все вышеназванные сообщения об ошибках появляются только тог-
да, когда ввод0 производится с TRDOS. Если команда была выдана с
SOS или с машинного кода, либо в качестве прямого кода, либо из
программы, на экране не появится никакого сообщения. Однако они за-
писываются в виде CODE в регистровой паре Z80. Для кода используют-
ся следующие значения:
0 - нет ошибок.
1 - нет файла.
2 - файл существует.
3 - нет пространства.
4 - указатель переполнен.
5 - переполнение номера записи.
6 - нет диска.
7 - ошибка на диске.
8 - ошибка синтаксиса.
10 - поток уже открыт.
11 - диск не форматирован.
12 - поток не открыт.
Чтобы получить код ошибки, устанавливается переменная, равная
команде TRDOS. Эта переменная примет величину кода ошибки по завер-
шению команды TRDOS.
Пример 1:
LET A=USR 15619:REM:CAT
Пример 2:
Простая программа, иллюстрирущая использование кода ошибки 1:
10 CLEAR 65367
20 LET ERR=USR 15619:REM:LOAD "COPY"CODE
25 REM ERROR CODE IS RETURNED IN THE VARIABLE ERR
( код ошибки возвращается в переменную ERR)
30 IF ERR=1 THEN CLS"PRINT AT 10,1:"""COPY"CODE NOT
ON DISK":STOP
40 RANDOMIZE USR 32768
50 RANDOMIZE USR 15616
16. Информация о TRDOS.
1 - TRDOS занимает 112 байтов памяти с произвольным доступом.
2 - Без подсоединенной TRDOS RAM пользователя начинается C:
(А) - адрес 23755 без подсоединенного интерфейса 1
(Б) - адрес 23812 с подсоединенным интерфейсом 1
При подсоединенной TRDOS RAM пользователя начинается C:
(А) - адрес 23867 дез подсоединенного интерфейса 1
(Б) - адрес 23925 с подсоединенным интерфейсом 1
Чтобы записать/загрузить/прогнать программу, которая использу-
ет байты между 23759 и, допустим 23925, нужно следовать процедуре,
описанной в разделе 11.3 (волшебная кнопка).
3 - TRDOS использует сектора диска для хранения (см. Раздел
1.2) если количество байтов превышает 256, используется другой сек-
тор. Это продолжается до тех пор, пока не происходит запись всего
файла. Для записи 522 байтов потребуется 3 сектора. Третий сектор
содержит только 10 байтов. Только эти 10 байтов будут загружены с
диска.
4 - В дополнение к 112 байтам RAM TRDOS также используется бу-
фер в 256 байтов, при осуществлении доступа к диску. Этот буфер
имеет динамеческое распределение . При выполнение большого количес-
тва команд TRDOS сначала сдвигает программу BASIC (если таковая су-
ществует) вверх с целью создания буфера. После завершения команды
программа BASIC передвигается назад к своей исходной позиции. Эта
операция происходит незаметно.
5 - Команда MOVE требует 4К (минимум) из SPECTRUM RAM в качес-
тве рабочего пространства. Если MOVE выполняется, а программа еще в
памяти, необходимо перевести компьютер в исходное состояние и затем
выполнить команду MOVE. Перевод компьютеря в исходное состояние мо-
жет быть осуществлен с помощью возврата к SOS и ввода RANDOMIZE USR
0 или с помощью положения "сброс" на системном переключателе.
6 - На одном диске может хранится до 128 файлов.
17. ХХХХХХХХХХХХХ ХХХХХХХ ХХХХХХ
Соединения PIN соединителя дисковода.
Соеденитель дисковода (см. диаграмму 1) спроэктирован так,
чтобы он был совместим с SHUGART, а штирьковые соединения перечис-
лены ниже.
OV-1 2 -
OV-3 4 -
OV-5 6 - Выбор дисковода "D:"
OV-7 8 - Индекс.
OV-9 10 - Выбор дисковода "A:"
OV-11 12 - Выбор дисковода "B:"
OV-13 14 - Выбор дисковода "C:"
OV-15 16 - Загрузка головки (LOAD HEAD)(MOTOR ON)
OV-17 18 - Направление
OV-19 20 - Шаг.
OV-21 22 - Запись данных.
OV-23 24 - С вожможностью записи.
OV-25 26 - TRACK ZERO (нулевая дорожка).
OV-27 28 - Защита записи.
OV-29 30 - Считывание данных.
OV-31 32 - Сторона 1.
OV-33 34 -
Распределение штырьков соеденителя, если смотреть на дисковый
интерфейс справа, (см. диаграмму), выглядит следующим образом:
2 4 34
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 2 33