c71e249a4e
First substantive commit: the entire Sprinter C compiler tree on top of
the bare README+gitignore initial commit.
What's in here:
bin/sprinter-cc — driver script invoking SDCC + linker + mkexe
libc/ — Sprinter-specific libc layer over ESTEX/BIOS
(conio, gfx, io, mem, stdio + headers)
runtime/ — crt0 variants (default/small/banked/minimal)
+ heap + bank trampolines
toolchain/ — mkexe (SprintEXE packer, C + tests)
examples/ — 30 demo programs (gfx, file I/O, env, time, …)
lib/Makefile — builds the libc archive (sprinter.lib)
docs/ — converted Sprinter manuals + asm reference samples
third_party/ — solid-c reference compiler dump + sdcc setup script
release_docs/ — packaging / release notes
gitignore overhaul:
• Drop dangerous blanket patterns: *.asm (would hide docs/samples/*.asm)
and *.exe (case-insensitive match was hiding third_party/solid-c/*.EXE
on macOS APFS). Replaced with examples/*/*.{asm,exe,…} and lib/*.lib.
• Restore tracking of toolchain/mkexe/tests/{one,big}.bin — those are
INPUT fixtures, not build outputs.
• Collapse the duplicated SDCC/C/Sdcc sections into one section per
concern (build outputs / vendored / OS-junk).
• Add .sprinter-cc-*/, build/ (catches lib/build/ too), .claude/.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Некоторые особенности пакета SOLID C для ОС Estex
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
СИ-КОМПИЛЯТОР
Коды возврата компилятора (1-й и 2-й проходы):
00h - Ok
0FFh - были errors/warnings, ошибки выделения памяти или работы с файлами.
1-й проход компилятора
1. При компиляции "чужих" исходников ставить опцию "-k".
2. В опциях: -dNAME, -jN, -oNAME и -rP:S:H пробелы не допускаются.
3. Максимальная длина строки полного пути (disk\dir\file.ext) файлов
равна 80 символов.
4. Файл "file.err" создается всегда по текущему пути входного .c файла.
5. Формат записи include-файлов только как:
#include <file.ext> - поиск ведется только в подкаталоге "INCLUDE"
расположения компилятора.
#include "file.ext" - поиск ведется только в каталоге расположения
входного .c файла.
Задание пути в имени файла не допускается!. Имя папки "INCLUDE" зарезерви-
ровано.
2-й проход компилятора
1. Позволяет компилировать несколько бОльшие исходники, по сравнению
с фирменной версией.
2. Исправлены две фирменные ошибки:
a) нельзя было указывать расширение для TMC-файлов
b) зависание при компиляции запредельно больших исходников
АССЕМБЛЕР
Примечание: Поскольку ассемблер AS совместим с ассемблером M80 фирмы Microsoft
по формату записи ассемблерных текстов - в качестве документации на AS исполь-
зуется документация ассемблера M80. Отличие ассемблера AS от M80 заключается в
том, что у AS отсутствуют некоторые команды M80 (в основном, управление вывода
листингов).
1. Максимальная длина имен (включающих букву диска и каталоги) файлов
равна 64 символа.
2. В псевдокоманде NAME('...') можно использовать также двойные (")
кавычки.
3. Имя include-файла можно указывать без расширения. В этом случае будет
использоваться расширение по-умолчанию ".asm". Это же правило действует
и для входного asm-файла.
4. Поддерживаются три варианта записи недокументированных регистров:
HX/XH LX/XL
HY/YH LY/YL
HIX/IXH LIX/IXL
5. Псевдокоманды "EQU" и "=" идентичны.
6. Максимальная длина имен глобальных меток, передаваемых в объектный
файл (rel-файл) зависит от режима работы ассемблера:
6 символов - при указании опции "-t"
8 символов - по-умолчанию
30 символов - при указании опции "-x" (расширенный rel-формат)
Следует отметить, что с объектными файлами расширенного rel-формата не
работает библиотекарь. Поэтому при компиляции библиотечных файлов, не
следует ассемблеру указывать опцию "-x".
7. Коды возврата ассемблера:
00h - Ok
0FFh - были errors/warnings, ошибки выделения памяти
или работы с файлами.
ЛИНКЕР
При линковке готовых си-программ, собираемых с библиотекой "clib.irl" необхо-
димо всегда указывать линкеру опцию "/gXMAIN". Она передает управление на
начальный startup-код си-программ. См. исходники библиотеки "clib".
1. Линкер работает только с именами входных файлов. Указание диска и пути
расположения файлов не поддерживается.
2. Исправлены фирменные глюки:
a) неверная работа с "@list" файлом
b) не отслеживались запросы на request-файлы
3. При вставке exe-заголовка, параметры равны: ORG = 4100h, Stack = 0C000h.
(Значение ORG-a может быть изменено опцией "/r").
4. Файл "list" - содержит одну ком-строку с агрументами. Отдельные аргументы
могут начинаться с новой строки. В конце файла должна стоять пустая новая
строка. Кол-во читаемых байт ограничено до 256 байт.
5. Поиск библы: сперва файл *.irl, после *.rel. Если не найден, выдается
сообщение ошибки: "файл *.rel не найден".
6. Максимальная длина имен идентификаторов - 30 символов.
7. Метки вида ?labels не выводятся в sym-файл и на экран. Становятся
"видимыми" только при опции /Q.
8. Отслеживается превышение размера 16kB для dll-библиотек (выдается
предупреждение).
9. Коды возврата линкера:
00h - Ok
0FFh - были ошибки выделения памяти или работы с файлами.
БИБЛИОТЕКАРЬ
1. Тип открываемого входного файла отслеживается не по его расширению,
а по внутреннему содержимому.
2. При создании библиотеки: если имя библиотеки совпадает с именем входного
файла, то необходимо указать расширение библиотеки, чтобы не было двойного
добавления файлов. В именах rel-файлов расширение можно не указывать. Имена
добавляемых файлов разделяются пробелами или запятыми.
3. Глобальные символы "*" и "?" поддерживаются только для режима извлечения
модулей (опция "e"). В остальных режимах необходимо указывать реальное имя
файла.
4. Задание пути поддерживается только для файла библиотеки. Для rel-файлов
указание пути не поддерживается и используется путь расположения библиотеки.
5. В опции l(ist) (список модулей библиотеки), размеры "Code size: ..." и
"Data size: ..." выводятся в десятичном формате.
6. В опциях d(ump) и l(ist) вывод на экран можно остановить/продолжить при
нажатии на любую клавишу. При нажатии на Esc - выход из режима.
7. Коды возврата библиотекаря:
00h - Ok
0FFh - были ошибки работы или операций с файлами.