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

48 lines
1.6 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_plot_raw — пиксель (x,y) цветом color, mode 0x81 (register-only asm).
*
* "Raw" = W3-naive: вызывающий уже сделал _bgi_begin (W3 на видеобанке, DI).
* Адресация: CPU _gfx_addr_base + x, Port_Y (0x89) = y.
*
* __sdcccall(1): x→HL, y→DE (E=low), color→стек (1 байт над ret-адресом).
* Всё считается в регистрах — ни статик-скретча, ни round-trip через _DATA
* (самый горячий примитив: Брезенхэм в line/circle/fillpoly/draw_scaled).
*/
#include "../_bgi.h"
void _bgi_plot_raw(int x, int y, uint8_t color) __naked
{
__asm
.globl __gfx_addr_base
#ifndef GFX_NOCHECK
ld a, l
sub a, #0x40
ld a, h
sbc a, #0x01
jr NC, pp_done ; (unsigned)x >= 320
ld a, d
or a, a
jr NZ, pp_done ; (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 c, l
ld b, h ; BC = dest
ld hl, #2
add hl, sp
ld a, (hl) ; A = color (со стека, SP+2)
ld h, b
ld l, c ; HL = dest
ld (hl), a ; выстрел
#ifndef GFX_NOCHECK
pp_done:
#endif
pop hl ; ret-адрес
inc sp ; callee-pop байта color
jp (hl)
__endasm;
}