генерация плоского бинарника без системных функций

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

генерация плоского бинарника без системных функций

Сообщение ger0strat » 04.10.2014 17:35:31

Доброго времени суток.
Возникла необходимость в миниатюрном "реаниматоре". Вопрос не горит, но иной раз он был бы весьма кстати. К fpc я уже привык, так что ищу варианты. Если нет родной возможности компилировать в плоский бинарник - это решаемо, слинкую из объектников, но как отключить любую возможность использовать функции, связанные с системой - не нашел. Гуглёж средней въедливости результатов не дал, да и по ману глухо.
Есть мысль перегрузить модуль system, но хватит ли этого?

Задача не собственно реаниматор(коих готовых куча), а независимый от ОС паскальный расширяемый блок с загрузчиком.

ЗЫ Как-то давно начал я ковырять ассемблер. И как 99% из изучавших его не из-под палки решил написать "МегаКрутуюОС". Итог предсказуем, но загрузчик остался. Дальше дело не пошло, т.к. на чистом асме писать что-то относительно крупное(сложнее калькулятора) довольно тяжко, а с сями я не дружу.
ger0strat
новенький
 
Сообщения: 40
Зарегистрирован: 13.05.2014 19:35:56

Re: генерация плоского бинарника без системных функций

Сообщение hinst » 04.10.2014 17:43:41

у меня такое было на FPC и оно работало на VirtualBox, но я уже потерял этот проектик из-за давности времени

Что я помню так это то что компиляция кода который работает без ОС "прямо на железе" типа достигается вот этой опцией:
-Us : Compile a system unit
http://www.freepascal.org/docs-html/user/userap1.html
при использовании этой опции некоторые фичи компилятора будут станут недоступны
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: генерация плоского бинарника без системных функций

Сообщение ger0strat » 04.10.2014 17:54:41

hinst
не совсем понимаю, как эта опция может помочь, но за направление спасибо
ger0strat
новенький
 
Сообщения: 40
Зарегистрирован: 13.05.2014 19:35:56

Re: генерация плоского бинарника без системных функций

Сообщение Лекс Айрин » 06.10.2014 14:28:34

ger0strat, видимо, системные вызовы, по возможности, заменяются на их аналоги из BIOS-а.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: генерация плоского бинарника без системных функций

Сообщение ger0strat » 06.10.2014 22:40:39

Лекс Айрин биос не имеет функций для работы в защищенном режиме. в общем протестирую - отпишусь
ger0strat
новенький
 
Сообщения: 40
Зарегистрирован: 13.05.2014 19:35:56

Re: генерация плоского бинарника без системных функций

Сообщение Лекс Айрин » 07.10.2014 09:40:41

ger0strat, Почему бы это? Если Вы переключаете в защищенный режим, то это Ваша задача сохранить прерывания BIOS в Глобальной Дескрипторной Таблице, до переключения. Если не хотите, то придется писать собственные драйвера.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: генерация плоского бинарника без системных функций

Сообщение Kemet » 07.10.2014 19:33:29

ger0strat, посмотри на Free Pascal Operating System
Но вообще это дело более чем бесполезное
Kemet
постоялец
 
Сообщения: 241
Зарегистрирован: 10.02.2010 19:28:32
Откуда: Временно оккупированная территория

Re: генерация плоского бинарника без системных функций

Сообщение ger0strat » 08.10.2014 00:20:50

Лекс Айрин,
биос в 16-битном коде(по крайней мере без наворотов), разве нет? я крутым знатоком не являюсь, но дескрипторы 32-битные[upd: ну если система не 64 конечно] вроде как. хотя.. короче ушел курить мануал.

а отключение RTL оказалось проще, -n для отключения дефолтного конфига и создать system.pas и fpintres.pas
притом в первом пришлось объявить тип HRESULT, который, как я понял, есть нативное целое.
второй пустой.
не исключено, что я что-то не то творю, но пока связку не тестировал. в любом случае загрузчик сначала под ext2 перепилю
ger0strat
новенький
 
Сообщения: 40
Зарегистрирован: 13.05.2014 19:35:56

Re: генерация плоского бинарника без системных функций

Сообщение Лекс Айрин » 08.10.2014 10:47:00

ger0strat, почитайте документацию по процессорам Интел. Да, система 32х разрядная, но...

1)Никто не запрещает Вам создать 32битный сегмент кода. и наложить его на "реальное" пространство в пределах

2)Существует стандартная возможность перевести процессор в защищенный режим.

ЗЫ: Я исхожу из того, что ОС у Вас еще нет и рабочее окружение вы создаете сами.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: генерация плоского бинарника без системных функций

Сообщение ger0strat » 08.10.2014 17:05:13

Лекс Айрин
я с чтения документации собственно и начал
1) первый мегабайт я и отображал на те же адреса.
2) не понял смысл фразы. а есть еще и нестандартные сбособы?
ОС нет и не предвидится. суть в анализе и редактировании файловой системы.
сбило с толку что в реальном режиме адрес сегмента добавляется со смещением, а в защищенном без. вроде выглядит реализуемо, но таки берут сомнения, поверю когда протестирую :D
навскидку геморрой с трансляцией вектора прерываний сопоставим с работой с видеопамятью и дисками через порты
ger0strat
новенький
 
Сообщения: 40
Зарегистрирован: 13.05.2014 19:35:56

Re: генерация плоского бинарника без системных функций

Сообщение Лекс Айрин » 09.10.2014 09:07:55

ger0strat, есть очень большое количество доступной документации по процессорам и их программированию... правда на английском :oops: На сайте Intel. Вот там этот способ и описан.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: генерация плоского бинарника без системных функций

Сообщение SSerge » 10.10.2014 05:09:48

Парни, вы к какой-то абстракции в обсуждении скатились, не имеющей отношения к первоначальному вопросу. :twisted:
Лучше, наверное, стоит задуматься, что останется от самого языка pascal, если его лишить взаимодействия с операционной системой.
Итак, - модуля system нет. Вас это не остановит? Да? Ну так - начинаем подсчет: менеджера памяти - нет, операций I/O - нет, еще много его нет. Нет менеджера памяти - нет типов данных, получающих автоматическое размещение от компилятора. Нет строк, нет массивов (любых) и операций с ними, нет половины математики, фактически нет работы с указателями - ага, на что указывать, если ничего невозможно разместить то?. Стоит крепко задуматься над тем, что же в результате осталось. А в результате осталось обрамление над ассемблерным кодом. :mrgreen: Достигаемое в весьма извращенной форме. Imho, языки, у которых библиотеки глубоко интегрированы в саму алгоритмику, для написания кода, работающего без операционной системы, не пригодны. Либо придется написать этот самый имитатор OS - в виде переделанных модулей system и остальных библиотек, переработанного компилятора и т.д. - т.е. проблема не только в том, что компилятор fpc давно уже не умеет генерить код, привязанный на статический адрес запуска, а куда глубже.

Когда-то очень давно у меня был такой компьютер MS1502. PCjr то есть. Без операционной системы. И мне очень хотелось запускать на ней программы, созданные на Turbo Pascal. COM-файлы тогда компилятор генерить мог. :D Ну так, если в сгенерированном коде, написанном с некоторыми оговорками на Cи, достаточно было забить NOPами вызовы INT 21h, и программка работала без ОС, с турбо-паскалем такой номер не проходил. Даже на файлах, содержащих заглушку вместо модуля system.
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: генерация плоского бинарника без системных функций

Сообщение ger0strat » 11.10.2014 10:44:18

SSerge
позволю себе не согласиться. достаточно посмотреть на сам родной system и входящие в него *.inc, например i386.inc, чтобы увидеть, что там те же зайцы на ассемблере, только в профиль.
менеджер памяти? ставим стек номеров страниц(а если охота побыстрее, то +bitmap занятости страниц). для более мелких объемов можно портировать родной менеджер.
io? видеобуфер отображен в память. клавиатура стандартна и прекрасно работает через порты. ata-устройства тоже на портах без проблем. с sata и usb пока не разбирался, возможны проблемы.
очевидно вы не поняли, полноценная ОС - дело не нашего с вами уровня, а вот без "имитатора" все равно не обойтись. это решено еще до начала работы.

достаточно было забить NOPами вызовы INT 21h

я не знаю, что у вас там работало, но это издевательство над программой.
работать это будет только если программа и без того не использует досовский инт, иначе параметры в регистры переданы, прерывание не вызвано и мы радостно забираем как результат вызова наши же параметры. да, не везде, но меньшим извратом оно от этого не становится
Последний раз редактировалось ger0strat 11.10.2014 12:29:29, всего редактировалось 1 раз.
ger0strat
новенький
 
Сообщения: 40
Зарегистрирован: 13.05.2014 19:35:56

Re: генерация плоского бинарника без системных функций

Сообщение Лекс Айрин » 11.10.2014 12:15:34

SSerge писал(а):Лучше, наверное, стоит задуматься, что останется от самого языка pascal, если его лишить взаимодействия с операционной системой.


Ни один язык (кроме ассемблера) не предназначен для написание ОС. Однако почти все ОС написаны на ЯВУ. Да, с ассемблерными вставками в библиотеках поддержки. Но этот путь (по крайней мере пока) интереснее процессоров заточенных под ЯВУ.

Человек хочет знать как программировать под "голым" БИОСом. Почему бы и нет? Я тоже хочу.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: генерация плоского бинарника без системных функций

Сообщение Pavia » 11.10.2014 12:48:03

Можно сделать всё! Но какой ценой? В какие сроки?
Я всё это уже прошёл.

Зря вы думаете что обойдётесь без ОС. Менеджер памяти вам понадобится. Так как со стационарной дальше 1-2х функций не уедешь Есть ведь целый раздел программирвования структуры данных и алгоритмы на них.
Понадобиться не только менеджер памяти, но ввод и вывод. Вы же команды будете вводить. И не только понадобятся таймеры и часы. А также процессы так как надо будет иметь возможность прервать выполнение программы. Нужно будет детективировать зависание и тд. А зависания будут, так как будут ошибки как в вашем коде так и в железе.
И это только верхушка айсберга.

И не только. И драйвера для видео и жестких дисков и для материнок и процессоров, компортов вам потребуются.
Это в эмуляторе всё просто, а на реальном железе с ихними выкрутасами кроме как писать под каждое устройство и конфигурацию свой драйвер нереально.
Так что берите готовую ОС с минимальной сборкой и делайте свой реаниматор поверх. Linux живёт только за то что Intel в него вложила не мала кода для поддержания своих и чужих устройств.

И ассмеблер знаю. И писать больше и сложные программы на ассмеблере можно. Просто у вас не было хорошего учебника. И вы так не научились писать функции и работать со структурами данных. А это ведь основы программирования! Но писать на ассемблере большой проект я не буду. Просто на языках высокого уровня это удобнее.

С Си у меня тоже не сложилось. Но гораздо проще делать как делают все в том же KolibryOS. Я имею в виду собирать всё из готовых блоков прикручивая, то одно то другое.
Исходник на Си компилируют в объектный файл и переводишь заголовочные файлы и подключаешь к своему проекту.
Аватара пользователя
Pavia
постоялец
 
Сообщения: 290
Зарегистрирован: 07.01.2011 12:46:51

След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 5

Рейтинг@Mail.ru
cron