Operating System
+2
tux
Andrew
Участников: 6
FreeBasic :: Программирование :: Общее
Страница 2 из 2
Страница 2 из 2 • 1, 2
Re: Operating System
to Eric
Ага! Теперь я понял, а то сначала подумал типа программу-оболочку под дос писать
Ага! Теперь я понял, а то сначала подумал типа программу-оболочку под дос писать
Andrew- Сообщения : 45
Дата регистрации : 2008-09-23
Возраст : 35
Откуда : Киев
Re: Operating System
Это только VGA-режимы - до 640х480 256 цветов. Выше - уже нужны родные дрова.tux пишет:У любой видеокарты (если неошибаюсь) есть графические режимы, которые запускаются абсолютно идентично, дрова пишутся для поддержки специфических режимов и разных технологий.
justar- Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 49
Откуда : Кишинёв, Республика Молдоа
Re: Operating System
C OpenGL FB напрямую не работает - только через внешнюю библиотеку. С DirectX, кажется, тоже.Andrew пишет: Может ты имеешь ввиду Windows компилятор который использует OpenGl или DirectX ?
justar- Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 49
Откуда : Кишинёв, Республика Молдоа
Re: Operating System
Ну незнаю незнаю, мож это в новых компиляторах, я пытался в досе работать в графическом режиме года полтора назад, при этом для запуска программы требоваласть какаето библиотека, какя я уже непомню, тк дальше не колупался.од DOS используется прямой доступ к VGA/ModeX/VESA
Re: Operating System
для запуска программы требоваласть какаето библиотека
Наверное это был cwsdpmi.exe Но он с графикой не связан. Вот, вычитал:
DPMI (DOS Protected Mode Interface) — протокол доступа к памяти, с помощью которого программа может использовать дополнительную память персонального компьютера с адресами выше 1 Мбайта, недоступную при работе процессора 80x86 в реальном режиме.
Andrew- Сообщения : 45
Дата регистрации : 2008-09-23
Возраст : 35
Откуда : Киев
Re: Operating System
Изначально хотелось бы написать большую часть кода именно на FB. Наткнулся в хелпе на библиотеку IO.bi. Написано Low level I/O. В ней имеются команды для создания директорий и чтение\запись файлов. Так вот, неужели эта библиотека является низкоуровневой, и предоставляет доступ к прерываниям БИОС ?
P.S. В нете сколько не рылся, нету ОС написанной полностью с нуля, даже на ассемблере. Все на прерываниях БИОС. В принципе, зачем мне изобретать велосипед? БИОС стоит везде, а вот ДОС... В БИОС есть все что нужно для ОС, клава\мышь (через INT33h ), даже чтение\запись на дискету.
P.S. В нете сколько не рылся, нету ОС написанной полностью с нуля, даже на ассемблере. Все на прерываниях БИОС. В принципе, зачем мне изобретать велосипед? БИОС стоит везде, а вот ДОС... В БИОС есть все что нужно для ОС, клава\мышь (через INT33h ), даже чтение\запись на дискету.
Andrew- Сообщения : 45
Дата регистрации : 2008-09-23
Возраст : 35
Откуда : Киев
Re: Operating System
Странно, вроде бы мне попадалась в инете операционка на асме. В учебных целях. Но говорили, что она работает.
А вот за то, что биос будет пахать в защищённом режиме я ручаться не могу. Хотя в реальном, почему бы и нет! Dos ведь тоже именно биосовские прерывания пользует.
Но вы внимательно смотрите в справочниках по прерываниям, какие досовские, а какие нет.
А вот дальше, в защищённом режиме. Я боюсь вам придёться подгонять операционку под компилятор. Или компилятор под операционку.
А вот за то, что биос будет пахать в защищённом режиме я ручаться не могу. Хотя в реальном, почему бы и нет! Dos ведь тоже именно биосовские прерывания пользует.
Но вы внимательно смотрите в справочниках по прерываниям, какие досовские, а какие нет.
А вот дальше, в защищённом режиме. Я боюсь вам придёться подгонять операционку под компилятор. Или компилятор под операционку.
Re: Operating System
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
кто скачал мою коллекцию книг по ассемблер, там это есть.
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
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Operating System
Как гора с плеч )))идет обращение к биос
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
Возраст : 35
Откуда : Киев
Re: Operating System
я точно не утверждаю, что под dos, идет обращение к биос, как правило идет обращение к библиотеке, а вот она, может и к биос, а может сразу на прямую с портами работает. хуже, если все работает через эмуляцию dos прерываний dpmi.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Operating System
На Бейсике это выглядит на много проще: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
justar- Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 49
Откуда : Кишинёв, Республика Молдоа
Re: Operating System
Ух ты!))) Насколько я понимаю это прямое обращение к порту?
P.S. У меня раньше была идея проигрывать настоящую музыку через спикер, к примеру так:
Изначально раскладываем wav (или какой-нибудь другой формат) по частоте. Т.е. каждый момент времени играет определенная частота. разложить к примеру по 10 миллисекунд, и записать в файл. Конечно файл получится огромный, но все-же... Затем считать из него данные, и в цикле проигрывать.
P.S. У меня раньше была идея проигрывать настоящую музыку через спикер, к примеру так:
Изначально раскладываем wav (или какой-нибудь другой формат) по частоте. Т.е. каждый момент времени играет определенная частота. разложить к примеру по 10 миллисекунд, и записать в файл. Конечно файл получится огромный, но все-же... Затем считать из него данные, и в цикле проигрывать.
Andrew- Сообщения : 45
Дата регистрации : 2008-09-23
Возраст : 35
Откуда : Киев
Re: Operating System
Помнится в norton comander v5.0 была утилитка wavplay.exe так она именно на спикере звучки играла.
А wav он и так уже разложен, если конечно его не сжимали.
А wav он и так уже разложен, если конечно его не сжимали.
Re: Operating System
по поводу 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. я пока не решусь написать ос, мой главный проект на данный момент, говорящие часы со слитным произношением.
но а теперь подумайте, 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
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Operating System
опппааа!!! вспомни его, вот и оно. мы говорили про воспроизведение wave файлов? но вот, решил я вылезти на оф форум, и вот вам:
http://freebasic.net/forum/viewtopic.php?p=108974
воспроизведение wave через спикер.
http://freebasic.net/forum/viewtopic.php?p=108974
воспроизведение wave через спикер.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Operating System
Оно самоеAndrew пишет:Ух ты!))) Насколько я понимаю это прямое обращение к порту?
В старых Бейсиках был оператор PLAY, в качестве аргумента которго задавалась строка нот и их доительностей, которые он проигнывал в фоне на спикере. Разработчики FB видимо посчитали спикер устройством слишком несовременным, а для игры на звуковухе и так есть многочисленые библиотеки - навернго, поэтому и не включили PLAY в стандартную библиотеку FB... Но если надо (а, IMHO, надо - так как не всегда нужны сильные звуковые навороты) - то здесь в соседней ветке проскакивала ссылка на библиотеку SQBS для FB - как раз и реализующую стандартные Бейсиковские звуковые операторы BEEP, SOUND и PLAY.У меня раньше была идея проигрывать настоящую музыку через спикер
justar- Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 49
Откуда : Кишинёв, Республика Молдоа
Re: Operating System
А разве у PC порты аппаратно не 8-ми битные???electrik пишет:FreeBasic, крутой язык, но он ограничен, в чем? а в том, что в порт можно заслать лишь только восьмибитное значение. а ассемблер... ...Назначение: вывод в порт из памяти последовательности байт, слов, двойных слов.
justar- Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 49
Откуда : Кишинёв, Республика Молдоа
Re: Operating System
http://freebasic.net/forum/viewtopic.php?p=108974
воспроизведение wave через спикер.
Менял и скорость и частоту дискретизации в исходнике, все равно не пашет. Может у меня не те что надо WAVe - файлы? у всех работает, а я как всегда..
Andrew- Сообщения : 45
Дата регистрации : 2008-09-23
Возраст : 35
Откуда : Киев
Re: Operating System
ну поповоду портов, наверное восьмибитные, но все-равно вывести два байта сразу, или каждый раз вызывать out и по одному байту. наверное два или четыре байта будет быстрее. но для нашей задачи со звуком, FreeBasic сойдет.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Operating System
IMHO если не всегда. то в большинстве случаев прежде чем положить следующий байт в порт надо либо выждать определённую паузу, либо проверить флаг готовности устройства... В любом случае, если пихнёшь в 8-ми битный порт сразу несколько байт, то скорее всего просто следующим затрёшь предыдущий. А бвстродействие, по-любому, ограничивается не быстротой плсылки байтов в порт, а скоростью самого устройства - которая обычно на много меньше скорости процессораelectrik пишет:ну поповоду портов, наверное восьмибитные, но все-равно вывести два байта сразу, или каждый раз вызывать out и по одному байту. наверное два или четыре байта будет быстрее. но для нашей задачи со звуком, FreeBasic сойдет.
justar- Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 49
Откуда : Кишинёв, Республика Молдоа
Re: Operating System
Просидев несколько красноглазых ночей с интернетом, вот что я нашёл.
Из документации:
Другими словами, написать операционную систему на FreeBASIC'е всё-таки можно, но тут есть трудности.
Например, нельзя использовать следующие функции фрибейсика (потому что они платформоспецифичны):
* Стоки
* Динамические массивы (можно использовать только массивы фиксированной длины)
* Ввод/вывод, включая консольный, портов, Peek и Poke
* Графика
Все эти и некоторые другие функции придётся переписывать самостоятельно.
Также, чтобы компилировать ядро, необходимо несколько протюнинговать FreeBASIC, подробнее здесь http://wiki.osdev.org/FreeBasic_Barebones
На сайте http://wiki.osdev.org есть очень много полезной информации, правда, она на английском языке, но с этим неплохо справляется промт.
Там же на сайте есть ссылка на проект frostkernel http://sourceforge.net/projects/frostkernel
Это микроядерная операционная система, под лицензией GNU GPL, целиком написанная на FreeBASIC'е. Изучая её исходные коды (хорошо комментированные), можно многое понять.
Из документации:
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'е. Изучая её исходные коды (хорошо комментированные), можно многое понять.
Re: Operating System
Ух ты !!!!!!!!!! емае..
Я просто долго не был на форуме и не видел последний пост. Оказывается FB рулит!
Было время - дизасмил екзешник который создал с пом. FB...Единственное смущает. Что FB пихает в исполняемый (досовский) файл что он весит АЖ 108 Кб (и это без единой строчки кода в исходнике)?
P.S. А NerdPole кто нибудь заимел? Ато сайт ихний уже не работает
Я просто долго не был на форуме и не видел последний пост. Оказывается FB рулит!
Было время - дизасмил екзешник который создал с пом. FB...Единственное смущает. Что FB пихает в исполняемый (досовский) файл что он весит АЖ 108 Кб (и это без единой строчки кода в исходнике)?
P.S. А NerdPole кто нибудь заимел? Ато сайт ихний уже не работает
Andrew- Сообщения : 45
Дата регистрации : 2008-09-23
Возраст : 35
Откуда : Киев
Страница 2 из 2 • 1, 2
FreeBasic :: Программирование :: Общее
Страница 2 из 2
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|