Operating System

Страница 2 из 2 Предыдущий  1, 2

Предыдущая тема Следующая тема Перейти вниз

Re: Operating System

Сообщение  Andrew в Пт Окт 17, 2008 3:40 pm

to Eric

Ага! Теперь я понял, а то сначала подумал типа программу-оболочку под дос писать Smile

Andrew

Сообщения : 45
Дата регистрации : 2008-09-23
Возраст : 28
Откуда : Киев

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Operating System

Сообщение  justar в Пт Окт 17, 2008 3:52 pm

tux пишет:У любой видеокарты (если неошибаюсь) есть графические режимы, которые запускаются абсолютно идентично, дрова пишутся для поддержки специфических режимов и разных технологий.
Это только VGA-режимы - до 640х480 256 цветов. Выше - уже нужны родные дрова.

justar

Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 43
Откуда : Кишинёв, Республика Молдоа

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Operating System

Сообщение  justar в Пт Окт 17, 2008 3:58 pm

Andrew пишет: Может ты имеешь ввиду Windows компилятор который использует OpenGl или DirectX ? Smile
C OpenGL FB напрямую не работает - только через внешнюю библиотеку. С DirectX, кажется, тоже.

justar

Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 43
Откуда : Кишинёв, Республика Молдоа

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Operating System

Сообщение  tux в Пт Окт 17, 2008 5:43 pm

од DOS используется прямой доступ к VGA/ModeX/VESA
Ну незнаю незнаю, мож это в новых компиляторах, я пытался в досе работать в графическом режиме года полтора назад, при этом для запуска программы требоваласть какаето библиотека, какя я уже непомню, тк дальше не колупался.
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: Operating System

Сообщение  Andrew в Пт Окт 17, 2008 7:49 pm

для запуска программы требоваласть какаето библиотека

Наверное это был cwsdpmi.exe Но он с графикой не связан. Вот, вычитал:


DPMI (DOS Protected Mode Interface) — протокол доступа к памяти, с помощью которого программа может использовать дополнительную память персонального компьютера с адресами выше 1 Мбайта, недоступную при работе процессора 80x86 в реальном режиме.

Andrew

Сообщения : 45
Дата регистрации : 2008-09-23
Возраст : 28
Откуда : Киев

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Operating System

Сообщение  tux в Пт Окт 17, 2008 7:55 pm

а мож и она была, непомню уже))
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: Operating System

Сообщение  Andrew в Вс Окт 19, 2008 12:46 pm

Изначально хотелось бы написать большую часть кода именно на FB. Наткнулся в хелпе на библиотеку IO.bi. Написано Low level I/O. В ней имеются команды для создания директорий и чтение\запись файлов. Так вот, неужели эта библиотека является низкоуровневой, и предоставляет доступ к прерываниям БИОС ?

P.S. В нете сколько не рылся, нету ОС написанной полностью с нуля, даже на ассемблере. Все на прерываниях БИОС. В принципе, зачем мне изобретать велосипед? БИОС стоит везде, а вот ДОС... В БИОС есть все что нужно для ОС, клава\мышь (через INT33h Smile ), даже чтение\запись на дискету.

Andrew

Сообщения : 45
Дата регистрации : 2008-09-23
Возраст : 28
Откуда : Киев

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Operating System

Сообщение  Eric-S в Вс Окт 19, 2008 12:52 pm

Странно, вроде бы мне попадалась в инете операционка на асме. В учебных целях. Но говорили, что она работает.

А вот за то, что биос будет пахать в защищённом режиме я ручаться не могу. Хотя в реальном, почему бы и нет! Dos ведь тоже именно биосовские прерывания пользует.

Но вы внимательно смотрите в справочниках по прерываниям, какие досовские, а какие нет.

А вот дальше, в защищённом режиме. Я боюсь вам придёться подгонять операционку под компилятор. Или компилятор под операционку.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: Operating System

Сообщение  electrik в Вс Окт 19, 2008 8:06 pm

io.bi- это заголовки к стандартным c функциям ввода/вывода, находится в папке:
include\crt
под виндами обращается не напрямую к биос, а через msvcrt.dll, а она уже обращается, скорее всего, к функциям api. под dos, идет обращение к биос. поповоду написания операционки на Fb, дело в том, что под dos, проги на Fb компилируются в 32 битный код, и работают в защищенном режиме. конечно, если не использовать специфических функций fb, только встроенный ассемблер, и линкеру сказать чтоб компилил в чистый бинарник, может что-то и выдет. но я не помню, можно ли линкеру так сказать. короче операционка на fb с нуля, это сложно, а вот использовать dos с переключенной fb прогой проц в 32 битный режим- проще. если вы хотите быструю операционку, так или иначе в ядре, нерекомендовал бы использовать функции биос- они были и будут всегда медленней чем обращения к портам напрямую. но программирование портов- это трудоемкая работа. придется мноооого прочитать книг, как обращатся к тому или иному контроллеру, устройству их команды. лишь программирование гнустного устройства спикер, чтоб он запищал, на ассемблере надо написать следующее:
код:

NUMBER_CYCLES EQU 1000
FREQUENCY EQU 300
PORT_B EQU 61H
CLI ;запрет прерываний
MOV DX,NUMBER_CYCLES ;длительность тона в DX
IN AL,PORT_B ;получаем значение из порта B
AND AL,11111110B ;отключаем динамик от таймера
NEXT_CYCLE: OR AL,00000010B ;включаем динамик
OUT PORT_B,AL ;посылаем команду в порт B
MOV CX,FREQUENCY ;задержка на пол-цикла в CX
FIRST_HALF: LOOP FIRST_HALF ;делаем задержку
AND AL,11111101B ;выключаем динамик
OUT PORT_B,AL ;посылаем команду в порт B
MOV CX,FREQUENCY ;задержка на пол-цикла в CX
SECOND_HALF: LOOP SECOND_HALF ;делаем задержку
DEC DX ;вычитаем единицу из счетчика
JNZ NEXT_CYCLE ;если 0, то надо кончать
STI ;разрешаем прерывания

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

Справочник программиста на персональном компьютере фирмы IBM

кто скачал мою коллекцию книг по ассемблер, там это есть.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 36
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Operating System

Сообщение  Andrew в Пн Окт 20, 2008 12:39 pm

идет обращение к биос
Как гора с плеч )))

NUMBER_CYCLES EQU 1000
FREQUENCY EQU 300
PORT_B EQU 61H
CLI ;запрет прерываний
MOV DX,NUMBER_CYCLES ;длительность тона в DX
IN AL,PORT_B ;получаем значение из порта B
AND AL,11111110B ;отключаем динамик от таймера
NEXT_CYCLE: OR AL,00000010B ;включаем динамик
OUT PORT_B,AL ;посылаем команду в порт B
MOV CX,FREQUENCY ;задержка на пол-цикла в CX
FIRST_HALF: LOOP FIRST_HALF ;делаем задержку
AND AL,11111101B ;выключаем динамик
OUT PORT_B,AL ;посылаем команду в порт B
MOV CX,FREQUENCY ;задержка на пол-цикла в CX
SECOND_HALF: LOOP SECOND_HALF ;делаем задержку
DEC DX ;вычитаем единицу из счетчика
JNZ NEXT_CYCLE ;если 0, то надо кончать
STI ;разрешаем прерывания

За код с коментариями отдельное спасибо! )

Andrew

Сообщения : 45
Дата регистрации : 2008-09-23
Возраст : 28
Откуда : Киев

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Operating System

Сообщение  electrik в Пн Окт 20, 2008 2:13 pm

я точно не утверждаю, что под dos, идет обращение к биос, как правило идет обращение к библиотеке, а вот она, может и к биос, а может сразу на прямую с портами работает. хуже, если все работает через эмуляцию dos прерываний dpmi.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 36
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Operating System

Сообщение  justar в Пн Окт 20, 2008 3:14 pm

electrik пишет: лишь программирование гнустного устройства спикер, чтоб он запищал, на ассемблере надо написать
На Бейсике это выглядит на много проще:
Код:

DIM al AS INTEGER
DIM  i AS INTEGER

al = INP (&h61)
al = al AND &hFE
FOR i = 1 TO 800
  al =al OR 2
  OUT &h61, al
  SLEEP 150
  al = al AND &hFD
  OUT &h61, al
  SLEEP 150
NEXT
Меняя значения параметра в SLEEPах можно получать различные звуки - от писка разных тонов до щелчков с разной частотой.

justar

Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 43
Откуда : Кишинёв, Республика Молдоа

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Operating System

Сообщение  Andrew в Пн Окт 20, 2008 6:35 pm

Ух ты!))) Насколько я понимаю это прямое обращение к порту? Very Happy

P.S. У меня раньше была идея проигрывать настоящую музыку через спикер, к примеру так:

Изначально раскладываем wav (или какой-нибудь другой формат) по частоте. Т.е. каждый момент времени играет определенная частота. разложить к примеру по 10 миллисекунд, и записать в файл. Конечно файл получится огромный, но все-же... Затем считать из него данные, и в цикле проигрывать. Very Happy

Andrew

Сообщения : 45
Дата регистрации : 2008-09-23
Возраст : 28
Откуда : Киев

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Operating System

Сообщение  Eric-S в Пн Окт 20, 2008 8:14 pm

Помнится в norton comander v5.0 была утилитка wavplay.exe так она именно на спикере звучки играла.
А wav он и так уже разложен, если конечно его не сжимали.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: Operating System

Сообщение  electrik в Пн Окт 20, 2008 11:10 pm

по поводу wave файлов. wave файл, говорит сам за себя, волновой файл. он ни чем не сжат, если конечно это не ulaf, imaatpcm. стандартный wave файл- это файл pcm, как расшифровывается не помню, какая-то пульсовая модуляция. все зависит от частоты дискретизации, тоесть если частота дискретизации 44100, и звук восьмибитный, одна секунда равна 44100 байт. если звук шестнадцатибитный, значит умножаем на два. а если еще и два канала, еще умножаем на два. причем, в шестнадцатибибном звуке, идет два байта левого и два байта правого и т.д. короче говоря, поскольку в порт можно заслать, лишь восьмибитное значение, тогда если звук восьмибитный, и частота дискретизации 44100, в порт нужно засылать 44100 байт в секунду. причем нужно учитывать то, что в порт не так просто заслать значения, так как некоторые байты, отвечают за команды порта, включение выключение. если звук шестнадцатибитный и двухканальный, нам сразу нужно определить, какой канал будем играть, но а потом уже преобразовать звук из шестнадцатибитного в восьмибитный. просто берем шестнадцатибитное значение и делим на 256. в звуковухе sb16, чтобы программировать восьмибитный порт dac, перед каждым байтом wave, надо было засылать команду, точно не помню, &h10. соответственно звук 44100, требовал засылания в порт 88200 байт в секунду. как быть со спикером, надо подумать. раньше мне не удавалось воспроизвести звук, надо попробовать, сейчас все-таки опыта по больше, а тогда только начинал писать на QBasic.
но а теперь подумайте, FreeBasic, крутой язык, но он ограничен, в чем? а в том, что в порт можно заслать лишь только восьмибитное значение. а ассемблер. вот там есть команды типа:
пример из справочника:

OUTS/OUTSB/OUTSW/OUTSD
(OUTput Byte/Word/Double word String to port)
Вывод строки байтов/слов/двойных слов в порт

Схема команды:

outs порт,источник
outsb
outsw
outsd
Назначение: вывод в порт из памяти последовательности байт, слов, двойных слов.

Синтаксис

Алгоритм работы:
передать данные в порт ввода-вывода, номер которого загружен в регистр dx, из ячейки памяти по адресу ds:esi/si;
в зависимости от состояния флага df изменить значение регистров esi/si:
если df=0, то увеличить содержимое этих регистров на длину структурного элемента последовательности;
если df=1, то уменьшить содержимое этих регистров на длину структурного элемента последовательности;
при наличии префикса выполнить определяемые им deiqrbh (см. команду
rep/repe/repz/repne/repnz).
Состояние флагов после выполнения команды:

выполнение команды не влияет на флаги
Применение:
Команда выводит данные в порт ввода-вывода, номер которого загружен в регистр dx, из ячейки памяти по адресу ds:esi/si (допускается замена сегмента). Недопустимо
задание номера порта в команде в виде непосредственного операнда — для этого используется регистр dx. Размеры вводимых элементов зависят от применяемой
команды. Команда outs может работать с элементами размером в байт, слово или двойное слово. В качестве операнда в команде указывается символическое имя
ячейки памяти, из которой элемент выводится в порт ввода-вывода. Реально символическое имя используется лишь для получения типа элемента последовательности,
а ее адрес должен быть предварительно загружен в пару регистров ds:esi/si. Транслятор, обработав команду outs и выяснив тип операндов, генерирует одну
из машинных команд outsb, outsw или outsd. Машинного аналога для команды outs нет.
Для того чтобы эти команды можно было использовать для вывода в порт последовательности элементов, имеющих размерность байт, слово или двойное слово, необходимо
использовать префикс rep. Он заставляет циклически выполняться команду вывода в порт до тех пор, пока содержимое регистра ecx/cx не станет равным нулю.

код:

.286
;вывести последовательность 10 байт в порт 300h
;(номер порта взят условно)
str_10 db 10 dup(0)
adr_str dd str_10
lds si,adr_str
mov dx,300h
rep outsb

я конечно понимаю, что форум посвящен FreeBasic, но чтоб больше понять, надо знать асм. конечно же я не крутой ассемблерщик, и если мне дать исходник, я и 5 процентов не пойму, но понимание ассемблера, поможет, оптимизировать собственный код, и чесно говоря, на познание ассемблера меня, именно подтолкнул basic. что-то есть общее, но видимо это только ассоциации моей башки. да и чесно говоря со знанием асма, не всегда в моих прогах код оптимизирован, когда не лень- оптимизирую, а если найдет так можно и поковырятся. все зависит от задачи, если скорость не критична, можно и забить.
к чему эти морали? если мы хотим классную, быструю os, не как у мелкомягких, придется и машинными кодами пописать, а если это, чисто, для удовлетворения, что ,мол, я смог написать Os, ну можно и на FreeBasic. я пока не решусь написать ос, мой главный проект на данный момент, говорящие часы со слитным произношением.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 36
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Operating System

Сообщение  electrik в Пн Окт 20, 2008 11:35 pm

опппааа!!! вспомни его, вот и оно. мы говорили про воспроизведение wave файлов? но вот, решил я вылезти на оф форум, и вот вам:
http://freebasic.net/forum/viewtopic.php?p=108974
воспроизведение wave через спикер.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 36
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Operating System

Сообщение  justar в Вт Окт 21, 2008 9:03 am

Andrew пишет:Ух ты!))) Насколько я понимаю это прямое обращение к порту? Very Happy
Оно самое
У меня раньше была идея проигрывать настоящую музыку через спикер
В старых Бейсиках был оператор PLAY, в качестве аргумента которго задавалась строка нот и их доительностей, которые он проигнывал в фоне на спикере. Разработчики FB видимо посчитали спикер устройством слишком несовременным, а для игры на звуковухе и так есть многочисленые библиотеки - навернго, поэтому и не включили PLAY в стандартную библиотеку FB... Но если надо (а, IMHO, надо - так как не всегда нужны сильные звуковые навороты) - то здесь в соседней ветке проскакивала ссылка на библиотеку SQBS для FB - как раз и реализующую стандартные Бейсиковские звуковые операторы BEEP, SOUND и PLAY.

justar

Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 43
Откуда : Кишинёв, Республика Молдоа

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Operating System

Сообщение  justar в Вт Окт 21, 2008 9:06 am

electrik пишет:FreeBasic, крутой язык, но он ограничен, в чем? а в том, что в порт можно заслать лишь только восьмибитное значение. а ассемблер... ...Назначение: вывод в порт из памяти последовательности байт, слов, двойных слов.
А разве у PC порты аппаратно не 8-ми битные???

justar

Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 43
Откуда : Кишинёв, Республика Молдоа

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Operating System

Сообщение  Andrew в Вт Окт 21, 2008 3:17 pm

http://freebasic.net/forum/viewtopic.php?p=108974
воспроизведение wave через спикер.

Менял и скорость и частоту дискретизации в исходнике, все равно не пашет. Может у меня не те что надо WAVe - файлы? у всех работает, а я как всегда.. Smile

Andrew

Сообщения : 45
Дата регистрации : 2008-09-23
Возраст : 28
Откуда : Киев

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Operating System

Сообщение  electrik в Вт Окт 21, 2008 4:05 pm

ну поповоду портов, наверное восьмибитные, но все-равно вывести два байта сразу, или каждый раз вызывать out и по одному байту. наверное два или четыре байта будет быстрее. но для нашей задачи со звуком, FreeBasic сойдет.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 36
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Operating System

Сообщение  justar в Вт Окт 21, 2008 5:44 pm

electrik пишет:ну поповоду портов, наверное восьмибитные, но все-равно вывести два байта сразу, или каждый раз вызывать out и по одному байту. наверное два или четыре байта будет быстрее. но для нашей задачи со звуком, FreeBasic сойдет.
IMHO если не всегда. то в большинстве случаев прежде чем положить следующий байт в порт надо либо выждать определённую паузу, либо проверить флаг готовности устройства... В любом случае, если пихнёшь в 8-ми битный порт сразу несколько байт, то скорее всего просто следующим затрёшь предыдущий. А бвстродействие, по-любому, ограничивается не быстротой плсылки байтов в порт, а скоростью самого устройства - которая обычно на много меньше скорости процессора Wink

justar

Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 43
Откуда : Кишинёв, Республика Молдоа

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Operating System

Сообщение  Замабувараев в Сб Дек 05, 2009 9:04 am

Просидев несколько красноглазых ночей с интернетом, вот что я нашёл.

Из документации:


Can I write an OS in FreeBASIC ?

YES and NO. If you really insist to write an OS and involve FB, the answer is YES. If the question is, whether it is a good idea that you, even more if a beginner, should start coding an OS using FB now, the answer is NO. Several pitfalls apply:

OS development is hard, see http://www.osdev.org/wiki/Getting_Started .

FB won't help you to bypass the need to deal with assembly, also C might be almost impossible to avoid.

You won't be able to use most of the trusted FB features, like graphics, file I/O, threads, memory management, even console I/O ... just control flow, math and logic. If you need those library functions, you will have to reimplement them.

FreeBASIC relies on GCC, and available informations about developing an OS in C apply to FreeBASIC as well. FB will help you neither more nor less than GCC.

Другими словами, написать операционную систему на FreeBASIC'е всё-таки можно, но тут есть трудности.
Например, нельзя использовать следующие функции фрибейсика (потому что они платформоспецифичны):
* Стоки
* Динамические массивы (можно использовать только массивы фиксированной длины)
* Ввод/вывод, включая консольный, портов, Peek и Poke
* Графика
Все эти и некоторые другие функции придётся переписывать самостоятельно.

Также, чтобы компилировать ядро, необходимо несколько протюнинговать FreeBASIC, подробнее здесь http://wiki.osdev.org/FreeBasic_Barebones

На сайте http://wiki.osdev.org есть очень много полезной информации, правда, она на английском языке, но с этим неплохо справляется промт.

Там же на сайте есть ссылка на проект frostkernel http://sourceforge.net/projects/frostkernel
Это микроядерная операционная система, под лицензией GNU GPL, целиком написанная на FreeBASIC'е. Изучая её исходные коды (хорошо комментированные), можно многое понять.
avatar
Замабувараев

Сообщения : 99
Дата регистрации : 2008-08-20
Возраст : 33
Откуда : Красноярск

Посмотреть профиль http://www.freebasic.su

Вернуться к началу Перейти вниз

Re: Operating System

Сообщение  Andrew в Вт Фев 09, 2010 12:27 am

Ух ты !!!!!!!!!! емае..

Я просто долго не был на форуме и не видел последний пост. Оказывается FB рулит!
Было время - дизасмил екзешник который создал с пом. FB...Единственное смущает. Что FB пихает в исполняемый (досовский) файл что он весит АЖ 108 Кб (и это без единой строчки кода в исходнике)? Neutral

P.S. А NerdPole кто нибудь заимел? Ато сайт ихний уже не работает Sad

Andrew

Сообщения : 45
Дата регистрации : 2008-09-23
Возраст : 28
Откуда : Киев

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Operating System

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Страница 2 из 2 Предыдущий  1, 2

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения