/*
 * wrchar — записать символ ch с атрибутом attr в позицию (x, y), не
 * трогая курсор.  ESTEX WRCHAR ($58).
 *
 * SDCC __sdcccall(1): x в A, y в L (2 uint8 → A, L); ch и attr
 * упакованы и запушены на стек одной 16-битной парой (вызывающий
 * делает `ld hl, #(attr<<8)|ch; push hl`).  Раскладка после CALL:
 *   [SP+0..1] = адрес возврата
 *   [SP+2]    = ch   (младшая половина пары)
 *   [SP+3]    = attr (старшая половина)
 * Void-возврат → callee снимает 2 байта стековых аргументов через
 * `pop bc` + jp (iy).
 */

#include "_conio.h"

void wrchar(uint8_t x, uint8_t y, char ch, uint8_t attr) __naked
{
    (void)x; (void)y; (void)ch; (void)attr;
    __asm
        pop   iy                    ; адрес возврата
        pop   bc                    ; C = ch, B = attr
        push  ix
        ld    d, l                  ; D = row (y)
        ld    e, a                  ; E = col (x)
        ld    a, c                  ; A = ch
        ld    c, #0x58              ; ESTEX WRCHAR
        rst   #0x10
        pop   ix
        jp    (iy)
    __endasm;
}
