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:
@@ -163,6 +163,15 @@ void _bgi_scroll_rows_raw(uint16_t src, uint16_t dst,
|
||||
void _bgi_scroll_cols_raw(uint16_t src, uint16_t dst,
|
||||
uint8_t w, uint8_t h, uint8_t y0, uint8_t y1);
|
||||
|
||||
/* _bgi_flip_rows_raw — ядро gfx_copy_page(GFX_COPY_VFLIP): построчная копия
|
||||
* с ПЕРЕВОРОТОМ ПО ВЕРТИКАЛИ. Как scroll_rows, но Port_Y чтения растёт, а
|
||||
* Port_Y записи УБЫВАЕТ, поэтому на строку нужны два OUT — безопасные
|
||||
* благодаря STOP'у между read- и write-триггером (приём из scroll_cols).
|
||||
* w — байт/строка (0=256), h — строк 1..256 (0=256), y0 — Port_Y первой
|
||||
* строки src (++), y1 — Port_Y первой строки dst (--). */
|
||||
void _bgi_flip_rows_raw(uint16_t src, uint16_t dst,
|
||||
uint8_t w, uint8_t h, uint8_t y0, uint8_t y1);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user