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>
81 lines
3.6 KiB
Plaintext
81 lines
3.6 KiB
Plaintext
Последняя редакция: 7.05.2004
|
|
|
|
|
|
IRL формат
|
|
~~~~~~~~~~
|
|
|
|
IRL-файл представляет собой индексированный REL-файл. Благодаря индекси-
|
|
рованию улучшается работа линкера. В начале IRL-файла находятся 3 байта:
|
|
|
|
db старший ;+0 (File offset >> 14) & 0x7F
|
|
db средний ;+1 (File offset >> 7) & 0x7F
|
|
db младший ;+2 (File offset 1) & 0x7F
|
|
|
|
IRL-файл состоит из 3 секций: IRL-заголовок, Символьная таблица и REL-имидж.
|
|
|
|
|
|
IRL-заголовок
|
|
~~~~~~~~~~~~~
|
|
Массив 128 байт в начале REL-файла. Используются только первые три байта,
|
|
содержащие смещение до REL-имиджа. Остальные байты установлены в ноль:
|
|
|
|
db старш,средн,0 ; Смещение до REL-имиджа. Младший байт
|
|
; всегда равен 0. Начало REL-имиджа вы-
|
|
; равнивается на границу в 128 байтов.
|
|
ds 125 ; Не используются и установлены в 0.
|
|
|
|
Чтобы вычислить смещение до REL-имиджа, надо "старший" и "средний" байты
|
|
умножить на 128. Например для файла clib.irl: 0011h * 128 = 0880h
|
|
|
|
ld h,xx ;+0
|
|
ld a,xx ;+1
|
|
;a,h,l * 128
|
|
add a,a
|
|
ld l,a
|
|
xor a
|
|
srl h
|
|
rr l
|
|
srl h
|
|
rr l
|
|
rra
|
|
;hl=ст.разряд
|
|
;a=мл.разряд
|
|
|
|
Обратите внимание, что 7-й бит первого байта всегда 0. В не индексированном
|
|
rel-файле, 7-й бит первого байта всегда 1 (первый бит записи "имя модуля").
|
|
|
|
|
|
Символьная таблица
|
|
~~~~~~~~~~~~~~~~~~
|
|
Таблица начинается со смещения +80h от начала файла и состоит из множества
|
|
символьных записей разной длины. Каждая запись имеет формат:
|
|
|
|
db ст,средн,мл ; Смещение от начала rel-имиджа до rel-модуля,
|
|
; содержащего символьную строку (имя).
|
|
db "SYMBOL" ; Символьная строка из 1..8 символов.
|
|
db 0FEh ; Конец строки.
|
|
|
|
|
|
Конец таблицы отмечается 0 в начале символьной строки:
|
|
|
|
db ст,средн,0 ; Размер REL-имиджа. Это не смещение на конец
|
|
; файла в REL-имидже, а показывает число байт
|
|
; REL-имиджа, включая выравнивание до границы
|
|
; в 128 байт.
|
|
db 0FEh ; Конец строки.
|
|
|
|
Примечание!: У irl-файлов от библиотекаря "OL", данная запись имеет формат:
|
|
|
|
db 0,0,0
|
|
db 0FFh
|
|
|
|
После этой записи, таблица выравнивается (LIB использует байт 1Ah) до следу-
|
|
ющей границы в 128 байт.
|
|
|
|
|
|
REL-имидж
|
|
~~~~~~~~~
|
|
REL-имидж всегда начинается с границы в 128 байт. Состоит из обычных rel-
|
|
данных. Чтобы преобразовать IRL-библиотеку в REL-библиотеку, надо удалить
|
|
заголовок и символьную таблицу.
|