На GitHub выложили тетрис, целиком помещающийся в загрузочном секторе

TetrOS — клон знаменитого Tetris, написанный на ассемблере. Он целиком вмещается в 512 байт загрузочного сектора (ему требуется всего 446 байт места, это как раз максимальный размер загрузчика в MBR).

MBR — раздел, содержащий код и данные, необходимые для последующей загрузки операционной системы и расположенные в первых физических секторах. Самые первые 446 байт диска отдаются под код загрузчика. Именно в это место и записывается TetrOS.

Естественно, из-за таких свойств он загружается перед любой операционной системой — никакой ОС ему не требуется, он работает сам. Да-да, вы не ослышались, TetrOS — сам себе загрузчик.

Вот так это выглядит на экране:

А исходник на загрузочном секторе выглядит так:

И да, это весь исходник. Вы же помните, что он весит всего 446 байт?

Можно запустить эту «чудо-операционную систему» под qemu или даже по-настоящему установить на загрузочный раздел диска или флешки.

Запуск

qemu

Просто установите qemu:

sudo apt-get install qemu

и запустите:

make run

Загрузка на флешку

Скопируйте образ на флешку. Допустим, если флешка подмонтирована как /dev/sde, вам понадобится выполнить следующую команду, чтобы записать на ее загрузочный сектор TetrOS:

sudo dd if=tetros.img of=/dev/sde

Описание игры

Разработчик сумел всего в 512 байт памяти впихнуть не самый скучный дизайн. У каждого кирпичика в игре есть свой цвет, управление производится кнопками, в случае поражения игра завершается, кирпичики генерируются случайным образом… BolgenOS и рядом не стояла!

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

Игра написана на nasm, и ее можно собрать самостоятельно. Устанавливаем nasm:

sudo apt-get install nasm

Собираем с помощью команды make. На выходе вы получите файл tetros.img.

Аналоги

Это не единственный проект, умещающий какую-либо классическую игру в один загрузочный сектор. Вот, например:

Источник: GitHub