ZXNet эхоконференция «code.zx»


тема: *.DLL библиотеки



от: Kirill Frolov
кому: All
дата: 22 Aug 2003
Hемедленно нажми на RESET, All!


Newsgroups: fido7.zx.spectrum
From: Kirill Frolov
Subject: Re: Doors 2003! RE:inferno4_1.zip
References: <3121331872@p2.f827.n5030.z2.ftn> <1060789410@f19.n451.z2.ftn>
Organization: на alasm мы ставим крест, zasm поколенье next!
Followup-To:
X-Comment-To: Oleg Golenkoff
User-Agent: [ZX]
X-FTN-PID: Lara Croft MED 5.0+ by KVA of E-mage

Hемедленно нажми на RESET, Oleg Golenkoff!

On Wed, 13 Aug 03 14:43:30 +0400, Oleg Golenkoff wrote:

OG>>> может сделать свой компилеp ? пускай он помедленнее будет, но зато
OG>>> в пpостом тексте.
KF>> Для спектpума? Понадобится ещё и текстовый pедактоp и файлы... коpоче
KF>> говоpя, вначале ОС какая-нибудь нужна.
OG> агу! отсюда моpаль, сделать ос под свой комп,
OG> и написать pедактоp - компилеp под нее с возможностью
OG> пеpекомпиляции под конкpетный дpугой комп

Флаг в руки... (у микрософта это дело ~15 лет заняло)

Я вот мысль думаю: неплохо бы иметь некий общий формат исполняемых файлов
и/или библиотек для всех ZX*OS-ов. Есть много системо-независимого кода,
который может быть без модификации, или же с минимальными усилиями использован
как в TR-DOS программах, так и в Aqua-OS, так и в прочих D2k и X-DOS, BeeOS...
Конечно можно всегда взять в руки исходник, но исходник может быть недоступен,
для этого нужен ассемблер определённой версии, несовместимый с используемым
(как, например, ZASM и ALASM), наконец становится недоступна динамическая
загрузка кода, ни совместное его использование несколькими программами.
Что получается -- программы увеличиваются в размерах, при том что содержать
практически одинаковый код. А их поддержка, в случае когда используются части
кода от разных людей, становится просто невозможной -- например, если я
выпустил новую версию драйвера IDE, то как я заставлю Vega вставить его в
CD-Walk? (на встраивание драйвера для KAY ушло года 2, примерно)

Что я имею ввиду, так это то, что нужны библиотеки. Динамически загружаемые
на этапе выполнения программы. Примерно как *.dll на ПЦ, только попроще.
Hапример, сейчас во многих спектрумовских программах (за 2000-2003 год)
используется так называемый драйвер памяти, часов реального времени ("CMOS"),
драйвер электронного диска... Hа каждом компутере практически один и тот-же
"драйвер" с различными модификациями встроен в каждую программу, или же
загружается при старте программы. В последнем случае, практически все
программы используют несовместимые между собой драйвер, это при том, что
все они обладают примерно одинаковой функциональностью. Так почему-бы и не
дойти, наконец-то, к динамической загрузке кода и единому способу (формату)
представления этого кода?

Hа мой взгляд требования к библиотеке это в первую очередь простота их
загрузки. Чтобы для загрузки трёхсот байт кода не нужна была целая ОС.
Это крайне важно для поддержки библиотек в среде TR-DOS и для адаптации
старых программ. Второй пункт это совместимость: должно быть достаточно
традиционных для спектрума средств, таких как ALASM или ZASM, как для
создания, так и для загрузки библиотеки. Впрочем, тут ещё есть над чем
думать...

Для драйвера IDE контроллера в программе CD-Hack я использовал
некое подобие динамически загружаемой библиотеки *dll на ПЦ, что
мне позволило: 1. полностью разделить программы использующие *dll файл
и саму библиотеку -- теперь и библиотека, и программа могут развиваться
отдельно друг от друга (то есть, выпуская новую версию драйвера не приходится
думать об обновлении программы, и наоборот). 2. получить возможность
динамической (грубо говоря, я их могу на ходу менять) загрузки любого из
имеющихся модулей определённого класса (в данном случае -- IDE драйвера).
3. получить возможность загружать одновременно несколько разных экземпляров
модулей одного класса (я могу загрузить сразу все драйверы и использовать их
одновременно на машине с несколькими IDE контроллерами). 4. Один и тот-же
модуль может свободно использоваться в разных программах, что сильно упрощает
его сопровождение и экономит место на диске. Список преимуществ перед
статически встраиваемым кодом можно продолжать долго... Есть и недостатки.
Это всё-таки некоторое усложнение программы, увеличение её объёма (например,
за счёт загрузчика модулей) и неэффективный с точки зрения оптимального
кодирования интерфейс библиотеки и программы. Для IDE драйверов мне пришлось
придумать простой формат исполняемого файла библиотеки, который бы позволял:
1. указывать список импортируемых модулей и функций, список экспортируемых
функций. 2. загрузку по абсолютному и относительному (модуль перемещаемый)
адресу. 3. Указывать информацию модуле, такую как его класс, имя и версия
(я предполагал, что будет существовать единая иерархическая система
классов, так что любая программа может определить назначение модуля).
Думаю, мой вариант *.dll файлов не последний, и пока есть возможность
для существенных изменений.

Для ос-писателей и прочих "кодеров" я бы предложил более детально
обсудить данную тему и утвердить-таки единый формат динамически загружаемых
модулей. Хотелось определиться со списком требований к модулю, и вариантами
реализации. Мой вариант можно подсмотреть на примере IDE драйверов,
файл с которыми (ide-pack.zip) был заюючен сегодня в эху.

от: LynX
кому: Kirill Frolov
дата: 28 Aug 2003
Как твоё ничего, Kirill?

22 Aug 03 07:54, Kirill Frolov -> All:

KF> загружаемыхмодулей. Хотелось определиться со списком требований к
KF> модулю, и вариантамиреализации. Мой вариант можно подсмотреть на примере
KF> IDE драйверов,файл с которыми (ide-pack.zip) был заюючен сегодня в эху.
Hу дык, а если все модули неперемещаемы или, мало того, скомпилены под
нестандартный адрес?

WBR, Lynx // J!ZzZ!
[team ZX] [Dark Jungle] [GoA] [J!ZzZ project] [PLUt0N!um]
[GmD] [club ЛюК] [black-sand.da.ru]

от: Kirill Frolov
кому: LynX
дата: 01 Sep 2003
Hемедленно нажми на RESET, LynX!

On Thu, 28 Aug 03 02:58:00 +0400, LynX wrote:


KF>> загружаемыхмодулей. Хотелось определиться со списком требований к
KF>> модулю, и вариантамиреализации. Мой вариант можно подсмотреть на примере
KF>> IDE драйверов,файл с которыми (ide-pack.zip) был заюючен сегодня в эху.
L> Hу дык, а если все модули неперемещаемы или, мало того, скомпилены под
L> нестандартный адрес?

У меня модули перемещаемые. Для перемещаемых модулей адрес компиляции
не имеет значения. Для неперемещаемых (флаг загрузки по абсолютному
адресу в заголовке должен быть установлен) загрузчик пока возвращает
ошибку. Я считаю, что без механизма управления памятью это невозможно --
надо-же знать, свободна-ли запрашиваемая память и возможна-ли в неё
загрузка.

А твоего вопроса я не понял.

от: LynX
кому: Kirill Frolov
дата: 07 Sep 2003
Как твоё ничего, Kirill?

01 Sep 03 06:11, Kirill Frolov -> LynX:
L>> Hу дык, а если все модули неперемещаемы или, мало того, скомпилены под
L>> нестандартный адрес?
KF> У меня модули перемещаемые. Для перемещаемых модулей адрес компиляции
KF> не имеет значения. Для неперемещаемых (флаг загрузки по абсолютному
KF> адресу в заголовке должен быть установлен) загрузчик пока возвращает
KF> ошибку. Я считаю, что без механизма управления памятью это невозможно --
KF> надо-же знать, свободна-ли запрашиваемая память и возможна-ли в неё
KF> загрузка.
KF> А твоего вопроса я не понял.
Адрес если не #c000, который всех устраивает, а , допустим, #9c40 ;).

WBR, Lynx // J!ZzZ!
[team ZX] [Dark Jungle] [GoA] [J!ZzZ project] [PLUt0N!um]
[GmD] [club ЛюК] [black-sand.da.ru]

от: Evgeny Goljakov
кому: LynX
дата: 09 Sep 2003
Привет, LynX.
Вс 7 Сен 02 LynX -> Kirill Frolov:

L>>> Hу дык, а если все модули неперемещаемы или, мало того,
L>>> скомпилены под нестандартный адрес?
KF>> У меня модули перемещаемые. Для перемещаемых модулей

слепой с глухим ;)

L> Адрес если не #c000, который всех устраивает, а , допустим,
L> #9c40 ;).

прилагай табличку для перенастройки всех абсолютных адресов,
относительно к-н адреса компиляции, который может быть первым
в тойже табличке, имх.

Спасибо за внимание.

от: Kirill Frolov
кому: LynX
дата: 11 Sep 2003
Hемедленно нажми на RESET, LynX!

On Sun, 07 Sep 03 22:47:00 +0400, LynX wrote:

KF>> У меня модули перемещаемые. Для перемещаемых модулей адрес компиляции
KF>> не имеет значения. Для неперемещаемых (флаг загрузки по абсолютному
KF>> адресу в заголовке должен быть установлен) загрузчик пока возвращает
KF>> ошибку. Я считаю, что без механизма управления памятью это невозможно --
KF>> надо-же знать, свободна-ли запрашиваемая память и возможна-ли в неё
KF>> загрузка.
KF>> А твоего вопроса я не понял.
L> Адрес если не #c000, который всех устраивает, а , допустим, #9c40 ;).

Адрес может быть любой, лишь бы через границу 0xffff не перелезал.
Модулей с абсолютным адресом загрузки пока не существует, все модули
перемещаемые. То-есть адрес там хоть #3d13 может быть, а он по #c000
грузится, настраивается и нормально работает. Так что вопроса я опять
не понял.




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Ассемблер - Z80 Flags: недокументированные комманды процессора Z80.
заключение - авторы и т.д.
Реклама - Реклама и объявления.
Beatles - I should have known better.
Systemka - описание Shuffle Commander'a от Disabler/DPL.

В этот день...   25 апреля