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>
139 lines
7.5 KiB
Plaintext
139 lines
7.5 KiB
Plaintext
Линкер
|
||
|
||
|
||
Линкер LD предназначен для сборки готовых программ или dll-библиотек
|
||
из отдельных объектных модулей. В качестве объектных модулей могут высту-
|
||
пать файлы rel-формата или библиотеки irl-формата (создаваемые библиотека-
|
||
рем ol.exe). Описание "rel", "irl" форматов смотрите в файлах "rel.rus" и
|
||
"irl.rus".
|
||
|
||
Строка вызова линкера имеет следующий формат:
|
||
|
||
LD [/keys] [outfile=] infile[/keys] [,infile[/keys] ...] [@ list]
|
||
|
||
где:
|
||
keys - опции линкера
|
||
outfile - имя выходного файла программы
|
||
infile - файл "rel" или "irl" формата
|
||
@ list - файл подстановок
|
||
|
||
|
||
Пример вызова линкера:
|
||
|
||
LD hello.rel
|
||
|
||
После выполнения данной команды получится файл "hello.exe".
|
||
|
||
При своей работе, линкер может создавать на диске временные файлы. Поэтому
|
||
для ускорения работы линкера рекомендуется использовать его на электронном
|
||
диске.
|
||
|
||
Опции линкера:
|
||
|
||
A использовать диск для сохранения симв. таблицы
|
||
D## адрес расположения DATA сегмента
|
||
E не вставлять EXE заголовок
|
||
Glabel задать метку 'label' в качестве стартовой
|
||
L поиск библиотечного файла (опция после имени файла)
|
||
P## адрес расположения CODE сегмента
|
||
Q вывести метки вида ?labels на экран
|
||
R## установить адрес загрузки (адрес ORG-а программы)
|
||
S вывести список меток на экран
|
||
T[type:ver] создать DLL библиотеку. Type - внутр. описание библы;
|
||
Ver - версия библы. Символ ":" разделяет параметры.
|
||
U заменить все "@" на "_" в именах меток
|
||
Y исключить DATA сегмент из выходного кода
|
||
X не создавать SYM файл
|
||
|
||
|
||
|
||
Создание DLL-библиотек
|
||
|
||
Для создания динамических библиотек служит опция "t". Обратите внимание,
|
||
что эта опция отменяет вставку exe-заголовка.
|
||
Отслеживается превышение максимального размера dll-библиотеки в 16 kB.
|
||
В этом случае линкер выдает предупреждающее сообщение, но линковка библи-
|
||
отеки не прерывается.
|
||
|
||
Создаваемые dll-библиотеки имеют сигнатуру заголовка "L1". Библиотека этого
|
||
формата отличается от формата "L0" только тем, что таблица перемещений начи-
|
||
нается сразу за концом "своего" кода.
|
||
Заголовок dll-библиотеки создается и прилинковывается автоматически, поэто-
|
||
му не надо резервировать для него место при написании ассемблерных текстов.
|
||
Более подробную информацию по dll-библиотекам смотрите в документации менед-
|
||
жера dll-библиотек.
|
||
|
||
Пример строки вызова линкера:
|
||
|
||
LD /TSymple library:0001 test.rel
|
||
|
||
где:
|
||
"Symple library" - Строка внутреннего описания библиотеки.
|
||
Строка описания может содержать пробелы.
|
||
Длина описания не должна превышать 16
|
||
символов, иначе линкер выдаст ошибку.
|
||
|
||
"0001" - Внутренний номер версии библиотеки. Может
|
||
содержать символы 0..9 и A..F (a..f).
|
||
|
||
"test.rel" - объектный файл, служащий для создания библиотеки.
|
||
|
||
Можно не указывать один из параметров (или все) опции, но символ ":" разде-
|
||
лителя параметров должен стоять всегда. В случае отсутствия описания - в
|
||
заголовке библиотеки будет стоять пустая строка. В случае отсутствия номера
|
||
версии - в заголовке будет стоять нулевой номер. Примеры вызова опции:
|
||
|
||
LD /Tsymple library: test.rel
|
||
LD /tМоя библиотека: test
|
||
LD /T:010B test.rel
|
||
LD /t:7 test
|
||
LD /t: test.rel
|
||
|
||
Обратите внимание, что строка внутреннего описания библиотеки начинается
|
||
сразу же за буквой "t" опции. Например, если написать
|
||
|
||
LD /T Example:0001 test.rel
|
||
|
||
то строка описания в заголовке библиотеки будет иметь вид " Example", т.е.
|
||
начинаться с пробела.
|
||
|
||
|
||
|
||
Файл подстановок
|
||
|
||
Файл подстановок служит для некоторой "автоматизации" процесса линковки
|
||
программ. Можно один раз создать файл подстановки и линковать программу, не
|
||
набирая каждый раз (возможно длинную) строку параметров линкера.
|
||
Файл подстановок может содержать всего одну строку агрументов или отдельные
|
||
аргументы могут начинаться с новой строки. В конце файла подстановок должна
|
||
стоять пустая строка. Размер файла подстановок ограничен до 256 байт и файл
|
||
может иметь любое имя.
|
||
Пример вызова линкера с файлами подстановок:
|
||
|
||
LD @ comp.txt
|
||
|
||
или
|
||
|
||
LD @list
|
||
|
||
|
||
Примеры файла подстановок.
|
||
|
||
Пример 1
|
||
|
||
test=prog,clib.irl/l/gxmain/x
|
||
|
||
|
||
Пример 2
|
||
|
||
test=prog,
|
||
clib.irl/l
|
||
/gxmain
|
||
/x
|
||
|
||
В данных примерах собирается программа с заданным именем "test". При лин-
|
||
ковке используется исходный объектный файл "prog.rel", библиотека "clib.irl"
|
||
и управление в программе передается на метку "xmain" (это необходимо делать
|
||
для всех программ, линкуемых с Си-библиотекой "clib.irl"). Опция "x" запре-
|
||
щает создание sym-файла.
|