/*
 * _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;
}
