Справочник по системным программам для компьютера ZX Spectrum 1991 г.

Описание GENS4 - принцип работы, команды дисковода и магнитной ленты, ассемблирование и запуск из редактора, другие команды, пример использования редактора, коды ошибок и их значение.


3.2.4. Команды дисковода и магнитной ленты

Текст может быть сохранен на магнитной ленте/дисковод или
загружен с них с помощью команд Р, Q и Т. Объектный код может
быть сохранен на магнитной ленте с использованием команды 0.
Имена файлов не должны содержать более 10 символов.

Команда "PN,M,S"

Строки с номерами от N до М сохраняются на ленте/диск в
файле с именем, заданным строкой S. Текст будет записан на диск,
если перед именем файла через двоеточие стоит номер дисковода.
Помните, что эти аргументы могут быть установлены предыдущей
командой.

Примеры

Р 10, 200, EXAMPLE - записать линии 10...200 на магнитофон в
файл с именем "EXAMPLE".

Р 500, 900, 1:TEST - записать линии 500...900 на дисковод 1.

Перед введением этой команды убедитесь, что ваш магнитофон
включен в режим записи. Не используйте эту команду, если вы
желаете на последующей стадии ввести текст с ленты. Вместо этого
используйте команду Т. Если вы намерены вводить текст с дисковода,
то используйте команду Р.

Если вы заносите на диск файл с уже имеющимся на диск име-
нем, то вас спросят:

FILE EXIST DELETE (Y/N)? (существующий файл удалять?)

Отвечайте "Y" для удаления файла и продолжения записи или
нажмите любую другую клавишу для возврата в редактор без записи
файла.

Команда "G, , S"

На ленте или дискете производится поиск файла с именем "S".
Когда файл найден, он загружается в конец текущего текста. Если
строка "S" пустая, то загружается первый файл кассеты. Для диско-
вода обязательно надо указать имя файла номер дисковода.

При работе с кассетой, после того как вы ввели команду "G",
появится сообщение:

START ТАРЕ

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

USING FILENAME

В противном случае высветится сообщение:
FOUND FILENAME

и поиск на ленте продолжается.

При использовании дисковода и в том случае, если не найден
искомый файл, то появится сообщение "ABSENT".

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

Команда Т N, М, С

Выводит блок текста между строками N и М включительно на
ленту в формате, подходящем для дальнейшей работы под управле-
нием директивы ассемблера *F - см. Раздел 2.9. Обрабатывается файл
с именем "S". Вывод начинается сразу после нажатия клавиши
<ENTER>, так что вы должны убедиться, что ваш магнитофон готов
к записи перед вводом этой командной линии. Если вы намерены
осуществлять ввод с дисковода, то используйте лучше команду "Р", а
не "Т". Отметим, что эта команда должна использоваться только в
том случае, если вы хотите позднее ассемблировать текст с ленты. Это
неприменимо для диска - только в версиях DEVPAC 4.

Команда "О, , S"

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

Только последний блок кода, произведенный ассемблером, мо-
жет быть сохранен этим способом, т.е. если у вас более одной дирек-
тивы "ORG" в исходной программе, то сохранится только код,
произведенный после последней директивы "ORG".

Код должен быть получен в памяти перед тем, как он может быть
сохранен с помощью команды "О". Часто удобнее использовать ко-
манду "А, ,FILENAME" для автоматического получения файла. Эта
команда работает быстрее "О" - см.ниже.

3.2.5. Ассемблирование и запуск из редактора

Команда "А О, S, F"

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

S - дает возможность изменить размер таблицы символов для
этой трансляции. Размер таблицы по умолчанию обычно бывает до-
статочным, за исключением режима ввода (INCLUDING).

F - имя файла, имеющегося на дискете. Имя файла должно
начинаться с <D:>, где D - номер дисковода, на котром размещен
файл. Имя файла не должно содержать более 10 символов. Присутст-
вие имени файла здесь побуждает ассемблер производить трансля-
цию иным способом.

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

Не существует ограничений на размер программы, которую вы
хотите проассемблировать ( кроме размера существующего про-
странства на вашей дискете (кассете).

Пара важных замечаний относительно использования директи-
вы "ORG" для данных средств:

1 - директива "ORG" будет помещать объектный код по адресам,
указанным в данной директиве первоначально и каждый раз после
помещения объектного кода в объектный файл (если не был указан
ключ 16, чтобы поместить объектный код сразу после таблицы сим-
волов). Следовательно, ключ 16 более разумно использовать будет в
том случае, когда ассемблирование происходит прямо на дискету, т.к.
это дает максимальный размер для вашего буфера объектного кода;
рабочие адреса вашего кода не будут поражены.

2 - Вы должны избегать использования более одной директивы
"ORG" в вашей программе, если только вы не введете нули в память
между двумя этими директивами с помощью "DEF".

Например:
ORG 50000

; некоторые коды

RET

ORG 60000
; еще коды

Этот фрагмент не будет сохранен на ленте правильно, т.к. вто-
рая директива "ORG" переопределяет начало буфера объектного ко-
да. Но:

ORG 50000
; некоторые коды
RET

; добиваем нулями до 60000

DEFS 60000-$
; еще коды

Фрагмент будет сохранен правильно, т.к. DEF - произведет до-
статочное количество нулей, чтобы последующий код начинался с
адреса 60000.

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

Примеры использования команды "А":

А20, , 1:TEST<ENTER>

Ассемблирует с листингом, помещает объектный код сразу по-
сле таблицы символов (это увеличивает размер буфера объектного
кода в памяти), использует размер таблицы символов по умолчанию
и сохраняет объектный код на дисководе 1 под именем "TEST".

А, 3000 <ENTER>

Ассемблирует программу, используя ключи по умолчанию, с
размером таблицы символов 3000 байт. См. раздел 2 для дальнейшей
детализации того, что может случиться при ассемблировании.

Команда "R"

Если исходная программа была проассемблирована без ошибок
и рабочие адреса были определены с помощью директив "ENT", то
может быть использована команда R для выполнения объектной про-
граммы. Объектная программа может использовать инструкцию RET
(С9) для возврата в редактор сколько угодно раз если стек в конце
выполнения программы будет таким же каким он был в ее начале.
Заметим, что директива "ENT" не будет действовать, если для ассем-
блирования использовался ключ 16.

Прерывания перед вводом кода разрешены и регистр IY загру-
жен значениями 5СЗА, важным для подпрограммы обслуживания
прерываний SPECTRUM ROM.

3.2.6. Другие команды

Команда "В"

Просто возвращает управление операционной системе. Для пе-
резапуска ассемблера используйте

RANDOMIZE USR ХХХХХ,

где: ХХХХХ - адрес, с которого был загружен GENS4.

Команда "С"

Позволяет вам изменить размер входного буфера и буфера мак-
роопределений (только для версий DEVPAC на магнитной ленте).

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

Буфер макроопределений используется для хранения текста
макроопределений, которые вы могли использовать.

Команда "С" печатает подсказку на ввод размера входного бу-
фера, а затем - на ввод размера буфера макроопределений. В обоих
случаях вводить надо просто число десятичное байтов, которое вы
желаете зарезервировать, и <ENTER>. Если вы нажали <ENTER>
без ввода числа, то операция игнорируется. Определяемый вами раз-
мер входного буфера не должен быть менее 256 байт. Вы можете
прервать команду с помощью <CAPS SHIFT> 1.

Отметим, что для дисковых версий DEVPAC 4, вы можете ме-
нять только размер буфера макроопределений.

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

Команда'^, , D"

Эта команда позволяет вам изменить символ-разделитель аргу-
ментов в командной строке. На входе редактора таким разделителем
является запятая, это может быть изменено с помощью команды "S"
на первый символ определяющей строки "D".

Помните, что однажды определив новый разделитель, вы долж-
ны его использовать до тех пор, пока не определите новый - даже
внутри команды "S". Заметьте, что разделителем не может быть
пробел.

Команда "UN"

Позволяет установить верхнюю границу памяти равной N. Если
N не указать (т.е. ввести только U и <ENTER>), то отображается
текущая верхняя граница памяти.

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

По умолчанию верхняя граница памяти принимается равной
вершине стека памяти системы SPECTRUM.

Команда "Vм

Выдает на дисплей полезную информацию: значение парамет-
ров команды N1 и N2 по умолчанию; символ-разделитель команды
по умолчанию: десятичное значение начала и конца текста и значе-
ние первой командной строки S1.

Команда "WN, М"

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

Команда "XN"

Выдает каталог диска. В версии с 51-м символом перед выдачей
каталога происходит очистка экрана. Каталог всегда распечатывает-
ся в строку из 32-х позиций.

Команда "Z"

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

Кроме быстрого уничтожения командой D1, 32767 команд "Z"
позволяет вам очистить ваш текстовый файл, если он каким-либо
образом был испорчен.

Команда "Z" устраняет необходимость для стартовой точки вхо-
да GENS4.

Команда "Н"

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

3.3. Пример использования редактора

Предположим, что вы ввели следующую программу (используя
110,10):

10 *Н 16 BIT RANDOM NUMBERS

30 ;INPUT: HL CONTAINS PREVIOUS RANDOM
NUMBER

40 ;OUTPUT: HL CONTAINS NEW RANDON OR SEED
NUMBER

50

60 RANDOM PUSH AF; SAVE REGISTERS

70 PUSH ВС

80 PUSH HL

90 ADD HL, HL; *2

100 ADD HL, HL ; *4

140 ADD HL, HL; *64

150 PIP ВС; OLD RANDOM NUMBER

160 ADD HL, DE

170 LD DE, LI

180 ADD HL, DE

190 POP ВС; RESTORE REGISTERS

200 POP AF

210 REY

Эта программа содержит несколько ошибок:

Строка 40: вместо "RANDOM" набрано "RANDON";
Строка 70: PUSH ВС начинается с поля метки;
Строка 150: PIP вместо POP;

Строка 160: требуется комментарий (это не ошибка, а недоста-
ток);

Строка 210: вместо REY должно быть RET.
Также должны быть добавлены две команды ADD HL, HL между
строками 140 и 150. Кроме того, все ссылки на пару регистров DE в
строках 160... 180 должны быть ссылками на ВС.

Для внесения этих исправлений мы должны выполнить следую-
щее:

F40, 40, RANDON, RANDOM <ENTER>
Затем подкоманду "S"

Е70 <ENTER>, затем I (режим вставки), один пробел и

<ENTER><ENTER>

1142, 2<ENTER> 142 ADD HL, HL; *128

144 ADD HL, HL ; *256

<EDIT>

F150, 150, PIP, POP <ENTER>

Затем подкоманду "S"

El60 <ENTER>, затем X, 2 пробела; *257 +L1

<ENTER><ENTER>

El60, 180, DE, ВС <ENTER>

Затем повторное использование подкоманды "S"

Е210 <ENTER> затем 2 пробела, С, Т <ENTER><ENTER>

N10, 10 <ENTER>, чтобы пронумеровать текст.

Рекомендуем вам хорошенько проработать вышеприведенный
пример, используя редактор.

Приложение 1.

Коды ошибок и их значение.

♦ERROR* 1 - ошибка в константе этой строки;

*ERROR*2 - мнемоника не распознана;

*ERROR*3 - утверждение плохо сформировано;

*ERROR*4 - символ определен более 1 раза;

*ERROR*5 - строка содержит неверный символ (т.е. ничего

не значащий в данном случае);

*ERROR*6 - один из операндов в строке - незаконный;

*ERROR*7 - символ в строке является резервной инструкцией;

*ERROR*8 - ошибочная пара регистров;

*ERROR*9 - слишком много регисров в строке;

*ERROR*10 - выражение, которое должно занимать не более

8 бит, занимает больше;

♦ERROR* 11 - неверные инструкции JP (IX+N) и JP (IY+N);

*ERROR*12 - ошибка в директиве ассемблера;

♦ERRORS 13 - незаконная ссылка вперед, т.е. EQU ссылается

на символ, который еще не был определен;

♦ERRORS 14 - деление на ноль;

*ERROR*15 - переполнение в операции умножения;

* ERROR* 16 - вложенное макроопределение;

♦ERROR* 17 - этот идентификатор - не макро;

*ERROR*18 - вложенный макровызов;

*ERROR*19 - вложенный условный оператор.

BAD ORG!- директива ORG работает с адресом, который может
испортить GENS4, текстовый файл или таблицу символов. Управле-
ние возвращается в редактор.

OUT OF TABLE SPACE - появляется во время первого прохода,
если на таблицу символов выделено недостаточно памяти. Управле-
ние возвращается редактору.

BAD MEMORY! - нет места для ввода текста, т.е. конец текста
близок к вершине ОЗУ памяти. Вы должны спасти текущий тексто-
вый файл или его часть.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Письмо №286 - Пермский край, Частинский р-н, с Частые
Дискуссия - DMA vs General Sound.
Hellos - приветы.
Добрый вечер - хочу сообщить, что MECONG BBS сегодня будет работать до утра.
Party - ASCii Demоparty`2001 Results.

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