/*
 * gfx_blit_noclip — блит ЦЕЛОЙ картинки getimage-формата БЕЗ клипа, в
 * ТЕКУЩЕМ банке (gfx_set_bank).  Быстрый вариант gfx_blit для тайловых
 * движков: вызывающий гарантирует, что картинка целиком на экране.
 *
 * Зачем отдельная функция: gfx_blit идёт через общее ядро _gfx_blit_full
 * (16-битная арифметика, клип, пересчёт src, нарезка полос >256) — замер
 * в MAME (PoP roomtest, 2026-07-27): 13 288 тактов на блит спрайта 32×3,
 * т.е. цена почти не зависит от размера, платим за проход по цепочке.
 * Линейное спрайтовое ядро на том же спрайте — 4 617 тактов (в 2.9 раза
 * быстрее): 8-битные w/h, без split, без клип-кода.
 *
 * От putsprite отличается тем, что НЕ навязывает GFX_BANK_SPRITE: фон
 * рисуется в GFX_BANK_TRANSPARENT (0xFF не пишется, но ОЗУ-копия
 * обновляется — иначе gfx_heal сотрёт нарисованное).
 *
 * W3-скобка ставится ЗДЕСЬ (код libbgi живёт в W1): вызывать её из
 * приложения, собранного с --w3, нельзя — после _bgi_begin окно W3
 * занято видеобанком и код вызывающего исчезает из адресного
 * пространства (проверено: белый экран).
 *
 * Ограничения: w,h ≤ 255; картинка целиком в пределах экрана.  Не
 * подходит — зовите gfx_blit/gfx_blit_part.
 */
#include "../_bgi.h"

void gfx_blit_noclip(int x, int y, const void *img)
{
    const uint8_t *p = (const uint8_t *)img;

    _bgi_begin();
    _gfx_blit_sprite_noclip(x, y, p + 4, (uint16_t)(p[0] | (p[1] << 8)),
                            p[0], p[2]);
    _bgi_end();
}
