/* * _gfx_hfill16_chunk — горизонтальный Fill-burst акселератора для * mode 0x82: _gfx_g16_len байт значения _gfx_g16_byte с _gfx_g16_addr * на строке _gfx_g16_y. Один burst красит до 256 байт = 512 пикселей. * Pre: W3 замаплен, DI активен. * * SMC только у байта длины. Цвет предзагружается в C и уходит через * `ld a, c` (0x79) — вставить ещё один `ld a,#n` между LD C,C и * стреляющим LD (HL),A нельзя: FSM акселератора перечитает immediate * как новый размер блока. */ #include "_gfx.h" void _gfx_hfill16_chunk(void) __naked { __asm ld a, (__gfx_g16_len) ld (_hfill16_len_imm), a ld a, (__gfx_g16_byte) ld c, a ld a, (__gfx_g16_y) out (#0x89), a ld hl, (__gfx_g16_addr) ld d, d ; 0x52 — режим размера блока ld a, #0 ; 0x3E nn — длина (патчится) _hfill16_len_imm = . - 1 ld c, c ; 0x49 — горизонтальный Fill ld a, c ; 0x79 — A = байт цвета ld (hl), a ; выстрел ld b, b ; 0x40 — выключить ret __endasm; }