Board.KolibriOS.org

Official KolibriOS board
It is currently Thu Dec 05, 2019 8:37 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 51 posts ]  Go to page 1 2 3 4 Next
Author Message
PostPosted: Sat May 12, 2007 11:27 pm 
Offline
User avatar

Joined: Tue May 08, 2007 12:44 am
Posts: 346
Есть желание создать полноценный сабж и по мере возможностей поддерживать его в актуальном состоянии. Поскольку Дельфи не может компилировать в формат Колибри, придётся сделать поддержку PE. План следующий:
  • создаётся Kolibri.pas, аналогичный Windows.pas на небезызвестной платформе - это делаю я
  • создаётся загрузчик PE, позволяющий загружать любые PE-файлы (не только написанные на Дельфи) - это должен сделать кто-то из вас
  • совместными усилиями создаётся PE-модуль, реализующий (хотя бы заглушками) некоторые критичные для Дельфи системные функции

Когда эта байда начнёт работать, можно/нужно интегрировать запуск PE-модулей в KFar и прочие приложения Колибри. Короче, сделать PE одним из официально поддерживаемых форматов исполнения и включить в официальный дистрибутив.

У меня личный интерес - превратить Колибри из теоретической в практическую legacy-платформу для Единой среды. Исходники Delphi SDK для Колибри будут распространяться по лицензии KOL (кто знает, какая у Кладова лицензия?).

Разобраться с примером запуска PE автора Pascal Pro не смог - такой я тупой.

_________________
Разработчик языка программирования Кантор


Top
   
 Post subject:
PostPosted: Sun May 13, 2007 11:00 am 
Offline

Joined: Wed Jan 04, 2006 12:25 pm
Posts: 59
>> кто знает, какая у Кладова лицензия?
Вроде GPL

Вот только зачем меня устраивал mpc от mike.dld, только доделать бы его..


Top
   
 Post subject:
PostPosted: Sun May 13, 2007 1:26 pm 
Offline

Joined: Sun Mar 11, 2007 4:05 pm
Posts: 64
Помойму одним Kolibri.pas не обойтись, дело в том что что system завязан на виндоусе. Так что тут либы system переписовать. Либо портировать три десятка функций.


Top
   
 Post subject:
PostPosted: Sun May 13, 2007 2:15 pm 
Offline
User avatar

Joined: Tue May 08, 2007 12:44 am
Posts: 346
Pavia wrote:
Так что тут либы system переписовать. Либо портировать три десятка функций.

Ты меня учишь? System переписан у Кладова. Если PE будет, можно даже разные GetTlsValue и RtlUnwind поотключать и посмотреть, как будет.

_________________
Разработчик языка программирования Кантор


Top
   
 Post subject:
PostPosted: Sun May 13, 2007 2:43 pm 
Проще подправлять (релинковать) уже готовые, маленькие PE имиджи :)

Code:
use32

      org   0x0

      db   'MENUET01'      ; 8 byte id
      dd   0x01         ; required os
      dd   START         ; program start
      dd   I_END         ; program image size
      dd   0x400000      ; required amount of memory
      dd   0x20000
      dd   0,0         ; reserved=no extended header

чуток доработать DOSHACK, прописать сигнатуру в DOSHEADER и делов, а то загрузщик PE - это реальная волокита.. http://forum.sources.ru/index.php?showtopic=184453


Top
   
 Post subject:
PostPosted: Tue May 15, 2007 7:29 pm 
Offline

Joined: Fri Jan 06, 2006 6:05 am
Posts: 102
N†OSKRNL, большое спасибо за твои system.pas и sysinit.pas! ;)
Они мне очень пригодились! :)

_________________
Image


Top
   
 Post subject:
PostPosted: Thu Jun 21, 2007 3:20 am 
Offline

Joined: Sun Mar 11, 2007 4:05 pm
Posts: 64
Хочется узнать, как двигается проект?
Нашел утилиту PE2Kos - не работает. Написал свою на делфи.
Начал пробовать. Окно создается. Но хочется иметь возможность работы со строками и объектами - system.pas нужет.


Top
   
 Post subject:
PostPosted: Thu Jun 21, 2007 9:50 pm 
Offline

Joined: Sun Mar 11, 2007 4:05 pm
Posts: 64
Продолжаем тему.
Тут вопрос как лучше.
Дельфи использует регистр EBX на свое усмотрение, поэтому его нужно сохронять.
Как лучше через стэк
Code:
PUSH EBX
POP EBX


За частую один регистр не используется может тогда использовать
Code:
MOV EDX,EBX
MOV EBX,EDX


Сейчас колдую над GetMem и FreeMem, если удасться тогда строковые функци и деномическии можно будет добавить. Пока не использую дельфийский мэнеджер памяти.
Также взял kolibry.pas из ppro. Ищу ошибки и правлю также добовляю сохронение EBX и других регистров. EAX, ECX, EDX - не требуют сохронения.


Top
   
 Post subject:
PostPosted: Fri Jun 22, 2007 7:20 am 
Pavia
Пересылка из регистра в регистр всегда быстрее, чем пересылка между регистром и памятью. Другой вопрос, что не всегда удается это использовать, потому что обычно все регистры уже заняты.


Top
   
 Post subject:
PostPosted: Fri Jun 22, 2007 5:46 pm 
павея, дельфи мемори менеджер, реализован довольно усложненно, из за чиво обьем проги возростает.. а так есть несколько версий (D2/D7) которые так или иначе упруццо в вендовые функции Heap/VirtualAlloc, HeapFree, etc... Поэтому здесь наверно стоит особо не извращаться, а просто сделать переходниг Win32api ->int 40h

Delphi активно юзает EBX для обращений к переменным,массивам в том числе и локальным... Ну а насчет "регистры Vs стек", здесь быстродействие падает не столь уж и существенно, и на мощных (от 200мгц) компах на это можно забить-достаточно глянуть, что в венде твориццо на stdcall вызовах.. :)


Top
   
 Post subject:
PostPosted: Fri Jun 22, 2007 6:30 pm 
Offline

Joined: Sun Mar 11, 2007 4:05 pm
Posts: 64
В основном дельфи использует EBX как указатель на объект. Сделал везде через стэк.
Насчет мемори менеджера, пока думаю как лучше сделать. Пока черновой вариант, просто вызываю функции из ядра которые выделяют страницы. Через чур расточительно. Функции колибри ограниченны. Я думаю проще написать свои функции выделения и освобождения памяти. Вот только разберусь как функции колибри функционируют 68.12 и 68.13. А то не понятно, что делать если освободить блок по середке. Как его потом заново проинциировать. Новерно освобождать можно только с верхушки.

Пока займусь, работай с файлами, а после вернусь к мэнеджеру памяти.


Тут пытался добавить классы. Они там столько понаворатили, застрял где-то на ReallocMem. Зато с объектами можно работать.

Может кто хочет помочь?


Top
   
 Post subject:
PostPosted: Sat Jun 23, 2007 9:36 am 
Offline
User avatar

Joined: Thu Mar 01, 2007 4:16 pm
Posts: 426
Посмотри как сделанно в FP, может поможет. Я без проблем, вроде, сделал работу с памятью для FP. Когда занимался переносом RTL.

..bw


Top
   
PostPosted: Fri May 31, 2013 2:46 am 
Offline
User avatar

Joined: Tue May 08, 2007 12:44 am
Posts: 346
Всего пять лет каких-то прошло, фигня вопрос...

За это время я успел разочароваться в возможностях встроенного компоновщика Delphi, но потом, не помню уже, когда точно, нашлось обходное решение.

Алексей Хмельнов из Института динамики систем и теории управления Сибирского отделения РАН разработал декомпилятор dcu-файлов -- dcu32int. Мне давно хотелось с ним поиграться, но получилось только сейчас. Так родилась "Пифия" -- препроцессор int-файлов, генерируемых dcu32int, в asm-файлы синтаксиса FASM. Полученные ассемблерные исходники штатно собираются FASM-ом как из-под Windows, так и из-под самой "Колибри".

Опыта разработки под "Колибри" у меня никакого, поэтому добиться работоспособности тестовой программы мне не удалось, а библиотеку даже не тестировал. Возможно, пример неудачный подобрал, не знаю. Решил выложить что есть, вдруг снова на 5 лет пропаду?

Если тут есть фанаты Delphi, можете поиграться. Уже понятно, что под "Колибри" придется писать код специально, но путей разработки на Паскале под "Колибри" стало на один больше. Даже ООП должен сработать, а если немного поколдовать, то и VMT организовать можно. Время бы...


Attachments:
Pythia.7z [155.55 KiB]
Downloaded 209 times

_________________
Разработчик языка программирования Кантор
Top
   
PostPosted: Fri May 31, 2013 8:31 am 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Quote:
За это время я успел разочароваться
Quote:
Delphi 6 не умеет собирать программы с Image Base = 0, а obj-файлы у него -- уже не обычный OMF
А версия 6 это принципиально? В Delphi 2.0(и, наверное, в третьей тоже, но не пробовал) получается нормальный omf, который потом можно сконвертировать в coff, а затем ld + objcopy --> kex.


Top
   
PostPosted: Fri May 31, 2013 11:50 am 
Offline
User avatar

Joined: Tue May 08, 2007 12:44 am
Posts: 346
0CodErr wrote:
А версия 6 это принципиально?

Оказалось, что да. В обычной разработке я активно пользуюсь, как минимум, перегруженными функциями (overload). Без них никак, на них весь API построен. Попробовал было собрать свои исходники 3-й версией dcc, которую тут кто-то выкладывал, -- спотыкается как раз на overload.

_________________
Разработчик языка программирования Кантор


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 51 posts ]  Go to page 1 2 3 4 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 5 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited