Overview
Это перевод руководства TIS-100 на русский язык. Надеюсь, он вам поможет!Перевод выполнен на основе скана, сделанного T.H.A.U., спасибо ему за работу:http://steamcommunity.com/sharedfiles/filedetails/?id=456879799Переводчик – Kung Spoory, ему тоже большое спасибо.DOC и PDF версии – https://steamcommunity.com/id/ksantorhttps://drive.google.com/file/d/1xTZ2PqoywbHpXPtifwxSeimC7SG9w4BC/view – PDFhttps://drive.google.com/file/d/16-6fNg3VYb7fqxkuqynZoXc3zPnWEwoe/view – DOCЯ осуществлял редакторскую правку и верстку.
Письмо тети
М–
Мы до сих пор не оправились от скоропостижной смерти дяди Рэнди. Пока еще ждем результатов вскрытия и изо всех сил стараемся не упасть духом. Я решила навести порядок в его вещах, главным образом – разобрать компьютеры. Конечно, я заглянула и в гараж, но все, что стоит там, на мой взгляд – просто куча мусора. Пришлю фотографии, как будет время. В посылке находится устройство, стоявшее на его рабочем столе, когда он умер. Возможно, тебе и удастся понять, для чего эта штука и что дядя с ней делал. Он был бы очень рад, если бы его работа не пропала зря.
С любовью,
тетя Дорис.
Вступление
Машина Tessellated Intelligence System (Тесселированная Система Анализа) имеет в своей основе многопроцессорную вычислительную архитектуру, состоящую из неравномерно взаимосвязанных разнородных узлов. TIS идеально подходит для приложений, требующих потоковой обработки комплексных данных, например, автоматизированной валютной торговли, сбора массивов данных или анализа поведения граждан. (полужирным здесь и далее обозначено выделение текста хозяином оригинального документа – прим. ред.)
Примечание: Подобные примечания будут встречаться в данном руководстве в случаях, требующих особого внимания, или для ссылки на другие документы, содержащие более подробную информацию по теме.
Архитектура и организация системы
TIS состоит из большого числа независимых локально соединенных узлов (для определения точного числа узлов в конкретной модели устройства обратитесь к его инструкции по эксплуатации). Типы узлов можно условно поделить на обрабатывающие и запоминающие, с несколькими подтипами в рамках каждой категории.
Узлы соединены между собой портами. К каждому узлу может быть подключено до 4 других узлов. Порты обеспечивают обмен информацией между узлами, но их функциональность серьезно ограничена. Сообщение через порты организовано так, что любой узел может объявить о считывании или записи данных в какой-либо порт, что приостановит выполнение программы до тех пор, пока операция не будет одобрена соответствующим узлом.
Примечание: Если два узла будут выполнять одну и ту же команду (запись или чтение) в порту между собой, то они “зависнут” и произойдет аппаратная ошибка. Ознакомьтесь с отдельным руководством “Практическое использование Tessellated Intelligence System и примеры узловой коммуникации”, чтобы узнать эффективные и безопасные методы использования портов. Примечание: Если узел запрашивает команду, которая никогда не сможет быть выполнена другим узлом, то он “зависнет” и произойдет аппаратная ошибка (из этого правила есть исключение; за подробностями обратитесь к документации по конкретным типам узлов). Ознакомьтесь с отдельным руководством “Практическое использование Tessellated Intelligence System и примеры узловой коммуникации”, чтобы узнать эффективные и безопасные методы использования портов. Примечание: Данный документ не указывает время и пропускную способность узловых коммуникационных операций или команд, так как они зависят от модели и модификации оборудования. Обратитесь к руководству конкретной модели за детальным описанием характеристик устройства.
Узел типа Т20 – ЗАРЕЗЕРВИРОВАНО
Примечание: Использование данного типа узлов ограничено конкретными моделями Tessellated Intelligence System, поэтому они не описываются в данном документе. Документация узлов типа Т20 распространяется исключительно вместе с системами, содержащими данный тип узлов. Информация о всех несанкционированных запросах о предоставлении копий документов, описывающих этот узел, поступает в бюро государственной безопасности – в соответствии с законом. ??? (вопросы проставлены хозяином оригинального руководства – прим. ред.)
Узел типа Т21 – Базовый Исполнительный Узел. Архитектура
Базовый Исполнительный Узел отвечает за координацию работы Tessellated Intelligence System. Обработка данных может проходить как внутри Базового Исполнительного Узла, так и перенаправляться на специализированные узлы для обработки или хранения.
Базовый Исполнительный Узел выполняет программу, заданную в наборе команд базового исполнительного узла. Программа Базового Исполнительного Узла состоит из вычислительных и коммуникационных операций. Операции выполняются последовательно, начиная с первой команды в программе. После выполнения последней команды программы узел автоматически возвращается к первой команде. Эта способность выполнять записанные команды в непрерывном цикле является основой работы Базовых Исполнительных Узлов.
Помимо коммуникационных портов, общих для всех узлов Tessellated Intelligence System, Базовый Исполнительный Узел содержит ряд регистров, которые могут быть задействованы в ходе выполнения программы. Базовые Исполнительные Узлы не могут использовать дополнительную память. Если программе требуется дополнительное место, узел должен скоординироваться с другим Базовым Исполнительным Узлом или узлом хранения данных.
Узел типа Т21. Регистры и порты
Все регистры хранят целочисленные данные от -999 до 999 включительно. Хранение значений в регистрах определяется реализацией, знание принципа хранения не требуется для составления программы Базового Исполнительного Узла.
-
ACC
Тип: Внутренний
Описание: ACC – основной регистр хранения Базового Исполнительного Узла. ACC используется как операнд-источник и операнд-получатель по умолчанию во многих операциях, включая арифметические и условные команды.
-
BAK
Тип: Внутренний (неадресуемый)
Описание: BAK является временным хранилищем значений из ACC. К нему можно обратиться только с помощью команд SAV и SWP, и нельзя провести запись или чтение из него напрямую.
-
NIL
Тип: Внутренний (особенный)
Описание: Чтение NIL дает нулевое значение. Запись в NIL не дает никакого результата. NIL вполне может использоваться как операнд-получатель, если возникнет необходимость в его побочном эффекте – сбрасывании результата вычисления.
-
LEFT, RIGHT, UP, DOWN
Тип: Порт
Описание: Четыре коммуникационных регистра UP, DOWN, LEFT и RIGHT соответствуют четырем портам, которые каждый Базовый Исполнительный Узел использует для связи с топологически близкими узлами. Некоторые порты отключены у конкретных узлов аппаратно и приведут к “зависанию”, если на них подать команды чтения или записи. Обратитесь к схеме соединения узла, чтобы определить, какие порты доступны для использования.
-
ANY
Тип: Порт (псевдопорт)
Описание: Когда ANY используется как операнд-источник, алгоритм будет считывать первое значение, пришедшее на любой из портов. Когда ANY выступает как операнд-получатель, результат будет отправлен на узел, который первым выполнит считывание информации с любого порта данного узла.
-
LAST
Тип: Порт (псевдопорт)
Описание: LAST обозначает порт, с которым псевдопорт ANY взаимодействовал в последний раз. Во всем остальном его поведение полностью идентично указанию конкретного порта. Считывание или запись в LAST до того, как он был успешно задан функцией чтения или записи псевдопорта ANY, вызовет ненормальное поведение, определяемое реализацией. Обратитесь к отдельному документу “Практическое использование Tessellated Intelligence System и примеры узловой коммуникации”, чтобы посмотреть примеры безопасной работы с псевдопортом LAST.
Узел типа Т21. Набор команд
Операнды <SRC> (источник) и <DST> (получатель) могут обозначать порт или внутренний регистр. Любое использование порта блокируется до тех пор, пока соответствующий узел, связанный с этим портом, не закончит считывать или записывать значение. Кроме того, операнд <SRC> может быть целым числом от -999 до 999 включительно. BAK не может использоваться ни как <SRC>, ни как <DST>. Доступ к BAK можно получить только с помощью команд SAV и SWP. <МЕТКИ> – это произвольные текстовые обозначения, использующиеся для указания цели команд перехода.
-
Комментарии
Синтаксис: # <ТЕКСТ КОММЕНТАРИЯ>
Описание: Весь текст, идущий после символа комментария (#), игнорируется.
Примечание: Текст, идущий после двух символов комментария (##), будет использоваться в качестве названия программы, в которой он находится. Он будет отображаться в отладчике, чтобы упростить работу с несколькими программами.
-
Метки
Синтаксис: <ИМЯ МЕТКИ>: <содержание>
Описание: Метки используются для обозначения целей команд перехода. Если задать метку как цель команды перехода, то следующей командой после перехода будет та, что идет сразу после метки.
Примеры:
LOOP: Строка не содержит ничего, кроме метки. L: MOV 8, ACC Метка находится на одной строке вместе с командой.
-
NOP
Синтаксис: NOP
Эквивалентный синтаксис: ADD NIL
Описание: NOP является псевдокомандой, не влияющей на внутреннее состояние узла и его коммуникационных портов. NOP автоматически преобразуется в команду ADD NIL.
-
MOV
Синтаксис: MOV <SRC>, <DST>
Описание: происходит считывание из <SRC>, а полученное значение записывается в <DST>.
Примеры:
MOV 8, ACC Буквальное значение 8 записывается в регистр ACC. MOV LEFT, RIGHT Значение считывается из порта LEFT и записывается в порт RIGHT. MOV UP, NIL Значение считывается из порта UP и сбрасывается.
-
SWP
Синтаксис: SWP
Описание: Эта команда меняет местами значения регистров ACC и BAK.
-
SAV
Синтаксис: SAV
Описание: Значение регистра ACC записывается в BAK.
-
ADD
Синтаксис: ADD <SRC>
Описание: Значение <SRC> добавляется к значению ACC, результат сохраняется в ACC.
Примеры:
ADD 16 Буквальное значение 16 добавляется к текущему значению регистра ACC. ADD LEFT Считанное из порта LEFT значение добавляется к текущему значению ACC.
-
SUB
Синтаксис: SUB <SRC>
Описание: Значение <SRC> вычитается из значения ACC, результат сохраняется в ACC.
Примеры:
SUB 16 Буквальное значение 16 вычитается из текущего значения регистра ACC. SUB LEFT Считанное из порта LEFT значение вычитается из текущего значения ACC.
-
NEG
Синтаксис: NEG
Описание: Значение ACC заменяется арифметически противоположным. Если это значение равно нулю, то ничего не происходит.
-
JMP
Синтаксис: JMP <МЕТКА>
Описание: Команда безусловного перехода. Следующей будет выполняться команда, идущая за меткой <МЕТКА>.
-
JEZ
Синтаксис: JEZ <МЕТКА>
Описание: Команда условного перехода. Если значение ACC равно нулю, следующей будет выполняться команда, идущая за меткой <МЕТКА>. -
JNZ
Синтаксис: JNZ <МЕТКА>
Описание: Команда условного перехода. Если значение ACC не равно нулю, следующей будет выполняться команда, идущая за меткой <МЕТКА>.
-
JGZ
Синтаксис: JGZ <МЕТКА>
Описание: Команда условного перехода. Если значение ACC положительно (больше нуля), следующей будет выполняться команда, идущая за меткой <МЕТКА>.
-
JLZ
Синтаксис: JLZ <МЕТКА>
Описание: Команда условного перехода. Если значение ACC отрицательно (меньше нуля), следующей будет выполняться команда, идущая за меткой <МЕТКА>.
-
JRO
Синтаксис: JRO <SRC>
Описание: Команда безусловного перехода. Следующей будет выполняться команда, чей номер строки отличается от текущей на величину <SRC>.
Примеры:
JRO 0 Следующей будет выполняться эта же самая команда, узел войдет в бесконечный цикл. JRO -1 Следующей будет выполняться предыдущая команда. JRO 2 Следующая строка будет пропущена, а работа продолжится с команды за ней. JRO ACC Следующая выполняемая команда алгоритма будет определяться значением ACC.
Узел типа Т21. Примеры
Нижеследующая программа считывает последовательность значений из порта LEFT, удваивает каждое значение при считывании и отправляет результат в порт RIGHT. Базовые Исполнительные Узлы по умолчанию зациклены, и после выполнения последней команды алгоритма они перейдут к первой
MOV LEFT, ACC Считывание значения из порта LEFT и его запись в регистр ACC. ADD ACC Добавление значения ACC к значению ACC, иными словами – удвоение. MOV ACC, RIGHT Запись значения регистра ACC в порт RIGHT.
Нижеследующая программа показывает алгоритм считывания значений из порта UP с последующей записью положительных значений в порт RIGHT, а отрицательных – в порт LEFT. Нулевые значения отбрасываются.
START: MOV UP, ACC Считывание значения из порта UP и его запись в регистр ACC. JGZ POSITIVE Если значение ACC больше нуля, выполняется переход к метке “POSITIVE” JLZ NEGATIVE Если значение ACC меньше нуля, выполняется переход к метке “NEGATIVE” JMP START Если значение не было больше или меньше нуля, переход к метке “START” POSITIVE: MOV ACC, RIGHT Запись значения регистра ACC в порт RIGHT. JMP START Возврат к метке “START” NEGATIVE: MOV ACC, LEFT Запись значения регистра ACC в порт LEFT. JMP START Возврат к метке “START”
Узел типа Т30 – Узел с Аппаратно-Реализованным Стеком
Архитектура
Узел с Аппаратно-Реализованным Стеком позволяет производить чтение и запись целого ряда значений при помощи простого коммуникационного протокола. (Для уточнения вместимости Узлов с Аппаратно-Реализованным Стеком в конкретной модели устройства обратитесь к его инструкции по эксплуатации)
Коммуникационный протокол
Все взаимодействия с Узлом с Аппаратно-Реализованным Стеком осуществляются через порты. Запись в Узел с Аппаратно-Реализованным Стеком переносит значение в верхушку стека. Если стек полон, команда записи заблокирует узел до появления свободного места. Считывание из Узла с Аппаратно-Реализованным Стеком дает значение с верхушки стека, а потом убирает это значение из самого стека. Если стек пуст, команда чтения заблокирует узел до появления значения.
Узлы с Аппаратно-Реализованным Стеком обычно соединены с несколькими другими узлами. Все подсоединенные узлы могут использовать Узел с Аппаратно-Реализованным Стеком. Порядок действий при одновременном исполнении команд чтения и записи в Узлах с Аппаратно-Реализованным Стеком формально не задан, однако каждая отдельная команда будет выполнена в соответствии с указанным коммуникационным протоколом. Ознакомьтесь с отдельным руководством “Практическое использование Tessellated Intelligence System и примеры узловой коммуникации”, чтобы узнать эффективные и безопасные методы использования стековых узлов в системах с несколькими узлами.
Узел типа Т31 – Узел с Произвольной Выборкой
Примечание: Узлы с Произвольной Выборкой на данный момент не поддерживаются стандартными устройствами Tessellated Intelligence System. Заинтересованным пользователям мы можем предложить программные эмуляторы и экспериментальные образцы устройств с такими узлами. На данный момент конечные данные о характеристиках и поведении данного типа узлов не утверждены, и поэтому в этом документе они не описаны.
Список дел
- Понять, кто продал TIS-100 продавцу на блошином рынке
- Восстановить усилитель сигнала
- Найти книгу по микрооптимизации
- Получить новые номера
Встроенный интерактивный отладчик
Горячие клавиши
Интерактивный отладчик использует данные сочетания клавиш:
Ctrl+Z: Отменить последнее изменение
Ctrl+Y: Восстановить последнее изменение
Ctrl+X: Вырезать выделенный текст и вставить его в буфер обмена
Ctrl+C: Скопировать выделенный текст в буфер обмена
Ctrl+V: Вставить текст из буфера обмена
Ctrl+стрелка: Переход к соседнему исполнительному узлу
F1: Вызов краткой справки по инструкциям
F2: Статус защитного сертификата ?? (так в оригинале – прим. ред.)
F5: Запустить текущую программу
F6: Приостановка текущей программы и переход на следующий шаг
Точки приостановки
Чтобы задать точку приостановки, поставьте восклицательный знак (!) в начале требуемой строки. После задания точки приостановки программа сама приостановится перед выполнением команды в выбранной строке, позволяя вам с легкостью перейти к отладке программы в таких точках, до которых было бы слишком утомительно идти по одному шагу.
MOV LEFT, ACC !ADD ACC Программа остановится перед выполнением этой команды MOV ACC , DOWN
Модуль Визуализации
Использование Модуля Визуализации
Модуль Визуализации TIS-100 позволяет программно создавать и выводить изображения на дисплей. Содержимое модуля можно изменять с помощью последовательностей команд, включающих в себя начальную координату X, начальную координату Y, одно или несколько цветовых значений и отрицательную величину, обозначающую конец данной последовательности (обычно -1). Начало системы координат (0, 0) находится в левом верхнем углу дисплея.
Графический модуль поддерживает следующие цвета:
0: Черный
1: Темно-серый
2: Светло-серый
3: Белый
4: Красный
Разрешение Модуля Визуализации
Стандартный модуль визуализации TIS-100 имеет ширину в 30 символов и высоту в 18 символов.
“Графическая песочница” содержит увеличенный модуль визуализации: 36 символов в ширину и 22 в высоту.
Примеры алгоритмов:
0,0,3,-1 Вывод одного белого пикселя в левом верхнем углу дисплея модуля. 0,0,4,4,4,4,4,-1 Вывод горизонтальной красной линии в левом верхнем углу дисплея.
TIS-100 : REFERENCE MANUAL
M—
We are all still in shock here from Uncle Randy’s
sudden passing. While we wait on word from the
examiner about the cause we are coping as best we
can I’ve been occupying myself sorting through his
things, especially his computers. Of course, I took one
look in the garage and it all looks like a bunch of junk to
me. I’ll send some pictures when I get a chance.
For now, this is the machine that was set up on his
workbench when he died. Maybe you’ll be able to figure
out what he was doing with it. He would’ve liked to
know someone was going to finish his work.
Love,
Aunt Doris.
OVERVIEW
The Tessellated Intelligence System is a massively parallel computerarchitecture comprised of non/uniformly interconnected heterogeneous nodes. The Tessellated Intelligence System is ideal for applications requiring complex data stream processing, such as automated financial trading, bulk data collection, and civilian behavioral analysis.
Note: Notes like this one will appear in this manual to indicate scenarios requiring special attention and to refer to other documents that contain more information on a topic.
SYSTEM ARCHITECTURE AND ORGANIZATION
The Tessellated Intelligence System consists of a large number of independent nodes connected on a local basis. (Refer to the model-specific manual to find the precise node population counts present on a particular device.) Node types can be broadly classified as processing or storage, with several variants within each category.
Generally, nodes are connected to up to four neighbors via ports. Ports enable lightweight message/passing communication between nodes. Communication over ports is coordinated by allowing either node to issue a read or write to a port and blocking until the request is filled by the corresponding node.
Note: If two nodes issue the same communication command (read or write) on the connection between them, the nodes will deadlock and a hardware fault will occur. Refer to the separate document “Tessellated Intelligence System Best Practices r Patterns of Node Communication” for details on how to use ports effectively and safely.
Note: If a node issues a communication command and it is never fulfilled by the corresponding node, the node will deadlock and a hardware fault will occur. (Exceptions to this rule exist; refer to the documentation of specific node types for details.) Refer to the separate document “Tessellated Intelligence System Best Practices I Patterns of Node Communication” for details on how to use ports effectively and safely.
Note: This document does not describe timing or throughput for node communication operations or instructions, as these values vary by model and hardware revision. Refer to the model/specific manual for a detailed description of performance characteristics of a particular device.
NODE TYPE T20 — RESERVED
Note: This node type identifier is restricted to specific models of the Tessellated Intelligence System and will not be described in this document. Documentation for node type T20 is distributed only with systems containing this node type. Unauthorized requests for copies of documentation describing this node are reported to the state security bureau, as required by law. ???
NODE TYPE T21 — BASIC EXECUTION NODE
1. Architecture
The Basic Execution Node is responsible for coordinating the behavior of the Tessellated Intelligence System. Processing can occur within the Basic Execution Node, or can be delegated to specialized processing and storage nodes.
The Basic Execution Node executes a program specified in the Basic Execution Node Instruction Set. A Basic Execution Node program specifies computational and communication operations to perform. Operations are performed sequentially, beginning with the first instruction in the program. After executing the last instruction of the program, execution automatically continues to the first instruction. This behavior supports the common usage of Basic Execution Nodes, in which programs are written to operate in a continuous loop.
In addition to the communication ports common to all Tessellated Intelligence System nodes, the Basic Execution Node contains a number of registers that are used in the execution of its program. No additional memory is available on the Basic Execution Node; if additional storage is required, the node should coordinate with another Basic Execution Node or a storage node.
All registers store integer values between -999 and 999 (inclusive). The representation of register values is implementation redefined, and knowledge of the representation is not required to program the Basic Execution Node.
ACC
Type: Internal
Description: ACC is the primary storage register for a Basic Execution Node. ACC is used as the implicit source or destination operand of many instructions, including arithmetic and conditional instructions.
BAK
Type: Internal (non/addressable)
Description: BAK is temporary storage for values in ACC. It is only accessible through the SAV and SWP instructions, and cannot be read or written directly.
NIL
Type: Internal (special)
Description: Reading NIL produces the value zero. Writing to NIL has no effect. NIL can be used as a destination operand to execute an instruction for its side effects only, discarding the result.
LEFT, RIGHT, UP, DOWN
Type: Port
Description: The four communication registers UP, DOWN, LEFT, and RIGHT correspond to the four ports that all Basic Execution Nodes use to communicate with topologically adjacent nodes. Some ports will be disconnected on certain nodes within the hardware, and will block indefinitely if a READ or WRITE command is issued. Refer to the interconnection diagram for the node to determine which ports are available for use.
ANY
Type: Port (pseudoport)
Description: When ANY is used as the source of an instruction, the instruction will read the first value that becomes available on any port. When ANY is used as the destination of an instruction, the result of the instruction will be sent to the first node that reads from any port on this node.
LAST
Type: Port (pseudoport)
Description: LAST refers to the port last read or written using the ANY pseudoport. It otherwise behaves identically to explicitly specifying a port. Reading from or writing to LAST before it has been set by a successful read or write using the ANY pseudoport will result in implementation-defined behavior. Refer to the separate document “Tessellated Intelligence System Best Practices I Patterns of Node Communication” for sample code demonstrating the use of the LAST pseudoport.
2. Instruction Set
and instruction parameters may specify a port or internal register. Any use of a port will block until the corresponding node connected to that port completes the communication by reading or writing a value. Additionally, a parameter may be a literal integer value between -999 and 999 (inclusive). BAK cannot be specified as a or operand. The value of BAK is only accessible through special instructions SAV and SWP. parameters are arbitrary textual names used to specify jump targets within the program.
2-1. Comments
Syntax: # COMMENT TEXT
Description: All text including and after the comment symbol (#) is ignored.
Note: Text placed after two comment symbols (##) will be used as the title of the program in which it occurs, and is displayed in the debugger to make browsing programs easier.
2-2. Labels
Syntax: <LABEL>:
Description: Labels are used to identify targets for jump instructions. When used as a jump target, the instruction following the label will be executed next.
Examples:
LOOP : This label is on a line by itself.
L: MOV 8, ACC This label is on a line with another instruction
2-3. NOP
Syntax: NOP
Equivalent syntax: ADD NIL
Description: NOP is a pseudo-instruction that has no effect on the node’s internal state or communication ports. NOP is automatically converted to the instruction ADD NIL.
2-4. MOV
Syntax: MOV ,
Description: is read and the resulting value is written to .
Examples:
MOV 8, ACC The literal value 8 is written to the ACC register.
MOV LEFT, RIGHT A value is read from the LEFT port, and then written to RIGHT.
MOV UP, NIL A value is read from the UP port and then discarded.
2-5. SWP
Syntax: SWP
Description: The values of ACC and BAK are exchanged.
2-6. SAV
Syntax: SAV
Description: The value of ACC is written to BAK.
2-7. ADD
Syntax: ADD
Description: The value of is added to the value of ACC and the result is stored to ACC.
Examples:
ADD 16 The literal value 16 is added to the value in the ACC register.
ADD LEFT A value is read from the LEFT port, and then added to ACC.
2-8. SUB
Syntax: SUB
Description: The value of is subtracted from the value of ACC and the result is stored to ACC.
Examples:
SUB 16 The literal value 16 is subtracted from the value in the ACC register.
SUB LEFT A value is read from the LEFT port, and then subtracted from ACC.
2-9. NEG
Syntax: NEG
Description: The value of ACC is arithmetically negated. A value of zero remains the same.
2-10. JMP
Syntax: JMP
Description: Transfer execution unconditionally. The instruction after the label will be executed next.
2-11. JEZ
Syntax: JEZ
Description: Transfer execution conditionally. The instruction after the label will be executed next if the value of ACC is zero.
2-12. JNZ
Syntax: JNZ
Description: Transfer execution conditionally. The instruction after the label will be executed next if the value of ACC is not zero.
2-13. JGZ
Syntax: JGZ 1
Description: Transfer execution conditionally. The instruction after the label will be executed next if the value of ACC is positive (greater than Zero).
2-14. JLZ
Syntax: JLZ
Description: Transfer execution conditionally. The instruction after the label will be executed next if the value of ACC is negative (less than zero).
2-15. JRO
Syntax: JRO
Description: Transfer execution unconditionally. The instruction at the offset specified by relative to the current instruction will be executed next.
Examples:
JRO 0 This instruction will be executed next, effectively halting execution.
JRO -l The previous instruction will be executed next.
JRO 2 The next instruction will be skipped, executing the instruction following it.
JRO ACC The next instruction to execute will be determined by the value in ACC.
3. Example Programs
The following sample program reads a sequence of values from the LEFT port, doubling each value read and writing that to the RIGHT port. Because of the automatic looping behavior of the Basic Execution Node, it continues to the first instruction after executing the last instruction.
MOV LEFT , ACC Read a value from the LEFT port into the ACC register.
ADD ACC Add the value in ACC to itself, doubling it.
MOV ACC , RIGHT Write the value in the ACC register to the RIGHT port.
The following sample program reads a sequence of values from the UP port, writing positive values to the RIGHT port and negative values to the LEFT port. Zero values are discarded.
START:
MOV UP, ACC Read a value from the UP port into the ACC register.
JGZ POSITIVE If the value in ACC is greater than zero, jump to “POSITIVE”.
JLZ NEGATIVE If the value in ACC is less than zero, jump to “NEGATIVE”.
JMP START The value was neither positive nor negative, so jump to “START”.
POSITIVE:
MOV ACC , RIGHT Write the value in the ACC register to the RIGHT port.
JMP START Jump to “START”.
NEGATIVE:
MOV ACC , LEFT Write the value in the ACC register to the LEFT port.
JMP START Jump to “START”.
NODE TYPE T30 — STACK MEMORY MODE
1. Architecture
The Stack Memory Node enables read/write access to a large number of values according to a simple stack-based communication protocol. (Refer to the model-specific manual to find the capacity of the Stack Memory Nodes on a particular device.)
2. Communication Protocol
All interaction with the Stack Memory Node is performed through ports. Writing to the Stack Memory Node adds the value to the top of the stack. If the stack is full, the write will block until space becomes available. Reading from the Stack Memory Node removes the top value from the stack and produces that value. If the stack is empty, the read will block until a value is available.
Stack Memory Nodes are typically connected to multiple other nodes, and can be used by any connected node. Simultaneous reads and writes to a Stack Memory Node resolve in an undefined order, but each individual communication will behave according to the described communication protocol. For more information on using storage nodes from multiple nodes effectively and predictably, refer to the separate document “Tessellated Intelligence System Best Practices & Patterns of Node Communication”.
NODE TYPE T31 — RANDOM ACCESS MEMORY NODE
Note: The Random Access Memory Node is not yet available in standard Tessellated Intelligence System devices. Emulators and prototype hardware are available to interested users. The specification and behavior is not yet finalized and therefore is omitted from this document.
TODO
Figure out who sold TIS-100 to swap meet dealer
Rebuild signal multiplier
Look for book of mico-optimisation tips
Renew license plate tabs
EMBEDDED INTERACTIVE DEBUGGER
1. Keyboard Shortcuts
The interactive debugger contains the following keyboard shortcuts:
Control-Z: Undo last change
Control-Y: Redo last change
Control-X: Cut selected text to clipboard
Control-C: Copy selected text to clipboard
Control-V: Paste clipboard text
Control-Arrow: Navigate to the adjacent execution node
F1: View instruction set quick reference
F2: View anti-tamper certification status ??
F5: Begin running the current program
F6: Step or pause the current program
2. Breakpoints
To set a breakpoint, place an exclamation mark (!) at the beginning of a line. When a breakpoint is set, the program will be paused before that line is executed, allowing you to easily debug code that would be too tedious to step through one instruction at a time.
MOV LEFT , ACC
!ADD ACC The program will be paused before this instruction is executed.
MOV ACC , DOWN
VISUALIZATION MODULE
1. Visualization Module Usage
The TIS-100 contains a Visualization module that allows programs to programmatically create and display images. The module contents can be modified by sending command sequences, which consist of the starting X coordinate, the starting Y coordinate, one or more color values, and a terminating negative value (often -I). The coordinate system starts at (o, 0), which is located in the topleft of the display area.
The visualization module supports the following colors:
0: Black
1: Dark grey
2: Bright grey
3: White
4: Red
2. Visualization Module Resolution
The standard TIS-100 visualization module is 30 characters wide and 18 characters tall.
The “image console sandbox” contains a larger visualization module that is 36 characters wide and 22 characters tall.
3. Example Command Sequences
0,0,3,-1 Draw a single white pixel in the topleft corner of the module’s display.
0,0,4,4,4,4,4,-1 Draw a horizontal red line in the topleft corner of the module’s display.
Время на прочтение
3 мин
Количество просмотров 81K
Удивительно, но никто не написал ничего про игрушку «TIS-100», которая недавно появилась в Steam (стоит всего 150 рублей, уже 460 положительных отзывов против 6 отрицательных).
Сразу оговорюсь, что к авторам игры я отношения не имею, а вот сама эта игра — отличный инструмент для всех программистов, которые хотят сразиться друг с другом в оптимизации кода на выдуманном хитром ассемблере.
Итак, о чем игра?
Суть в том, что вам дается задание, которое нужно выполнить. Например «читайте число из IN.A, сравниваете с числом из IN.B и если IN.A > IN.B, пишете в выход IN.A-IN.B, иначе — IN.B-IN.A.
На самом деле, она очень простая и освоить здешний ассемблер может каждый. У него есть две фишки.
1. Он жутко минималистичный и от того — неудобной
2. Он многопоточный. Вот, те блоки, которые вы видите на экране — все они выполняются одновременно.
Для того, чтобы понять, что тут и как — вот вам самый первый уровень:
Задача простая. Читать из входа, удваивать, писать в выход.
Вот мое (самое прямолинейное) решение:
Код в первом блоке:
MOV UP, ACC // читаем число из верхнего входа и кладем его в аккумулятор
ADD ACC // прибавляем к аккумулятору аккумулятор
MOV ACC, DOWN // отправляем значение аккумулятора вниз
Дальше уже просто число перекидывается между выходами.
Запускаем, программа проходит контрольный тест, все ОК. И мы видим результат:
Слева показано, каково ваше решение относительно других игроков. Мы видим, что по числу использованных нодов и инструкций — мы самые оптимальные. Но вот кто-то решил эту задачку за меньшее кол-во циклов. Как? Вот тут включается уже вторая ступень интереса — не просто решить задачу, но и решить ее оптимально по каждому из 3х параметров.
Немного слов об ассемблере.
Сначала — операнды. Собственно, тут все просто. Это ожидаемые LEFT, RIGHT, DOWN, UP, ACC. А так же „ANY“ (которое читает из любого порта) и „LAST“ (читает из последнего порта). Есть еще NIL для обозначения „мусорного“ порта.
Также, кроме аккумулятора, есть еще backup (BAK). С ним нельзя работать напрямую, только через swap’ы (см. ниже).
Далее — список команд.
- NOP — ничего не делает
- MOV [1], [2] — запись из [1] в [2]
- ADD [1] и SUB [1] — прибавить/вычесть к аккумулятору [1]
- NEG — инвертация значения в аккумуляторе
- SWP — обменять значения аккумулятора и BAK
- SAV — сохранить аккумулятор в BAK
- JMP — безусловный переход на метку (метки обозначаются как „LABEL:“)
- JEZ (equal zero), JNZ (not zero), JGZ (greater zero), JLZ (less zero) — условные переходы (аргументом сравнения является аккумулятор)
- JRO [1] — относительный переход (вперед/назад на [1] инструкций)
Собственно, на этом все. Т.е. по сути у вас есть всего 1 регистр (плюс 1 запасной, к которому не так-то просто добраться) и несколько команд.
Самая неудобная штука в этом ассемблере, это то, что сравнение для условий переходов производится по аккумулятору. В „настоящих“ ассемблерах (которые я видел) условие проверяется по флаговому регистру, который в свою очередь выставляется только либо специальной командой сравнения, либо после арифметический операции. Т.е. можно написать так:
CMP 2
MOV 1, ACC // это на выход
JE LABEL
В результате чего мы перейдем по LABEL только если на входе параметр был равен 2, и при этом в аккумулятор мы положим на выход единичку (т.к. операция „MOV“ не изменить флаговый регистр).
В TIS-100 все не так. Чтобы выполнить что-то подобное, придется сделать так:
SWP // сохраняем значение аккумулятора
MOV 1, ACC // это на выход
SWP // меняем назад
SUB 2
JEZ LABEL
И это при том, что мы испортили первоначальное значение аккумулятора. Если потом придется его сравнить с другим числом, мы испытаем проблемы.
Собственно, в этом вся игра. Есть задания, есть просто песочница.
Думаю, программистом должно быть интересно. Особенно скучающим по хардкорным временам.
Письмо тети
М—
Мы до сих пор не оправились от скоропостижной смерти дяди Рэнди. Пока еще ждем
результатов вскрытия и изо всех сил стараемся не упасть духом. Я решила навести
порядок в его вещах, главным образом — разобрать компьютеры. Конечно, я заглянула и в
гараж, но все, что стоит там, на мой взгляд — просто куча мусора. Пришлю фотографии,
как будет время. В посылке находится устройство, стоявшее на его рабочем столе, когда
он умер. Возможно, тебе и удастся понять, для чего эта штука и что дядя с ней делал. Он
был бы очень рад, если бы его работа не пропала зря.
С любовью,
тетя Дорис.
Вступление
Машина Tessellated Intelligence System (Тесселированная Система Анализа) имеет в своей
основе многопроцессорную вычислительную архитектуру, состоящую из неравномерно
взаимосвязанных разнородных узлов. TIS идеально подходит для приложений,
требующих потоковой обработки комплексных данных, например, автоматизированной
валютной торговли, сбора массивов данных или анализа поведения
граждан. (полужирным здесь и далее обозначено выделение текста хозяином оригинального
документа — прим. ред.)
Примечание: Подобные примечания будут встречаться в данном руководстве в случаях, требующих особого
внимания, или для ссылки на другие документы, содержащие более подробную информацию по теме.
-
DesignerMix
- Администратор
- Сообщения: 7047
- Зарегистрирован: 25 апр 2014, 10:51
- Откуда: Белгород
- Контактная информация:
TIS-100
Сообщение
DesignerMix » 25 окт 2016, 23:56
Tim308, блин, почитал мануал и стало интересно. Надо будет на досуге попробовать разобраться. Жаль только что изучить assembler по данной игре не получится т.к. он там вроде как измененный.
Купил за 170 рублей, распечатаю руководство и попробую как-нибудь вечерком разобраться
- Правила форума
- История изменений форума
- Мой YouTube-канал
-
Tim308
- Модератор
- Сообщения: 224
- Зарегистрирован: 26 июл 2014, 22:24
TIS-100
Сообщение
Tim308 » 26 окт 2016, 11:51
DesignerMix, Да, игра затягивает,хотя мне с трудом даются уровни, а дальше работа с графикой будет , вообще караул, а времени нет толком.
Пишут, что это сильно урезанный ассемблер, так что да, изучить не получится, но наверно будет какое-то то общее его понимании
Еще пишут, что в режиме редактора,можно даже писать простенькие игры , но это вообще уже для гигов
-
Tim308
- Модератор
- Сообщения: 224
- Зарегистрирован: 26 июл 2014, 22:24
TIS-100
Сообщение
Tim308 » 26 окт 2016, 19:02
DesignerMix, У меня оптимизация программы никак не отображается на этой надписи
Там в конце три графика, по ним можно оценить насколько программа оптимизирована
-
DesignerMix
- Администратор
- Сообщения: 7047
- Зарегистрирован: 25 апр 2014, 10:51
- Откуда: Белгород
- Контактная информация:
TIS-100
Сообщение
DesignerMix » 26 окт 2016, 19:14
На скрине выделен третий уровень, если я верно понял то внизу слева три графика, на левом оптимальное значение а на правом мое. Получается что пока вроде порядок. Сейчас вот ломаю голову с метками и JMP в четвертом уровне. Немного логику не понимаю, но если пошагово выполнять команды то вроде как становится понятнее…
- Вложения
-
- Правила форума
- История изменений форума
- Мой YouTube-канал
-
Tim308
- Модератор
- Сообщения: 224
- Зарегистрирован: 26 июл 2014, 22:24
TIS-100
Сообщение
Tim308 » 26 окт 2016, 19:38
DesignerMix, На левом четыре столбца, первый столбец указывает на то, что большинство пишут код, который выполняет меньше циклов т.е. работает быстрее.
У меня программа делает 201 цикл.Скиньте ваш код
-
DesignerMix
- Администратор
- Сообщения: 7047
- Зарегистрирован: 25 апр 2014, 10:51
- Откуда: Белгород
- Контактная информация:
TIS-100
Сообщение
DesignerMix » 26 окт 2016, 19:45
Код первых блоков третьего уровня (в остальных блоках просто передавал ниже, так что код нет смысла писать)
IN.A:
Код: Выделить всё
MOV UP, ACC
SAV
SUB RIGHT
SWP
MOV ACC, RIGHT
SWP
MOV ACC, DOWN
IN.B:
Код: Выделить всё
MOV UP, ACC
SAV
MOV ACC, LEFT
SWP
SUB LEFT
MOV ACC, DOWN
Четвертый уровень тоже решил, но там 350 циклов. Плохой из меня программист
- Правила форума
- История изменений форума
- Мой YouTube-канал
-
Tim308
- Модератор
- Сообщения: 224
- Зарегистрирован: 26 июл 2014, 22:24
TIS-100
Сообщение
Tim308 » 26 окт 2016, 19:59
DesignerMix, Вот мое решение.
Ваше решение интересное тоже.
Я допустим не могу понять условие шестого уровня.
- Вложения
-
-
DesignerMix
- Администратор
- Сообщения: 7047
- Зарегистрирован: 25 апр 2014, 10:51
- Откуда: Белгород
- Контактная информация:
TIS-100
Сообщение
DesignerMix » 26 окт 2016, 20:16
Tim308 писал(а): Вот мое решение.
Красиво. А я не додумался передавать разность ниже
Tim308 писал(а): Я допустим не могу понять условие шестого уровня.
Когда/если дойду будем думать вместе если вы к тому времени не решите.
Отправлено спустя 11 минут 31 секунду:
PS: Но с графиками я так ничего и не понял… Вот вы говорите:
Tim308 писал(а): На левом четыре столбца, первый столбец указывает на то, что большинство пишут код, который выполняет меньше циклов т.е. работает быстрее.
Но на некоторых графиках пять столбцов, на некоторых два, на некоторых вообще один… Мой результат это тот, на который указывает треугольник, то что левее сделано другими людьми (видимо взято из стима?) лучше и работает быстрее, а то, что правее сделано хуже и работает медленнее. Так?
- Правила форума
- История изменений форума
- Мой YouTube-канал
-
DesignerMix
- Администратор
- Сообщения: 7047
- Зарегистрирован: 25 апр 2014, 10:51
- Откуда: Белгород
- Контактная информация:
TIS-100
Сообщение
DesignerMix » 27 окт 2016, 10:00
Tim308 писал(а): Я допустим не могу понять условие шестого уровня.
Если еще актуально:
Примерный перевод:
>Последовательности разделить нулями
>Считать значения из IN.A и IN.B
>Записать меньшее значение в OUT
>Записать большее значение в OUT
>Записать 0 для разделения последовательности
Если я чего не понимаю то ориентируюсь по тому значению которое должно получиться (out в правой таблице)
- Правила форума
- История изменений форума
- Мой YouTube-канал
-
Tim308
- Модератор
- Сообщения: 224
- Зарегистрирован: 26 июл 2014, 22:24
TIS-100
Сообщение
Tim308 » 27 окт 2016, 19:07
Наконец-то решил 5 уровень, дался он мне с трудом.
Для решения дальнейших уровней,нужно брать листик с ручкой и сидеть думать.
-
Tim308
- Модератор
- Сообщения: 224
- Зарегистрирован: 26 июл 2014, 22:24
TIS-100
Сообщение
Tim308 » 05 ноя 2016, 19:40
Решил шестой уровень,над седьмым сидел пол дня выходного, в итоге плюнул и нашел на забугорном форуме решение и понял что я бы до такого не додумался
Дальше сложнее, а тупо переписывать решения-никакого удовольствия.
Не знаю какую базу нужно иметь, чтобы воспринимать tis 100 как игру, наверно иметь опыт программирования на ассемблере как минимум.
-
Tim308
- Модератор
- Сообщения: 224
- Зарегистрирован: 26 июл 2014, 22:24
TIS-100
Сообщение
Tim308 » 08 апр 2017, 20:29
.
Последний раз редактировалось Tim308 12 янв 2018, 17:24, всего редактировалось 1 раз.
-
ggeggo
- Новичок
- Сообщения: 11
- Зарегистрирован: 15 июн 2017, 12:17
TIS-100
Сообщение
ggeggo » 15 июн 2017, 14:03
А есть ли еще подобные игры? В приоритете даже не измененный язык, а настоящий, для того чтобы удобней было учиться программированию (необязательно ассемблеру). Сейчас начал изучать питон, дак вроде несложный, синтаксис простой. Вот другие пробовал, так там такие конструкции наворачивать приходиться, для простых вещей, что караул
-
Tim308
- Модератор
- Сообщения: 224
- Зарегистрирован: 26 июл 2014, 22:24
TIS-100
Сообщение
Tim308 » 15 июн 2017, 21:41
ggeggo, Посмотрите на игры автора тис-100.Вот еще ссылка неплохая: http://modx.ws/besplatnie-igry-programi … ipt-python
А вообще, если хотите учить программирование, настраивайтесь на серьезную работу.Сейчас очень много курсов аля «выучить C++ за час». На самом деле это тяжелый труд, все равно что выучить алгебру или геометрию.