libbgi: chunked-заливки на мульти-триггере акселератора + сплит rectfill
Семантика FSM акселератора вскрыта по драйверу MAME (sprinter.cpp) и подтверждена экспериментами в MAME (tests/accfill): армирование живёт до следующего accel-опкода (мульти-триггер работает); под армированием триггерит ЛЮБОЙ non-M1 доступ к памяти (fetch операнда djnz/out!); вертикальный Fill двигает Port_Y и не возвращает; размер блока переживает LD B,B. Детали: memory/accel_multitrigger_fill. - _bgi_clear_raw: 20 DI-скобок по 16 колонок вместо полного брекета на каждую из 320 колонок; армирование размера один раз на скобку. - _gfx_rectfill256 разделён: диспетчер (проверка ориентации ~160-245Т, break-even |w-h| >= ~4) + leaf'ы _gfx_recthfill256/_gfx_rectvfill256 для прямого вызова, когда форма известна заранее. - Leaf'ы: чанки <=16 линий одной скобкой (~54-56Т/линию против ~250Т у per-line варианта); счётчик чанков precompute'ится в байт-регистр (dec e/jr nz ~46Т/чанк вместо 16-бит арифметики в IX-слотах ~173Т/чанк); хвост — отдельная скобка со своим армированием (CBL-ISR в окне EI армирует акселератор своим размером — не выносить). - getpixel/putpixel/_bgi_read: уборка мёртвого закомментированного кода. - tests/accfill: регресс chunked-заливок (B0 clear, B1 vert 1+3 чанка, B2 horz чанк+хвост, полноширинный bar 320x8 — путь w>=256). Прежние реализации сохранены под #if 0 для отката/сравнения. Проверено в MAME (все PASS); семантика эмуляции — перепроверить на реальном Sprinter. size-baseline: accfill добавлен, gfx_demo +54 Б (обвязка диспетчера), остальные без роста. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+8
-2
@@ -102,9 +102,15 @@ void _gfx_hfill256_segment(void);
|
||||
void _gfx_vfill256_segment(void);
|
||||
|
||||
/* Заливка прямоугольника цветом: x, y, w, h, color.
|
||||
* Механизм: один раз задаётся Horizontal_Size, затем в цикле по Y
|
||||
* акселератор копирует байт цвета на ширину строки (docs/part2/accelerator_doc.txt). */
|
||||
* _gfx_rectfill256 — диспетчер: выбирает ориентацию с меньшим числом
|
||||
* выстрелов (~160-245Т на проверку) и tail-jump'ит в leaf. Если форма
|
||||
* известна заранее или |w-h| < ~4, выгоднее звать leaf напрямую:
|
||||
* _gfx_recthfill256 — h горизонтальных строк, ТРЕБУЕТ 1 <= w <= 256;
|
||||
* _gfx_rectvfill256 — w вертикальных колонок, ТРЕБУЕТ 1 <= h <= 256.
|
||||
* Контракты/расчёт break-even — в шапках bgi256/_gfx_rect*fill256.c. */
|
||||
void _gfx_rectfill256(int x, int y, int w, int h, uint8_t color);
|
||||
void _gfx_recthfill256(int x, int y, int w, int h, uint8_t color);
|
||||
void _gfx_rectvfill256(int x, int y, int w, int h, uint8_t color);
|
||||
|
||||
/* ---- Скретч 16-цветных примитивов (bgi16/_gfx_g16_state.c) ------- */
|
||||
extern uint8_t _gfx_g16_y;
|
||||
|
||||
Reference in New Issue
Block a user