int06 (int06) wrote in gamer,
int06
int06
gamer

Categories:

TIS-100

Оригинал взят у int06 в post

Я тут наткнулся на (вне)очередную инди-игру. Про, как бы ни было трудно поверить, программирование на ассемблере. И она затягивает :)


Называется TIS-100 (Tessellated Intelligence System - 100), от авторов нишевой, но интересной SpaceChem (это вообще заметно - в SpaceChem игровой процесс был построен вокруг обработки атомов связанными реакторами, в TIS-100 - вокруг обработки байтов связанными процессорами).

Графика очень простая, практически примитивная, но стилизация великолепная. Легко поверить, что ты и в самом деле возишься с настоящим компьютером. О том что это игра, в интерфейсе не напоминает ничего, нет даже обычной и казалось бы, обязательной менюшки SAVE/LOAD/OPTIONS/EXIT.

2015-08-14_00004.jpg

При запуске появляется power-on self-test как на PC, крутятся килобайты протестированной памяти, потом система сообщает, что некоторые сегменты неисправны, и выводит спартанский отладочный интерфейс со списком сегментов и их статусом.

2015-08-02_00002.jpg

Цель игры в том, чтобы починить неисправные сегменты и запустить компьютер, а для этого для каждого из повреждённых сегментов надо написать программу, реализующую то, что делал этот сегмент. Функции сегментов, т.е. задачки - нормальные такие: поиск максимума/минимума, переворот строки, сортировка последовательности. Он начинающих программистов такое на собеседовании хотят, при этом не заставляя их писать на ассемблере с предельно ограниченными ресурсами.

2015-08-14_00005.jpg

Каждый сегмент состоит из процессоров-нод (до 12, обычно меньше), работающих параллельно и связанных друг с другом портами ввода-вывода. Архитектура и ассемблер совсем простые: у ноды-процессора только два регистра (мало, конечно, ну так и у настоящих процессоров их всегда меньше чем нужно :) ) - accumulator и backup (backup напрямую недоступен, используется он только для запоминания значения аккумулятора), группа команд MOV (причём можно что-то типа DMA / channel I/O - т.е. можно читать данные из одного порта и писать в другой одной MOV-командой без использования регистров, и есть аналог юниксовых poll/epoll), пара команд, копирующих accumulator в backup-регистр и обратно, базовая арифметика ADD/SUB/NEG, группа команд перехода JMP (условные, безусловный и относительный - по содержимому регистра), обязательный NOP - вот практически и всё. В лучших традициях больших систем есть недокументированная инструкция :) Да, с игрой идёт Reference Manual на архитектуру и систему команд TIS-100, помятый, исчёрканный карандашом, ключевые места выделены маркером. Стилизация великолепна, я уже говорил? :)

20150814_211040_BEST-1.jpg
Распечатанный Reference Manual удваивает погружение :)

Когда программа готова, её можно отладить, выполняя инструкции пошагово (но шаг выполняется параллельно на всех нодах, это не делает этот процесс простым), или же запустить. Система прогонит несколько тестов - проверит, что программа выдаёт правильные ответы, как на фиксированных наборах входных данных, так и на случайно сгенерированной последовательности. Т.е. написать программу из одних MOV, тупо выдающую правильный ответ не получится, халявы не будет.

После того, как программа пройдёт все тесты, и сегмент станет рабочим, игра покажет статистику, как другие игроки справились с этой задачей, и из неё будет видно, что какой-то талант написал более быструю программу (обычно - в разы более быструю), другой - более короткую, а третий обошёлся меньшим количеством нод. И тут программистская гордость заставляет зависнуть на сегменте-уровне ещё на час-другой и сделать не хуже. :) Самое интересное, конечно - написать быструю программу, используя преимущества параллельных вычислений на нескольких нодах. И это, блин, сложно, потому что постоянно оказывается, что одна нода слишком часто ждёт данных от другой, и из-за этого распараллеленная программа нередко оказывается даже медленнее простой. Всё как на больших системах :)

В некоторых сегментах-задачах встречаются ноды-стэки (программировать их нельзя, можно только писать/читать в/из) и графический процессор (записанные в него данные интерпретируются как команды - переместить курсор в координату (x,y), нарисовать линию из точек заданных цветов и т.д). Ещё есть нерабочие ноды, у некоторых из них можно сделать дамп, в котором записаны заметки предыдущего владельца этого компьютера, немного проясняющие то, что с ним случилось. Да, в игре про ассемблер есть сюжет! Простенький, но всё же.

Итого я завис в этой штуке примерно на неделю. Но рекомендовать не решаюсь. Всё же забава мало того, что крайне на любителя, так ещё и большая часть задач для рядового игрока будет слишком сложной (те, кому они по зубам, вполне могут заниматься тем же самым на работе и получать за это очень хорошую зарплату, а не абстрактное чувство глубокого удовлетворения и виртуальные медальки-ачивки). Но если при воспоминаниях о старых добрых временах, когда XOR AX,AX был на такт быстрее чем MOV AX,0, и это позволяло заметно ускорить свою программу, накатывает ностальгия, то игру стоит попробовать.

Ссылки:
Сайт разработчика.
TIS-100 в Steam.

Tags: .рубрика: инди-игры
Subscribe
promo gamer december 14, 2012 10:36 41
Buy for 100 tokens
Советы авторам! 0. Если ваша статья крупнее расписания лекций третьего курса на четверг - прячьте под кат все, кроме одного небольшого скриншота\картинки и одного-двух абзацев. По кату обязательно кликнут и прочтут остальное, не беспокойтесь. 1. Определите для себя, о какой игре вы…
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 7 comments