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>
156 lines
8.4 KiB
Plaintext
156 lines
8.4 KiB
Plaintext
Некоторые особенности пакета 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 - были ошибки работы или операций с файлами.
|