Связь с администрацией сайта:       

demo

Среди толпы я одинок

3. Как кодируются текст и символы Z-машины

Оглавление

Этот метод аналогичен пятибитному коду Baudot, который был использован вначале телетайпами, прежде чем был изобретен ASCII.
Marc S. Blank и S. W. Galley, как уместить большую программу в небольшой машине
 
3.1 Текст
В Z-машине текст представляет собой последовательность кодов символов ZSCII (ZSCII система аналогична ASCII: см пункт S 3.8 ниже). Эти ZSCII значения кодируются в памяти, используя строку Z-символов. Процесс преобразования между Z-символами и значениями ZSCII дается в пунктах SS 3.2 до 3.7 ниже.
3.2 Алфавиты
Текст в памяти состоит из последовательности 2-байтовых слов. Каждое слово делится на три 5-битовых Z-символов, плюс 1 бит осталось, расположены как
   --первый байт ------- --второй байт ---
   7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
   бит --первый-- --второй --- --третий--
Бит устанавливается только на последнем 2-байтового слова текста, и так отмечается конец.
3.2.1
Есть три вида "алфавита", A0 (нижний регистр), A1 (в верхнем регистре) и А2 (знаки препинания), а также во время печати один из них в любой момент времени. Первоначально А0 - текущий. Значение Z-символа может зависеть от того, какой алфавит является текущим.
3.2.2
В версии 1 и 2, текущий алфавит может быть любой из трех. Z-символы 2 и 3 называются "сдвиг"(shift) символов и могут изменить алфавит только для следующего символа. Новый алфавит зависит от того, что текущий один:
                                от A0    от A1   от A2
  Z-символ 2  A1          A2       A0
  Z-символ 3  A2          A0       A1
Z-символы 4 и 5 могут постоянно менять алфавит, в соответствии с той же таблицей, и называются «shift lock»(Блокировка сдвига) символов.
3.2.3
В версии 3 и более поздних, текущий алфавит всегда A0 если не был изменен за 1 символ, только: Z-символы 4 и 5 представляют собой сдвиг символов. Таким образом, 4 означает "следующий символ в A1" и 5 означает "следующий находится в A2". Там нет сдвига символов блокировки.
3.2.4
Неопределенная последовательность сдвига или сдвиг блокировки символов является стандартным методом (но ничего не печатает).
3.3 Сокращения
В версии 3 и более поздних, Z-символы 1, 2 и 3 представляют собой аббревиатуры, иногда также называют «synonyms»(синонимами) (по традиционным причинам): Следующий Z-символ указывает, какая аббревиатура строка для печати. Если z является первым Z-символом (1, 2 или 3) и х последующий 1, то интерпретатор должен искать вход 32 (Z-1) + х в таблице сокращений и напечатать строку в этом слове адреса. В версии 2, Z-символ 1 имеет такой эффект (но 2 и 3 нет, поэтому есть только 32 аббревиатуры).
3.3.1
Аббревиатура «string-printing»(строка-печать) следует всем правилам этого раздела за исключением того, что строка аббревиатура не должна сама по себе использовать сокращения и не должны заканчиваться незавершенного строительства мульти-Z-символов (см пункт S 3.6.1 ниже).
Z-символ 6 из А2 означает, что две последующие Z-символы указывают десятибитный ZSCII код символа: Следующий Z-символ дает лучшие 5 бит, а один за плохие 5.
3.5 Таблица Алфавит
Оставшиеся Z-символы переводятся в ZSCII кодов символов, используя "алфавит" таблицы.
3.5.1
Z-символ 0 печатается как пробел (ZSCII 32).
3.5.2
В версии 1, Z-1 символ печатается как новая строка (ZSCII 13).
3.5.3
В версиях от 2 до 4, таблица алфавит для преобразования Z-символов в коды символов ZSCII выглядит следующим образом:
   Z-char 6789abcdef0123456789abcdef
current   --------------------------
  A0      abcdefghijklmnopqrstuvwxyz
  A1      ABCDEFGHIJKLMNOPQRSTUVWXYZ
  A2       ^0123456789.,!?_#'"/\-:()
          --------------------------
 (Символ 6 в А2 печатается как пространство здесь, но не переведен с помощью таблицы алфавита: см S 3.4 выше символов 7 в A2, здесь написано как циркумфлексом. ^ , является символом новой строки). Например, в алфавите A1 Z-символ 12 переводится как G (код ZSCII символ 71).
3.5.4
Версия 1 имеет несколько иной А2 строки в своей таблице алфавит (новой строки не требуется, что делает комнату для символа < ):
          6789abcdef0123456789abcdef
          --------------------------
  A2       0123456789.,!?_#'"/\<-:()
          --------------------------
 3.5.5
В версии 5 и более поздних версий, интерпретатор должен смотреть на слово в 34$ в заголовке. Если равен нулю, то таблица алфавит вытягивается в S 3.5.3 и продолжает использоваться. В противном случае он интерпретируется как байт адреса алфавита таблицы, характерные для этой истории файла.
3.5.5.1
Такая таблица алфавит состоит из 78 байтов, расположенных в 3-х блоков 26 ZSCII значений, переводя Z-символы от 6 до 31 для алфавитов А0, А1 и А2. Z-символы 6 и 7 A2, однако, по-прежнему переводится на программном коде как «побег», к новой строке кодов (как описано выше).
Так как конечный бит только приходит один раз в три Z-символа, строка «padded out» может прийти с нулевыми значениями. Это обычно происходит с последовательностью равной 5, хотя последовательность (например) 4-х будет работать одинаково хорошо.
3.6.1
Это действует до конца строки, в то время как создание мульти-Z-символа является неполным: например, после того, как только отдали верхнюю половину значения ASCII. Частичное создание просто игнорируется. (Это может произойти при печати слов из словаря, которые были гильотинированы в словаре с разрешения 6 или 9 Z-символов.)
3.7 Ограничения словаря
Когда интерпретатор шифрует набранный в текст, чтобы соответствовать словам из словаря, применяются следующие ограничения: 
- Текст должен быть преобразован в нижний регистр (как в результате А1, не будет необходимости, если игра не предоставляет свою собственную «таблицу алфавит»). 
- Не могут быть использованы аббревиатуры. 
- Панель ввода знаков, если это необходимо, должно быть 5.
- Общая длина строки должна быть 6 Z-символов (в версиях от 1 до 3) или 9 (версии 4 и выше): любой мульти-Z-символьных конструкций следует оставить неполным, если нет места, чтобы закончить их. Например, "я" шифруется как:
14, 5, 5, 5, 5, 5, 5, 5, 5
$ 48a5 $ 14a5 $ 94a5
3.7.1
В Версии 1 и 2 только при кодировании текста слов из словаря, Shift-замок Z-символы 4 и 5 используются вместо одного сдвига Z-символов 2 и 3, если следующие два символа из того же алфавита.
3.8 Определение ZSCII и Unicode
Набор символов из Z-машины называется ZSCII (Zork - стандартный код для обмена информацией; произносится в рифму с "XYZZY"). ZSCII коды 10 бит без знака значения между 0 и 1023. Файлы с историями могут использовать значения, которые определены ниже. Обратите внимание, что некоторые значения определяются только для входа и некоторые только для вывода сигнала.
Таблица 2: Свод правил ZSCII
(Приводим данные таблицы на английском языке по естественным причинам и понимания)

0

null

Output

1-7

----

 

8

delete

Input

9

tab (V6)

Output

10

----

 

11

sentence space (V6)

Output

12

----

 

13

newline

Input/Output

14-26

----

 

27

escape

Input

28-31

----

 

32-126

standard ASCII

Input/Output

127-128

----

 

129-132

cursor u/d/l/r

Input

133-144

function keys f1 to f12

Input

145-154

keypad 0 to 9

Input

155-251

extra characters

Input/Output

252

menu click (V6)

Input

253

double-click (V6)

Input

254

single-click

Input

255-1023

----

 

 

 

 
Input – вход.
Output – выход.
 
3.8.1
Коды от 256 до 1023 не определены, так что для всех практических целей ZSCII представляет собой 8-битный код без знака.
3.8.2
Коды от 0 до 31 не определены, за исключением следующего:
3.8.2.1
ZSCII код 0 ("нулевой") определен для выхода, но не имеет никакого эффекта в любом выходном потоке. (Он также используется в качестве значения и не означает "нет символа" при составлении отчетов о прекращении кодов символов, но формально не определен для входа)
3.8.2.2
ZSCII код 8 ("Удалить") определяется только для ввода.
3.8.2.3
ZSCII код 9 ("Закладка") определяется для вывода только в версии 6. В начале строки экрана это должно напечатать отступ абзаца, подходящий для шрифта: если он печатается в середине строки экрана, она должна быть преобразована в пространство (собственные интерпретаторы Infocom не делают этого) ,
3.8.2.4
ZSCII код 11 ("предложение пространства") определяется для вывода только в версии 6. Этот код должен быть напечатан в качестве подходящего зазора между двумя предложениями (таким же образом, что типографы обычно место большие пространства после полной остановки в заканчивающихся предложениях или после слов с запятой).
3.8.2.5
ZSCII код 13 ("возврат каретки") определяется для ввода и вывода.
3.8.2.6
ZSCII код 27 ("Выйти" или "перерыв") определяется только для входа.
3.8.3
ZSCII коды от 32 («пробел») и 126 ("тильда") определены для ввода и вывода, и согласно со стандартным ASCII (а также всеми наборами ISO 8859 символов и Unicode). В частности:
      0123456789abcdef0123456789abcdef
      --------------------------------
 $20   !"#$%&'()*+,-./0123456789:;<=>?
 $40  @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
 $60  'abcdefghijklmnopqrstuvwxyz{!}~
Обратите внимание, что код $23 (десятичное 35) является хэш знаком, а не знаком фунта. (Код $7c (десятичное 124) представляет собой вертикальный ход, который показан как «)
3.8.3.1
ZSCII коды 127 ("удалить" в некоторых формах ASCII) и 128 не определены.
3.8.4
ZSCII коды 129 до 154 определены только для ввода:
129: курсор вверх
130: курсор вниз
131: курсор влево
132: курсор вправо
133: 134 f1: f2 .... 144: f12
145: клавиша 0
146: клавиша 1 .... 154: клавиша 9
3.8.5
Блок кодов между 155 и 251 попадают под понятие "лишние символы" и используются по-разному в разных сюжетных файлах. Некоторые из них будут обязательно акцентировать внимание на латинских символах (такие как French E-acute), другие на необычный символ пунктуации (испанский знак вопроса), другие на новые алфавиты (кириллицы или иврит); до сих пор другие могут использовать математические или музыкальные символы, и так далее.
3.8.5.1
*** [1.0] Для того, чтобы определить , какие символы требуются, Unicode (или ISO 10646-1) Basic Multilingual Plane или какой набор символов используется: символы указаны без знака 16-битовых кодов. Эти значения согласуются с ISO 8859 Latin-1 в диапазоне от 0 до 255, а также с ASCII и ZSCII в диапазоне от 32 до 126 стандарта Unicode . Тем не менее, интернет - группа под названием ConScript Unicode Registry организует стандартное отображение вымышленных сценариев (таких как Клингонский или эльфийский Толкиена) в частное пользование, и это следует рассматривать как часть стандарта Unicode для целей Z-машины.
Z-машина не обеспечивает доступ к не игровым форматам BMP (т.е. символы вне диапазона U + 0000 до U + FFFF).
3.8.5.2
*** [1.0] История файла выбирает свой запас дополнительных символов с " Unicode translation table" следующим образом . В соответствии с версиями от 1 до 4, "таблица по умолчанию"( default table) всегда используется (смотри ниже). В версии 5 или более поздней версии, если Word(слово) 3 таблицы расширения заголовка присутствует и не равен нулю, то он интерпретируется как байт адреса таблицы перевода Unicode. Если Word(слово)  3 отсутствует или равен нулю, используется таблица по умолчанию.
3.8.5.2.1
Таблица состоит из одного байта, давая номер N, а затем N двухбайтовых слов.
3.8.5.2.2
Это указывает на то, что символы ZSCII 155 до 155 + N-1 определены для ввода и вывода. (Это возможно для N равным нулю, в результате чего весь диапазон от 155 до 251 не определен)
3.8.5.2.3
Слова в таблице, в свою очередь, дают коды символов Unicode для каждого из символов ZSCII 155 до 155 + N-1.
3.8.5.3
Примером «таблицы по умолчанию» является таблица 1.
3.8.5.4
Определенные дополнительные символы - совершенно обычные символы ZSCII. Они могут появляться в таблице алфавита истории файла, в массиве, созданный для печати потока 3 и так далее.
3.8.5.4.1
*** [1.0] Интерпретатор требуется, чтобы иметь возможность напечатать представления каждого определенного символа Unicode под $0100 (т.е. каждого определенного ISO 8859-1 Latin-1 символа). Если нет подходящих форм букв или они не доступны, то могут быть использованы текстовые эквиваленты (например, "SS" вместо немецкой острой "S").
3.8.5.4.2
Как правило буквы символов в ISO 8859-1 Latin-1 должны быть доступны для чтения с клавиатуры интерпретатора. (Тем не менее, некоторым интерпретаторам может потребоваться предоставить альтернативные раскладки клавиатуры, или работать в другом наборе ISO 8859, кириллицы, например)
3.8.5.4.3
*** [1.0] Интерпретатор не обязан иметь соответствующие письма-формы для печати символов Юникода $0100 до $FFFF . (Может, если он выбирает, позволяет пользователю настроить некоторые шрифты для определенного диапазона Unicode, но это не обязательно.) Если символ Unicode должен быть напечатан, который интерпретатор не понимает, то появится знак вопроса вместо него.
3.8.5.4.4
Z-машине не требуется обрабатывать сложное форматирование Unicode, как несамостоятельных символов, двунаправленного форматирования и необычных правил переноса строк.
В других версиях, нежели чем в 6, интерпретаторы могут либо обрабатывать эти функции, или нет, в окне 0. В окне 1, а все версии 6 окон, они должны быть проигнорированы.
3.8.5.4.5
Unicode символы U + 0000 до U + 001F и U + 007F до U + 009F являются управляющими кодами, и не должны использоваться.
3.8.6
ZSCII коды 252 до 254 определены только для ввода:
252: меню
253: двойной клик левой кнопкой мыши
254: клик левой кнопкой мыши
Клики «меню» доступны только в версии 6. Один клик мышью, или первый клик двойного клика, передается в качестве 254. Второй клик, двойного клика передается в качестве 253. В версии 5, и это рекомендуется, чтобы интерпретатор посылал код 254 независимо от количества кликов мыши.
3.8.7
ZSCII код 255 не определен. (Это значение необходимо в "terminating characters table" в качестве шаблона, указывая на любой символ для ввода с кодом 128 или выше. Тем не менее, она не может сама по себе быть распечатана или введена с клавиатуры.)
Таблица 1: по умолчанию Unicode переводов (см S 3.8.5.3)
(Приводим данные таблицы на английском языке по естественным причинам и понимания)

155

0e4

a-diaeresis

ä

ae

156

0f6

o-diaeresis

ö

oe

157

0fc

u-diaeresis

ü

ue

158

0c4

A-diaeresis

Ä

Ae

159

0d6

O-diaeresis

Ö

Oe

160

0dc

U-diaeresis

Ü

Ue

161

0df

sz-ligature

ß

ss

162

0bb

quotation

»

>> or "

163

0ab

marks

«

<< or "

164

0eb

e-diaeresis

ë

e

165

0ef

i-diaeresis

ï

i

166

0ff

y-diaeresis

ÿ

y

167

0cb

E-diaeresis

Ë

E

168

0cf

I-diaeresis

Ï

I

169

0e1

a-acute

á

a

170

0e9

e-acute

é

e

171

0ed

i-acute

í

i

172

0f3

o-acute

ó

o

173

0fa

u-acute

ú

u

174

0fd

y-acute

ý

y

175

0c1

A-acute

Á

A

176

0c9

E-acute

É

E

177

0cd

I-acute

Í

I

178

0d3

O-acute

Ó

O

179

0da

U-acute

Ú

U

180

0dd

Y-acute

Ý

Y

181

0e0

a-grave

à

a

182

0e8

e-grave

è

e

183

0ec

i-grave

ì

i

184

0f2

o-grave

ò

o

185

0f9

u-grave

ù

u

186

0c0

A-grave

À

A

187

0c8

E-grave

È

E

188

0cc

I-grave

Ì

I

189

0d2

O-grave

Ò

O

190

0d9

U-grave

Ù

U

191

0e2

a-circumflex

â

a

192

0ea

e-circumflex

ê

e

193

0ee

i-circumflex

î

i

194

0f4

o-circumflex

ô

o

195

0fb

u-circumflex

û

u

196

0c2

A-circumflex

Â

A

197

0ca

E-circumflex

Ê

E

198

0ce

I-circumflex

Î

I

199

0d4

O-circumflex

Ô

O

200

0db

U-circumflex

Û

U

201

0e5

a-ring

å

a

202

0c5

A-ring

Å

A

203

0f8

o-slash

ø

o

204

0d8

O-slash

Ø

O

205

0e3

a-tilde

ã

a

206

0f1

n-tilde

ñ

n

207

0f5

o-tilde

õ

o

208

0c3

A-tilde

Ã

A

209

0d1

N-tilde

Ñ

N

210

0d5

O-tilde

Õ

O

211

0e6

ae-ligature

æ

ae

212

0c6

AE-ligature

Æ

AE

213

0e7

c-cedilla

ç

c

214

0c7

C-cedilla

Ç

C

215

0fe

Icelandic thorn

þ

th

216

0f0

Icelandic eth

ð

th

217

0de

Icelandic Thorn

Þ

Th

218

0d0

Icelandic Eth

Ð

Th

219

0a3

pound symbol

£

L

220

153

oe-ligature

œ

oe

221

152

OE-ligature

Œ

OE

222

0a1

inverted !

¡

!

223

0bf

inverted ?

¿

?

 

Пред. След. »

Rate this item
(0 votes)
Login to post comments