← На главную

Проект собрал всё для CP/M-86: достаточно ./fetch_tools

31.05.2026 18:05 · hackernews

Проект собирает всё необходимое для кросс-разработки под CP/M-86 прямо на современных машинах. Автор собрал это для себя — из чистого энтузиазма и фана, никаких гарантий.

В комплекте три языка: C (версии K&R и почти ANSI), ассемблер и Basic. Исходники и бинарники оригинальной CP/M-86 лежат на cpm.z80.de, а вычищенное и пропатченное ядро — на GitHub у tsupplis. Оно дружит с Y2K, эмуляторами и AT-клавиатурами.

Среди ключевых инструментов: два Aztec C (3.4 и 4.2), rasm86/link86/lib86 от Digital Research, их же asm86.com, cb86.exe для Basic, nasm, а также masm, link и exe2bin от Microsoft. Версия masm пропатчена, чтобы работать с emu2 и другими эмуляторами.

Эмуляторы — отдельная песня. emu2 запускает DOS-утилиты прямо на macOS и Linux, превращая командную строку в современный инструмент разработки. Для CP/M-80 программ используется tnylpo. Все вызовы упакованы в скрипты-обёртки в каталоге bin.

Сборка среды тривиальна: ./fetch_tools скачивает архивы (Aztec, DR, CB86) и кэширует их в archive/. Если оригинальный источник вдруг пропадёт, сборка не сломается — fetch_tools возьмёт копию из кэша. Переменная ARCHIVE_FIRST=1 заставляет работать только с локальным кэшем, офлайн.

Встроенный эмулятор CP/M-86 (cpm86) — результат реверс-инжиниринга и патчинга, баги ещё есть, но для многих программ работает. Фича: если выставить CPM86_EOF=1, эмулятор будет дополнять записи символом конца файла вместо NULL. Это не совсем соответствует настоящей CP/M-86, поэтому по умолчанию выключено.

Для автоматизации прилагается Dockerfile: собирается образ, монтируется текущая папка, и можно компилировать проект одной командой. Также есть Makefile с примерами для C, ассемблера (rasm86, asm86, masm, nasm) и Basic.

Отдельно решена проблема со стартовым кодом Aztec: fetch_tools собирает объектные файлы startup из библиотек и подставляет их в командную строку. Это чинит ситуации, когда программа не линковалась из-за отсутствия startup или падала на выходе. Поведение отключается переменной AZTEC_NOSTARTUP=1.

Для самых упёртых есть утилиты bin2cmd и cmdinfo, которые можно собрать нативно под Unix или DOS с отдельного репозитория.

Читать оригинал →