Files
Sprinter-SDCC/libbgi/bgi256/_bgi_clear_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.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.
/*
* _bgi_clear_raw — залить всё поле 320×256 цветом color, mode 0x81.
* 320 вертикальных Fill-burst'ов (по колонке 256 строк), Port_Y=0.
* Register-only asm, без глобального скретча. W3-naive: вызывающий
* обрамляет _bgi_begin/_bgi_end. color → A (__sdcccall(1)).
*/
#include "../_bgi.h"
void _bgi_clear_raw(uint8_t color) __naked
{
__asm
ld c, a ; color -> c
xor a, a
out (#0x89), a ; Port_Y = 0
ld hl, (__gfx_addr_base) ; HL = база draw-страницы (0xC000/0xC140)
ld de, #0x0000
_clear_cyc0:
ld a, e ; if DE >= 320 - return
sub a, #0x40
ld a, d
sbc a, #0x01
ret NC
;; --- ПОСЛЕДОВАТЕЛЬНОСТЬ АКСЕЛЕРАТОРА ---
di
ld d, d ; 0x52 режим размера блока
ld a, #0 ; 0x3E 0 размер (256 точек по высоте)
ld e, e ; 0x5B вертикальный Fill
ld a, c ; 0x79 A = цвет (НЕ ещё один ld a,#n)
ld (hl), a ; выстрел; заливает _gfx_acc_len байт
ld b, b ; 0x40 выключить
ei
inc hl
inc de
jr _clear_cyc0
__endasm;
}