/* * _bgi_vspan_raw — вертикальная линия len пикселей от (x,y), * mode 0x82. Вертикального accel-пути нет: байт покрывает два * горизонтальных пикселя, Fill затёр бы соседний нибл — поэтому * RMW на каждую строку. W3-naive. */ #include "../_bgi.h" void _bgi_vspan_raw(int x, int y, int len, uint8_t color) { if ((unsigned)x >= GFX_WIDTH_16) return; if (y < 0) { len += y; y = 0; } if (y >= GFX_HEIGHT_16) return; if (y + len > GFX_HEIGHT_16) len = GFX_HEIGHT_16 - y; if (len <= 0) return; _gfx_g16_addr = (uint16_t)(_gfx_addr_base + ((unsigned)x >> 1)); if (x & 1) { _gfx_g16_nibble = (uint8_t)(color & 0x0F); _gfx_g16_mask = 0xF0; } else { _gfx_g16_nibble = (uint8_t)((color & 0x0F) << 4); _gfx_g16_mask = 0x0F; } for (int i = 0; i < len; i++) { _gfx_g16_y = (uint8_t)(y + i); _gfx_rmw16_pixel(); } }