libbgi: выделить графику BGI в отдельную библиотеку + тест спрайтов
Графика вынесена из libc/ в новую библиотеку libbgi/:
- common/ — mode-agnostic математика и состояние (один исходник,
.rel попадает в оба driver-архива);
- bgi256/ + bgi16/ — mode-specific leaf'ы (raw-плот/чтение/спаны);
- include/ — graphics.h + gfx.h; _bgi.h — внутренний заголовок.
Собираются lib/bgi256.lib (и bgi16.lib в Фазе 2); выбор режима
линковкой через sprinter-cc --gfx 256|16. libc/ теперь без графики.
tests/bgi_img — тест спрайтов getimage/putimage/imagesize (5 операций
COPY/XOR/OR/AND/NOT + XOR-round-trip + self-check imagesize).
Проверен автотестом в MAME.
Примечание: make size-check пока красный (gfx_dbuf/gfx_demo выросли
после реорга) — закрыть по завершении миграции libbgi.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -6,20 +6,26 @@ Target-слой SDCC 4.5 (z80) для компьютера Sprinter Sp2000: crt0
|
||||
## Сборка и проверка
|
||||
|
||||
```
|
||||
make # tools + lib + все тесты (43) + examples
|
||||
make -C lib # только libc → lib/sprinter.lib
|
||||
make # tools + lib + libbgi + все тесты (45) + examples
|
||||
make -C libc # только libc → lib/sprinter.lib
|
||||
make -C libbgi # только BGI → lib/bgi256.lib (и bgi16.lib в Фазе 2)
|
||||
make floppy # упаковать все .exe в mame/v306/IMG/mc.img
|
||||
make size-check # размерный регресс: _CODE vs docs/size_baseline.tsv
|
||||
make size-baseline # принять текущие размеры эталоном
|
||||
```
|
||||
|
||||
Графика (BGI) — отдельная библиотека libbgi/ (см. ниже). Программа,
|
||||
использующая graphics.h, собирается с `--gfx 256` (или `--gfx 16` в
|
||||
Фазе 2): sprinter-cc подлинкует lib/bgi256.lib и добавит -I libbgi/include.
|
||||
|
||||
Одиночный тест: `cd tests/<имя> && make run` (пакует ТОЛЬКО этот exe
|
||||
+ EXTRA_DATA на дискету и запускает MAME). Тесты в MAME гоняет
|
||||
пользователь — готовь дискету и проси прогнать.
|
||||
|
||||
После правок libc: пересборка от чистого листа (`make -C lib clean`)
|
||||
не обязательна — stale .rel чистятся автоматически; `make size-check`
|
||||
обязателен (рост _CODE без причины — регрессия).
|
||||
После правок libc/libbgi: пересборка от чистого листа (`make -C libc clean`
|
||||
/ `make -C libbgi clean`) не обязательна — stale .rel чистятся
|
||||
автоматически; `make size-check` обязателен (рост _CODE без причины —
|
||||
регрессия).
|
||||
|
||||
## Правила libc
|
||||
|
||||
@@ -29,7 +35,7 @@ make size-baseline # принять текущие размеры эталон
|
||||
(`_`-префикс); общие статики — в отдельные data-модули
|
||||
(`_xxx_state.c`); internal-заголовки (`_file.h`, `_gfx.h`, …) —
|
||||
рядом с исходниками, НЕ в libc/include.
|
||||
- Имя файла = имя функции. lib/Makefile собирает wildcard'ом —
|
||||
- Имя файла = имя функции. libc/Makefile собирает wildcard'ом —
|
||||
ничего регистрировать не надо.
|
||||
- Комментарии — на русском; шапка модуля объясняет что/зачем + ABI.
|
||||
- File-scope переменные НЕ инициализировать `= 0` (crt0 зануляет
|
||||
@@ -54,12 +60,13 @@ make size-baseline # принять текущие размеры эталон
|
||||
лимит 8 файловых манипуляторов, 9-й OPEN ВЕШАЕТ DSS (_fd_guard);
|
||||
ENV $46: A=0 = NOT FOUND.
|
||||
- Перед обвинением компилятора/железа — подтвердить артефактом
|
||||
(сгенерированный .asm в lib/build/, дамп, репро) — см.
|
||||
(сгенерированный .asm в libc/build/ или libbgi/build/, дамп, репро) — см.
|
||||
memory/defer_unexplained_quirks.
|
||||
|
||||
## Структура
|
||||
|
||||
- `libc/<area>/*.c` — модули libc; `libc/include/` — публичные заголовки
|
||||
- `libc/<area>/*.c` — модули libc (ядро, БЕЗ графики); `libc/include/` — публичные заголовки libc
|
||||
- `libbgi/` — графика BGI (отдельная библиотека): `common/` — mode-agnostic (один исходник, .rel в обеих driver-библиотеках), `bgi256/` + `bgi16/` — mode-specific leaf'ы (реальные реализации, без обёрток); `include/` — graphics.h + gfx.h; `_bgi.h` — внутренний заголовок. Собирает `lib/bgi256.lib` (и `bgi16.lib` в Фазе 2). Выбор режима линковкой: `--gfx 256` / `--gfx 16`.
|
||||
- `runtime/` — crt0-семейство, heap, bank (bank.s собирается per-build)
|
||||
- `bin/sprinter-cc` — обёртка компилятора; `toolchain/mkexe` — упаковщик
|
||||
- `tests/` — по одному API/фиче; `examples/` — реальные приложения
|
||||
|
||||
Reference in New Issue
Block a user