/* * putch — вывод символа с текущим атрибутом (Turbo-C conio). * * Применяет g_text_attr; при pc_raw_mode == 1 управляющие символы * печатаются как глифы (воркер _putch_wrchar_raw), иначе * интерпретируются (_putch_wrchar). После вывода записывает курсор * BIOS один раз (_set_cursor). Трансляции '\n' → CR LF нет — * Turbo-C-конвенция, вызывающий пишет "\r\n" сам. * Возвращает выведенный символ. */ #include "_conio.h" /* Стэш символа на время вызовов воркеров (только для putch). */ static uint8_t pc_ch; char putch(char ch) __naked { (void)ch; __asm ;; A = ch на входе; возврат char → A. ld (_pc_ch), a ; спрятать ch (для возврата и перезагрузки) ld a, (_g_text_attr) ; A = младший байт = attr ld l, a ; L = attr ld a, (_pc_raw_mode) or a, a ; Z = (mode == 0) ld a, (_pc_ch) ; A = ch (`ld a,(nn)` не трогает флаги) jr nz, _putch_use_raw call __putch_wrchar jr _putch_after_raw _putch_use_raw: call __putch_wrchar_raw _putch_after_raw: call __set_cursor ld a, (_pc_ch) ; возвращаемое значение ret __endasm; }