Files
Sprinter-SDCC/libbgi/bgi256/putpixel.c
T
snark13 029607971f 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>
2026-07-10 14:32:21 +03:00

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;
}