Автор |
Съобщение |
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4577 Местоположение: Новата земя на племето Мутум'ба
|
Как да направя биос?
Значи занимавам се с моя 8-битов компютър. Вече съм на привършване със системния му софтуер обаче само едно нещо ме мъчи от няколко дена и не мога да го измисля. Искам да направя така че външни програми да могат да се възползват от функциите дето са във флаша. Примерно функциите за работа с паметта или пък за файловата система. Очевидно винаги мога да ги викам по адрес обаче не е сигурно че ще са на същия адрес в бъдеще при нова версия на фърмуера. Рапър функция също е не е възможно понеже са много и най-различни. Някакви други идеи да подхвърлите?
_________________ 'просто' е технически синоним на 'красиво'
|
Съб Окт 05, 2019 10:49 am |
|
|
ps66
Ранг: Форумен бог
Регистриран на: Пет Яну 19, 2007 8:16 am Мнения: 1063 Местоположение: путинофили: "иди н***й"
|
Re: Как да направя биос?
jump func1 jump func2 jump func3 ...
|
Съб Окт 05, 2019 11:12 am |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4671
|
Re: Как да направя биос?
Външните програми какво са нови узер апликации? как се компилират има ли flash ресурс
_________________ main[-1u]={1};
|
Съб Окт 05, 2019 11:17 am |
|
|
palavrov
Ранг: Форумен бог
Регистриран на: Вто Окт 11, 2011 10:53 pm Мнения: 4174 Местоположение: Brussels / Пловдив
|
Re: Как да направя биос?
Ако процесорът има инструкции за прекъсвания можеш да ги използваш за унификация - както е примерно при х86. Ако няма тогава е вариант както по горе ПС66 е написал на фиксирани адреси да имаш едни jmp таблици или пък направо адреси с които да унифицираш системната функционалност. Трети вариант е да имаш само една входна точка и да предаваш в някой регисър коя точно системна функция искаш да се изпълни + необходимите и параметри в други регистри. Четвърти вариант за да се спести малко код при условие, че номера на системната функция общо взето е константа да не хабиш инструкция и регистър за него ами да го вкараш в кода непосредствено след съответният int/call и да си се взима от там пък адреса за връщане да се модифицира така за да го прескочи, абе като, че ли малко код ще е по ясен: Та това безумие, ще спести някой друг байт но прави много тегаво интегрирането със C/C++ компилатор - но все пак е доста често срещан подход при 8 битови ОС
_________________ Мразя да мразя ...
|
Съб Окт 05, 2019 11:37 am |
|
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4577 Местоположение: Новата земя на племето Мутум'ба
|
Re: Как да направя биос?
Мда... супер. Това с таблицата ще се окаже решение. Мерси!
_________________ 'просто' е технически синоним на 'красиво'
|
Съб Окт 05, 2019 1:30 pm |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4671
|
Re: Как да направя биос?
firmware независимо апи baremetal CORE SIDEUSER SIDE
_________________ main[-1u]={1};
|
Съб Окт 05, 2019 1:37 pm |
|
|
palavrov
Ранг: Форумен бог
Регистриран на: Вто Окт 11, 2011 10:53 pm Мнения: 4174 Местоположение: Brussels / Пловдив
|
Re: Как да направя биос?
Да не забравиш да сложиш някъде версия на АПИ-то за да може за в бъдеще да има някаква защита ако се пуска програма на стар БИОС който не поддържа необходимата функционалност.
_________________ Мразя да мразя ...
|
Съб Окт 05, 2019 5:51 pm |
|
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 11:32 am Мнения: 7878 Местоположение: София
|
Re: Как да направя биос?
Правиш 1 ф-я с константен адрес, който не променяш никога. Ф-я от вида: пример:
|
Вто Окт 15, 2019 4:41 pm |
|
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4577 Местоположение: Новата земя на племето Мутум'ба
|
Re: Как да направя биос?
Дааа... това се оказа интересен проблем. Значи таблицата с входни точки на всички функции и важни променливи ми е в рома на фърмуера. Сега искам да напиша едно "Ollo World!" и за целта трябва да я импортна в юзърската ми програма. Хедър файла съм го подготвил, обаче тук възникна интересния проблем - как да обявя функциите така че адресите им да са според таблицата?? XC8 има параметър __at(address), обаче това ще насочи функцията към съответния адрес в таблицата, а всъщност там е нейния адрес. Демек на мен ми трябва __at(__at(address)) обаче това не минава за съжаление... Някакви идеи/предложения? (по възможност без да правя таблица в рама)
_________________ 'просто' е технически синоним на 'красиво'
|
Пон Окт 21, 2019 3:44 pm |
|
|
ps66
Ранг: Форумен бог
Регистриран на: Пет Яну 19, 2007 8:16 am Мнения: 1063 Местоположение: путинофили: "иди н***й"
|
Re: Как да направя биос?
ако беше го направил, както ти показах - нямаше да имаш проблем (jump adr1, вместо само адр1)
|
Пон Окт 21, 2019 4:52 pm |
|
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4577 Местоположение: Новата земя на племето Мутум'ба
|
Re: Как да направя биос?
Не ми пречи да го променя в рома... Аз да си призная чак сега се усетих какво си имал предвид
_________________ 'просто' е технически синоним на 'красиво'
|
Пон Окт 21, 2019 5:24 pm |
|
|
palavrov
Ранг: Форумен бог
Регистриран на: Вто Окт 11, 2011 10:53 pm Мнения: 4174 Местоположение: Brussels / Пловдив
|
Re: Как да направя биос?
Това което ти трябва е да извикаш функция през указател - което може и да не е особенно ефективно като асемблерски инструкции според архитектурата, та затова виж дизасм и променяй докато не започне да те кефи резултата. Съвсем примерен вариант, без претенции за коректност и дали въобще ще се компилира:
_________________ Мразя да мразя ...
|
Пон Окт 21, 2019 10:27 pm |
|
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4577 Местоположение: Новата земя на племето Мутум'ба
|
Re: Как да направя биос?
Това е супер идея! Ще го пробвам. Малко ме притеснява дали така ще минат и системните променливи, но ще пробвам...
_________________ 'просто' е технически синоним на 'красиво'
|
Вто Окт 22, 2019 11:32 am |
|
|