/*
 * _putch_wrchar_raw — воркер вывода mode-1: КАЖДЫЙ байт идёт через
 * ESTEX WRCHAR ($58) как глиф CP437 (включая 0x08/0x09/0x0A/0x0D),
 * атрибутом attr, в позицию (pc_place) с pc_col++.
 * Вне экрана (col ≥ 80 / row ≥ 32) вывод молча подавляется.
 * Курсор BIOS не трогает — см. _putch_wrchar.
 */

#include "_conio.h"

void _putch_wrchar_raw(char ch, uint8_t attr) __naked
{
    (void)ch; (void)attr;
    __asm
        ;; __sdcccall(1): ch в A, attr в L.
        ld    c, a                  ; C = ch (сохранить)

        ld    a, (_pc_place + 1)
        cp    #32
        ret   nc                    ; за нижним краем — молча пропустить
        ld    d, a                  ; D = row
        ld    a, (_pc_place)
        cp    #80
        ret   nc                    ; за правым краем — молча пропустить
        ld    e, a                  ; E = col
        inc   a
        ld    (_pc_place), a        ; pc_col++

        ld    b, l                  ; B = attr
        ld    a, c                  ; A = ch
        push  ix
        ld    c, #0x58              ; ESTEX WRCHAR
        rst   #0x10
        pop   ix
        ret
    __endasm;
}
