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

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-библиотеку, надо удалить
заголовок и символьную таблицу.