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

demo

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

Обзор архитектуры Z-машины

Z-машина представляет собой дизайн для воображаемого компьютера: Z для "Zork", был первоначально разработан, чтобы играть. Как и любой компьютер, он хранит информацию ( в основном) в массиве переменных , пронумерованных от 0 до некоторого большого числа: это называется его памятью . Около 240 ячеек памяти отведены для легкого и быстрого доступа, и они называются глобальными переменными (так как они доступны для любой части программы , которая работает в любое время).
Две важные части информации не хранятся в памяти - программный счетчик (ПК) и стек . Z-машина непрерывно запускает программу, получив команду, хранящуюся в ПК в памяти, действуя по инструкции , а затем перемещает позицию к следующему. Набор команд из Z-машины (диапазон возможных действий и они кодируются как номера в памяти) занимают большую часть этого документа.
 
Программы разделены на подпрограммы : Z-машина всегда выполняет определенную процедуру, та, которая в настоящее время в ПК. Тем не менее, некоторые скрипты вынуждают Z-машину использовать новую процедуру, а затем вернуться, где первая подпрограмма была прервана. Таким образом, Z-машина должна помнить подробности, куда возвращаться, храня эти данные в стеке.
Стек является вторым банком памяти, совершенно отдельно от основного, который имеет переменный размер: изначально он пуст. Время от времени значения добавляются или берутся в верхней части стека. А также используется, чтобы сохранять возвращенные детали, стек также используется для хранения локальных переменных (значения, необходимые только конкретным процедурам), для выполнения короткого по времени действия.
Таким образом, в то время как большинство физических процессоров (например, Z80 или 6502) имеют ряд переменных быстрого доступа к внешней памяти (так называемые «регистры») и стек внутри памяти, Z-машина делает обратное: она имеет глобальные переменные внутри памяти и стек хранится снаружи.
Там нет доступа к оборудованию за исключением выполнения конкретных инструкций Z-машины. Например, прочитать и разрешить read_char использовать клавиатуру, печать и draw_picture позволяет использовать экран. Изображение экрана не сохраняется в памяти. С другой стороны, использование оборудования может привести для прерывания работы Z-машины, то есть, чтобы сделать спонтанный вызов для конкретной подпрограммы, прерывая то, что он ранее делал. Это происходит только, если программа ранее запрашивала его: например, путем установки звукового эффекта в игре или проверять «рутину», прося прерывание, если игрок думает в течение 30 секунд.
Эта простая архитектура накладывает ряд специальных структур, которые Z-машина поддерживает внутри памяти. Их около десятка, но наиболее важными из них являются:
- заголовок, в нижней части памяти, дает подробную информацию о программе и карты остальной части памяти;
- словарь, список английских слов, программа предполагает, что она захочет прочитать с клавиатуры;
- дерево объектов, расположение в памяти под названием объектов.
Z-машина в основном используется для приключенческих игр, где словарь содержит имена элементов и глаголов , которые может напечатать игрок, и объекты, как правило, места и артефакты, которые составляют игру. Каждый объект в дереве может иметь родителя, а родственника и ребенка . Например, в начальной позиции "Zork I":
West of House
You are standing in an open field west of a white house, with a boarded front door. There is a small mailbox here.
>open mailbox
Opening the small mailbox reveals a leaflet.
На данный момент (часть) дерева объектов игры выглядит следующим образом:
[ 41] ""
 . [ 68] "West of House"
 .  . [ 21] "you"
 .  . [239] "small mailbox"
 .  .  . [ 80] "leaflet"
 .  . [127] "door"
Обратите внимание, что объекты пронумерованы от 1 вверх. (Объект 41 является фиктивным объектом и используется в игре, чтобы содержать все "комнаты" или места, и он имеет гораздо больше детей, в сравнении от объекта 68.) Родительский элемент дерева является "Запад Дом", родитель которого 41, который не имеет родителя. Родственник игрока является почтовый ящик; ребенок из почтового ящика  - листовка; брата или сестры из почтового ящика - дверь и так далее.
Объекты сгруппированы вверх коллекцией переменных, которые приходят в двух видах: атрибуты и свойства. Атрибуты - просто флаги, то есть, они могут быть установлены или сняты и не имеют числового значения. Свойства держать цифры, которые в свою очередь представляют собой фрагменты текста или другой информации. Например, одно из свойств объекта почтового ящика, содержит информацию о том, что английское слово "почтовый ящик" относится к нему. Одним из атрибутов объекта почтового ящика устанавливается, чтобы указать, что это контейнер, в то время как тот же атрибут для объекта листовка флаг снят(false). Вот разбивка состояния почтового ящика:
239. Атрибуты: 30, 34
     Родительский объект:  68  Родственный объект: 127  объект-ребенок:  80
     Свойство адреса: 2b53
         Описание: "small mailbox"
          Значения:
              [49] 00 0a
              [46] 54 bf 4a c3
              [45] 3e c1
              [44] 5b 1c
Таким образом, единственный набор атрибут 30 и 34: все остальные убираются. Значения приведены для свойств 44, 45, 46 и 49. Z-машина сама не знает, или все равно, что означает эта информация: то есть для программы это не важно.
В качестве последнего примера еще одной из подпрограмм в "Zork I ':
l0006: print_ret       "Suicide is not the answer."
l0007: je              g57 #84 ~l0008
       je              g48 #15 ~rfalse
       print_ret       "Why don't you just walk like normal people?"
l0008: je              g57 #63 ~l0009
       print_ret       "How romantic!"
l0009: je              g57 #3b ~rfalse
       get_parent      "mirror" local0
       get_parent      "mirror" sp
       je              g6b local0 sp ~l0010
       print_ret       "Your image in the mirror looks tired."
l0010: print_ret       "That's difficult unless your eyes are prehensile."
 
Программы Z-машины хранятся на диске, или в архиве в Интернете, в так называемых сюжетных файлах(storyfiles). История файла состоит из «снимка» только основной памяти. Процессор начинает запускать файл историю(storyfiles), начиная с пустого стека и значения ПК, установленного в соответствии с некоторой информации , содержащейся в заголовке рассказа файла(storyfiles). Обратите внимание, что файл истории должен быть создан по стандартам структур в памяти, таких как словарь и дерево объектов, и подразумевается, что он уже создан и с разумным содержанием.
Первый байт файла любой истории, байт памяти по адресу 0, всегда содержит номер версии из Z-машины, которые будут использоваться. Дизайн эволюционировал в течение десяти лет: а номер версии увеличивается, набор команд растет и таблицы переформатированы, чтобы предоставить больше места для больших игр. Все игры Infocom могут быть воспроизведены с использованием версий между 3 (большинство) и 6 версий игр, а Inform в основном используют версии 5 или 8.
 
 
Rate this item
(0 votes)
Login to post comments