Files
Sprinter-SDCC/libc/stdio/hex8.c
T
snark13 4a081501d8 libc: сплит «1 функция = 1 модуль» — вся библиотека, wildcard-сборка
- bios/conio/env/errno/gfx/io/mem/mouse/stdio/stdlib/string/sys/time/
  video разложены по модулям: общие статики и helpers — в internal
  _-модулях (_conio.h/_mouse.h/_gfx.h/_palette.h/_atexit.h/_time.h)
- lib/Makefile: LIBC_C = wildcard libc/*/*.c — гранулярность файлов
  = гранулярность DCE линкера
- эффект _CODE: gfx_text 6986→2568 Б, gfx_mous −1745, gfx_demo/d16
  −542; ранее timedir −3270, ls −3098, stattest −2995
- комментарии оставшихся модулей переведены на русский; puts: убран
  мёртвый pchars; videomode_raw разложен на get/set
- docs/libc-split-asm-cases.md — правила asm-связок между модулями;
  docs/libc-roadmap.md — план этапа
- восстановлен examples/mdview/SAMPLE.MD (нужен make floppy)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 16:08:58 +03:00

36 lines
966 B
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* 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;
}