Space Invaders: теперь и в 512 байт (Assembler x86)

    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.

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

    Поделиться публикацией

    Похожие публикации

    Комментарии 16

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

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

        0
        Жаль, дискеты свое отжили. Было бы прикольно иметь загрузочную «обычную» дискету с такой игрушкой, чтобы с чистой дискеты запускать и удивлять окружающих.
          0
          Ну, с чистой дискеты можно и что-то более серьёзное запустить (DOOM, например), если разместить это в неиспользованных кластерах, а в бутсекторе — только код загрузки.
            0
            В буут сектор её!
            ПС: На гитхабе даже скомпилированная для бута версия есть :-)
              0
              с ОС KolibriOS на одной дискете не знакомы и её набором софта?

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

              P.S. На образе CD системы игрушек и софта гораздо больше (~34 Мб) включая такие игрушки как Doom и Quke1 :)
                0
                с ОС KolibriOS на одной дискете не знакомы и её набором софта?
                Речь шла о запуске не просто с дискеты, а с чистой дискеты, если с неё загрузиться.
            +1
            Также, использование в коде программы инструкций ассемблера PUSHA/POPA требует наличия процессора 80286 и выше.
            Раз уж заговорили про «минимальные требования», то 80186.
              0
              Действительно, спасибо за уточнение!
              –5
              а в чём смысл в две тысячи, мать его, девятнадцатом году так извращаться над копролитами? вот если ты такой крутой программист, то лучше пиши оптимизацию для актуального софта, а то например нетбуки вымерли как класс, хотя штуки были довольно удобные для определённых целей. а почему вымерли? а потому, что нынче для браузера надо столько ресурсов, сколько даже ОС, в которой он крутится, не нужно.
                +1
                Что за чепуха? Должно быть так: используя современный фреймворк на какой нибудь андроид и все современные ускорители игра не может занимать меньше 150 МБ, требовать не меньше гига ОЗУ и не менее 2 ядерного ЦПУ :)
                  0

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

                    0
                    Пф-ф-ф… Какой Windows? notepad.exe и то не факт, что влезет в эти ограничения.
                  +3
                  Ребят, ну что это за твиттер-статья? «Вышла новая игра, вот видео, вот тут исходники». Всё. Где описание-то трюков, особенностей кода, как им удалось уместить логику в такой объем, на какие компромиссы они пошли — где это все?
                    +1
                    На самом деле, это всё ещё в 4 раза больше, чем весь размер оперативной памяти Atari 2600 — но уже с легкостью поместилось бы на её картридж, который предоставлял 2 килобайта памяти.

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

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

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

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

                    Самое читаемое