/*
 * cbl_push_otir — пропихнуть n байт из src в CBL через OTIR (порт
 * 0x4F).  Звать ИЗ fill()-callback'а (см. cbl.h) — приложение само
 * решает, откуда брать данные, никакой промежуточной копии в libc.
 *
 * n — 128 или 256 (см. _cbl_block); низкий байт n (E) даёт готовое
 * значение для регистра B: 128 остаётся 128, 256 идёт как 0 (Z80
 * OTIR: B=0 значит 256 итераций).
 *
 * НЕ умеет 16-бит: порт 0x4F всегда кладёт байт как есть в один слот
 * (см. cbl.h, cbl_open.c) — для 16-бит нужен cbl_push_accel().
 */

#include "_cbl.h"

void cbl_push_otir(const void *src, uint16_t n) __naked
{
    (void)src; (void)n;
    __asm
        ;; HL = src (1-й арг), DE = n (2-й арг) — __sdcccall(1)
        ld    a, e
        ld    b, a
        ld    c, #0x4F
        otir
        ret
    __endasm;
}
