PDA

Просмотр полной версии : Инструменты для компиляции BIOS.



Копейкин
19.03.2015, 11:17
Подскажите пожалуйста:
1) Какой компилятор и линкер можно использовать для создания BIOS?
2) Как полученный код конвертировать в бинарный или hex файл, пригодный для прошивки?
3) Где посмотреть правила оформления: точка старта, сигнатуры, КСумма и т.п.?
Если кто-то сможет поделиться своим набором, буду очень благодарен.

DrPass
19.03.2015, 12:42
1. Ассемблер нужен, а не компилятор :) TASM вполне подойдет.
2. В принципе, прошивку можно собирать как обычный COM-файл, базовое смещение org f000h, кажется.
3. Точка входа у всех х86 находится на FFFF:0h. Там должен быть джамп на начало основного кода BIOS, а за джампом традиционно размещается его дата сборки. У Поиска также есть требование, чтобы контрольная сумма прошивки должна быть равна нулю. Поэтому где-то в неиспользуемой области надо поместить байтик, добивающий КС до нуля. Ну, или убрать проверку контрольных сумм из кода :)

Копейкин
19.03.2015, 13:07
Спасибо.
Я понимаю, что весь код должен лежать в одном сегменте, поэтому готовим COM.
А ведь COM файл ещё нужно преобразовать в бинарный, для программатора?
С точкой входа основного BIOS всё и так понятно, я хотел узнать про дополнительные, типа VGA, IDE...
И где для них размещается стек?

DrPass
22.03.2015, 00:08
Спасибо.
Я понимаю, что весь код должен лежать в одном сегменте, поэтому готовим COM.
А ведь COM файл ещё нужно преобразовать в бинарный, для программатора?

COM-файл и есть бинарный, это просто код, и ничего более. Единственное, стандартный COM-файл имеет фиксированное смещение относительно начала сегмента, 100h (ниже DOS размещает служебные области данных). В случае BIOS это смещение надо устанавливать в соответствии с размещением ПЗУ в области памяти.



С точкой входа основного BIOS всё и так понятно, я хотел узнать про дополнительные, типа VGA, IDE...

Дополнительные размещаются произвольно в диапазоне от C000:0h и до основного BIOS. Требования стандарные как и для всех IBM PC - адрес размещения дополнительного ПЗУ должен быть кратным 512 байт, первые два байта содержат сигнатуру AA55h, третий байт содержит размер ПЗУ в 512-байтных блоках. И, поскольку это Поиск, а не IBM PC, то контрольная сумма должна быть равна 0.




И где для них размещается стек?
В BIOS Data Area, как обычно.

Копейкин
24.03.2015, 11:06
Ещё раз спасибо!
Соберу сюда всё, что узнал.
Итак, имеем скелет: "bios-exp.asm"

IDEAL
P86
MODEL TINY
ORG 0
Sign1 DB 055H
Sign2 DB 0AAH
Size DB ?? ; В блоках по 512 байт
Entry: ; здесь код
...
retf ; завершаем работу
ORG EndOfROM
CheckSum DB ??; дополнить, чтобы до ксум=0 для "Поиск"

Чтобы получить бинарный файл используем пакет Borland C++ 3.1:
tasm /m/l/s bios-exp.asm
tlink /t bios-exp.obj bios-exp.bin

Tronix
25.03.2015, 22:53
Важно понять - что хочется сделать - BIOS или дополнительный ROM-BIOS?. Просто если пишем свой BIOS, то и играть можно по своим правилам - никаких 55AA, контрольную сумму можно не хранить или хранить не в конце, а в середине и так далее, так как процессор после старта просто начинает выполнять первую команду по адресу FFFF:0 (или какому там, забыл уже). А что это за первая команда и какие будут остальные - решает только программист. В простейшем случае мне никто не запрещает написать вот такой основной BIOS:


org 0h
start:
nop
jmp far 0ffff:0

Это вполне рабочий вариант.

Другое дело, когда пишется расширение ROM-BIOS, здесь уже да, приходится подстраиваться под основной BIOS. Уже да, появляется сигнатура 55AA, появляется контрольная сумма в конце. По сигнатуре основной BIOS ищет расширения в памяти, а контрольную сумму проверяет, что бы убедится, что чужой ром-биос не попортился. Если одно из этих условий не выполнится, основной BIOS просто не запустит такое дополнительное расширение.

Не знаю, поможет ли, но я когда-то выкладывал набросок дополнительного расширения ROM-BIOS для Поиск (да и на XT работает) здесь: http://zx-pk.ru/showthread.php?p=701642&highlight=copy+seg_tst.bin#post701642 Там сорец есть в архиве. Но писалось по-быстрому, "на коленке", с копипастой начальной структуры (вот эти все 55AAh) откуда-то, вроде от сорца ROM-BIOS MFM контроллера.

Tronix
26.03.2015, 00:08
Ну и до кучи исходник моего теста оперативки, зашиваемый вместо основного BIOS. Я его по-моему собирался причесать и выложить, но так и не дошли руки до наведения красоты в коде, а потом и вовсе забыл. То же слеплен скелет из того, что было под рукой (а были сорцы Super PC/Turbo XT BIOS и сорцы BIOS Поиска), но работает, и здорово меня выручил в свое время...

Копейкин
26.03.2015, 12:02
Tronix, спасибо!
Я имел в виду расширение BIOSа. Так, что играем по всем правилам.
Мечтаю внешний видеоадаптер сделать.
Сейчас восстанавливаю из руин купленный "Поиск".
Его турбировали или пытались это сделать, но он не работает. :(
Даже не пытается...
И на доп. установленных микросхемах названия сточены.
Так, что кропотливо восстанавливаю оригинальную схему.
Дорожки очень слабо держатся, печалька.

Cat_Alex/QRP
19.07.2016, 17:09
Всем привет! У меня вопрос тоже по bios, но несколько другого толку. Задача: считать биос с одной противной материнки (286). Программатора нет, материнка рабочая. Возможно ли провернуть с ней старый спектрумовский трюк? Сорри за флейм, если что.

Копейкин
21.07.2016, 15:45
В какой-то ветке, про дисководы кажется, Tronix вроде выкладывал программку, которая может биос и/или расширения на диск скинуть.

VGrad
16.08.2016, 22:25
Задача: считать биос с одной противной материнки (286). Программатора нет, материнка рабочая. Возможно ли провернуть с ней старый спектрумовский трюк? Сорри за флейм, если что.
Подключить Video, RAM, PS, Floppy.
Загрузиться с флопика DOS какой нибудь.
Debug