Files
snark13 c71e249a4e 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>
2026-06-03 16:13:21 +03:00
..

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
             Некоторые особенности пакета 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 - были ошибки работы или операций с файлами.