Набор символов ZX Spectrum является вариантом ASCII, используемым в британском семействе Sinclair ZX Spectrum компьютеры. Он основан на ASCII-1967, но символы ^, `и DEL
заменены на ↑, £ и ©. Он также отличается использованием управляющих кодов C0, отличных от общих BS
и CR
, и использует 128 символов старшего разряда за пределами диапазона ASCII. Основной набор печатных символов и системный шрифт ZX Spectrum также используются компьютером Jupiter Ace.
Standard US-ASCII, 0x20–0x7F, включен в набор символов Spectrum, за исключением того, что кодовая точка 0x5E представляет собой стрелку вверх (↑) вместо каретки (^), 0x60 - знак фунта (£) вместо серьезного ударения (`), а 0x7F - знак авторского права (©) вместо управляющего символа DEL
. Обратите внимание, что использование 0x5E как ↑ также имело место в более старой версии ASCII 1963 года. Знак £ не был сопоставлен с 0x23, как в британском варианте ASCII (ISO-646-GB ), позволяя одновременно использовать знак фунта и числовой знак (#). Символ ↑ - это оператор возведения в степень в Spectrum BASIC, точно так же, как ^, который он заменяет по сравнению с ASCII-1967, используется для возведения в степень во многих других диалектах BASIC и других языков программирования.
За пределами 0x7F набор символов Spectrum использует диапазон старших битов 0x80–0xFF для специальных целей. 0x80–0x8F содержат те же символы 2 × 2 блочной графики, что и набор символов ZX80 и набор символов ZX81 (в других местах), также доступные в Элементы блока Блок Unicode. Однако стандартный набор символов ZX Spectrum не включает символы блочной графики ZX80 / 81 50% с псевдонимом 1 × 2. Кодовые точки 0x90–0xA4 содержат первоначально 21 символ пользовательской графики (UDG), а 0xA5–0xFF содержат ключевые слова BASIC, обозначенные как отдельные кодовые точки. В режиме 128 BASIC, представленном позже, это было изменено на 19 символов UDG, оканчивающихся на 0xA2, за которыми следуют два новых токена SPECTRUM
и PLAY
. Кодовые точки 0xC7–0xC9 - это двухсимвольные операторы <=
, >=
и <>
, аналогично размеченные на отдельные кодовые точки. Эти токены позволяют вводить команду BASIC, такую как PRINT
, одним нажатием клавиши Pв начале строки (то есть в командном режиме), что генерирует 0xF6. Это отображается как полное ключевое слово PRINT
на экране, но сохраняется только однобайтный токен, поэтому интерпретатор должен анализировать только этот один байт или сохранять / загружать из внешнего хранилища, такого как лента.
Все символы, не относящиеся к UDG Spectrum, могут быть отображены в Unicode. Три символа, отличных от ASCII-1967, ↑, £ и © находятся в U + 2191, U + 00A3 и U + 00A9. Символы блочной графики 2 × 2 находятся в блоке Block Elements по адресу U + 2580 – U + 259F, хотя поддержка шрифтов для последнего не является универсальной.
Форма символов UDG отображается в область памяти RAM и инициализируется копиями символов AU, но может быть произвольно переопределена, например, с помощью команды BASIC ТОЧИТЬ
. Как и все символы системного шрифта, они используют сетку 8 × 8 пикселей, хранящуюся в 8 байтах. Их переопределение изменяет их внешний вид в последующих операторах PRINT
, но не изменяет никаких символов UDG, уже нарисованных на экране. Расположение определения символа UDG можно определить с помощью функции BASIC USR
с символом в качестве аргумента, например USR "A"
для первого. По умолчанию это указывает на последние 168 (21 × 8) байтов ОЗУ по адресам памяти от 65368 (0xFF58) до 65535 (0xFFFF) для спектра 48 КБ. Местоположение указывается системной переменной UDG, которая находится по адресу памяти 23675/6 (0x5C7B / C) и может быть изменена. TK90X, бразильский клон ZX Spectrum, включал в ПЗУ приложение для графического редактирования этих UDG-символов, а также функцию предварительной загрузки, а затем акцентированных букв, используемых в португальском языке. (Для этого в TK90X определены две дополнительные базовые команды с кодами 0 и 1, соответственно, "trace" и "udg")
Определение основного системного шрифта, от 32 (пробел) до 127 (авторское право), ссылаются на системную переменную CHARS, которая находится по адресу памяти 23606/7 (0x5C36 / 7). Он определяется как 256 байт ниже первого байта символа пробела, что упрощает формулу для определения местоположения символа до кодовой точки CHARS + 8 ×. Значение CHARS по умолчанию равно 15360 (0x3C00), с системным шрифтом в конце ПЗУ Spectrum по адресу от 15616 (0x3D00) до 16383 (0x3FFF). Целые альтернативные шрифты могут быть загружены в ОЗУ, и переменная CHARS соответственно изменится.
В области управляющих кодов (диапазон C0) Spectrum в основном использует собственные элементы управления, такие как как ЧЕРНИЛА и БУМАГА для управления цветом переднего плана и фона. Однако общие кодовые точки BS
и CR
такие же, как и в ASCII. Курсор вниз (0x0A, перевод строки ASCII) может быть смоделирован с 32 пробелами, напечатанными с OVER 1 (прозрачное наложение), а перемещение курсора вверх 0x0B (вертикальная табуляция ASCII) может быть имитировано с 32 пробелами назад. Системное ПЗУ имеет ошибку, которая препятствует работе курсора вправо в 0x09 (например, ASCII Horizontal Tabulation).
Управляющий код 0x0E используется, чтобы указать, что следует число с плавающей запятой, для ускорения обработки текста. В программе Sinclair BASIC числовые константы сохраняются в виде ASCII, за которым следует байт 0x0E и 5-байтовое двоичное представление с плавающей запятой. При перечислении программы BASIC используется только часть ASCII, но во время выполнения используется только двоичное представление. Некоторые программы Spectrum использовали это для обфускации чисел, в то время как другие делали это для экономии памяти. Например, строка BASIC, отображаемая как GO TO 10
, может содержать символы ASCII для цифр 1 и 0, за которыми следует байт 0x0E и представление с плавающей запятой 100 вместо 10. Любой, кто перечислял эту программу, видел номер 10, но при выполнении программа перешла на строку 100.
Диапазоны 0x00–0x05, 0x07, 0x0A – 0x0C, 0x0F и 0x17–0x1F не определены. В большинстве случаев при выводе на дисплей будет отображаться вопросительный знак. Однако они могут использоваться для представления их буквальных числовых значений в сочетании с определенными управляющими кодами: например, INK + 0x07 устанавливает цвет чернил (текст переднего плана) на цвет номер 7 (белый).
Набор символов спектра | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0_ нажатие клавиши | 0_ символ | 1_ | 2_ | 3_ | 4_ | 5_ | 6_ | 7_ | 8_ | 9_ | A_ | B_ | C_ | D_ | E_ | F_ | |
_0 | INK | 0 | @ | P | £ | p | (A) | (Q) | VAL | USR | FORMAT | LPRINT | LIST | ||||
_1 | PAPER | ! | 1 | A | Q | a | q | (B) | (R) | LEN | STR $ | MOVE | LLIST | LET | |||
_2 | FLASH | " | 2 | B | R | b | r | (C) | (S) | SIN | CHR $ | СТЕРЕТЬ | СТОП | ПАУЗА | |||
_3 | ЯРКО | # | 3 | C | S | c | s | (D) | (T) | COS | НЕ | ОТКРЫТЬ # | ПРОЧИТАЙТЕ | СЛЕДУЮЩИЙ | |||
_4 | истинное видео | ОБРАТНОЕ | $ | 4 | D | T | d | t | (E) | (U) | TAN | BIN | ЗАКРЫТЬ # | ДАННЫЕ | POKE | ||
_5 | inv video | OVER | % | 5 | E | U | e | u | (F) | RND | ASN | OR | MERGE | RESTORE | |||
_6 | caps lock | запятая | AT | 6 | F | V | f | v | (G) | INKEY $ | ACS | И | ПРОВЕРКА | НОВАЯ | УЧАСТОК | ||
_7 | редактировать | TAB | ' | 7 | G | W | g | w | (H) | PI | ATN | <= | BEEP | BORDER | RUN | ||
_8 | left | left | ( | 8 | H | X | h | x | (I) | FN | LN | >= | CIRCLE | ПРОДОЛЖИТЬ | СОХРАНИТЬ | ||
_9 | справа | справа | ) | 9 | I | Y | i | y | (J) | ТОЧКА | EXP | <> | INK | DIM | RANDOMIZE | ||
_A | вниз | * | : | J | Z | j | z | (K) | SCREEN $ | INT | LINE | P APER | REM | IF | |||
_B | up | + | ; | K | [ | k | { | (L) | ATTR | SQR | THEN | FLASH | FOR | CLS | |||
_C | удалить | , | < | L | \ | l | | | (M) | AT | SGN | TO | BRIGHT | ПЕРЕЙДИТЕ НА | DRAW | |||
_D | введите | введите | - | = | M | ] | m | } | (N) | TAB | ABS | STEP | INVERSE | GO SUB | CLEAR | ||
_E | extend | number | . | > | N | ↑ | n | ~ | (O) | VAL $ | PEEK | DEF FN | OVER | INPUT | RETURN | ||
_F | графика | / | ? | O | _ | o | © | (P) | CODE | IN | CAT | OUT | ЗАГРУЗИТЬ | КОПИРОВАТЬ |