/*
 * hex8 — печать uint8 всегда двумя hex-цифрами ("00".."FF") через
 * ESTEX PUTCHAR ($5B).  Каждый нибл — классический трюк Z80
 * `cp 10 / sbc 0x69 / daa` (5 байт на нибл).  Self-call на _hex8_digit
 * для старшего нибла, затем проваливание на младший.
 *
 * ESTEX PUTCHAR сохраняет IX (проверено эмпирически) — push/pop ix
 * вокруг RST не нужен.  Портировано из solid-c STDLIB.ASM.
 */

#include <stdio.h>
#include <stdint.h>

void hex8(uint8_t v) __naked
{
    (void)v;
    __asm
        ;; A = v на входе.
        push  af
        rra
        rra
        rra
        rra
        call  _hex8_digit
        pop   af
    _hex8_digit:
        and   a, #0x0F
        cp    a, #10
        sbc   a, #0x69
        daa
        ld    c, #0x5B
        rst   #0x10
        ret
    __endasm;
}
