Files
Sprinter-SDCC/libbgi/bgi256/getpixel.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

40 lines
1.1 KiB
C

/*
* getpixel (bgi256) — цвет пикселя (x,y), mode 0x81. Полностью inline
* (bounds + W3-скобка + чтение пикселя), без вызовов _bgi_read/raw.
* Возвращает 0 вне экрана.
*/
#include "../_bgi.h"
static uint8_t _gp_y;
static uint16_t _gp_addr;
static uint8_t _gp_color;
color_t getpixel(int x, int y)
{
#ifndef GFX_NOCHECK
if ((unsigned)x >= GFX_WIDTH || (unsigned)y >= GFX_HEIGHT) return 0;
#endif
_bgi_begin();
register uint8_t _gp_color = _bgi_read_raw(x, y);
_bgi_end();
return _gp_color;
// _gp_y = (uint8_t)y;
// _gp_addr = (uint16_t)(_gfx_addr_base + (unsigned)x);
// __asm
// di
// in a, (#0xE2)
// ld (__gfx_saved_w3), a
// ld a, (__gfx_bank)
// out (#0xE2), a
// ld a, (_gp_y)
// out (#0x89), a
// ld hl, (_gp_addr)
// ld a, (hl)
// ld (_gp_color), a
// ld a, (__gfx_saved_w3)
// out (#0xE2), a
// ei
// __endasm;
// return _gp_color;
}