libbgi: спрайтовый движок v2 + accel-блит/heal leaf'ы + noclip-путь

Спрайтовая графика поверх accel block-copy (docs/sprite-api-design.md):

- Ядро блиттинга: leaf'ы _bgi_blit_rows_raw (dst фикс, только src-страйд) /
  _bgi_copy_rows_raw (getimage) / _bgi_heal_rows_raw (src==dst). DI один на
  спрайт (санкция: малый спрайт под одним DI аудио не рвёт); src[0]-фикс
  снят (точная MAME подавляет CPU-байт триггера записи — на железе
  перепроверить; для heal был избыточен и снят безусловно).
- Общие bracket-free ядра _gfx_blit_full/_gfx_heal_full (полная ширина:
  клип по экрану + split >256 для putimage) + лин _gfx_blit_sprite/
  _gfx_heal_sprite (кадр ≤64, без split, 8-бит w/h) + noclip-варианты
  (клип-кода нет → полный codegen-win).  Имя *_full (не *_clip) — «clip»
  двусмысленно (sprite-ядра тоже клипуют; различитель — ширина/split).
- Движок retained-модели <sprite.h>: sprite_init/update/flip + inline
  move/frame/show/hide/touch; drawn[2] per-page внутри структуры; кадр —
  двухпроходно heal ВСЕ -> блит ВСЕ под одной W3-скобкой/банком на проход.
- Флаг gfx_sprite_clip(on/off): приложение, само следящее за границами,
  отключает клип (~+19% на анимации; диспетч пока через if — funcptr далее).
- putsprite/movesprite/gfx_blit/putimage(COPY)/getimage переведены на ядро.

Тесты: examples/balls (движок, дабл-буфер, boundary-тест клипа),
tests/sprites (RAM PASS, клип 4 края, атлас), tests/blitw (trig-leak),
tests/spriteclip (hardware-probe: железо НЕ режет за краем -> клип нужен),
tests/blitperf, tests/gfxbanks. size-baseline обновлён (53 программы).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-12 21:47:37 +03:00
parent 78161561e7
commit 72ce66275e
42 changed files with 2835 additions and 32 deletions
+7 -1
View File
@@ -3,13 +3,16 @@ accfill 3772
argv 3431
assrtest 3847
attrprob 4087
balls 6393
banked 1056
bankedbg 1067
banklocl 4683
banktest 3767
bgi_img 6222
bgi_img 7060
bgitest 3737
bios_text 4461
blitperf 5860
blitw 4939
cat 913
cblstream 6217
cbltest 6366
@@ -24,6 +27,7 @@ filetest 10547
gets 509
gfx_dbuf 5032
gfx_demo 4103
gfxbanks 6044
hello 4167
hello2 4244
irqtest 5850
@@ -39,6 +43,8 @@ rt_test 4892
seek 4188
simple 955
solidt 11531
spriteclip 4187
sprites 9968
stattest 7549
stdlib 6643
stest2 3644
1 # Эталон размеров _CODE (байт); обновление: python3 toolchain/size_check.py --update
3 argv
4 assrtest
5 attrprob
6 balls
7 banked
8 bankedbg
9 banklocl
10 banktest
11 bgi_img
12 bgitest
13 bios_text
14 blitperf
15 blitw
16 cat
17 cblstream
18 cbltest
27 gets
28 gfx_dbuf
29 gfx_demo
30 gfxbanks
31 hello
32 hello2
33 irqtest
43 seek
44 simple
45 solidt
46 spriteclip
47 sprites
48 stattest
49 stdlib
50 stest2