029607971f
- удалён глобальный скретч акселератора (_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>
46 lines
1.6 KiB
C
46 lines
1.6 KiB
C
/*
|
|
* putpixel (bgi256) — точка (x,y) цветом color, mode 0x81.
|
|
* ПОЛНОСТЬЬЮ inline: bounds + W3-скобка + запись пикселя в теле, БЕЗ
|
|
* вызовов _bgi_plot / gfx_putpixel256 / _bgi_plot_raw (устранены
|
|
* прокладки старой цепочки putpixel→_bgi_plot→gfx_putpixel256→raw).
|
|
* Адресация: CPU _gfx_addr_base + x, Port_Y (0x89) = y; W3 мапится на
|
|
* _gfx_bank, сейв восстанавливается. Bounds — compile-time GFX_WIDTH/
|
|
* HEIGHT (меньше/быстрее, ≡ runtime _bgi_maxx/_bgi_maxy).
|
|
*/
|
|
#include "../_bgi.h"
|
|
|
|
/* File-static скретч (как в _bgi_plot_raw, но свой — putpixel не должен
|
|
* топтать скретч акселератора/plot_raw, если звать вперемешку). */
|
|
static uint8_t _pp_y;
|
|
static uint16_t _pp_addr;
|
|
static uint8_t _pp_color;
|
|
|
|
void putpixel(int x, int y, color_t color)
|
|
{
|
|
#ifndef GFX_NOCHECK
|
|
if ((unsigned)x >= GFX_WIDTH || (unsigned)y >= GFX_HEIGHT) return;
|
|
#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;
|
|
}
|