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
+15 -9
View File
@@ -23,6 +23,8 @@
#ifndef GRAPHICS_H
#define GRAPHICS_H
#include <stdint.h>
/* ---- Стандартные EGA/VGA цвета (индексы палитры 0..15) ------------ */
enum {
BLACK = 0, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY,
@@ -30,6 +32,10 @@ enum {
YELLOW, WHITE
};
/* 8-битный цвет (индекс палитры). При смене формата достаточно поменять
* один typedef — все public-функции используют этот тип. */
typedef uint8_t color_t;
/* ---- Коды graphresult() ------------------------------------------ */
#define grOk 0
#define grNoInitGraph (-1)
@@ -55,17 +61,17 @@ void cleardevice(void);
int getmaxx(void); /* 319 */
int getmaxy(void); /* 255 */
int getmaxcolor(void); /* 255 */
color_t getmaxcolor(void); /* 255 */
void setcolor(int color); /* текущий цвет рисования */
int getcolor(void);
void setbkcolor(int color); /* фоновый цвет (для cleardevice/текста) */
int getbkcolor(void);
void setcolor(color_t color); /* текущий цвет рисования */
color_t getcolor(void);
void setbkcolor(color_t color); /* фоновый цвет (для cleardevice/текста) */
color_t getbkcolor(void);
/* ---- Точки ------------------------------------------------------- */
void putpixel(int x, int y, int color);
unsigned getpixel(int x, int y);
void putpixel(int x, int y, color_t color);
color_t getpixel(int x, int y);
/* ---- Текущая позиция и линии ------------------------------------- */
@@ -116,9 +122,9 @@ enum {
INTERLEAVE_FILL, WIDE_DOT_FILL, CLOSE_DOT_FILL, USER_FILL
};
struct fillsettingstype { int pattern; int color; };
struct fillsettingstype { int pattern; color_t color; };
void setfillstyle(int pattern, int color);
void setfillstyle(int pattern, color_t color);
void getfillsettings(struct fillsettingstype *fillinfo);
/* bar — залитый прямоугольник (текущий стиль заливки, без рамки). */