image

Казалось бы, ещё совсем недавно Space Invaders умещали в 1 килобайт, а теперь смогли уместить в один загрузочный сектор (512 байт). Автор программы — Оскар Толедо, пятикратный победитель IOCCC (International Obfuscated C Code Contest) и регулярный участник JS1K, также известный как создатель шахмат, которые занимают всего 392 байта.

Исходный код игры можно посмотреть в репозитории на Github: github.com/nanochess/Invaders

Для запуска вам потребуется nasm (Netwide Assembler), который можно скачать на официальном сайте. Игру можно собрать, выполнив команду:

nasm -f bin invaders.asm -Dcom_file=1 -o invaders.com

На самом деле, это всё ещё в 4 раза больше, чем весь размер оперативной памяти Atari 2600 — но уже с легкостью поместилось бы на её картридж, который предоставлял 2 килобайта памяти. Также, использование в коде программы инструкций ассемблера PUSHA/POPA требует наличия процессора 80186 и выше.

Оригинальная Space Invaders вышла в 1980 году и стала одной из первых аркад, портированных на Atari 2600 с игровых автоматов. Игра стала бестселлером, увеличившим продажи самой консоли в 4 раза. Оригинал игры, появившийся на аркадных автоматах в 1978 году, по словам её автора, был в свою очередь вдохновлен другой игрой Atari — Breakout.

Демонстрацию работы игры можно посмотреть на видео.

Комментарии (15)


  1. saipr
    05.06.2019 10:42

    Казалось бы, ещё совсем недавно Space Invaders умещали в 1 килобайт, а теперь смогли уместить в один загрузочный сектор (512 байт). Автор программы — Оскар Толедо

    Все это мне напомнило эпоху становления компьютерной техники в СССР. Помню сам, когда писал СУБД "РПГ-М-220", а меня в распоряжении было всего 4К оператиной памяти и ленты.
    Классикой же следует признать ИС-2 (интерпретирующая система) для серии машин М — 20 и старше, которая стала фактически предвестником ОС. Написал ее, как гласит легенда, за одно воскресенье Шура-Бура. Борьба шла не только за память, но и за быстродействие (такты работы). Мне посчастливилось встречаться с этим великим программистом.


  1. we1
    05.06.2019 12:07

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


    1. vmchaz
      05.06.2019 13:23

      Ну, с чистой дискеты можно и что-то более серьёзное запустить (DOOM, например), если разместить это в неиспользованных кластерах, а в бутсекторе — только код загрузки.


    1. dentata911
      05.06.2019 15:59

      В буут сектор её!
      ПС: На гитхабе даже скомпилированная для бута версия есть :-)


    1. FForth
      05.06.2019 19:29

      с ОС KolibriOS на одной дискете не знакомы и её набором софта?

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

      P.S. На образе CD системы игрушек и софта гораздо больше (~34 Мб) включая такие игрушки как Doom и Quke1 :)


      1. Anynickname
        05.06.2019 20:28

        с ОС KolibriOS на одной дискете не знакомы и её набором софта?
        Речь шла о запуске не просто с дискеты, а с чистой дискеты, если с неё загрузиться.


        1. mistergrim
          05.06.2019 20:46

          1. Anynickname
            05.06.2019 21:04

            Не могли бы вы пояснить, к чему тут этот комментарий


  1. rogoz
    05.06.2019 13:06
    +1

    Также, использование в коде программы инструкций ассемблера PUSHA/POPA требует наличия процессора 80286 и выше.
    Раз уж заговорили про «минимальные требования», то 80186.


    1. HotWaterMusic Автор
      05.06.2019 13:18

      Действительно, спасибо за уточнение!


  1. Hidon
    05.06.2019 15:45
    -1

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


  1. melodictsk
    05.06.2019 16:31

    Что за чепуха? Должно быть так: используя современный фреймворк на какой нибудь андроид и все современные ускорители игра не может занимать меньше 150 МБ, требовать не меньше гига ОЗУ и не менее 2 ядерного ЦПУ :)


    1. saipr
      05.06.2019 17:38

      Это вы про требования MS Windows?


  1. MacIn
    05.06.2019 18:14

    Ребят, ну что это за твиттер-статья? «Вышла новая игра, вот видео, вот тут исходники». Всё. Где описание-то трюков, особенностей кода, как им удалось уместить логику в такой объем, на какие компромиссы они пошли — где это все?


  1. quwy
    06.06.2019 02:28

    На самом деле, это всё ещё в 4 раза больше, чем весь размер оперативной памяти Atari 2600 — но уже с легкостью поместилось бы на её картридж, который предоставлял 2 килобайта памяти.

    Не совсем корректное сравнение.

    На 2600, как и на почти всех консолях тех времен, распаянная на картридже ROM входила непосредственно в адресное пространство процессора, т.е. код выполнялся прямо с микросхем постоянной памяти без предварительной загрузки в оперативную. RAM отвечала только за хранение переменных.

    Поэтому нужно не тупо сравнивать размер файла и объем ОЗУ, а смотреть, сколько байт разнообразных переменных игра использует при работе. Я код не анализировал, но может быть, что даже 128 байт хватило бы. В этом случае можно утверждать, что «совместимость» уже достигнута: код и константы помещается на картридж, переменные помещаются в ОЗУ.