Add full compiler toolchain, libc, examples and reference docs
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>
This commit is contained in:
Vendored
+155
@@ -0,0 +1,155 @@
|
||||
Некоторые особенности пакета 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 - были ошибки работы или операций с файлами.
|
||||
Reference in New Issue
Block a user