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