ГЛАВА 14
НАБОР СИМВОЛОВ
Краткое содержание: CODE, CHR$, POKE, PEEK,USR, BIN.
Буквы, цифры, знаки пунктуации обозначаются символами и образуют
алфавит или набор символов, используемый компьютером. Отдельные
символы называемые знаками, образуют целые слова,, например: PRINT,
STOP и т.д.
Компьютер ZX Spectru. использует 256 символов с кодами от 0 до 255.
Все они приведены в приложении А. Для преобразования из символьной
<(ю|)мы во внутреннюю кодовую и наоборот служат две функции CODE и
CODE применяется к строке символов и возвращает код внутреннего
представления первого символа в строке или 0, если строка пустая.
CHR$ применяется к числу и возвращает один символ, код которого
представлен этим числом.
Следующая программа выводит весь отображаемый символьный набор:
10 FOR А-32 ТО 255: PRINT CHR$ A;: NEXT А
Все эти символы (кроме знака фунта и 'с' в кружочке)-образуют код
ASCII (American Standart Codes for Information Interchange).
Следующие символы не входят в ASCII, но используются в ZX
SPECTRUM.
Первые из них, это 15 чёрно-белых значков, называемых псевдог-
рафическими символами и используемых для изображения рисунков. Их
можно ввести с клавиатуры используя, так называемый, графический режим.
Если Вы нажмёте GRAPHICS (CAPS SHIFT "9"), то курсор изменится на [G].
Теперь цифровые клавиши с 1 по 8 выдают графические символы, обозна-
ченные на клавишах, а если при этом удерживать CAPS SHIFT, то они будут
выдавать инверсные символы, т.е. чёрное становится белым, а белое
чёрным.
Независимо от CAPS SHIFT, клавиша с цифрой 9 обеспечивает Вам
возврат к обычному ([L] - курсор) режиму, а клавиша с цифрой 0 функцию
DELETE.
ГРАФИЧЕСКИЕ СИМВОЛЫ
ГРАФИЧЕСКИЕ СИМВОЛЫ
где: <G> - графическая мод«
где: <G> - графическая мод«
<G> SH - то же, но с удержанием CAPS SHIFT
После графических символов на клавиатуре располагаются символы ал-
фавита от А до U. Графические значения эти клавиш могут определяться
самим пользователем, а затем использоваться в графическом режиме.
Определение графики этих клавиш проиллюстрируем на примере опреде-
ления символа буквы греческого алфавита "Пи".
• 1) каждый символ представляется точками в матрице 8x8, поэтому
мы вначале начертим диаграмму, приведённую на рисунке. Мы
оставим по одной клетке по периметру символа для отделения его
от соседних знаков.
• 2) закрепим данный символ за клавишей "Р", так, чтобы при
нажатии клавиши в графическом режиме выдавался Символ "Пи".
• 3) запрограммируем это изображение. Каждый определяемый
пользователем символ запоминается в памяти восмью знаками, по
одному на каждый ряд. Вы можете записать их используя функцию
BIN с обозначением цифрой 0 чистой точки и 1 закрашенной точки.
BIN 00000000
BIN 00000000
BIN 00000010
BIN 00111100
BIN 01010100
BIN 00010100
BIN 00010100
BIN 00000000
Эти восемь двоичных чисел запоминаются в памяти в восьми ячейках,
каждая из которых имеет свой адрес. Для нашего символа адрес первого из
восьми байтов в группе будет USR "Р". Второй байт имеет адрес USR
иР"+1 и т.д. до USR "Р"+7. USR - функция преобразования строки симво-
лов в адрес первого байта в строке. Строковый аргумент может содержать
единственный символ, который будет обозначать символ, определяемый
пользователем. Имеются и другие применения функции USR с числовым ар-
гументом, но об этом позже. Поясним всё сказанное программой:
10 FOR N-0 ТО 7
20 INPUT ROW: POKE USR "P"+N,ROW
30 NEXT N
Данная программа вводит 8 двоичных чисел, определяющих графику
:им- вола, закрепляемого за клавишей "Р". Оператор РОКЕ записывает дан-
ные непосредственно в память, минуя обычный аппарат BASIC'a. Обратным
оператору РОКЕ является оператор РЕЕК, который служит для отображения
содержимого области памяти, но об этом подробнее будем говорить в гла-
ве 24. Вернёмся к знакам. Мы ещё не поговорили о не напечатанных пер-
вых 32 знаках с кодами от 0 до 31. Это управляющие символы. Они не
отображаются, вместо них на телевизоре отображается знак "?". Назна-
чение этих символов описано в приложении А.Три символа с кодами 6, 8 и
13 имеют специальное назначение при работе с телевизором. CHR$ 6 -
печатает пробел, используемый как запятая в операторе PRINT. PRINT
1;CHR$ 6; 2 даст тот же результат что и оператор: PRINT 1,2 но это не сов-
сем корректное использование, вернее будет сделать:
10 LET A$»"1"+CHR$
5 LET В« BIN 01111100: LET О BIN 00111000:
LET D« BIN 00010000
10 FOR N-l TO 6: READ P$: REM 6 pieces
20 FOR F-0 TO 7: REM read piece into 8 bytes
30 READ A: POKE USR P$+F,A
40 NEXT F
50 NEXT N
100 REM *BISHOP*
110 DATA HB",0,D, BIN 00101000, BIN 01000100
120 DATA BIN 01101100,C,B,0
130 REM ♦KING»
140 DATA "KM,0,D,C,D
150 DATA C, BIN 01000100,C,0
160 REM •ROOK»
170 DATA "R",0, BIN 01010100,В,С
180 DATA C,B,B,0
190 REM ♦QUEEN»
200 DATA^Q",0, BIN 01010100, BIN 00101000,D
210 DATA BIN 01101100,B,B,0
220 REM *PAWN*
230 DATA"P",0,0,D,C
240 DATA C,D,B,0
250 REM ♦KNIGHT*
260 DATA "N",0,D,C, BIN 01111000
270 DATA BIN 000 H000,C,B,0