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:
@@ -11,10 +11,9 @@
|
||||
*/
|
||||
#include "../_bgi.h"
|
||||
|
||||
void _bgi_begin(void) __naked
|
||||
void _bgi_begin(void) __preserves_regs(b,c,d,e,h,l) __naked
|
||||
{
|
||||
__asm
|
||||
di
|
||||
in a, (#0xE2)
|
||||
ld (__gfx_saved_w3), a
|
||||
ld a, (__gfx_bank)
|
||||
|
||||
@@ -4,12 +4,11 @@
|
||||
*/
|
||||
#include "../_bgi.h"
|
||||
|
||||
void _bgi_end(void) __naked
|
||||
void _bgi_end(void) __naked __preserves_regs(b,c,d,e,h,l)
|
||||
{
|
||||
__asm
|
||||
ld a, (__gfx_saved_w3)
|
||||
out (#0xE2), a
|
||||
ei
|
||||
ret
|
||||
__endasm;
|
||||
}
|
||||
|
||||
+10
-2
@@ -12,7 +12,15 @@ void bar(int left, int top, int right, int bottom)
|
||||
if (bottom < top) { t = top; top = bottom; bottom = t; }
|
||||
|
||||
_bgi_begin();
|
||||
for (y = top; y <= bottom; y++)
|
||||
_bgi_fill_span(left, right, y);
|
||||
if (_bgi_fill_pattern == EMPTY_FILL) {
|
||||
_gfx_rectfill256(left, top, right - left + 1, bottom - top + 1, _bgi_bg); return;
|
||||
}
|
||||
else if (_bgi_fill_pattern == SOLID_FILL || _bgi_fill_pattern == USER_FILL || _bgi_fill_pattern > CLOSE_DOT_FILL) {
|
||||
_gfx_rectfill256(left, top, right - left + 1, bottom - top + 1, _bgi_fill_color);
|
||||
return;
|
||||
} else {
|
||||
for (y = top; y <= bottom; y++)
|
||||
_bgi_fill_span(left, right, y);
|
||||
}
|
||||
_bgi_end();
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* getbkcolor — текущий фоновый цвет. */
|
||||
#include "../_bgi.h"
|
||||
|
||||
int getbkcolor(void)
|
||||
color_t getbkcolor(void)
|
||||
{
|
||||
return _bgi_bg;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* getcolor — текущий цвет рисования. */
|
||||
#include "../_bgi.h"
|
||||
|
||||
int getcolor(void)
|
||||
color_t getcolor(void)
|
||||
{
|
||||
return _bgi_fg;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* getmaxcolor — максимальный индекс цвета (255 в 256-цветном режиме). */
|
||||
#include "../_bgi.h"
|
||||
|
||||
int getmaxcolor(void)
|
||||
color_t getmaxcolor(void)
|
||||
{
|
||||
return _bgi_maxcolor;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* setbkcolor — задать фоновый цвет (cleardevice, фон текста). */
|
||||
#include "../_bgi.h"
|
||||
|
||||
void setbkcolor(int color)
|
||||
void setbkcolor(color_t color)
|
||||
{
|
||||
_bgi_bg = (uint8_t)color;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* setcolor — задать текущий цвет рисования. */
|
||||
#include "../_bgi.h"
|
||||
|
||||
void setcolor(int color)
|
||||
void setcolor(color_t color)
|
||||
{
|
||||
_bgi_fg = (uint8_t)color;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* setfillstyle — задать паттерн и цвет заливки (bar/fillpoly/…). */
|
||||
#include "../_bgi.h"
|
||||
|
||||
void setfillstyle(int pattern, int color)
|
||||
void setfillstyle(int pattern, color_t color)
|
||||
{
|
||||
_bgi_fill_pattern = (uint8_t)pattern;
|
||||
_bgi_fill_color = (uint8_t)color;
|
||||
|
||||
Reference in New Issue
Block a user