libbgi: bgi256 fill-примитивы на register-ABI + typedef color_t

- удалён глобальный скретч акселератора (_gfx_acc256.c); fill-сегменты
  (_gfx_hfill256/_gfx_vfill256) принимают аргументы в регистрах HL/C/B/E,
  вызываются только из asm raw-примитивов
- новый _gfx_rectfill256: заливка прямоугольника через Horizontal_Size
- raw-примитивы (plot/read/hspan/vspan/clear) переписаны под новый ABI
- graphics.h: typedef color_t (uint8_t) для всех public color-функций
- sprinter-cc: флаг --safe (линковка *_safe.lib при наличии)
- CLAUDE.md/mame_interactive: авто-прогон тестов в MAME
- gfx_demo: демонстрация rectfill

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-10 14:32:21 +03:00
parent 52636a5d6e
commit 029607971f
31 changed files with 618 additions and 283 deletions
+25 -19
View File
@@ -15,25 +15,31 @@ static uint8_t _pp_y;
static uint16_t _pp_addr;
static uint8_t _pp_color;
void putpixel(int x, int y, int color)
void putpixel(int x, int y, color_t color)
{
#ifndef GFX_NOCHECK
if ((unsigned)x >= GFX_WIDTH || (unsigned)y >= GFX_HEIGHT) return;
_pp_y = (uint8_t)y;
_pp_addr = (uint16_t)(_gfx_addr_base + (unsigned)x);
_pp_color = (uint8_t)color;
__asm
di
in a, (#0xE2)
ld (__gfx_saved_w3), a
ld a, (__gfx_bank)
out (#0xE2), a
ld a, (_pp_y)
out (#0x89), a
ld hl, (_pp_addr)
ld a, (_pp_color)
ld (hl), a
ld a, (__gfx_saved_w3)
out (#0xE2), a
ei
__endasm;
#endif
_bgi_begin();
_bgi_plot_raw(x, y, color);
_bgi_end();
return;
// _pp_y = (uint8_t)y;
// _pp_addr = (uint16_t)(_gfx_addr_base + (unsigned)x);
// _pp_color = (uint8_t)color;
// __asm
// di
// in a, (#0xE2)
// ld (__gfx_saved_w3), a
// ld a, (__gfx_bank)
// out (#0xE2), a
// ld a, (_pp_y)
// out (#0x89), a
// ld hl, (_pp_addr)
// ld a, (_pp_color)
// ld (hl), a
// ld a, (__gfx_saved_w3)
// out (#0xE2), a
// ei
// __endasm;
}