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