E123
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Большей частью взято отсюда, спасибо SW2004 за ссылку: http://www.hddoracle.com/viewtopic.php?f=59&t=1468 I. Лоадеры В общем случае содержит набор оверлеев, каждый из которых предваряется заголовком. Заголовок, в свою очередь состоит из 3 частей. Последовательность оверлеев следующая: 1. оверлей 20D (если есть)- часть системного файла FC00E20D.rpm, либо оверлей 06 (если есть) - системный файл FC3xx19F.rpm 2. оверлей 04 - системный файл FC3xx103.rpm 3. оверлей 05 - системный файл FC3xx104.rpm 4. оверлей 01 - системный файл FC3xx101.rpm, он же модуль ~001Е.rpm 5. оверлей 00 - системный файл FC3xx100.rpm, он же модуль ~001D.rpm Последовательность желательно соблюдать, хотя четвертый можно менять с пятым, нулевой с первым (на фараонах - точно) Пример лоадера для Pharaoh Адреса Размер Описание --------------------------------------------------------------------------------- 00000 - 0003F 00040 заголовок - определяет размер лоадера 00040 - 001C0 00180 нули 001C0 - 001FF 00040 заголовок с сигнатурой "qx7" - идентификаторы модуля, размер и т.д. 00200 - 301FF 30000 оверлей 04 30200 - 3023F 00040 заголовок - определяет размер (следующий модуль + заголовок) 30240 - 303BF 00180 нули 303C0 - 303FF 00040 заголовок с сигнатурой "qx7" - идентификаторы модуля, размер и т.д. 30400 - 503FF 20000 оверлей 05 50400 - 5043F 00040 заголовок - определяет размер (следующий модуль + заголовок) 50440 - 505BF 00180 нули 505C0 - 505FF 00040 заголовок с сигнатурой "qx7" - идентификаторы модуля, размер и т.д. 50600 - 605FF 10000 оверлей 01 60600 - 6063F 00040 заголовок - определяет размер (следующий модуль + заголовок) 60640 - 607BF 00180 нули 607C0 - 607FF 00040 заголовок с сигнатурой "qx7" - идентификаторы модуля, размер и т.д. 60800 - 707FF 10000 оверлей 00 Состав лоадеров для некторых семейств: 51 Anak 04+05+01+00 = 460800 4F Bogart 20D(0x0C0028)+04+05+01+00 = 1247744 2D Brinks 04+05+01+00 = 460800 42 Desaru 06+04+05+01+00 = 526848 58 Grenada 20D(0x0E0028)+04+05+01+00 = 1378816 40 Hepburn 20D(0x090028)+04+05+01+00 = 1051136 3E Holiday 04+05+01+00 = 460800 54 JULIUS1 06+04+05+01+00 = 592384 72 Kahuna_5400 04+05+01+00 = 460800 5D Yarra1D 06+04+05+01+00 = 592384 75 Yarra_5400 20D(0x0C0028)+04+05+01+00 = 1247744 27 Moose 04+05+01+00 = 460800 63 Megalodon 20D(0x0E0028)+04+05+01+00 = 1378816 65 MuskiePlus 20D(0x0A0028)+04+05+01+00 = 1116672 3F Pharaoh 04+05+01+00 = 460800 56 Sapta 06+04+05+01+00 = 592384 55 Sentosa 20D(0xOB9C28)+04+05+01+00 = 1222144 67 Tambora 04+05+01+00 = 460800 3C Wyatt 04+05+01+00 = 460800 II. Формат заголовков. Первый заголовок 40h Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 00 00000010 80 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000020 00 00 00 00 00 08 07 00 00 00 00 00 00 00 00 00 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 72 F6 0x0E 0x07 - сигнатура заголовка 0x10 0x0180 размер следующего за 40h нулевого сегмента, нули нужны для выравнивания сегментов по длине кратной 512 байт в сегменте с оверлеем 20D, длина которого не кратна 512, размер этого сегмента 0x158. 0x24 размер файла LOD - 0x70800 - есть лоадеры общим размером больше этого числа, скорее всего всё что свыше - игнорируется 0x3E 16-bit little-endian checksum. Он рассчитывается таким образом, чтобы сумма всех слов в заголовке, в том числе контрольной суммы слова, является 0x0000. Второй заголовок 40h Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 000607C0 71 78 37 07 00 00 00 00 00 3F 00 01 00 00 4A 00 qx7 000607D0 00 00 01 00 0E 60 01 00 11 06 08 14 06 11 10 20 000607E0 00 00 00 00 40 00 01 00 00 00 00 00 00 00 00 00 000607F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8E 94 Offset Описание ------------------------------------------------------------------------------------- 00 - 03 0x07377871 - "qx7" сигнатура для оверлеев 00-06 0x13030617 - сигнатура для основного оверлея (20D) и др. 04 - 07 хз, 00 у оверлеев 00-06 08 хз, 00 у оверлеев 00-06, 80 у 20D 09 код семейства,скорее всего задает способ загрузки для оверлеев, для неоверлеев - нули 0A хз, 00 0B вариант загрузки 00 20D 01 оверлеи 00-06 с записью на блины 02 оверлеи 00-06 только в память (на 20D не работает) 0C - 0D ID оверлея (0x0004, 0x0005, 0x0001, 0x0000) Overlay ID = 00,01,02, 2800 для 20D 0E - 0F тип данных (бутлоадер, оверлей и т.д.) 004A у оверлеев 00-06 0426 у оверлея 20D 14 - 17 хз, похоже на ID оборудования, собравшего лоадер 18 - 1B время компиляции в ascii-hex: hhmmMMDD 1C - 1F дата компиляции в ascii-hex: YYYYDDMM Время / дата компиляции для вышеуказанных модулей в примере 14:08 11 июня 2010 г. 20 - 23 хз, 00 24 - 27 размер секции (заголовок 40h + данные) в байтах 28 - 3D служебное текстовое поле для комментария 3E - 3F контрольная сумма, сумма всех слов в заголовке, включая эту КС, должна быть равна 0. Обновлено 12.12.2016: Консольный парсер для *.lod файлов (лоадеры, обновлялки): sgf3_lod_parser Разбирает, выводит инфу, проверяет КС. Комментарии и пожелания приветствуются. Моя особая благодарность тем, кто уже поделился и еще поделится интересными лоадерами. Добавлено 20.01.2017: Собрал GUI, как обещал. Увлекся, поэтому функционал получился чуть больше, чем у "консольки". По той же причине пока не всё доделал. Подробности в ридми. https://yadi.sk/d/ps0J3Kns3A3KY9 | Всего записей: 1030 | Зарегистр. 18-03-2008 | Отправлено: 11:08 30-10-2016 | Исправлено: E123, 20:27 20-01-2017 |
|