/*
 * putsprite — вывести спрайт getimage-формата (0xFF = прозрачно, кадр
 * ≤ 64×64) в (x,y).  Банк на время вызова — GFX_BANK_SPRITE (0x5C):
 * прозрачные байты (bit3) не пишутся, ОЗУ-копия фона (bit2) цела →
 * спрайт стирается gfx_heal/movesprite без save-буфера.  Пользовательский
 * банк сохраняется/восстанавливается (уважаем вложенный temp-режим).
 *
 * Идёт через лин-ядро _gfx_blit_sprite (без split'а >256, 8-бит w/h) —
 * спрайтовая программа не тянет общий _gfx_blit_full.  Клип по экрану —
 * в ядре.  w,h — младшие байты заголовка (кадр ≤ 64).
 */
#include "../_bgi.h"

void putsprite(int x, int y, const void *img)
{
    const uint8_t *p = (const uint8_t *)img;
    uint8_t saved = gfx_get_bank();

    gfx_set_bank(GFX_BANK_SPRITE);
    _bgi_begin();
    /* Ядро принимает готовый src+stride (кэш-схема 2026-07-14): для
     * целой картинки src = пиксели за заголовком, stride = её ширина. */
    (*_gfx_blit_fn)(x, y, p + 4, (uint16_t)(p[0] | (p[1] << 8)),
                    p[0], p[2]);
    _bgi_end();
    gfx_set_bank(saved);
}
