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

42 lines
1.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* _bgi_read_raw — прочитать пиксель (x,y), mode 0x81 (register-only asm).
*
* "Raw" = W3-naive: вызывающий уже сделал _bgi_begin (W3 на видеобанке, DI).
* Для блиттинга: getimage/putimage читают тысячи пикселей в одной скобке.
* За пределами экрана возвращает 0.
*
* __sdcccall(1): x→HL, y→DE (E=low); возврат uint8_t в A. Всё в регистрах,
* без статик-скретча (единый стиль с _bgi_plot_raw).
*/
#include "../_bgi.h"
uint8_t _bgi_read_raw(int x, int y) __naked
{
(void)x; (void)y;
__asm
.globl __gfx_addr_base
#ifndef GFX_NOCHECK
ld a, l
sub a, #0x40
ld a, h
sbc a, #0x01
jr NC, rr_zero ; (unsigned)x >= 320
ld a, d
or a, a
jr NZ, rr_zero ; (unsigned)y >= 256
#endif
ld a, e
out (#0x89), a ; Port_Y = y
ld bc, (__gfx_addr_base)
add hl, bc ; HL = base + x
ld a, (hl) ; A = пиксель (возврат)
ret
#ifndef GFX_NOCHECK
rr_zero:
xor a, a
ret
#endif
__endasm;
}