libbgi: переворот экрана акселератором (gfx_copy_page + _bgi_flip_rows_raw)
Первый шаг L9-INVERT. Разведка железа закрыта экспериментом: Port_Y можно менять между read- и write-триггером, если перед вторым OUT стоит STOP — приём уже был в проде в _bgi_scroll_cols_raw (указал пользователь), так что обходной путь через ОЗУ-буфер не понадобился. - _bgi_flip_rows_raw: построчная копия video->video с реверсом Port_Y приёмника (DI/EI бандами по 16 строк, размер блока армируется в каждой скобке, убывающий y1 держится SMC-ячейкой); - gfx_copy_page(area, GFX_COPY_DIRECT|GFX_COPY_VFLIP): копия области из неактивной страницы в активную; банк 0x50, то есть приёмник обновляется и в VRAM, и в ОЗУ-копии — иначе heal восстанавливал бы старый фон; - tests/pageflip: 5/5 PASS в MAME (прямая, vflip, рамка, широкая 320 двумя проходами, источник цел). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -33,7 +33,28 @@
|
||||
|
||||
# Часть I — libbgi
|
||||
|
||||
## I.0 РАЗВЕДКА ЖЕЛЕЗА — делать ПЕРВОЙ, до любого кода
|
||||
## I.0 РАЗВЕДКА ЖЕЛЕЗА — ЗАКРЫТА 2026-08-12
|
||||
|
||||
**Оба факта подтверждены, ядро и обёртка написаны и проверены в MAME**
|
||||
(`tests/pageflip`, 5/5 PASS — прямая копия, vflip, целость рамки, широкая
|
||||
копия 320 = два прохода, неприкосновенность источника).
|
||||
|
||||
- **Р1 подтверждён**: Port_Y можно менять между read- и write-триггером,
|
||||
если ПЕРЕД вторым OUT стоит STOP (`LD B,B`) — он разоружает accel, и fetch
|
||||
immediate-операнда OUT уже безопасен. Приём не новый: ровно так работает
|
||||
`_bgi_scroll_cols_raw` (ядро `gfx_scroll_v`), то есть он был в проде
|
||||
задолго до этой задачи — указал пользователь. Значит и обходной путь
|
||||
через ОЗУ-буфер не нужен;
|
||||
- **Р2 подтверждён**: обе страницы адресуемы одновременно, копия между ними
|
||||
идёт по разнице баз (`_gfx_addr_shadow_base` / `_gfx_addr_base`), строку
|
||||
выбирает Port_Y.
|
||||
|
||||
Сделано: `libbgi/bgi256/_bgi_flip_rows_raw.c` (ядро) +
|
||||
`libbgi/common/gfx_copy_page.c` (обёртка, режимы `GFX_COPY_DIRECT` /
|
||||
`GFX_COPY_VFLIP`) + `tests/pageflip`. Пункты I.1 и I.3 ниже — ЗАКРЫТЫ этим
|
||||
же коммитом; описание оставлено как контракт.
|
||||
|
||||
### Исходный текст разведки (для истории)
|
||||
|
||||
Два факта, на которых стоит вся схема, сейчас НЕ подтверждены артефактом.
|
||||
Пока их нет, остальные пункты не начинать (memory `defer_unexplained_quirks`).
|
||||
|
||||
Reference in New Issue
Block a user