Shenzhen i o прохождение. SHENZHEN I-O — новый симулятор программирования микроконтроллеров

Как многие из нас хотели быть инженерами-схемотехниками, но не стали ими? Я не говорю о программистах, строителях и прочих специальностях. Многие мечтали паять платы, ходили в радиокружки и курочили домашнюю аппаратуру (получая после этого ремня от отца, само собой) в попытке понять, как она работает? Если не каждый первый, то уверен, многие.

Разработка электроники и даже пайка на коленке имеет достаточно высокий порог вхождения, начиная от прямых рук и заканчивая знанием физики, схемотехники, теории электрических цепей и расходными материалами.

В этой публикации я предлагаю вам познакомиться с новой игрой, вышедшей в ранний доступ в Steam 6 октября этого года. Встречайте, инди-симулятор создания цепей и простых устройств - SHENZHEN I/O .

В Steam игра находится в разделе «симуляторы» и идет с пометками «инди», «логические игры» и «ранний доступ», и все они являются абсолютной правдой.

Статистика

Но прежде чем мы перейдем к самой игре, давайте посмотрим на цифры от SteamDB .

В самом Steam игра имеет 94.03% положительных отзывов (209 за и 5 против и есть подозрение, что последние голоса связаны с крашами игры или с невозможностью запуска сырого проекта).

В игре почти ничего нет, но это не мешает ей требовать 4 Gb оперативной памяти на борту:


При установке через Steam все выглядит достаточно просто. Сервис сам проверяет актуальность.NET (необходим версии 4.5), DirectX и прочих компонентов.

Также разработчик не обделил линуксоидов и владельцев маков, эти платформы тоже поддерживаются со схожими системными требованиями. Для Linux это SteamOS или Ubuntu 16.04+, для macOS - версия 10.9+. Требования к процессору и оперативной памяти те же, что и для Windows.

Каких-либо проблем с игрой (вылетов, крашей на старте) на Windows 7 x64 пока замечено не было.

По информации SteamSpy игру купило всего 8913 (±2348) человек, однако, среднесуточный онлайн уже составляет 872 игрока.


Намного интереснее статистика проведенного в игре времени. В среднем, в игре за последние две недели (т.е. с момента релиза) провели 4,9 часа (по медиане 4,5), что для логической инди-игры отличный показатель. Для сравнения, у вышедшей недавно игры Mafia III данная цифра составляет 7,3 часа (по медиане 5,6).

Preface [Предисловие]

(en )
This game is not only about programming, but also about R eading T he F . M anual first.
You will have to read it eventually, but you can start with this guide.
(rus )
Это игра не только о программировании, но и о чтении инструкций перед этим.
Инструкцию все равно придется читать, но можно начать с гайда.

(1) First task - Fake camera

(en )
Lets take a look at our first task.
We have to make an LED on a fake camera blink correctly.
There are two of them: "network" and "active". We only need "network" one.
First we have to add MC4000 microcontroller (from top rigt corner) to our scheme and connect "p0" pin to "network" output.

Open "Verification" tab below.
You can see two lines and an image of a fake camera.
We are supposed to make our microcontroller draw the same line as a line on the bottom. We can do that by sending signals trough "p0" pin.
Put a mouse over the line to see expected level of signal.

As you can see we expected to send signal with level 0 or 100.
When level of signal is 100 - LED lights up and when it is 0 - it does not.
Now lets take a closer look at the line.

It is separated by time units.
In this task we have to do the following:

  1. Send signal with level 0 for 4 time units.
  2. Send signal with level 100 for 2 time units.
  3. Send signal with level 0 for 1 time unit.
  4. Send signal with level 100 for 1 time unit.
Don"t pay attention to the rest of the line. Later i will explain why.

Now click on microcontroller to start writing code.
To send signal through "p0" pin we have to write some value into "p0" register, like this:
mov 0 p0
This line writes number 0 into "p0" register. (see "MOV" section for details)
From now on our microcontroller is sending signal with level 0 through "p0" pin.
We want it to remain for 4 time untis, so we have to make our microcontroller "sleep" for 4 time untis. To do that we should use "slp " command.
slp 4
This line makes microcontroller "sleep" for 4 time untis. (see "SLP" section for details)

Do the same for 3 other steps. In the end you should have the following code:
mov 0 p0
slp 4
mov 100 p0
slp 2
mov 0 p0
slp 1
mov 100 p0
slp 1

Launch an execution of the program by pressing "Simulate". As you can see it repeats over and over so you dont have to repeat your code for the rest of the "output line".
Now you just have to wait until test runs are completed.

(en )
You can write a value to the register, you can read a value from the register. Thats what they are for.
Default value of any register is 0.
Min. value of any register is -999.
Max. value of any register is 999.
There are 3 types of registers:

  • acc
    This register is present in all microcontrollers.

    This register is used in all arithmetic operations. (see "Arithmetics" for details)
  • dat
    This register is present only in some microcontrollers.
    If you write a value in it, this value will remain until you write another one.
    This register i used only as a data storage.
  • pin registers
    These registers are present in all microcontrollers.
    They are used to connect microcontroller to inputs/outputs and other microcontrollers.
    These registers do not store any data. If you write a value in such register it simply determines output value.
    There are two types of pin registers:
    1. Simple I/O (p0,p1...)
      Used to connect to simpe inputs/outputs.
    2. XBbus (x0,x1...)
      Used to connect to other microcontrollers or complex I/O such as keyboard or numeric display.
      When you try to read from such register, execution is blocked until data is avaliable.
      When you try to write a data to such register, then execution will be blocked until this data is read on the other side.

This command simply mov es (copies) a value from one place to another.
It goes like this:

mov

Examples:

puts number 0 into "acc" register

puts number 100 into "p1" register

reads value from "p0" input and puts it into "p1" register

reads value from "p0" input and puts it into "acc" register


This command allows execution to jump to specifically marked line.
It goes like this:

jmp

mov 0 acc
jmp flag
mul 2
mov acc p1
flag: slp 1


# this line is skipped
# this line is skipped
# line marked as "flag"


You can also jump to any previous line.

slx x0
flag: mov 0 acc
mul 2
mov acc p1
slp 1
jmp flag

# line marked as "flag"

# jump to line marked as "flag"


This command makes microcontroller "sleep" for specified number of time units.
All values of registers and outputs do not change while microcontroller is "sleeping".
You have to use this command or SLX command in every program.
It goes like this:

slp

Examples:

sleep for 6 time units

sleep for number of time untis that stored in "acc" register

sleep for number of time untis that read from "p0" input

Secret commands and flags

There a re couple of secret commands that could be useful.
Thanks to for that information.

GEN
It goes like this:
gen

Executing gen is equals to executing following commands:

mov 100
slp
mov 0
slp

So gen p0 2 3 would be equal to following set of commands:

mov 100 p0
slp 2
mov 0 p0
slp 3

_________________________________________________________________

@
Any command marked by this flag will be executed only once.
It goes like this:

@

For example:

@ slp 1
slp 1
mov 0 p0
slp 1 p0
mov 100 p0

this command executed only once an will not be repeated

this command exectued every time
this command exectued every time
this command exectued every time

(1) Первое задание - Фальшивая камера

(ru )
Давайте взглянем на первое задание.
Нам нужно сделать так, чтобы диоды на фальшивой камере правильно мигали.
Их всего два: "сеть" ("network") и "активен" ("active"). Диод "активен" уже сделан до нас, так что нам остается только сделать "сеть".
Для начала нам нужно перетащить микроконтроллер MC4000 (из правого верхнего угла) на схему и подключить выход "p0" к выходу "Network".


В ней отображены две линии и изображение фальшивой камеры.
Мы должны заставить наш микроконтроллер нарисовать такую же линию, как и линия внизу. Это можно сделать посылая сигналы через выход "p0".
Наведите мышь на линию, чтобы увидеть требуемый уровень сигнала.

Как вы можете видеть ожидается что мы будем посылать сигнал с уровнем 0 и 100.
Когда уровень сигнала равен 100 - диод загорается, а когда он равен 0 - не загорается.
Откройте вкладку "Verification" внизу экрана.

Присмотрится поближе к этой линии.

Она поделена на временные отрезки. (временные единицы)
В данном задании мы должны сделать следующее.

  1. Посылать сигнал с уровнем 0 на протяжении 4 временных единиц.
  2. Посылать сигнал с уровнем 100 на протяжении 2 временных единиц.
  3. Посылать сигнал с уровнем 0 на протяжении 1 временной единицы.
  4. Посылать сигнал с уровнем 100 на протяжении 1 временной единицы.
Не обращайте внимание на остальную линию. Позже я объясню почему.

Теперь кликните на микроконтроллер чтобы начать писать код.
Чтобы послать сигнал через выход "p0", мы должны записать число в регистр "p0", вот так:
mov 0 p0
Эта строка записывает число 0 в регистр "p0". (см. подробности в разделе "MOV")
С этого момента наш микроконтроллер посылает сигнал с нулевым уровнем на выход "p0".
Мы хотим чтобы это продолжалось в течении 4 временных единиц, поэтому мы должны заставить наш контроллер "спать" на протяжении 4 временных единиц. Для этого мы используем команду "slp ".
slp 4
Эта строка заставляет микроконтроллер "заснуть" на 4 временных единицы. (см. подробности в разделе "SLP")

Сделайте тоже самое для трех оставшихся шагов, в конце у вас должен получиться следующий код:
mov 0 p0
slp 4
mov 100 p0
slp 2
mov 0 p0
slp 1
mov 100 p0
slp 1

Запустите выполнение программы, нажав на кнопку "Simulate". Программа будет постоянно повторяться, поэтому нам не нужно повторять комманды на протяжении всей линии.
Теперь остается только ждать пока пройдут все тестовые запуски (test runs).

Регистры

(ru )
Можно записывать значение в регистр, можно прочитать значение из регистра.
Значение по-умолчанию для каждого регистра = 0.
Минимальное значение регистра = -999
Максиальное значение регистра = 999.
Есть три типа регистров.

  • acc
    Этот регистр присутствует во всех микроконтроллерах.

    Этот регистр используется по всех арифметических операциях.
  • dat
    Этот регистр присутствует только в некоторых микроконтроллерах.
    Если записать в него значение, оно сохранится пока не будет записано другое.
    Этот регистр используется для хранения значений.
  • регистры выходов (pin registers)
    Эти регистры присутствуют во всех микроконтроллерах.
    Они используются для соединения микрокнтроллера с входами/выходами а также другими микроконтроллерами.
    Эти регистры не сохраняют никаких данных. Засписанное значение определяет уровень сигнала на соответствующем выходе.
    Есть два типа регистров выхода:
    1. Simple I/O (p0,p1...)
      Используется для соединения с простыми входами/выходами.
    2. XBbus (x0,x1...)
      Используется для соединения с другими микроконтроллерами, а также слодными выходами, как например у клавиатуры или цифрового дисплея.
      При попытке прочитать данные из такого регистра исполнение блокируется пока данные не поступят на соответствующий вход.
      При попытке записи в такой регистр исполнение блокируется пока данные не прочитаются на другом конце.
  • Логические игры
  • Как многие из нас хотели быть инженерами-схемотехниками, но не стали ими? Я не говорю о программистах, строителях и прочих специальностях. Многие мечтали паять платы, ходили в радиокружки и курочили домашнюю аппаратуру (получая после этого ремня от отца, само собой) в попытке понять, как она работает? Если не каждый первый, то уверен, многие.

    Разработка электроники и даже пайка на коленке имеет достаточно высокий порог вхождения, начиная от прямых рук и заканчивая знанием физики, схемотехники, теории электрических цепей и расходными материалами.

    В этой публикации я предлагаю вам познакомиться с новой игрой, вышедшей в ранний доступ в Steam 6 октября этого года. Встречайте, инди-симулятор создания цепей и простых устройств - SHENZHEN I/O .

    В Steam игра находится в разделе «симуляторы» и идет с пометками «инди», «логические игры» и «ранний доступ», и все они являются абсолютной правдой.

    Статистика

    Но прежде чем мы перейдем к самой игре, давайте посмотрим на цифры от SteamDB .

    В самом Steam игра имеет 94.03% положительных отзывов (209 «за» и 5 «против», и есть подозрение, что последние голоса связаны с крашами игры или с невозможностью запуска сырого проекта).

    В игре почти ничего нет, но это не мешает ей требовать 4 Gb оперативной памяти на борту:

    При установке через Steam все выглядит достаточно просто. Сервис сам проверяет актуальность.NET (необходим версии 4.5), DirectX и прочих компонентов.

    Также разработчик не обделил линуксоидов и владельцев маков, эти платформы тоже поддерживаются со схожими системными требованиями. Для Linux это SteamOS или Ubuntu 16.04+, для macOS - версия 10.9+. Требования к процессору и оперативной памяти те же, что и для Windows.

    Каких-либо проблем с игрой (вылетов, крашей на старте) на Windows 7 x64 пока замечено не было.

    По информации SteamSpy игру купило всего 8913 (±2348) человек, однако, среднесуточный онлайн уже составляет 872 игрока.

    Намного интереснее статистика проведенного в игре времени. В среднем, в игре за последние две недели (т.е. с момента релиза) провели 4,9 часа (по медиане 4,5), что для логической инди-игры отличный показатель. Для сравнения, у вышедшей недавно игры Mafia III данная цифра составляет 7,3 часа (по медиане 5,6).

    У проекта есть собственный раздел на Reddit , где происходит общение между игроками. Рейтинги обсуждений далеко невысоки (10-15 баллов), но там уже прошедшие существующие уровни игры люди предлагают свои решения на всеобщий суд. Русскоязычное коммьюнити стало стихийно собираться в telegram (инвайт-ссылка на канал) с подачи некоторых пользователей твиттера.

    Это хорошая возможность «подсмотреть» что-нибудь для новичка или просто влиться в небольшой коллектив игроков, ведь онлайн в будние дни не доходит даже до тысячи.

    Там же, на Reddit, в закрепленной теме организована обратная связь с разработчиками. Там можно предложить новые уровни, функции, ачивки и прочий игровой контент. В отличие от корневого раздела с 2-3 комментариями на топик, тут обсуждение идет более активно, ведь некоторые «матерые» техники игру уже прошли.

    А теперь перейдем непосредственно к SHENZHEN I/O.

    Сама игра

    Главное меню игры может служить образцом минимализма:

    Весь базовый интерфейс меню построен по принципу получения квестов посредством «электронной почты».

    Игра начинается с принятия игрока на работу:

    Хардкор начинается, кстати, в самом начале. Вместе с приветственным письмом и щебетом виртуальных коллег появляется тимлид (по фото выглядит слегка бесновато) с двумя сакральными фразами:

    1. Fresh meat...
    2. Иди курить маны.


    Да. Просто да.

    Разработчик от лица Карла на полном серьезе предлагает предварительно сходить ознакомиться с документацией по игре.

    Мануалы, кстати, это отдельная история. При нажатии на соответствующую кнопку «Datasheets» в меню игры, открывается PDF-документ на 41 страницу в ассоциированной в системе PDF-читалке (в случае автора - в Google Chrome).


    Вы уже чувствуете себя рабом на китайском производстве?

    Если не чувствуете, то для обеспечения глубины погружения в «офисные будни» разработчик добавил «Солитер».

    И, конечно же, карты подписаны по-китайски. Мы же в Китае работаем, так? Однако, приступим к самой игре.

    Игровой процесс строится по принципу получения концепт-документации по e-mail и разработке необходимого устройства. Сперва от нас требуют спроектировать камеру.

    Единственное, на скриншоте уже установлен модуль и проложена «дорожка» до необходимого выхода. Верхний модуль был полностью сформирован и трогать его не нужно, он рабочий. На первом уровне игры задача сводится к написанию простого кода контроллера, который обеспечит корректное «прохождение сигнала по заданному пути»:

    Так выглядит график симуляции сети без кода, просто прямой сигнал. Нам необходимо его «погнуть» в нужную нам сторону.

    Базовый код, который идет «в комплекте» с первым модулем, выглядит следующим образом:

    Mov 0 p0 slp 6 mov 100 p0 slp 6 # why is this # so hard? :(
    Орфография сохранена

    Методом тыка и аналогий (джедаи же маны не читают, помните?) выводим, что:

    • mov N - движение сигнала по уровню N, XY - вход;
    • slp - дистанция прохождения сигнала.
    Исходя из этих нехитрых умозаключений на уровне интуиции получаем код вида:

    Mov 0 p0 slp 4 mov 100 p0 slp 2 mov 0 p0 slp 1 mov 100 p0 slp 1 mov 0 p0
    Напоминаю, уровень автора в данной теме соответствует уровню в ней вашего кота.

    Так вот, этот нехитрый код описывает замкнутый цикл прохождения сигнала и «выравнивает» его, как нам было нужно:

    Весело? Кажется, уже да.

    Второй уровень повергает в уныние. Там уже не поможет логика, на которую мы опирались в первом задании, придется лезть в мануалы. Кстати говоря, если бы я мог их распечатать, я бы их распечатал.

    Тут мы сталкиваемся с реалиями синтаксиса игрового языка программирования контроллеров. Но так как желание созидать сильнее, то есть только сожаление, что мануал не на русском или не достаточно подробный (желательно, конечно с картинками, но у нас же все серьезно тут, да?).

    От нас требуется мультиплексировать сигнал в два раза. Окей. Ищем необходимые нам функции, пишем простенький код вида:

    Mov p0 acc mul 2 mov acc p1 slp 1 #ITS ALIVE
    И наслаждаемся очередной маленькой игровой победой:

    Я не буду говорить, сколько мне, как полному профану, потребовалось времени, чтобы понять, как это сделать, но теперь цифра среднего онлайна в 4,5 часа уже не выглядит такой уж и большой.

    Дальнейшие свои утехи с SHENZHEN I/O (и мануалом к игре) я оставлю за кадром.

    В сухом остатке

    Если отбросить в сторону детский восторг (хотя это и очень сложно), то игра получилась увлекательной, по крайней мере для тех, кто не боится трудностей. Да, там не используется VHDL , поле программирования контроллера весьма ограничено по строкам, но для людей увлеченных этот «симулятор работы» подойдет как нельзя кстати.

    Также его можно использовать для обучения детей в плане понимания алгоритмов и логики, а по отзывам игроков в Steam от SHENZHEN I/O до программирования и мигания лампочкой «ардуиной» - один шаг. Если затянет, конечно.

    Начинающему игроку будет катастрофически не хватать русскоязычного мануала, но с этим может помочь гугл и более опытные товарищи по игре, которые делятся решениями и обсуждают их.

    Механика игры не ограничена написанием трех строчек кода. В дальнейшем можно соревноваться с другими пользователями в уровне оптимизации, энергопотребления и стоимости конечного спроектированного в игре продукта, т.е. самостоятельно ставить перед собой челленджи. Использовал четыре контроллера, когда можно ограничиться тремя? Добро пожаловать к верстаку!

    Также проект находится в стадии раннего доступа и разработчик прямо заявляет, что готов улучшать и развивать игру, добавлять функции и новые задачи, равно как и способы их решения по требованию пользователей. Цена, по его уверению, после выхода в релиз останется прежней.

    Фактически, SHENZHEN I/O заслуженно сравнивают с более хардкорным проектом 2015 года под названием TIS-100 , созданный тем же разработчиком, который порадовал нас SHENZHEN I/O. В TIS-100 порог вхождения еще выше, что подтверждают комментарии Steam:

    Понятно, что создатель игры нацелился на более широкую, если это можно так назвать, аудиторию. Во всяком случае, программирование контроллеров на коленке пугает не так, как превью-скриншоты TIS-100:


    TIS-100

    Игра SHENZHEN I/O требует выдержки и терпения. С первых же минут она наотмашь бьет игрока «бревном жестокой реальности» по лицу, но не настолько сильно, чтобы не попытаться в нее вникнуть. Легко не будет. Не будет красочных кат-сцен, возможности играть лежа на диване или «ограблять корованы». Но будет возможность потренировать свой мозг и попробовать что-то новое.

    Стоит ли SHENZHEN I/O своих денег? Однозначного ответа на этот вопрос нет. Но если у вас есть тяга к созиданию, преодолению трудностей и решению задач в свое удовольствие - да, стоит.

    Как многие из нас хотели стать инженерами-схемотехниками, но не стали ими? Я не говорю о программистах, строителях и прочих специальностях. Многие мечтали паять платы, ходили в радиокружки и курочили домашнюю аппаратуру (получая после этого ремня от отца, само собой) в попытке понять, как она работает? Если не каждый первый, то уверен, что многие.

    Разработка электроники и даже пайка на коленке имеет достаточно высокий порог вхождения, начиная от прямых рук и заканчивая знанием физики, схемотехники, теории электрических цепей и расходными материалами.

    В этой публикации я предлагаю вам познакомиться с новой инди-игрой, вышедшей в ранний доступ в Steam 6 октября этого года. Встречайте, инди-симулятор создания цепей и простых устройств - SHENZHEN I/O.

    В Steam игра находится в разделе «симуляторы» и идет с пометками «инди», «логические игры» и «ранний доступ», и все они являются абсолютной правдой.

    Статистика

    Но прежде чем мы перейдем к самой игре, давайте немного цифр от SteamDB.

    В самом Steam игра имеет 94.03% положительных отзывов (209 за и 5 против и есть подозрение, что последние голоса связаны с крашами игры или с невозможностью запуска сырого проекта).

    В игре почти ничего нет, но это не мешает ей требовать 4 Gb оперативной памяти на борту:

    При установке через Steam все выглядит достаточно просто. Сервис сам проверяет актуальность.NET (необходим версии 4.5), DirectX и прочих компонентов.

    Также разработчик не обделил линуксоидов и владельцев маков, эти платформы также поддерживаются со схожими системными требованиями. Для Linux это SteamOS или Ubuntu 16.04+, для macOS - версия 10.9+. Требования к процессору и оперативной памяти те же, что и для Windows.

    Каких-либо проблем с игрой (вылетов, крашей на старте) на Windows 7 x64 пока замечено не было.

    По информации SteamSpy игру купило всего 8913 (±2348) человек, однако, среднесуточный онлайн уже составляет 872 игрока.

    Намного интереснее статистика среднего проведенного в игре времени. В среднем, в игре за последние две недели (т.е. с момента релиза) провели 4,9 часа (по медиане 4,5), что для логической инди-игры отличный показатель. Для сравнения, у вышедшей недавно игры Mafia III данная цифра составляет 7,3 часа (по медиане 5,6).

    У проекта есть собственный раздел на Reddit, где происходит общение между игроками. Рейтинги обсуждений далеко невысоки (10-15 баллов), но там уже прошедшие существующие уровни игры люди предлагают свои решения на всеобщий суд.

    Это хорошая возможность «подсмотреть» что-нибудь для новичка или просто влиться в небольшой коллектив игроков, ведь онлайн в будние не доходит даже до тысячи.

    Там же, на Reddit, в закрепленной теме организовала обратная связь с разработчиками. Там можно предложить новые уровни, функции, ачивки и прочий игровой контент. В отличие от корневого раздела с 2-3 комментариями на топик, тут обсуждение идет более активно, ведь некоторые «матерые» техники игру уже прошли.

    А теперь перейдем непосредственно к SHENZHEN I/O.

    Сама игра

    Главное меню игры может служить образцом минимализма:

    Весь базовый интерфейс меню построен по принципу получения квестов посредством «электронной почты».

    Игра начинается с принятия игрока на работу:

    Хардкор начинается, кстати, в самом начале. Вместе с приветственным письмом и щебетом виртуальный коллег появляется тимлид (по фото выглядит слегка бесновато) с двумя сакральными фразами:

    1. Fresh meat…
    2. Иди курить маны.


    Да. Просто да.

    Разработчик от лица Карла на полном серьезе предлагает предварительно сходить ознакомиться с документацией по игре.

    Мануалы, кстати, это отдельная история. При нажатии по соответствующей кнопке «Datasheets» в меню игры, открывается PDF-документ на 41 страницу в ассоциированной в системе PDF-читалке (в случае автора - в Google Chrome).


    Вы уже чувствуете себя рабом на китайском производстве?

    Если не чувствуете, то для обеспечения глубины погружения в «офисные будни» разработчик добавил «Солитер».

    И, конечно же, карты подписаны по-китайски. Мы же в Китае работаем, так?

    Однако, приступим к самой игре.

    Игровой процесс строится по принципу получения концепт-документации по e-mail и разработке необходимого устройства. Сперва от нас требуют спроектировать камеру.

    Единственное, на скриншоте уже установлен модуль и проложена «дорожка» до необходимого выхода. Верхний модуль был полностью сформирован и трогать его не нужно, он рабочий. На первом уровне игры задача сводится к написанию простого кода контроллера, который обеспечит корректное «прохождение сигнала по заданному пути»:

    Так выглядит график симуляции сети без кода, просто прямой сигнал. Нам необходимо его «погнуть» в нужную нам сторону.

    Базовый код, который идет «в комплекте» с первым модулем, выглядит следующим образом:

    Mov 0 p0 slp 6 mov 100 p0 slp 6 # why is this # so hard? :(

    Орфография сохранена

    Методом тыка и аналогий (джедаи же маны не читают, помните?) выводим, что:

    • mov N - движение сигнала по уровню N, XY - вход;
    • slp - дистанция прохождения сигнала.

    Исходя из этих нехитрых умозаключений на уровне интуиции получаем код вида:

    Mov 0 p0 slp 4 mov 100 p0 slp 2 mov 0 p0 slp 1 mov 100 p0 slp 1 mov 0 p0

    Так вот, этот нехитрый код описывает замкнутый цикл прохождения сигнала и «выравнивает» его, как нам было нужно:

    Весело? Кажется, уже да.

    Второй уровень повергает в уныние. Там уже не поможет логика, на которую мы опирались на первом задании, придется лезть в мануалы. Кстати говоря, если бы я мог их распечатать, я бы их распечатал.

    Тут мы сталкиваемся с реалиями синтаксиса игрового языка программирования контроллеров. Но так как желание созидать сильнее, то есть только сожаление, что мануал не на русском или не достаточно подробный (желательно, конечно с картинками, но у нас же все серьезно тут, да?).

    От нас требуется мультиплексировать сигнал в два раза. Окей. Ищем необходимые нам функции, пишем простенький код вида:

    Mov p0 acc mul 2 mov acc p1 slp 1 #ITS ALIVE

    И наслаждаемся очередной маленькой игровой победой:

    Я не буду говорить, сколько мне, как полному профану, потребовалось времени, чтобы понять, как это сделать, но теперь цифра среднего онлайна в 4,5 часа уже не выглядит такой уж и большой.

    Дальнейшие свои утехи с SHENZHEN I/O (и мануалом к игре) я оставлю за кадром.

    В сухом остатке

    Если отбросить в сторону детский восторг (хотя это и очень сложно), то игра получилась увлекательной, по-крайней мере для тех, кто не боится трудностей. Да, там не используется VHDL, поле программирование контроллера весьма ограничено по строкам, но для людей увлеченных этот «симулятор работы» подойдет как нельзя кстати.

    Также его можно использовать для обучения детей в плане понимания алгоритмов и логики, а по отзывам игроков в Steam от SHENZHEN I/O до программирования и мигания лампочкой «ардуиной» - один шаг. Если затянет, конечно.

    Начинающему игроку будет катастрофически не хватать русскоязычного мануала, но с этим может помочь гугл и более опытные товарищи по игре, которые деляться решениями и обсуждают их.

    Механика игры не ограничена написанием трех строчек кода. В дальнейшем можно соревноваться с другими пользователями в уровне оптимизации, энергопотребления и стоимости конечного спроектированного в игре продукта, т.е. самостоятельно ставить перед собой челеджи. Использовал четыре контроллера, когда можно ограничиться тремя? Добро пожаловать к верстаку!

    Также проект находится в стадии раннего доступа и разработчик прямо заявляет, что готов улучшать и развивать игру, добавлять функции и новые задачи, равно как и способы их решения по требованию пользователей. Цена, по его уверению, после выхода в релиз останется прежней.

    Фактически, SHENZHEN I/O заслуженно сравнивают с более хардкорным проектом 2015 года под названием TIS-100, который был создан тем же разработчиком, который порадовал нас SHENZHEN I/O. В TIS-100 порог вхождения еще выше, что подтверждают комментарии Steam:

    Понятно, что создатель игры нацелился на более широкую, если это можно так назвать, аудиторию. Во всяком случае, программирование контроллеров на коленке пугает не так, как превью-скриншоты TIS-100:


    TIS-100

    Игра SHENZHEN I/O требует выдержки и терпения. С первых же минут она наотмашь бьет игрока «бревном жестокой реальности» по лицу, но не настолько сильно, чтобы не попытаться в нее вникнуть. Легко не будет. Не будет красочных кат-сцен, возможности играть лежа на диване или «огроблять корованы». Но будет возможность потренировать свой мозг и попробовать что-то новое.

    Стоит ли SHENZHEN I/O своих денег? Однозначного ответа на этот вопрос нет. Но если у вас есть тяга к созиданию, преодолению трудностей и решению задач в свое удовольствие - да, стоит.

    Статьи по теме: