Estex-DSS/AGENTS.md
2026-07-20 16:38:16 +10:00

16 KiB
Raw Blame History

AGENTS.md — Estex DSS

Документ для ИИ-агентов, работающих с этим репозиторием. Описывает устройство проекта, сборку, соглашения и подводные камни. Всё нижесказанное проверено по содержимому репозитория.

1. Обзор проекта

Estex DSS — доработка дисковой операционной системы DSS (Disk SubSystem) для компьютера Sprinter 2000 (SP2000) — российского ZX Spectrum-совместимого компьютера фирмы Peters Plus на процессоре Z84C15 (Z80-совместимый, со встроенным SIO/CTC). Исходный код унаследован от оригинальной DSS от Peters Plus (автор DNS — Denis Parinov, 19982003) и развивается дальше (правки BAO и др., актуальная версия — DSS 1.71.x).

Весь код — Z80-ассемблер для sjasmplus. Комментарии и документация — на русском языке. Загрузочная цепочка: BIOS (≥3.06) → boot-сектор (DSSloader.bin) → ядро SYSTEM.DOS → командный интерпретатор SYSTEM.EXE.

Проект собирает три системных файла:

Файл Источник Назначение
SYSTEM.DOS DSS/DSS-MAIN.ASM Ядро DSS (API, файловые системы, драйверы)
SYSTEM.EXE SHELL/SHELL.ASM Командный интерпретатор (шелл)
SYS.EXE BOOT/boot.asm Установщик boot-загрузчика и системных файлов на диск
DSSloader.bin BOOT/DSSBOOT.ASM Сам boot-загрузчик (секторный, ORG #8000)

2. Структура репозитория

  • DSS/ — ядро системы:
    • DSS-MAIN.ASM — точка входа сборки ядра: RST-векторы, таблица функций DSS_API_TABLE, карта буферов CORE_BUFFERS, подключает все модули через INCLUDE.
    • API.asm — агрегатор, включает API/*.asm (~50 файлов — по одному системному вызову на файл: Open.asm, Read.asm, ChDir.asm и т.д.).
    • DOS_FS.ASM — файловые/каталожные процедуры DOS-уровня.
    • Procedures.asm — общие помощники (PUTCHAR, MK_TIME и др.).
    • KEYINTER.ASM — клавиатурный драйвер (PS/2-хост на SIO канала A Z84C15), обрабатывается в прерывании RST 38.
    • DRV-MAIN.ASM — страница драйверов (компилируется в отдельный блок через DISP/ENT в конце DSS-MAIN.ASM), своя таблица RST по #A0000+.
    • FS/ — файловые системы: FS.ASM (диспетчер по сигнатуре #AA55), FAT.asm (FAT12/16/32), CDFS.ASM (CD, в разработке — ветка beta_cdfs).
    • drivers/ — драйверы устройств: media/ (ata_atapi-drv, fdd-drv, ram_disk-drv, ATAPI/CDX), Input/ (MOUSE.ASM).
    • first_init.asm — код первой инициализации (затирается после старта).
    • defines.inc — compile-time флаги ядра (мышь, клавиатура, память и т.п.).
    • VERSION.INC — версия ядра + Lua-логика номера билда.
    • build.txt — счётчик билда ядра (одно число, сейчас 6).
    • DSS_API.TXT — полное описание системных вызовов (UTF-8).
    • DSS_MAP.TXT — карта памяти ядра; KNOWN.BUG, ToDo.txt, CHANGES.LOG — известные баги, планы, история изменений.
  • SHELL/ — командный интерпретатор:
    • SHELL.ASM — точка входа, EXEC.ASM — разбор и выполнение команд, BATCH.ASM — парсер .BAT (%VAR%, %0..%9, GOTO/IF), EDLINE.ASM — редактор строки с историей.
    • Commands/ — по файлу на команду: CD/CHDIR, CLS, DATE, DEL, DIR, ECHO, EXIT, GOTO, HELP, IF, INFO, MD/MKDIR, PATH, PAUSE, REM, REN, RD/RMDIR, SET, VER, REBOOT, BREAK.
    • Procedures/ — print, parsers, math, shared. Messages/main_txt.asm — тексты сообщений.
    • version.inc, build.txt — версия и счётчик билда шелла.
    • README.txt — описание команд и клавиш истории (CP866).
  • BOOT/boot.asm (установщик → SYS.EXE), DSSBOOT.ASM (boot-сектор → Build/DSSloader.bin), README.TXT (CP866).
  • Shared_Includes/git-подмодуль (ветка main, относительный URL ../Shared_Includes.git, содержит собственный .git):
    • constants/SP2000.inc (порты/железо Sprinter), BIOS_equ.inc, dss_equ.inc (номера функций DSS), dss_errors.z80, EXE_Header.z80 (512-байтный заголовок EXE), TRDOS/ZX-константы.
    • structures/FileSystem.inc, ATA_ATAPI.INC, bmp.inc.
    • macroses/macros.z80, accelerator.z80.
    • LUA/Functions.lua — Lua-функции для sjasmplus (increase_build, get_build, Get_date_RU, Get_checksum и др.).
    • Docs/ — справочники: BIOS functions.asm, DSS_1.71_Functions.asm, sp2000.pdf, описание команд Z80.
  • Build/ — выходы сборки (не отслеживается git, .gitignore в проекте нет): DSS/{SYSTEM.DOS,SYSTEM.EXE,SYS.EXE}, листинги *.LST, Variables.inc (экспорт символов через --exp), Original/ — оригинальные бинарники Peters Plus для сравнения, *_dasm.a80 — дизассемблирования.
  • Hidden/ — архивные/справочные исходники (ATAPI, CDX); исключены из поиска VS Code (.vscode/settings.jsonsearch.exclude).
  • TMP_CODE.ASM — временный рабочий файл-черновик (не часть сборки).
  • keys.md — детальный хендофф-документ по клавиатурной подсистеме (KEYINTER.ASM) для ИИ-сессий; полезен как образец глубокого разбора.

3. Сборка

Ассемблер: sjasmplus (проверено: установлен в /c/tools/msys64/usr/local/bin/sjasmplus). Makefile нет — сборка идёт через задачи VS Code (.vscode/tasks.json) или вручную теми же командами. Ключевые флаги: --syntax=afw --fullpath -Wno-shortblock.

Ядро (задача «Build SYSTEM.DOS», проверено — собирается, 0 ошибок):

sjasmplus --nologo --syntax=afw --fullpath --color=on -Wno-shortblock \
  --lst=Build/DSS-MAIN.LST --raw=Build/DSS/SYSTEM.DOS \
  --exp=Build/Variables.inc dss/dss-main.asm

Задача «Build NEW VERSION of SYSTEM.DOS» добавляет --define INCREASE_BUILD — при этом Lua-код в DSS/VERSION.INC инкрементирует DSS/build.txt.

Шелл (задача «Build SYSTEM.EXE», проверено — собирается, 0 ошибок): sjasmplus ... --raw=Build/DSS/SYSTEM.EXE SHELL/SHELL.ASM. Без --define INCREASE_BUILD билд шелла не трогает SHELL/build.txt.

Установщик (задача «Build SYS.EXE», проверено — собирается, 0 ошибок): sjasmplus ... --raw=Build/DSS/SYS.EXE boot/boot.asm.

Особенности сборки:

  • Версия ядра: VERS=1, MODF=71 в DSS/VERSION.INC, билд из DSS/build.txt → строка вида «DSS 1.71.6».
  • sjasmplus исполняет встроенные Lua-блоки (LUA PASS1/LUA ALLPASSENDLUA, INCLUDELUA 'Shared_includes/lua/Functions.lua') — через них подставляются дата сборки и номер билда.
  • Пути в INCLUDE относительны корню репозитория — запускать сборку нужно из корня (в задачах cwd = workspaceFolder). Регистр имён (dss/dss-main.asm vs DSS/DSS-MAIN.ASM) в задачах смешанный — на Windows это работает.
  • Включение файлов — текстовое (INCLUDE): модули не компилируются отдельно, всё собирается одним проходом из главного файла. Активно используются MODULE/ENDMODULE, STRUCT/ENDS, DISP/ENT, ASSERT, DISPLAY (смотрите вывод сборки — там карта адресов буферов).

4. Архитектура рантайма

  • Ядро собирается с ORG 0 и живёт на своей странице в слоте 0 (#0000#3FFF); карта — в DSS/DSS_MAP.TXT. Вызов функций DSS из программ: номер функции в регистре C, RST 10h; ошибки возвращаются по флагу CF (код в A). Пример — в начале DSS/DSS_API.TXT.
  • RST-векторы ядра: RST 00 — возврат из процесса (RETFAR), RST 08 — портал в BIOS, RST 10 — DSS API, RST 18 — портал на страницу драйверов, RST 20 — FS API, RST 30 — мышиный API, RST 38 — обработчик IM1 (клавиатура KEYSCAN → мышь → курсор).
  • Диспетчер RST_10 индексирует DSS_API_TABLE (адреса функций хранятся раздельными байтами: младшие и старшие — двумя блоками).
  • Драйверы (DRV-MAIN.ASM) собираются в отдельный блок в конце образа ядра (через DISP 0 … ENT) и работают на собственной странице; переход между страницами — через порталы RST и PORTAL.*.
  • Формат исполняемых файлов Estex — EXE с 512-байтным заголовком (Shared_Includes/constants/EXE_Header.z80: сигнатура 'EXE', версия, адреса загрузки/старта/стека). Шелл собирается с DEFINE App_EXE_Version 1.
  • Многозадачность: процессы с IX-контекстом, номер таски в (ix-1); подробности — в DSS_API.TXT (функции 41h EXEC, 47h APPINFO и др.).
  • Минимальная версия BIOS: 3.06 (MINIMUM_BIOS_VERSION в defines.inc), проверяется в first_init.asm.

5. Соглашения по коду

  • Кодировка: CP866 (русская DOS), переводы строк CRLFу почти всех .asm/.inc/.txt. Исключения в UTF-8: DSS/DSS_API.TXT, keys.md, этот файл. При чтении/поиске из Unix-окружения используйте iconv -f CP866 -t UTF-8 и grep -a (grep может считать файлы бинарными). Не перекодируйте файлы — правьте их, сохраняя CP866+CRLF; git config core.autocrlf=true.
  • Отступы — табуляция; колонки: метка: ОПЕРАЦИЯ операнды ; комментарий. Локальные метки — через точку (.loop), модули — MODULE/ENDMODULE.
  • В заголовках файлов — таблица изменений Rev / Date / Name / Description (авторы: DNS, BAO и др.). При существенных правках добавляйте строку туда же в том же формате.
  • Маркеры задач в коде: ;!TODO, ;!FIXIT, ;!HARDCODE, чек-листы [ ] / [x] / [!] (легенда — в DSS/ToDo.txt).
  • Compile-time конфигурация — только через DEFINE в DSS/defines.inc (для ядра) и аналогичных *.inc; закомментированный define = выключено (см. комментарий в начале defines.inc).
  • Новый системный вызов: файл DSS/API/<Name>.asm + include в DSS/API.asm + слот в DSS_API_TABLE + константа в Shared_Includes/constants/dss_equ.inc + описание в DSS/DSS_API.TXT.
  • Новая команда шелла: файл SHELL/Commands/<CMD>.ASM + include в SHELL/SHELL.ASM + регистрация в парсере (EXEC.ASM/BATCH.ASM).
  • Коммит-сообщения — на русском, свободной формы; пометки вида -bug, -bugfix, !FIXIT. Текущая ветка разработки — beta_cdfs.

6. Тестирование и отладка

Автоматических тестов в проекте нет. Проверка — ручная, на эмуляторе или реальном железе:

  • Задача «Copy files to IMG» / «Copy THIS file to Test_2g.img»: hdfmonkey put копирует собранные файлы в HDD-образ C:\tools\Progs\MAME\IMG\test_2g.img (или sp_disk2.img).
  • Задача «Run MAME» запускает эмулятор через внешний .bat (C:\tools\Progs\MAME\*.bat, сами скрипты вне репозитория).
  • Отладка: VS Code + DeZog (.vscode/launch.json, remoteType zsim), использует .sld-файлы sjasmplus; задача «Build this file» собирает текущий файл с --sld для отладчика.
  • Дизассемблирование: задача «Disassemble binary» (z80dasm).
  • Листинг Build/DSS-MAIN.LST (~1 МБ) и вывод DISPLAY при сборке — основной способ контроля адресов/размеров.
  • При сборке с --define INCREASE_BUILD меняются отслеживаемые git'ом файлы */build.txt — не коммитьте случайные инкременты.

7. Безопасность и осторожность

  • Код напрямую программирует железо (OUT в системные порты, переключение страниц памяти, прерывания) — ошибка может подвесить систему только на целевой машине/эмуляторе, но не хост.
  • hdfmonkey put модифицирует файлы-образы дисков — убедитесь, что путь к образу верный, прежде чем запускать задачи копирования.
  • BOOT/boot.asm (SYS.EXE) — программа записи boot-сектора на реальные FDD/HDD; на реальном железе это потенциально деструктивная операция.

8. Известные проблемы (на момент написания)

  • Сборка SYSTEM.EXE сломанаисправлено 2026-07-18 (в рабочем дереве, правка SHELL/version.inc ещё не закоммичена): задвоенные блоки (CONSOLE_VERS/CONSOLE_MODF/CONSOLE_BUILD, лишний LUA ALLPASS) убраны, increase_build вызывается только при --define INCREASE_BUILD. Проверено: шелл собирается с 0 ошибок, SHELL/build.txt не меняется. Исходная поломка была зафиксирована в коммите 32dca48.
  • Актуальные списки багов и планов: DSS/KNOWN.BUG (включая разбор багов от ИИ), DSS/ToDo.txt, DSS/CHANGES.LOG (секции !FIXIT/!TODO).
  • Ветка beta_cdfs — работа над CDFS/BigDir в процессе («Пока не работает, надо доделывать BigDir» — коммит 41ff458).