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