Глава 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" и т.д. до USRUSR -функция преобразования строки символов в адрес первого
байта в ст. РОКЕ. Строковый аргумент может содержать единственным
еямвол, который будет обозначать символ, определяемый пользова!е-
лем. Имеются и другие применения функции USR с числовым аргумен-
том, но об этом позже.Поясним все сказанное программой:
10 FOR N«0 ТО 720 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 ASCHR* 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 0001000010 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 BISHOP110 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 QUEEN200 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

