Казалось бы, ещё совсем недавно 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)
we1
05.06.2019 12:07Жаль, дискеты свое отжили. Было бы прикольно иметь загрузочную «обычную» дискету с такой игрушкой, чтобы с чистой дискеты запускать и удивлять окружающих.
vmchaz
05.06.2019 13:23Ну, с чистой дискеты можно и что-то более серьёзное запустить (DOOM, например), если разместить это в неиспользованных кластерах, а в бутсекторе — только код загрузки.
dentata911
05.06.2019 15:59В буут сектор её!
ПС: На гитхабе даже скомпилированная для бута версия есть :-)
FForth
05.06.2019 19:29с ОС KolibriOS на одной дискете не знакомы и её набором софта?
Размер многих программ (и игрушек) в ней удивительно мал и ещё за счёт того, что их можно сжать штатным архиватором и в таком виде их система запустит (автоматом разархивировав) Удивляйте этой системой окружающих.
P.S. На образе CD системы игрушек и софта гораздо больше (~34 Мб) включая такие игрушки как Doom и Quke1 :)Anynickname
05.06.2019 20:28с ОС KolibriOS на одной дискете не знакомы и её набором софта?
Речь шла о запуске не просто с дискеты, а с чистой дискеты, если с неё загрузиться.
rogoz
05.06.2019 13:06+1Также, использование в коде программы инструкций ассемблера PUSHA/POPA требует наличия процессора 80286 и выше.
Раз уж заговорили про «минимальные требования», то 80186.
Hidon
05.06.2019 15:45-1а в чём смысл в две тысячи, мать его, девятнадцатом году так извращаться над копролитами? вот если ты такой крутой программист, то лучше пиши оптимизацию для актуального софта, а то например нетбуки вымерли как класс, хотя штуки были довольно удобные для определённых целей. а почему вымерли? а потому, что нынче для браузера надо столько ресурсов, сколько даже ОС, в которой он крутится, не нужно.
melodictsk
05.06.2019 16:31Что за чепуха? Должно быть так: используя современный фреймворк на какой нибудь андроид и все современные ускорители игра не может занимать меньше 150 МБ, требовать не меньше гига ОЗУ и не менее 2 ядерного ЦПУ :)
MacIn
05.06.2019 18:14Ребят, ну что это за твиттер-статья? «Вышла новая игра, вот видео, вот тут исходники». Всё. Где описание-то трюков, особенностей кода, как им удалось уместить логику в такой объем, на какие компромиссы они пошли — где это все?
quwy
06.06.2019 02:28На самом деле, это всё ещё в 4 раза больше, чем весь размер оперативной памяти Atari 2600 — но уже с легкостью поместилось бы на её картридж, который предоставлял 2 килобайта памяти.
Не совсем корректное сравнение.
На 2600, как и на почти всех консолях тех времен, распаянная на картридже ROM входила непосредственно в адресное пространство процессора, т.е. код выполнялся прямо с микросхем постоянной памяти без предварительной загрузки в оперативную. RAM отвечала только за хранение переменных.
Поэтому нужно не тупо сравнивать размер файла и объем ОЗУ, а смотреть, сколько байт разнообразных переменных игра использует при работе. Я код не анализировал, но может быть, что даже 128 байт хватило бы. В этом случае можно утверждать, что «совместимость» уже достигнута: код и константы помещается на картридж, переменные помещаются в ОЗУ.
saipr
Все это мне напомнило эпоху становления компьютерной техники в СССР. Помню сам, когда писал СУБД "РПГ-М-220", а меня в распоряжении было всего 4К оператиной памяти и ленты.
Классикой же следует признать ИС-2 (интерпретирующая система) для серии машин М — 20 и старше, которая стала фактически предвестником ОС. Написал ее, как гласит легенда, за одно воскресенье Шура-Бура. Борьба шла не только за память, но и за быстродействие (такты работы). Мне посчастливилось встречаться с этим великим программистом.