What problem does it solve? Migrating z88dk targets to newlib or adding serial and disk drivers often fails with opaque symptoms like undefined asm_target_open_p1 symbols, fopen returning EMFILE, or corrupted FDSTRUCTs from mis-sized stdio heap blocks. This Skill documents the CRT m4 instantiation model, heap sizing formulas, and CRT config knobs so those failures can be diagnosed and fixed directly. ## Core Features & Use Cases - Serial FILE instantiation*: Explains character_00 vs console_01 driver layers, CRT m4 wiring of stdin/stdout/stderr, multi-port ttyin/ttyout patterns, and CP/M IOBYTE seeding for dual-port consoles. - Static stdio heap sizing: Provides the committed = header + body formula with per-driver byte counts and map-span verification to prevent heap underflow corrupting adjacent FDSTRUCTs. - Disk fcntl setup: Covers asm_target_open_p1/p2 requirements, open_max/stdio_heap_size/fopen_max sizing, and FCB vs FatFs dual-stack policy. - Use Case: When adding a CP/M disk driver to a new target, follow the checklist to place cpm_01_file in the library list, force a lib rebuild, and prove linkage with z88dk-z80nm and map file inspection. ## Quick Start Ask the agent to diagnose why fopen fails with EMFILE on a +cpm -clib=new build and to check the CRT open_max, stdio_heap_size, and fopen_max settings.