Guest User

Untitled

a guest
Jun 17th, 2026
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.71 KB | None | 0 0
  1. # Snake ISO - Модульная змейка (v5 — таймер и улучшенное управление)
  2.  
  3. ## Общая информация
  4. - **Проект:** Модульный Game ISO с загрузкой через Ventoy в Legacy BIOS.
  5. - **Цель:** Создать bootable ISO, где игры — отдельные .BIN-файлы в `/GAMES/`.
  6. - **Текущая игра:** Змейка (Snake) с яблоками, ростом и таймерной задержкой.
  7. - **Дата сборки:** 25 мая 2026 г.
  8. - **Платформа:** x86 Legacy BIOS (тестировалось на X79).
  9. - **Окружение сборки:** Termux на Android (aarch64), clang/lld, Python, PyCdlib.
  10.  
  11. ## Что работает
  12. - **Legacy BIOS:** ISO загружается через Ventoy, запускается loader, игра в 0x8000.
  13. - **Змейка:**
  14. - Управление стрелками (нельзя повернуть назад).
  15. - Случайное появление красного яблока (символ сердца).
  16. - При поедании яблока змейка увеличивается на 1 сегмент, яблоко превращается в сегмент тела, генерируется новое яблоко.
  17. - Хвост стирается, экран очищается при старте, курсор скрыт (через VGA-регистры).
  18. - При выходе за границы экрана — wrap по Y (0..24) и X (0..79).
  19. - **Таймерная задержка:** используется счётчик тиков BIOS (0x46C), 3 тика (~165 мс) на шаг. Скорость одинакова на любом процессоре.
  20. - **Улучшенное управление:** цикл опроса клавиатуры обрабатывает все нажатия за кадр, без пропусков.
  21. - **UEFI:** Пока не работает (образ не распознаётся Ventoy на X79). Экспериментальные файлы сохранены отдельно.
  22.  
  23. ## Известные ограничения
  24. - При самопересечении змеи (прохождении сквозь тело) могут появляться чёрные дыры на месте стираемого хвоста. Это фановый режим, не влияет на играбельность.
  25.  
  26. ## Файлы в резервной копии
  27. | Файл | Назначение |
  28. |------|------------|
  29. | `snake.iso` | Готовый загрузочный ISO (Legacy). Копируется на Ventoy, загружается как Legacy BIOS El Torito no-emul. |
  30. | `snake_game.s` | Исходный код игры (16-битный real mode, ассемблер). |
  31. | `loader.s` | Загрузчик игр (512 байт). Печатает "LOAD", читает 8 секторов (snake_game.bin) с диска в 0x8000, передаёт управление. |
  32. | `build_modular.py` | Python-скрипт сборки: компиляция, линковка, создание ISO через PyCdlib, патчинг LBA, копирование на /sdcard/. |
  33. | `README.md` | Этот файл документации. |
  34.  
  35. ## Как собрать ISO с нуля
  36. 1. Установить зависимости в Termux: `clang`, `lld`, `python`, `pycdlib`.
  37. 2. Поместить все файлы из резервной копии в рабочую папку (`~/kernel`).
  38. 3. Запустить:
  39. ```bash
  40. python3 build_modular.py
  41. ```
  42. 4. Готовый `snake.iso` появится в текущей папке и автоматически скопируется в `/sdcard/`.
  43.  
  44. ## Принцип работы (Legacy)
  45. - **Loader (MBR, 512 байт)** загружается BIOS'ом Ventoy в 0x7C00.
  46. - Выводит "LOAD", формирует DAP (INT 13h AH=42h) и читает 8 секторов (snake_game.bin) с LBA, пропатченного на этапе сборки.
  47. - Загруженный код помещается в 0x8000, затем loader делает `jmp $0x0000, $0x8000`.
  48. - **Snake_game**:
  49. - Устанавливает видеорежим 80x25 (BIOS), скрывает курсор (VGA), очищает экран.
  50. - Инициализирует змейку (длина 3, направление вправо, позиция в центре).
  51. - Генерирует первое яблоко (случайная позиция через INT 1Ah).
  52. - Главный цикл: рисует голову (ярко-зелёный 0xDB), яблоко (красное сердце 0x03), ждёт 3 тика таймера, опрашивает клавиатуру в цикле.
  53. - При поедании яблока: увеличивает длину, заменяет яблоко на символ тела, генерирует новое яблоко, не стирает хвост.
  54. - При обычном движении: сдвигает голову, стирает хвост, сдвигает tail_idx.
  55. - Wrap: при выходе за границы переносит голову на противоположную сторону.
  56. - **Таймер:** ожидание реализовано через чтение младшего слова счётчика тиков по адресу 0x46C. 1 тик ≈ 55 мс, значение задержки задаётся в CX (сейчас 3).
  57. - **Клавиатура:** после ожидания вызывается цикл, который через BIOS (INT 16h AH=1) проверяет наличие нажатых клавиш и обрабатывает их все, изменяя направление. Это исключает пропуски быстрых нажатий.
  58.  
  59. ## История версий
  60. - **v1:** Базовая змейка без яблок, программная задержка.
  61. - **v2:** Добавлены яблоки и рост, исправлена чёрная дыра на месте яблока.
  62. - **v3:** Скрытие курсора через VGA (прямая запись в порты).
  63. - **v4:** Улучшенное управление (цикл опроса клавиатуры), программная задержка 0x0700.
  64. - **v5 (текущая):** Заменена программная задержка на таймер BIOS (0x46C, 3 тика). Управление осталось улучшенным. Добавлена проверка хвоста на совпадение с головой/яблоком (не стирать), но полная проверка на тело отложена из-за нестабильности.
Advertisement
Add Comment
Please, Sign In to add comment