Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Snake ISO - Модульная змейка (v5 — таймер и улучшенное управление)
- ## Общая информация
- - **Проект:** Модульный Game ISO с загрузкой через Ventoy в Legacy BIOS.
- - **Цель:** Создать bootable ISO, где игры — отдельные .BIN-файлы в `/GAMES/`.
- - **Текущая игра:** Змейка (Snake) с яблоками, ростом и таймерной задержкой.
- - **Дата сборки:** 25 мая 2026 г.
- - **Платформа:** x86 Legacy BIOS (тестировалось на X79).
- - **Окружение сборки:** Termux на Android (aarch64), clang/lld, Python, PyCdlib.
- ## Что работает
- - **Legacy BIOS:** ISO загружается через Ventoy, запускается loader, игра в 0x8000.
- - **Змейка:**
- - Управление стрелками (нельзя повернуть назад).
- - Случайное появление красного яблока (символ сердца).
- - При поедании яблока змейка увеличивается на 1 сегмент, яблоко превращается в сегмент тела, генерируется новое яблоко.
- - Хвост стирается, экран очищается при старте, курсор скрыт (через VGA-регистры).
- - При выходе за границы экрана — wrap по Y (0..24) и X (0..79).
- - **Таймерная задержка:** используется счётчик тиков BIOS (0x46C), 3 тика (~165 мс) на шаг. Скорость одинакова на любом процессоре.
- - **Улучшенное управление:** цикл опроса клавиатуры обрабатывает все нажатия за кадр, без пропусков.
- - **UEFI:** Пока не работает (образ не распознаётся Ventoy на X79). Экспериментальные файлы сохранены отдельно.
- ## Известные ограничения
- - При самопересечении змеи (прохождении сквозь тело) могут появляться чёрные дыры на месте стираемого хвоста. Это фановый режим, не влияет на играбельность.
- ## Файлы в резервной копии
- | Файл | Назначение |
- |------|------------|
- | `snake.iso` | Готовый загрузочный ISO (Legacy). Копируется на Ventoy, загружается как Legacy BIOS El Torito no-emul. |
- | `snake_game.s` | Исходный код игры (16-битный real mode, ассемблер). |
- | `loader.s` | Загрузчик игр (512 байт). Печатает "LOAD", читает 8 секторов (snake_game.bin) с диска в 0x8000, передаёт управление. |
- | `build_modular.py` | Python-скрипт сборки: компиляция, линковка, создание ISO через PyCdlib, патчинг LBA, копирование на /sdcard/. |
- | `README.md` | Этот файл документации. |
- ## Как собрать ISO с нуля
- 1. Установить зависимости в Termux: `clang`, `lld`, `python`, `pycdlib`.
- 2. Поместить все файлы из резервной копии в рабочую папку (`~/kernel`).
- 3. Запустить:
- ```bash
- python3 build_modular.py
- ```
- 4. Готовый `snake.iso` появится в текущей папке и автоматически скопируется в `/sdcard/`.
- ## Принцип работы (Legacy)
- - **Loader (MBR, 512 байт)** загружается BIOS'ом Ventoy в 0x7C00.
- - Выводит "LOAD", формирует DAP (INT 13h AH=42h) и читает 8 секторов (snake_game.bin) с LBA, пропатченного на этапе сборки.
- - Загруженный код помещается в 0x8000, затем loader делает `jmp $0x0000, $0x8000`.
- - **Snake_game**:
- - Устанавливает видеорежим 80x25 (BIOS), скрывает курсор (VGA), очищает экран.
- - Инициализирует змейку (длина 3, направление вправо, позиция в центре).
- - Генерирует первое яблоко (случайная позиция через INT 1Ah).
- - Главный цикл: рисует голову (ярко-зелёный 0xDB), яблоко (красное сердце 0x03), ждёт 3 тика таймера, опрашивает клавиатуру в цикле.
- - При поедании яблока: увеличивает длину, заменяет яблоко на символ тела, генерирует новое яблоко, не стирает хвост.
- - При обычном движении: сдвигает голову, стирает хвост, сдвигает tail_idx.
- - Wrap: при выходе за границы переносит голову на противоположную сторону.
- - **Таймер:** ожидание реализовано через чтение младшего слова счётчика тиков по адресу 0x46C. 1 тик ≈ 55 мс, значение задержки задаётся в CX (сейчас 3).
- - **Клавиатура:** после ожидания вызывается цикл, который через BIOS (INT 16h AH=1) проверяет наличие нажатых клавиш и обрабатывает их все, изменяя направление. Это исключает пропуски быстрых нажатий.
- ## История версий
- - **v1:** Базовая змейка без яблок, программная задержка.
- - **v2:** Добавлены яблоки и рост, исправлена чёрная дыра на месте яблока.
- - **v3:** Скрытие курсора через VGA (прямая запись в порты).
- - **v4:** Улучшенное управление (цикл опроса клавиатуры), программная задержка 0x0700.
- - **v5 (текущая):** Заменена программная задержка на таймер BIOS (0x46C, 3 тика). Управление осталось улучшенным. Добавлена проверка хвоста на совпадение с головой/яблоком (не стирать), но полная проверка на тело отложена из-за нестабильности.
Advertisement
Add Comment
Please, Sign In to add comment