/*
 * mouse_load_cursor — загрузить форму курсора из *c (RST 30h, fn $09
 * LOAD MOUSE CURSOR).  Драйвер берёт указатель битмапа в IX, поля —
 * в H/L/D/E; переносим их из структуры через общий скретч (_mouse.h),
 * чтобы у asm были известные имена.
 */

#include "_mouse.h"
#include <stdint.h>

void mouse_load_cursor(const mouse_cursor_t *c)
{
    /* Разложить поля структуры по скретч-переменным для asm. */
    _mc_image  = (uint16_t)(uintptr_t)c->image;
    _mc_width  = c->width;
    _mc_height = c->height;
    _mc_hot_x  = c->hot_x;
    _mc_hot_y  = c->hot_y;
    __asm
        push  ix
        ld    ix, (__mc_image)
        ld    a, (__mc_height)
        ld    h, a
        ld    a, (__mc_width)
        ld    l, a
        ld    a, (__mc_hot_y)
        ld    d, a
        ld    a, (__mc_hot_x)
        ld    e, a
        ld    b, #0
        ld    c, #0x09              ; LOAD MOUSE CURSOR
        rst   #0x30                 ; MOUSE
        pop   ix
    __endasm;
}
