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

37 lines
1.5 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.
/*
* _gfx_vfill256_segment — вертикальный Fill-burst акселератора (register-ABI).
*
* ВХОД (регистры; вызывается ТОЛЬКО из asm — raw-примитивами):
* HL = CPU-адрес колонки (base + x)
* C = цвет
* B = длина (0 = 256 — конвенция акселератора)
* E = y (стартовая строка для Port_Y)
* Клоббер: A, F. Сохраняет BC/DE/HL/IX/IY (все accel-опкоды — no-op'ы по
* регистрам; см. _gfx_hfill256.c). Pre: W3 замаплен (вызывающий сделал _bgi_begin).
*
* Опкоды: LD D,D (0x52) размер блока (SMC-immediate), LD E,E (0x5B)
* вертикальный Fill, LD B,B (0x40) выключить.
*/
#include "../_bgi.h"
void _gfx_vfill256_segment(void) __naked
{
__asm
ld a, b
ld (_vfill256_len_imm), a ; SMC: размер блока <- B
ld a, e
out (#0x89), a ; Port_Y <- E (y)
di
ld d, d ; 0x52 режим размера блока
ld a, #0
_vfill256_len_imm = . - 1
ld e, e ; 0x5B вертикальный Fill (E=y, no-op)
ld a, c ; 0x79 A = цвет
ld (hl), a ; выстрел; заливает len байт
ld b, b ; 0x40 выключить (B=len, no-op)
ei
ret
__endasm;
}