/*
 * scroll — прокрутка окна (x, y, w, h) на 1 позицию в направлении
 * direction, с очисткой освободившейся строки/колонки атрибутом clear.
 * ESTEX SCROLL ($55).
 *
 * SDCC __sdcccall(1): x в A, y в L; w,h и direction,clear запушены
 * парами на стек.  Void-возврат → callee снимает стековые аргументы
 * (pop до RST) и уходит через jp (iy).
 */

#include "_conio.h"

void scroll(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t direction, uint8_t clear) __naked
{
    (void)x; (void)y; (void)w; (void)h; (void)direction; (void)clear;
    __asm
        pop   iy                    ; адрес возврата
        ld    d, l                  ; D = row (y)
        ld    e, a                  ; E = col (x)
        pop   hl                    ; H = высота (h), L = ширина (w)
        pop   bc                    ; C = direction, B = clear
        ld    a, b                  ; A = clear(B)
        ld    b, c                  ; B = direction(C)
        push  ix
        ld    c, #0x55              ; ESTEX SCROLL
        rst   #0x10
        pop   ix
        jp    (iy)
    __endasm;
}
