/*
 * puts — C99: вывести строку + '\n'.
 *
 * Конвенция Turbo-C: stdio-шный puts — БЫСТРЫЙ путь БЕЗ управления
 * атрибутом; атрибуты ячеек — какие ESTEX закэшировал (обычно цвет
 * шелла).  Для цветного вывода — cputs() / cprintf() из <conio.h>.
 *
 * Реализация: посимвольный цикл через putchar (он транслирует '\n' в
 * CR LF), в конце — putchar('\n').  Быстрый путь через ESTEX PCHARS
 * ($5C) не используется: PCHARS не транслирует '\n', а добивать хвост
 * через PUTCHAR после PCHARS нельзя — эмпирически это иногда теряло
 * следующий символ.
 */

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

char puts(const char *s) __naked
{
    (void)s;
    __asm
    puts_:
        ld    a, (hl)
        or    a
        jr    z, fin_
        push  hl
        ld    l, a
        ld    h, #0
        call  _putchar
        pop   hl
        inc   hl
        jp    puts_
        ;
    fin_:
        ld    l, #0x0A
        ld    h, #0
        call  _putchar
        ret
    __endasm;
}
