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>
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* _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;
|
||||
}
|
||||
Reference in New Issue
Block a user