Глава 14
Набор символов
Краткое содержание: CODE, CURB, ROKEPEEK, USR, BIN.
Буквы, цифры, знаки пунктуации обозначаются символами и обра-
зуют алфавит или набор символов, используемый компьютером. От-
дельные символы, называемые знаками, образуют целые слова, напри-
мер: PRINT, STOP и т.д.
Компьютер ZX SPECTRUM использует 256 символов, с колами от 0
до 255. Все они приведены в приложении Л. Для преобразования из
символьной формы во внутреннюю кодовую и наоборот служат две
функции CODE и CHRS.
CODE применяется к строке символов и возвращает код внутренне-
го представления первого символа в строке или 0, если строка
пустая.
CHRS применяется к числу и возвращает одни символ, код которо-
го представлен этим числом.
Следующая программа выводит весь отображаемый символьный набор:
10 FOR А*32 ТО 255: PRINT CHRS A; NEXT А
Все эти символы (кроме знака фунта и "С" в кружочке) образуют
код ASCII (AMERICAN STANDART CODES FOR INFORMATION INTERCHANGE).
Следующие символы не входят в ASCII, но используются в ZX
SPECTRUM, первые из них это 15 черно-белых значков, называемых
графическими символами и используемых для изображения рисунков.
Их можно ввести с клавиатуры используя, так называемый, графи-
ческий режим. Если вы нажмете GRAPHICS (CAPS SHIFT 9), то курсор
изменится на <G>. Теперь цифровые клавиши с 1 по 8 выдают графи-
ческие символы, обозначенные на клавишах, а если при этом удержи-
вать SHIFT, то они будут выдавать инверсные символы, т.е. черное
становится белым, а белое черным.
Независимо от SHIFT, клавиша с цифрой 9 обеспечивает вам возв-
рат к обычному (< L>-Kypcop) режиму, а клавиша 0 функцию DELETE.
После графических символов на клавиатуре располагаются символы
алфавита от а до 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
USR -функция преобразования строки символов в адрес первого
байта в ст. РОКЕ. Строковый аргумент может содержать единственным
еямвол, который будет обозначать символ, определяемый пользова!е-
лем. Имеются и другие применения функции USR с числовым аргумен-
том, но об этом позже.
Поясним все сказанное программой:
10 FOR N«0 ТО 7
20 INPUT ROW; POKE USR"P"+N, ROW
30 NEXT N
Данная программа вводит 8 двоичных чисел, определяющих графику
символа, закрепляемого за клавишей НРИ .
Оператор "РОКЕн записывает данные иепосредствеиио в память,
минуя обычный аппарат бейсика. Обратным оператору "PQkEM является
онератор "реек", который служит для отображения содержимого об-
ласти памяти, но об этом в главе 24.
Вернемся к знакам, мы еще не поговорили о ие напечатанных пер-
вых 32 знаках с кодами от 0 до 32. Это управляющие символы. Они
не отображаются, вместо них иа телевизоре отображается знак "7",
назначение этих символов описано в приложении А.
Три символа с кодами 6,8 и 13 имеют специальное назначение при
работе с телевизором.
CHR* 6 печатает пробел, используемый как запятая в операторе
PRINT-
PRINT 1; CHR* 6; 2
даст результат что и оператор:
PRINT 1,2
но это ие совсем корректное использование, вернее будет сделать
10 LET A*«Mr'+CHRS 6+ "2"
20 PRINT AS
CHR* 8 - символ забоя, обеспечивает возврат на одну позицию
назад, оператор
PRINT "1234м; CHRS 8; "5м
даст строку: "1235"
CHRS 13 -перевод строки, продолжает вывод с новой строки.
Телевизором также используются символы с кодами 16 и 23. но об
этом поговорим в главах 15,16.
Все символы расположены в кодовой таблице в алфавитном порядке
по возрастанию кодов, причем все прописные буквы располагаются
после заглавных, так, что "А" следует после "Z".
CHRS 3 + "ZOOLOGI С AL GARDENS"
CHR* 8 + "AARDVARK HUNTING"
" (PARENTHETICAL REMARK) "
"100"
"129.95 INC. VAT"
"AASVOGEL"
"AARDVARK"
"PRINT"
"ZOO"
"[INTERPOLATION]"
"AARDVARK"
"AASVOGEL"
"ZOO"
"ZOOLOGY"
Существует правило, по которому сортируются две строки. Снача-
ла сравниваются первые символы, если оии различаются, то строка,
содержащая символ с меньшим кодом является "меньшей", а если рав-
ны, то выбирается для сравнения следующая пара символов. Так до
тех пор, пока встречаются несовпадающие символы, либо пока одна
из строк не кончится, она будет и меньшей, в противном случае
строки считаются равными.
Отношения <, >, <=, >s, <> применяются к строкам символов
так же, как и к числам: знак "<"- находится впереди в кодовой
таблице", а ">"- находится позади. Так, что выражения
"AAMAN" < "AARDVARK"
"AARDVARK" > "AAMAN"
оба истинны.
Для иллюстрации всего сказанного приведем программу, которая
вводит две строки, а затем выводит их в упорядоченном виде.
10 INPUT "TYPE IN TWO STRING", AS, BS
20 IF AS>BS THEN LET CS*AS: LET AS*BS: LET BS*CS
30 PRINT AS; " ";
4 0 IF AS<B* THEN PRINT "<";: GO TO 6 0
50 PRINT "="
60 PRINT " "; BS
70 GO TO 10
Следующая программа закрепляет определенные пользователем сим-
волы для игры в шахматы за клавишами:
Р- ЗА ПЕШКОЙ; (POWN)
R- ЗА ЛАДЬЕЙ; (ROCK)
N- ЗА КОНЕМ; (KNIGHT)
В- ЗА СЛОНОМ; (BISHOP)
К- ЗА КОРОЛЕМ; (KING)
Q- ЗА КОРОЛЕВОЙ; (QUEEN)
5 LET B»BIN 01111100: LET S = BIN 00111000:
LET DsВI N 00010000
10 FOR N«1 TO 6: READ PS: REM 6 PIECES
20 FOR F«0 TO 7: REM READ PIECES INTO 8 BYTES
30 READ A: POKE USR P*+l, A
40 NEXT F
50 NEXT N
100 REM BISHOP
110 DATA "B"(0, D, BIN 00101999, BIN 01000100
120 DATA BIN 01101100, С, B,0
130 REM KING
140 DATA HK",0, D, C, D
150 DATA C, BIN 01000100, C,0
160 REM ROOK
170 DATA "R",0, BIN 01010100, В, С
180 DATA С, B, B,0
190 REM QUEEN
200 DATA "Q",0, BIN 01010100, BIN 00101000, D
210 DATA BIN 001101100, B, B,0
220 REM POWN
230 DATA "P",0,0, D, С
240 DATA C, D, B,0
250 REM KNIGHT
260 DATA nN",0, D, C, BIN 01111000
270 DATA BIN 00011000, C, B,0