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

Руководство по программированию на языке Бейсик - введение. Клавиатура. Экран монитора. Ввод программы.


7. ПОЛНОЕ РУКОВОДСТВО ПО
ПРОГРАММИРОВАНИЮ НА ЯЗЫКЕ БЕЙСИК

7.1. ВВЕДЕНИЕ

В обоих случаях, прочли ли Вы сначала главу 6 или непосредственно перешли к
чтению настоящей главы, Вы дожны помнить, что:

- КОМАНДЫ выполняются сразу после ввода;

- ИНСТРУКЦИИ начинаются с номера строки и запоминаются для дальнейшего
использования.

Настоящее руководство по языку Бейсик начинается с повторения некоторых
сведений, изложенных в главе 6 (Использование языка Бейсик-128), но более
детально, с изложением точных сведений о том, что Вам надо сделать. Вы также
найдете несколько упражнений в конце некоторых разделов. Но не пропускайте *.х,
поскольку многие из них иллюстрируют аспекты, намёки на которые содержался в
тексте. Просмотрите эти упражнения и выполните те из них, которые Вас
заинтересуют или покажутся Вам пояснениями к тем вопросам, которые Вы
недостаточно ясно поняли в тексте. Что бы Вы ни изучали далее с помощью настоящего
руководства, используйте Ваш компьютер "Спектрум 128К".

7.2. КЛАВИАТУРА

Символы, которые используются компьютером "Спектрум 128К" состоят не только
из одиночных символов (букв, цифр и т.д.), но и из составных переговорных символов
(ключевых слов, имен функций и т.д.). Любая информация должна вводиться
полностью, и в большинстве случаев не имеет значения, используются ли заглавные
буквы (ВЕРХНИЙ РЕГИСТР) или строчные буквы (НИЖНИЙ РЕГИСТР). На
клавиатуре выделяется три вида клавиш: буквенные и цифровые (алфавитно-
цифровые), символьные (знаки пунктуации) и управляющие (такие, как клавиши
[CAPS SHIFT], [DELETE] и др.):

2 - преобразовано видео (INV VIDEO);

4 - удаление (DELETE);

6 - расширенный режим
(EXTEND MODE) ;

8 - ввод (ENTER);

10 - запрет регистра (CAPS LOCK);

12 - пробел (SPACE).

Наиболее часто используемыми в языке Бейсик являются алфавитно-цифровые
клавиши. Когда нажимается буквенная клавиша, на экране появляется
соответствующая строчная буква с мигающим сине-белым квадратом, называющимся
курсором. Для того, чтобы получить заглавную букву, в момент ввода буквенного
символа должна удерживаться в нажатом состоянии клавиша [CAPS SHIFT].

Если Вы хотите непрерывно вводить заглавные буквы, то с помощью однократного
нажатия клавиши [CAPS LOCK] все последующие буквы будут вводиться как
заглавные. Для возврата к строчным буквам просто снова нажмите клавишу [CAPS
LOCK].

Для ввода символов, которые присутствуют на алфавитно-цифровых клавишах,
т.е. символов:

!©#%&'<)_<>- + -:/*

и т.п.

просто удерживайте нажатой клавишу [SYMB SHIFT] при нажатии той клавиши,
которой соответствует требуемый символ.

Доступные символы при использовании клавиши [SYMB SHIFT]:

I - истинно видео (TRUE VIDEO);
3 - прерывание (BREAK) ;

5 - графика (GRAPH);

7 - редактирование (EDIT);
9 - сдвиг регистра (CAPS SHIFT);

II - сдвиг символа (SYMB SHIFT);

где:

1 - сдвиг символа [SYMB SI IIFT].

Кроме того, символы [ ] могут быть получены путем нажатия клавиши [EXTEND
MODE] (расширенный режим) один раз, затем нажатия и удержания нажатой
клавиши [SYMB SHIFT] и одновременного нажатия соответствующей алфавитно-
цифровой клавиши.

Доступные символы при использовании клавиши [SYMB SHIFT] в режиме
[EXTEND MODE]:

где:

1 - расширенный режим (EXTEND M©DE);

2 - сдвиг символа (SYMB SHIFT).

Для входа в графический режим один раз нажимается клавиша [GRAPH]
(графика). Мозаичная графика может быть получена при нажатии цифровых клавиш
(за исключением клавиш 9 и 0). Совместное использование клавиши [CAPS SHIFT]
и цифровых клавиш обеспечивает инвертированную мозаичную графику. Нажатие
буквенных клавиш (за исключением букв Т, U, W, X, Y и Z) обеспечивает графику,
определённую пользователем.

Мозаичная графика при использовании клавиши [GRAPH]:

где:

1 - выключение графического режима (GRAPHICS MODE OFF) ;

2- графика (GRAPH).

Если любая клавиша удерживается в нажатом состоянии более 2-3 секунд, то она
воспринимается как нажатая повторно. По мере нажатия клавиш на экране будет
построена ЛИНИЯ. Линия означает строку языка Бейсик и легко может занимать
несколько строк экрана. Клавиши перемещения курсора могут использоваться для
перемещения вдоль линии, и если часть линии, к которой перемещается курсор,
находится вне кадра экрана, то текст на экране будет свёрнут или развёрнут так, чтобы
линия могла бы быть видна на экране целиком. Любые введенные символы будут
вставлены в позицию курсора, а нажатие клавиши [DELETE] (удаление) приводит
к стиранию символа, расположенного слева от курсора. Как только будет нажата
клавиша [ENTER] (ввод) или будет предпринята попытка переместить курсор за
пределы линии, компьютер "Спектрум 128К" проверяет, имеет ли линия значение.
Если линия имеет значение, то компьютер выдает высокочастотный гудок, и строка
либо немедленно выполняется, либо запоминается как часть программы. Если строка
содержит ошибку, то компьютер "Спектрум 128К" генерирует низкочастотный гудок
и перемещает курсор в область, в которой, по мнению компьютера, находится ошибка
(цвет курсора также изменяется на красный для обозначения ошибки). Невозможно
сдвинуть строку, которая содержит ошибку - компьютер "Спектрум 128К" всегда
возвратит курсор назад.

7.3. ЭКРАН МОНИТОРА

11а экране отображаются одновременно 24 строки по 32 символа в каждой. Верхняя
часть экрана, 22 строки показывает текст программы и чаще всего используется для
редактирования. При достижении последней строки экрана происходит сдвиг на одну
строку вверх (SCROLL). Если в верхней строке размещался текст, то на экране
возникает вопрос:

scroll? (Свертывать ?)

При нажатии любой клавиши, кроме N, [BREAK] или пробела происходит сдвиг
экрана, если же нажимаются указанные выше клавиши, то появляется сообщение:

D BREAK - cont repeats

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

7.4. ВВОД ПРОГРАММЫ

При вводе может быть показана любая часть программы командой

LIST ххх

где 'ххх' номер строки.

При выполнении команды или программы её результат показывается в верхней
части экрана.

Другой способ выбора 48 BASIC - набор команды: 232/ MIDI, программы
результаты сохраняются на экране до нажатия клавиши.

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

Если во время выполнения программы нажать на [BREAK], то выполнение
прерывается. В этом случае программа может быть отредактирована.

Ввод программы возможен с произвольным порядком строк, т.е. сначала можно
ввести строку 20, а затем строку 10. Па экране они расположатся в порядке
возрастания номеров.

При редактировании можно переписать строку заново, но проще подвести курсор
к нужному месту, внести исправления, нажать [ENTER].

Пуск программы происходит по команде RUN.

Для уничтожения строки достаточно набрать её номер. При наборе номера не
существующей строки курсор перемещается в то место, где она должна быть в тексте
программы.

Для демонстрации текста программы наберите:
LIST [ENTER]

Перенумерация строк возможна при нажатии [EDIT] и выборе из меню
'RENUMBER'.

Команда NEW уничтожает программу и все переменные.

При ошибке в работе программы, например при ошибке ввода данных появляется
сообщение STOP, а при нажатии [ENTER]

Н STOP IN LINE 40:1,

что означает причину остановки, номер строки и номер инструкции в строке где
произошла остановка. Если вы хотите продолжить работу, наберите CONTINUE.

Если вы использовали в программе инструкцию перехода к несуществующей
строке (GO ТО 31 ),то выполнится переход к следующей за ней существующей сгроке
(напр. 40). То же касается команды RUN.

В команде PRINT используются различные символы, следующие после параметра:
INT

так PRINT Г, - занятая указывает, что вывод переменной на экран производится
либо с крайней левой позиции, либо с середины экрана;

PRINT Г; - точка с запятой означает, что вывод будет произведен сразу после
предыдущего и на той же строке экрана.

PRINT F' или PRINT F - вывод производится с новой строки экрана.

л

Двоеточие применяется для разделения команд в одной строке:

PRINT F: GO TO 40

Возможна инструкция RUN 100, в отличие от GO ТО 100 происходит не только
переход к строке программы 100, но и очистка экрана и всех переменных. RUN можно
давать без номера строки, что будет воспринято как RUN 0, a GO ТО всегда требует
указания номера строки.

CLS, IF, STOP

Рассмотрим программу:

10 INPUT "ENTER A SECRET NUMBER", A:CLS

20 INPUT "GUESS THE NUMBER",В

30 IF B-A THEN PRINT "THAT IS CORRECT":STOP

40 IF B<A THEN PRINT "THAT IS TOO SMALL, TRY AGAIN"

50 IF B>A THEN PRINT "THAT IS TOO BIG, TRY AGAIN"

60 GO TO 20

CLS в строке 10 стирает экран,а оператор IF имеет форму:

IF условие THEN ххх
Если условие истинно, то выполняются все команды разделенные V, следующие
за THEN. В противном случае команды игнорируются.

Следующие операторы используются для сравнения числовых и строчных
переменных. Строчные переменные сравниваются по отношению к алфавитному
порядку.

- - равно
> - больше

<- - меньше или равно
>— - больше или равно
<> - не равно

По команде STOP внизу экрана возникает сообщение:

9 STOP STATEMENT, 30:3
В некоторых версиях BASIC возможен формат:

IF условие THEN номер строки.
Но чаще возможно только:

IF условие THEN GO ТО номер строки.

ЦИКЛЫ
FOR, NEXT, ТО, STEP

/

Для организации циклов существует специальная команда

FOR ... NEXT
Наиболее общая форма команды:

FOR контрольная переменная - начальное значение ТО конечное значение STEP
значение шага

FOR C-I ТО 5 STEP 3/2
Во время выполнения цикла контрольная переменная будет увеличиваться на 3/2
с каждым шагом, шаг может быть также задан переменной - STEP S, и будет с каждым

шагом принимать значения этой переменной. Значения шага могут быть
отрицательные.

Циклы могут быть вложены друг в друга, но они не должны пересекаться.

10 FOR М-0 ТО 6

20 FOR N-=0 ТОМ

30 PRINT М; ":";N;"

40 NEXT NM; ":";N;"

50 PRINT NM; ":";N;M

60 NEXT MM; ":";N;" ";

Цикл может быть записан в строку и в непосредственном режиме:

FOR М-0 ТО 10:PRINT M:NEXT М

Можно организовать бесконечный цикл:

FOR М-0 ТО 1 STEP 0:INPUT A:PRINT A:NEXT

ПОДПРОГРАММЫ
GO SUB, RETURN

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

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

Когда команда RETURN считывается в конце подпрограммы,то происходит
возврат в место вызова, и выполнение продолжается со следующей за GO SUB
команды.

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

ДАННЫЕ В ПРОГРАММЕ

READ, DATA, RESTORE

Вводить данные в программу можно не только при помощи команды INPUT, но
также при помощи команд READ, DATA, RESTORE. Например:

10 READ А,В,С

20 PRINT А,В,С

30 DATA А,В,С

За READ может следовать список переменных, разделённых запятыми,
выполнение такое же как при INPUT с той разницей, что значения берутся из строки,
начинающейся с DATA.

DATA представляет собой список числовых или строковых значений, разделенных
запятыми, которые могут располагаться в любом месте программы. READ считывает
последовательно эти значения, если данных не хватает генерируется сообщение об
ошибке. Последовательный порядок считывания данных может быть изменен
командой:

RESTORE xxx,
где xxx номер строки с которой начинается считывание.

СТРОКИ

Существует возможность выделения из строк их частей, в общей форме:

строковое выражение (начало ТО конец)
Например:

"ABCDEF"(2 ТО 5)
Результат: "BCDE"

Можно опускать один или оба параметра
"ABCDEF" (ТО 5) -> "ABCDE"
"ABCDEF" (ТО) -> "ABCDEF"
"ABCDEF"О -> "ABCDEF"
"ABCDEF"(3) -> "ABCDEF"(3 TO 3) -> "C"
Если первый параметр превышает длину строки, то результатом является пустая
строка и появляется сообщение об ошибке:

3 SUBSCRIPT WRONG.
Для извлечения части строки из выражений нужны скобки:

("ABC"+"DEF") (1 ТО 2) - "АВ"

ФУНКЦИИ

Функции действуют следующим образом:
передача аргумента -> функция -> выдача результата

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

PRINT LEN "SPECTRUM 128"
LEN "FRED"+LEN "BLOGGS" то же, что и LEN CFRED'+'BLOGGS"). Результат
равен 10.

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

LET A$-STR$ 1Е2 то же, что и LET А$-"100"
VAL обратная функция, она превращает строку в число:

VAL "3.5"

Принимает значение равное числу 3.5.

Параметром функции VAL может быть любое выражение:

VAL ("2*3")
Значение равно 6.

Функция SGN определяет знак выражения:
если выражение > 0, функция равна +1;
если выражение < 0, функция равна -1;
если выражение - 0, функция равна 0.

Функция ABS принимает абсолютное значение выражения:

ABS -3.2 Равно 3.2
Функция INT принимает значение целой части выражения:

INT 3.2 Равно 3,
INT-3.2 Равно 4

Функция SQR вычисляет квадратный корень. Если аргумент-отрицательное
число то

появляется сообщение об ошибке:

A INVALID ARGUMENT.

Вы можете определять и использовать собственные функции:

10DEF FNS(X)-X*X

где S имя функции, а X передаваемый параметр.

Вызов функции происходит по команде FN S(...):
PRINT FN S(3+4)

SPECTRUM BASIC не имеет функций некоторых других версий LEFT$, RIGIIT$,
M1D$, TL$, но их легко сделать при помощи DEF FN.

DEF FN l$(A$,N)-A$(TO N): REM LEFTS

СЛУЧАЙНЫЕ ЧИСЛА
RND, RANDOMIZE

RND напоминает функцию, но не требует параметров. Выдает псевдослучайную
последовательность чисел в интервале от 0 до 1.

5*RND дает числа от 0 до 5.

RANDOMIZE используется для указания начального числа псевдослучайной
последовательности.RANDOMIZE 1 означает,что псевдослучайная
последовательность начинается с числа 0.0227335596. Параметры MOiyr быть в
пределах от 1 до 65535.

МАССИВЫ

Обратите внимание, что управление строковыми массивами SPECTRUM 128 не
совсем стандартное.

Перед использованием массивы требуют объявления:

DIM М (10) где М - имя массива, а 10 его размер. Команда DIM, инициализирующая
массив, присваивает всем его элементам значение 0.

Можно организовать более чем одноразмерные массивы:
DIM М(3,6)

Строковые массивы требуют указания не только количества элементов, но и длины
строк:

DIM А$(3,6) где первый параметр - количество строк, а второй длина каждой из
них.

PRINT А$(2,7) печатает на экран 7-ой символ 3-й строки.

DIM AS(10) образует строку длиной 10 символов.

УСЛОВИЯ

В командах IF условие THEN можно использовать также логические операторы
AND, OR, NOT.

IF A$-"YES" AND XO THEN PRINT X

AND означает, что выражение истинно, если обе части его истинны.

Выражение, связанное оператором OR истинно, если по крайней мере один из
элементов или оба вместе истинны.

NOT реверсирует отношение,т.е. истинно, если ложно и ложно если истинно. NOT
является функцией с аргументом и результатом, но с приоритетом низшим чем у
других функций, поэтому скобки можно не употреблять если аргумент не содержит
AND или OR.

NOT А-В означает А<>В

Истина и ложь имеют числовые значения: истина - 1, ложь - 0.

РАСПОЛОЖЕНИЕ СИМВОЛОВ

CODE, CHR$, POKE, PEEK, USR, BIN

В SPECTRUM 128 существует таблица символов, которые кодируются числами от
0 до 255. Перевод символов в коды и наоборот возможен при помощи функций CODE
и CIIR$. Параметром функции CODE является строка, а результатом является код
первого символа.

Параметром функции CIIR$ является код, а результатом строка из одного сим вола,
соответствующего этому коду.

Следующая программа распечатывает на экране все символы:

10 FOR А-32 ТО 255: PRINT CIIR A:: NEXT А

Символы со 128 по 134 являются символами мозаичной графики и используются
в режиме [GRAPH],печатаются с нажатием на клавиши 1,2,3,4,5,6,7,8 и на те же
клавиши с [CAPS SHIFT].

Нажатие на [9] - выход из графического режима,так же,как и вторичное нажатие
на [GRAPH].

После графических символов располагается копия алфавита от А до S, которые
можно переопределить самостоятельно, тогда они могут вызываться с клавиатуры в
графическом режиме с нажатием на соответствующие клавиши.

Символы состоят из таблицы точек 8x8, которые либо светлые, либо темные. ^Для
кодирования их изображения, следовательно требуется 8 байт. Так символ,
напоминающий греческую букву ПИ, можно записать как восемь двоичных чисел:

BIN 00000000 - верхний ряд
BIN 00000000 - верхний ряд
BIN 00000010 - верхний ряд
BIN 00111100 - верхний ряд
BIN 01010100 - верхний ряд
BIN 00010100 - верхний ряд
BIN 00000000 - нижний ряд
BIN 00000000 - нижний ряд

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

Адрес первого ряда этого символа можно получить при помощи функции USR
"РР"+7

Т.о. USR - функция, конвертирующая строковый аргумент адрес первого байта
графического изображения символа,определяемого пользователем.Следующая
программа переопределяет изображение символа "Р".

10 FORN-OTO7

20 READ ROW: POKE USR "P"+N, ROW"

30 NEXT N

40 DATA BIN 00000000

110 DATA BIN 00000000

110 DATA BIN 00000000

В качестве данных подставляются бинарные числа, которыми кодируется
изображение, как показано выше.

Команда РОКЕ сохраняет числа непосредственно в памяти по адресу, указанному
USR.Обратная функция РЕЕК принимает значение байта по указанному в качестве
аргумента абсолютному адресу памяти.

После определяемых символов идут коды ключевых слов (TOKENS)

С 0 по 31 располагаются управляющие коды. Так CIIR$8 сдвигает курсор назад на
одну позицию. Код 13 (CIIR$13) перемещает курсор в начало новой строки экрана.
Для управления экраном используются также коды 16-23.

ЦВЕТА

INK, PAPER. FLASH, BRIGHT, INVERSE. OVER. BORDER

Вы можете управлять восемью цветами и двумя уровнями яркости, цвета имеют
следующие номера:

0

черный

4

зеленый |

1

синий

5

голубой

2

красный

6

желтый

3

малиновый

7

белый

Возможны также инверсия фона и текста и мигание.

Для управления цветами существуют следующие команды:

PAPER - цвет фона - число 0-7
INK - цвет шрифта - число 0-7
BRIGHT- яркость - число 0/10-7
FLASH - мигание 0/1
С командами PAPER и INK возможен параметр 9, означающий контрастирование,
т.е. со светлыми цветами - черный, а с темными - белый.

Существуют также команды INVERSE и OVER с параметрами:

0 - выключить

1 - включить

Так INVERSE 1 приводит к печати инверсированным цветом, OVER 1 вызывает
наложение символов друг на друга:

10 OVER 1

20 PRINT "W";CHR$ 8;" в результате чего происходит подчеркивание символа
Т.

Команды INK и PAPER можно вставлять в команду PRINT

PRINT PAPER 6;"XH;:PRINT "Y". В данном случае только "Xй будет печататься на
желтом фоне.

BORDER номер цвета - меняет цвет нижнего экрана.
Цвета можно менять при помощи управляющих кодов:

iMi
16

тжШШ*ж4

INK

тттШ$шЩ

19

ШШжЙттШт

BRIGHT

17

PAPER

20

INVERSER

18

FLASH

21

OVER

Функция ATTR имеет форму:

ATTR (строка, колонка)

Число, которое получается в результате, является суммой четырех чисел:

128 если символ мигает, 0 - если нет;

64 если символ яркий, 0 - если нормальный;

8 умноженное на код цвета фона;

1 умноженное на код цвета шрифта.

ГРАФИКА

PLOT, DRAW, CIRCLE

Команда PLOT Х-координата, Y-координата ставит точку на экране. Следующая
программа ставит точки на экране по случайным координатам:

10 PLOTINT (RND*256), INT (RNDM76); INPUT A$: GOTO
10

Команда DRAW X,Y предназначена для рисования прямых линий.

Первой точкой является последняя точка предыдущей команды графики: PLOT,
DRAW или CIRCLE. Команды RUN, CLEAR,CLS и NEW перемещают эту точку в
нижний левый угол (0,0).

Команды PAPER, INK, FLASH, BRIGHT, INVERS и OVER могут применяться с
PLOT или DRAW между ключевым словом координатами.

При помощи DRAW X,Y,A можно рисовать элементы окружности,так как третий
параметр определяет угол поворота,а X и Y - координаты. А - число в радианах, если
оно положительное,то поворот налево,если отрицательное - поворот направо. Полная
окружность получается, если А-2*Р1.

Команда CIRCLE Х,У,радиус - чертит полный круг,управление цветом такое же
как и в предыдущих командах.

PAUSE, INKEY, PLAY

Команда PAUSE N останавливает компьютер. Значение может быть от 0 до 65535,
около 22 минут максимум, если N=0,to пауза длится бесконечно. Пауза может быть
прервана нажатием на клавишу.

Для измерения времени может быть использовано следующее:

(65536*РЕЕК 23674"Спектрум 128К"56*РЕЕК 23673+РЕЕК 23672)/50

Это выражение дает количество секунд с момента последнего включения
компьютера или последнего RESET.Точность внутренних часов около 0.01%,
Использование команды ВЕЕР или переферийных устройств останавливает на время
внутренние часы.

Можно поставить внутренние часы в реальное время,достаточно записать в три
ячейки памяти число секунд *50.

Так время 10.00 Будет иметь форму 1800000 пятидесятых секунды.

1800000-65536*27+119+64 Т.о. в ячейки следует записать числа 27, 119, 64

РОКЕ 23674,27:РОКЕ 23673,119:РОКЕ 23672,6464

Функция INKEY$ не имеет аргументов, а считывает символ с клавиатуры, если
клавиша не нажимается. Результатом функции является пустая строка.

10 IF INKEY$-"TIIEN GO ТО 10

20 PRINT INKEYS




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Обмен опытом - отчет SerzhSoft'a о региональной олимпиаде 98 года по информатике.
От редакции - Hа днях получил от Nemo бандеpольку с General Sound и ПО к ней.
Реклама - Реклама и объявления ...
Пресса - Размышления на тему электронных изданий.
DIY - Схема анализатора состояния TTL вывода.

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