Системные программы для ZX-Spectrum 128K 1969 г.

TRDOS. Дисковый интерфейс - перемещение программ, находящихся на ленте. Файлы с последовательным и произвольным доступом. Программирование в машинных кодах.


11. ПЕРЕМЕЩЕНИЕ ПРОГРАММ,
НАХОДЯЩИХСЯ НА ЛЕНТЕ

Если Вы написали программу на кассете, то копирование ее на диск представляет
некоторые проблемы. Вы загружаете свою программу с кассеты в SOS как обычно.
Когда программа находится в SPECTRUM, она может быть записана на диск с по-
мощью непоследственного ввода с клавиатуры, например:

RANDOMIZE USR 15619:REM:SAVE"XXX" или

RANDOMIZE USR 15619:REM:SAVE"XXX"CODE NNNN,BBB

Можно скопировать много других прбграмм с помощью программы UTILITY DISK
TAPECOPY (см.приложение) (копия на ленте обслуживающего диска).

Синтаксис этих программ может потребовать преобразования с тем, чтобы он
работал jripn TRDOS. Для других программ, которые трудно или невозможно преоб-
разовать и прогнать на диске, можно использовать "Волшебную кнопку" (MAGIC
BUTTON).

11.1. ПРЕОБРАЗОВАНИЕ ПРОГРАММ

Очень многие программы представляют собой смесь BASIC и машинного кода, что
усовершенствует скорость их выполнения. Элемент BASIC может варьироваться от
простой программы загрузки кода до более сложного интерфейса между кодом и
пользователем.

Для тех программ, которые используют BASIC в качестве интерфейса, переход на
использование TRDOS относительно простой. Другие программы могут требовать
значительной "утряски", чтобы их можно было изменить для работы с TRDOS. Неко-
торые трудные программы могут потребовать использования "Волшебной кнопки"
(раздел 11.3) как единственного средства решения этой проблемы.

Вы должны иметь доступ ко всем командам LOAD или SAVE в первоначальной
программе BASIC, требующей изменения, поэтому первым шагом является распечат-
ка (LIST) программы BASIC. Используемая методика должна варьироваться в соот-
ветствии с индивидуальной программой. В некоторых случаях характеристики про-
граммы LOAD и SAVE минимальны, и все, что требуется для обнаружения местопо-
ложения команд - это минимальное и быстрое сканирование листинга. Другие про-
граммы могут иметь несколько вариантов LOAD и SAVE. Самый простой способ в этом
случае - пройти через программу по одной строке за раз, осуществляя поиск команд
LOAD и SAVE.

Каждый раз, когда такая команда найдена, в дополнение к обычному префиксу
производится модификация синтаксиса, т.е.

RANDOMIZE USR 15619:REM: это вводится перед существующим

LOAD и SAVE в программе.

Следует помнить также два других положения. Во-первых, команда TRDOS дол-
жна быть последним элементом в строке программы; во-вторых, следует принимать
во внимание местополжение дисковода. Первый пункт часто будет требовать неболь-
шой модификации в нумерации и в содержании строк. Оба эти пункта проиллюстри-
рованы на нижеследующем примере.

EXISTING PROGRAM: (существующая погамма)

500 IF Х-5 THEN INPUT"NAME";N$:SAVE N$ DATA C$ О: VERIFY N$
DATA C$0 :GOSUB 700

505 IF X-V THEN GOSUB 800:INPUT TITLE";T$:SAVE T$: SAVE T$
CODE 50000,575

506 ... (продолжение программы)

Предположим, что эти файлы записаны на дисковод с умолчанием.

NEW PROGRAM: (новая программа)

500 IF Х-5 THEN INPUT"NAME";N$:RANDOMIZE USR 15619: REM:SAVE
N$ DATA C$0

502 GOSUB 700

504 IF X-V THEN COSUB 800:INPUT"TITLE";T$: RANDOMIZE USR
15619:REM: SAVE T$

505 RANDOMIZE USR 15619:REM:SAVE T CODE 50000, 575

506 ......(продолжение программы).

Регулировка строки изменяется от программы к программе. Чтобы обеспечить
необходимую 1 строку на команду TRDOS, достаточно неиспользованных строк 502
и 504. Иногда может возникнуть необходимость в подгонке других строк, не связанных
непосредственно с командами TRDOS, с целью создания достаточного пространства.
Следует постоянно следить за потоком программ. Часто можно обнаружить, что в
результате развития программы другая часть программы переходит на номер строки,
которую Вы используете в настоящее время.

Существуют следующие правила преобразования:

1. Команда TRDOS должна быть последним оператором в строке.

2. Ко всем существующим командам LOAD и SAVE неообходимо добавить только
префикс RANDOMIZE USR 15619:REM:

3. Если используется более одного дисковода, удостоверьтесь, что используется
правильный дисковод.

4. Все файлы должны иметь наименование.

5. Проверьте поток программ при добавке промежуточных номеров строки.

11.2. ВОЛШЕБНАЯ КНОПКА

Волшебная кнопка расположена в тыловой части дискового интерфейса (см. диаг-
рамму 1). Волшебная кнопка предназначена для записи (сохранения) программ,
расположенных на кассете и прогона их на диске без какого-либо преобразоования.

Существует много программ, таким образом, что их очень трудно или невозможно
преобразовать и прогнать на диске. Это могут быть программы со сложной защитой
или программы, осуществляющие хранение и загрузку файлов данных для использо-
вания их главной программой. Так как замена команд TRDOS невозможна, требуется
другой метод. В этом случае программа загружается и создаются файлы данных.
Вместо использования инструкций программы SAVE, волшебная кнопка использует-
ся для вывода всей программы и файлов на диск. Последующая перезагрузка означает
загрузку всей упаковки вместо файла данных.

Небольшие неудобства наличия разработанной по индивидуальному заказу версии
полной упаковки для каждого типа файла данных компенсируется скоростью и гиб-
костью диска с TRDOS.

Форматированный пустой диск следует убрать исключительно по этой причине, а
при использовании он должен быть в дисководе А. Если все в порядке, нижеприведен-
ная последовательность демонстрирует подробные операции (если Вы работаете с
TRDOS).

1. Вернитесь в BASIC, напечатав RETURN <ENTER>.

2. Переведите системный переключатель в положение "Отключено".

3. Очистите SPECTRUM, напечатав PRINT USR 0<ENTER>.

4. Загрузите программу с кассетной ленты и прогоните ее как обычно.

5. После того, как программа загружена и идет, нажмите волшебную кнопку и
тотчас же отпустите ее. Затем память компьютера распечатывается на диск. Эта
память хранится на диске в виде файла (файлов).

SPECTRUM & PLUS: - создается только один файл. Этот файл содержит изобра-
жение всех 48К памяти произвольного доступа. CAT диска продемонстрирует, что
заголовок - это а тип файла CODE.

SPECTRUM 128: - может быть записано до семи файлов, в зависимости от того,
используются ли страницы на верхней памяти произвольного доступа в 64К. Ниже
приведен пример каталога диска после распечатки с помощью волшебной кнопки.

TITLE;TEST
7 FILE(S)
О DEL. FILE

A:@ 192:7 64

A:@5 64:4 64

A:@3 64:1 64

A:@2 1

Наименование семейства этих файлов Чтобы осуществить повторную загруз-
ку файла (для всех компьютеров SPECTRUM), изменяем синтаксис от обычного
LOAD или RUN. Вместо этого используется ключевое слово GOTO SOS, например:
GOTO "@"CODE

Программа может быть переименована или скопирована на другой диск собствен-
ным названием и прогнана с помощью команды GOTO, например:

NEW"GAME1,V,@2" CODE

COPY"B:GAMEl,V,A:@" CODE

При прогоне "GAME1" и при условии, что диск находится в дисководе А использу-
• ется следующий синтаксис:

GOWGAMEl" CODE

SPECTRUM 128: Существует возможность переименования или копирования всех
файлоов один за другим с помощью команд NEW и COPY. Однако, для Вашего
удобства, при программе UTILITY MAGIC (волшебная кнопка) имеется на диске с
обслуживающими программами. Подробности описаны в приложении. Эта програм-
ма UTILITY может также использоваться для стирания "семейства" файлов, записан-
ных с помощью волшебной кнопки. Прежде чем использовать волшебную кнопку для
записи программы, Вы должны удостовериться, что диск не содержит никакого файла
с названием или "@Г' и т.д.

Некоторые программы используют нестандартную программу сканирования кла-
виш. Для этих программ необходимо сделать первым символом имени файла "$",
например:

GOTO'^GAMEl" CODE

Если программа проверяется до копирования ее с заголовком на другой диск, то в
названии файла потребуется префикс "$" при возникновении задачи сканирования
клавиши. Например:

NEW,,$GAME2,,,@"CODE

GOTO"$GAME2" CODE

В процессе загрузки этих файлов на экране дисплея будут содержаться некоторые
произвольные элементы - некоторое кличество строк с элементами изображения, чей
внешний вид напоминает графическое представление азбуки морзе. Когда экран
очищается, программа продолжает свой ход с того места, где она была остановлена.

12. ФАЙЛЫ МАССИВОВ ДАННЫХ

Синтаксис SOS для загрузки или хранения нестрокового массива под заголовком
MONEY следующий:

LOAD"MONEY"DATA М() или SAVE"MONEY"DATA М()

Для строкового массива с цепочками требуется добавление $, например:

LOAD"MONEY"DATA М$()

Как большинство команд TRDOS, LOADING (загрузка) SAVEING (хранение)
массивов данных осуществляется с помощью синтаксиса SOS BASIC с префиксом и,
возможно, с помощью индикатора дисковода. Редко массивы данных управляются
непосредственно с TRDOS.

Природа этих массивов такова, что дисковод с умолчанием представляет собой
дисковоод А. Если у Вас двойная система дисководов, то можно предположить, что
диск с данными всегда загружен в один и тот же дисковод, например В, в то время как

основная программа, и дисковод с умолчанием остаются в А. В этом случае использу-
ется временный индикатор дисковода, например:

RANDOMIZE USR 15619:REM:LOAD"B:MONEY"DATA М()

При копировании, стирании и обновлении (COPY, ERASE, NEW) файла данных
команда всегда должна заканчиваться обозначением типа файла, т.е. DATA или
TRDOS будут знать, что они ищут файл BASIC, например:

COPY"A:MONEY*V,B:MONEY,,DATA

13. ФАЙЛЫ С ПОСЛЕДОВАТЕЛЬНЫМ И
ПРОИЗВОЛЬНЫМ ДОСТУПОМ

13.1. ОБЩЕЕ ОПИСАНИЕ

В последнем разделе обсуждались обычные массивы файлов данных. TRDOS обес-
печивает два дополнительных типа файлов данных, последовательного и произволь-
ного доступа. Чтобы использовать эти два типа файлов данных, сначала Вы доолжны ч
открыть поток. В SPECTRUM соодержится 16 потоков. SOS резервирует потоки от О
до 3 для своего собственного использования, а потоки от 4 до 15 доступны для TRDOS.
Когда открыт поток для файла с последовательным или произвольным доступом,
используется 336 байтов памяти произвольного доступа.

В файле данных Moiyr храниться как числовые, так и строковые переменные.
Компьютер преобразует числовые переменные в строки. Строка заканчивается сис-
темно возвратом каретки (ASCII CODE 13).

Данные файла с последовательным доступом записываются по порядку, как в
кассетной ленте. Чтобы считать цепочку по направлению к концу файла, необхоодимо
начать с самого начала файла. Данные файла с произвольным доступом хранятся в
виде некоторого количества записей. Можно считать или записать любую запись в
этом файле, указав ее номер. Следовательно, доступ к последней записи можно
осуществить так же быстро, как и к первой.

Другие команды TRDOS по выбору дисковода, копированию, изменению назва-
ний и т.д. Все одинаково применяются к файлам последовательного и произвольного
доступа. Единственная разница - в типе индикатора файла, который представляет
собой "#" вместо "CODE" или "DATA". Например:

COPY"B:PHONE,Y,A:PHONE,,#

NEW,,NEWFILE,7,0LDFILE"#

ERASE"NAMEOLD"#

Как и файлы данных, файлы последовательного и произвольного доступа редко
управляются непосредственно с TRDOS. Поэтому предполагается, что нижеследую-
щие примеры находятся в программе BASIC.

12.2. ФАЙЛЫ ПОСЛЕДОВАТЕЛЬНОГО ДОСТУПА

Последовательный файл может быть открыт для записи или считывания, но не для
обеих операций в одно и то же время. Синтаксис для открытия файла для WRITE
(записи) следующий:

OPEN STREAM NUMBERS-FILENAME",W

Когда поток открыт для записи, ключевое слово программы BASIC PRINT исполь-
зуется для записи данных в этот поток. Например:

10 LET DOS-15619

20 RANDOMIZE USR DOS:REM:OREN #4,"TEST",W
30 PRINT#4;"THIS 1$ A TEST LINE"
40 RANDOMIZE USR DOS:REM:CLOSE #4

Обратите внимание на "DOS" вместо печати в "15619" и закрытия файла. Цепочка
в строке 30 будет записана в файле "TEST" на диске. Если бы файл не был закрыт,
данные были бы потеряны. Любой закрытый файл может быть повторно открыт для
дальнейшей операции запись с помощью считывания, изменения и повторной записи
под новым названием.

Синтаксис для чтения открытого файла:

OPEN STREAM NUMRER,"FILENAME,,,R

При открытом потоке для READ используется ключевое слово SOS INPUT для
считывания данных из этого потока, например:

10 LET DOS-15619

20 RANDOMIZE USR DOS:REM:OPEN #7,"TEST",R
30 INPUT #7;A$

Этот файл данных "TEST" будет загружен в А$ с диска.

12.3. ФАЙЛЫ ПРЯМГО ДОСТУПА

Файл с произвольным доступом - это файл данных, который содержит некоторое
количество записей, пронумерованных от 0 и выше. Длина записей (макс.254 байта
каждая) выбирается и распределяется при первом открытии файла. Запись хранится
в виде отдельной строки. Любая строка, д лина которой меньше длины распределенной
записи, записывается, выравнивается слева и завершается с помощью возврата карет-
ки (ASCII CODE 13). Оставшиеся байты записи теряются. Любая строка, длина
которой больше длины записи, будет усечена до распределенной длины и записана
без возврата каретки^

Когда файл произвольного доступа впервые открывается, TRDOS распределяет 16
секторов (примерно 4К) в этот файл. Он будет автоматически расширяться, если
длина файла превысит 4К.

Для открытия файла произвольного доступа используется следующий синтаксис:

OPEN STREAM-NUMBER,"FILENAME"RND,RECORD-LENGTH

Для произведения записи в файл существует следующий синтаксис команды (пре-
фикс RANDOMIZE не требуется для распечатки и ввода: PRINT и INPUT):

PRINT STREAM-NUMBER;RECORD-NUMBER,VARIABLE-NAME

Например:

100 RANDOMZE USR 15619:REM:OPEN #8,"ADDRESS"RND,100
150 PRINT #8;72,D$

Поток 8 был открыт для файла "ADDRESS", в котором под каждую запись назна-
чено 100 байтов. Содержание D$ было помещено в запись номер 72 этого файла.

В отличие от последовательного файла, в этом случае можно считывать файл и
делать в него запись, когда файл открыт. Для считывания записи из файла использу-
ется следующий синтаксис команд:

INPUT STREAM-NUMBER;(RECORD-NUMBER),VARIABLE-NAME

Например:

100 RANDOMIZE USR 15619:REM:OPEN #12,"TEST"RND,20

110 PRINT # 12,20, A$

570 INPUT # 12; (15), A$

990 RANDOMIZE USR 15619:REM:CLOSE #12

999 END

В строке 570 считывается запись с номером записи 15 (помните, что это 16-я
запись) и загружается в переменную А$. Когда все операции с файлом закончены,
поток необходимо закрыть, как указано в строке 990. Если электроэнергия будет
отключена до закрытия потока, то содержание будет утрачено. Одна запись может
содержать более одной переменной. Программа должна связать вместе цепочки этих
переменных для произведения операций записи. Таким же образом программа дол-
жна разбить цепочку после операции чтения, если данные должны быть снова разде-
лены на отдельные переменные.

14. НЕПОСРЕДСТВЕННАЯ ЗАПИСЬ/ЧТЕНИЕ

СЕКТОРА

*

Наряду с тремя типами файлов данных, описанных в последних двух разделах,
TRDOS предлагает также считывание/запись файла DIRECT SECTOR. Один сектор
содержит на диске 256 байтов.

13.1. КОМАНДА РЕЕК

Команда РЕЕК дает Вам возможность считывать любую часть файла на диске и
переносить данные в память с произвльным доступом. Вы можете считывать только
один сектор за раз, и яанные могут быть переданы в любое место в памяти с произ-
вольным доступом.

Синтаксис команды следующий:

PEEK"FILENAME" BUFFER-ADDRESS,SECTOR-NUMBER

Например:

PEEK"RECORD"30023,5

В этом примере 5-ый сектор файла "RECORD" считывается, и его содержание
записывается в память с произвольным доступом из адреса 30023.

13.2. КОМАНДА РОКЕ

Команда РОКЕ дает Вам возможность записать сектор данных из памяти с произ-
вольным доступом в любое место в файле на диске. Синтаксис - такой же, как
синтаксис команды РЕЕК:

POKE"FILENAME" BUFFER-ADDRESS,SECTOR-NUMBER

Например:

POKE"B:OLD"30024,10

В этом примере длина сектора данных, начиная с адреса RAM (память с произволь-
ным доступом) 30024, записывается в 10-ый сектор файла "OLD" в дисководе В. Т.к.
эта команда изменяет содержание файла на диске, ее следует использовать осторож-
но.

15. ПРОГРАММИРОВАНИЕ В МАШИННЫХ КОДАХ

Включение стандартных программ TRDOS в программы машинного кода произво-
дится относительно просто. Для программы требуется три элемента:

1. Машинный код, эквивалент BASIC TRDOS.

2. Стандартная программа машинного кода для ввода пункта 1.

3. Стандартная программа в машинных кодах для восстановления системы до ее
первоначального состояния, до вызова и выполнения команды.

Непосредственные ячейки (местоположение) памяти зависят от программы в це-
лом. В данном примере ячейки стандартной программы будут в 49000 для SAVE, в
49500 для LOAD и в 50000 для команд их вызова. Таким образом, элемент 1 будет на
49000 или на 49500, а элементы 2 и 3 на 50000.

Пример:

Код д ля LOAD начинается в 49500 и представляет собой то же, что и вышеприве-
денный, за исключеним того, что адрес 49502 содержит 239(LOAD) вместо 248
(SAVE).

Эти две стандартные программы, LOAD и SAVE, могут быть расположены где
угодно, но инициатор, который мы помещаем на 50000, требует изменения в адрес
50007-50008 (запись адреса стандартной программы) и 50025-50026 (адрес стандар-
тной программы LOAD) с тем, чтобы указать н£ новые адреса.

Чтобы произвести перераспределение, следует переассемблировать сам инициа-
тор. Это показано ниже в мнемонике Z80. Ниже даны только мнемоники Z80.

CHADD EGU 23645 Местоположение переменной

SOS CHADD

ORG ХХХХХ ХХХХХ-адрес этого кода

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 байтов.

16. СООБЩЕНИЯ ОБ ОШИБКАХ

16.1. СТРОЧНЫЕ СОБЩЕНИЯ

Когда Вы вводите команду в TRDOS, команда будет выполнена при условии, что
она достоверна. Если эта команда не относится к числу вызванных TRDOS (LOAD,

RUN, FORMAT и т.д.), TRDOS проигнорирует ее. Если имеется синтаксическая
ошибка или ошибка возникает при выполнении команды, на дисплее появится сооб-
щение об ошибке. Ниже приведены сообщения об ошибках и причины, их вызываю-
щие.

NO DISK диск отсутствует или в дисководе неформатированный

диск, или открыта заслонка диска. На экране возника-
ет команда после подсказки А>, Вы можете вставить
диск и/или закрыть заслонку дисковода и нажать
ENTER для выполнения той же команды.

NOFILE(S) (Нет файла (ов)) TRDOS не может найти файла на

диске. Эта ошибка появляется также в случае исполь-
зования любой команды, которая неправильно обозна-
чает файл, например:

LOAD TEST 'CODE вместо того, чтобы LOADTEST"

ERASE"DUMMY1 "DATA вместо того, чтбы
ERASE"DUMMY2"DATA,,

♦ERROR Это сообщение появляется, если в команде, которую

Вы напечатали, есть синтаксическая ошибка, напри-
мер:

SAVEXJ""
ERASE

~ Ошибка в команде SAYE - это лишнее (") , а название
файла отсутствует в команде ERASE.

OUT OF MEMORY (Нет памяти) Это сообщение появится при загрузке

программы с диска и при отсутствии достаточнго места
в памяти для нее и при использовании команды МО YE,
если в наличии нет 4К необходимого рабочего про-
странства. Эта проблема обычно решается с помощью
сброса компьютера.

FILEEXISIS (Файл существует) Файл того же названия и типа,

который Вы пытались записать, уже существует на
диске.

OVERWRITE (Перезапись на существующий файл ?) (д/н). Это со-

EXISINGFILE? (Y/N) общение появляется при копировании всех файлов с

одного диска на другой. Уже существует файл с таким
названием и такого же типа на диске назначения. Вы
можете ввести Y с целью перезаписи на существующий
файл или N с целью игнорирования этог файла.

DISK ERROR (Ошибка на диске) На диске имеется неисправность на

дорожке XX, в секторе УУ, как указано в сообщении.
У Вас есть три выбора: Вы можете напечатать "R",
чтобы сделать повторную попытку и, в большинстве
случаев успешно завершить операцию; "А" - чтобы пре-
рвать операцию и вернуться в TODOS; "Г - чтобы про-
игнорировать этот сектор и продолжить работу с ос-
тальными операциями.

DISK ERROR

TRK XX SEC YY

RETRY, ABORT, IGNORE ?

WRITE PROTECT (Защита от записи) Диск защищен от записи. Как и в

вышеприведенном варианте, здесь существует три вы-
бора. Однако нет смысла делать повторную попытку,
если Вы не изменили диск или не сделали его незащи-
щенным.

DISK WRITE PROTECT
TRK0SEC1

RETRY, ABORT, IGNORE ?

VERIFY ERROR (Ошибка проверки) Это сообщение может появиться,

когда используется команда VERIVFY (проверка). Со-
общение информирует, что файл на диске - не тот же,
чтб и файл в памяти.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Секреты - Секретные кнопки в разных приложениях: Wolfenstein'2004, IG#5, ACEdit, DNA OS, Wild Disk Copier.
Бук - Похождения Штиpлица и дpугие пpиключения Боpмана.
Список BBS - Список работающий BBS.
Начало - Как вы относитесь к тому, что "сказки" оформлены в виде самостоятельных статей ?
Цвет.мет. - анализ возможнстей расширения цветовых возможностей Спектрума: Flash Colour и прототип схемы Gigascreen.

В этот день...   24 ноября