Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2008, 12:51   #1
biff
 
Регистрация: 03.07.2008
Сообщений: 3
По умолчанию Возможно ли написать на языке Assembler модуль расширения для BIOS

Здравствуйте уважаемые господа. Я на этом форуме новичок поэтому заранее прошу извинить если вопрос не по адресу. Я не профессиональный программист а так любитель. Обладаю разрозненными знаниями. Мой вопрос состоит в следующем: Возможно ли написать на языке Assembler процедуры, которые должны быть записаны в модуль расширения ПЗУ? Можно создать на ассемблере com и exe файлы это я знаю. Но как действовать дальше. Модуль BIOS начинается со специальной двухбайтной сигнатуры и имеет специальное строение. Как обеспечить переход от com файла с образу для прошивки ПЗУ? Это только одна из главных под задач. Мне это нужно для создания на базе старых пк программных автоматов. Можно конечно использовать современные контроллеры, да недостаточно времени для изучения архитектур и систем команд контроллеров, а старые добрые ПК все знают как облупленных. Для старых ПК делаю самоделки для шин расширения ISA. В пределе хочу избавиться от всех стандартных карт расширения (особенно от видео карты, которая портит всю кровь), так как мне собственно нужен только процессор, оперативка, стандартные интерфейсы для передачи данных и последующей обработки на более мощных ПК, ну и набор процедурок управления целевыми устройствами (ЦАП, АЦП и т.д.) в ПЗУ. Вторая проблема - не знаю точек входа в процедуры ПЗУ. Где найти как узнать тоже не знаю. Общая последовательность загрузки POST всем хорошо известна, часть адресов ПЗУ тоже доступна в документации. Но куда встраиваться в ПЗУ (по какому адресу добавить свою прошитую микросхему) чтобы избежать остановки POST из-за отсутствия например видео карты я незнаю. Вообщем основная идея это трансформация "страя материнка" - > "программный автомат" Буду благодарен за любую информацию.
biff вне форума Ответить с цитированием
Старый 04.07.2008, 13:07   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
да недостаточно времени для изучения архитектур и систем команд контроллеров
А зря.
Цитата:
а старые добрые ПК все знают как облупленных
Ну вот ты знаеш как облупленных - а спрашиваешь ведь.

Тебе нужна литература о программаторах и о том что пишут.
А вообще - конечно можно, яркий пример этому AVR Studio
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.07.2008, 13:29   #3
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

FASM может выдать бинарный файл любой структуры
Вот например rar "в машинных кодах"

Код:
FORMAT binary as 'rar'

db 'Rar!'
db 1Ah,07h,0,0CFh,90h,73h,0,0,0Dh,0,0,0,0,\
   0,0,0,9Dh,0Eh,74h,20h,90h,2Ah,0,20h,0,0,\
   0,20h,0,0,0,02h,0FDh,84h,0Ah,83h,3Bh,62h,0E4h,\
   38h,1Dh,30h,05h,0,20h,0,0,00
db '1.asm',0
db 0F0h,33h,1Bh,8Dh
db 'display ',27h,'Sorry, no code here =)',27h
db 0C4h,3Dh,7Bh,0,40h,07h,0
Естевственно можно использовать и все ассемблерные инструкции, главное не забыть директиву use16/use32 в зависимости от того, какой код нужен.
Другое дело, что дизассемблировать BIOS ROM тяжело, но загрузившись в IDA можно подправить пару-тройку нужных байт
пыщь
JTG вне форума Ответить с цитированием
Старый 04.07.2008, 15:28   #4
biff
 
Регистрация: 03.07.2008
Сообщений: 3
По умолчанию

Спасибо за отклики. К сожалению директивы use16/use32 я использовать не могу. Поскольку разрядность микросхем равна 8. Разделять на два банка ПЗУ не хочется для 16 разрядного доступа т.к. легко запутаться при программировании. Да и аппаратно больше корпусов микросхем. Кроме того адресация должна быть абсолютной, а код не содержать сложной косвенной адресации. Константы надо тоже хранить прямо в коде. Форматы com и exe, насколько я помню, предполагают перемещение кода в оперативке, для чего кажется используется префикс программного сегмента (табличка в начале файла), что позволяет дисковой операционной системе настраивать сегментные регистры процессора при загрузке программы в ОЗУ. С ROM так не получится. Операционной системы нет. Микросхема это собственно и есть управляющая программа - монитор. Микросхема может быть установлена только на границе параграфа и только в области адресов BIOS иначе POST её не обнаружит. Вот только я как раз и не знаю абсолютного адреса для встраивания в код BIOS так чтобы сохранилась возможность нормального функционирования системы, чтобы была доступна таблица векторов прерываний BIOS ведь там необходимые функции для работы с часами, последовательным портом и т.д. Конечно дисковые функции не нужны, видео функции не нужны, клавиатура нужна только как дискретные датчики. Так как получить двоичный образ для прошивки? Как исключить из кода com эту табличку? Какие использовать ключи компиляции для FASM чтобы сгенерировать такой код. Кроме того я знаю что POST сканирует определенные адреса в поиске ROM карт расширений. Но вот беда без видео карты я вообще до этого места не доберусь т.к. без видео карты система выходит в останов. В BIOS есть опция где выбирается режим работы видео карты, там есть опция "отсутствует". При установке этой опции система все равно останавливается.
biff вне форума Ответить с цитированием
Старый 04.07.2008, 16:29   #5
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

"FORMAT binary" сделает просто бинарный файл, а не com, PSP у него нет, т.е. именно то что нужно - просто "сырой" код, компилируется и линкуется без всяких ключей.

Советую почитать Мыщъх`а http://www.insidepro.com/kk/046/046r.shtml
пыщь
JTG вне форума Ответить с цитированием
Старый 05.07.2008, 12:02   #6
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

biff, а зачем Вам именно курочить BIOS, не говоря уже о том, что сколько на свете разных материнок, столько и разных BIOS'ов и это может превратиться в неподъёмную задачу, а не поставить просто плату расширения (Вы же так и так их будете ставить) и реализовать на ней всё необходимое? И даже вопрос загрузки с неё по идее можно решить "прикинувшись" "сетевой платой" с бутромом.... Да и без видеоадаптеров машины прекрасно работают, если выключить останов по ошибкам...
B_N вне форума Ответить с цитированием
Старый 07.07.2008, 12:50   #7
biff
 
Регистрация: 03.07.2008
Сообщений: 3
По умолчанию

Огромное спасибо за ссылку. Отличная статья. Спасибо за замечание по поводу двоичных файлов. До этого при помощи ассемблера я составлял программки только формата com и exe, ну ещё делал ассемблерные вставки в программы на Delphi для карт расширений. Когда готовил прошивки ПЗУ (например для дешифраторов адреса) то просто готовил шестнадцатиричный код вручную по старинке как во времена "спектрумов". Вот у меня и есть пробел между низкоуровневым программированием и железяками. По поводу вообще зачем всё это. С одной стороны я радиолюбитель. С другой балуюсь программированием. Поскольку, как сделать микропроцессорную самоделку не программируя? Я использую старые материнки старых моделей ПК. Где стоит BIOS на микросхемах с ультрафиолетовым стиранием. Ломать сам BIOS я не собираюсь так как без него материнка просто не рабочая железяка. Я пытаюсь использовать вобщем-то стандартные средства, которые заявлены производителями - это возможность создания специализированных микропроцессорных систем на базе ПК. Просто почему-то вся информация об этом умещается на паре печатных листов. И где побольше узнать о этой возможности я не знаю. Насколько я понял из литературы которую нашел, есть возможность просто добавить свою прошитую микросхему расположенную на карте расширения в слот ISA (для PCI не умею делать очень сложно) и этот модуль получит управление от POST ну а дальше дело техники. В такой переделке самая бесполезная вещь это видео карта, так как ни какой полезной работы не выполняет а наоборот тормозит систему циклами пересылки видео данных. И бесполезно торчит на плате. Я проводил эксперименты с разными типами видео карт при работе со своими картами расширения в итоге обнаружил что для нормальной работы АЦП на самодельной карте расширения нужно заново подбирать время тайм аутов при замене видео карты. Здоро бы было вообще её исключить. Но как я понял инициализация видео карты происходит раньше, когда еще нет таблицы прерываний BIOS, а в этом случае нормальная работа системы еще не возможна. Вот если я расположу свою микросхему ПЗУ по адресам ПЗУ видео карты с простейшим кодом возврата, то что будет с системой? Для экспериментов у меня штук 10 всяких материнок. От 8088 до P2. Может это конечно и глупо, поскольку есть масса современных контролеров. Везде масса рекламы подталкивающей к использованию контроллеров. Понятно это бизнес. К творчеству это имеет отдаленное отношение. Цены технологии: программатор 10 000 руб. сам контроллер около 3000 руб. То есть технология по курсу евро. Я беру ПЗУ с УФ стиранием со старой материнки или отечественную РФ2 или РФ5. Делаю на 5 - 6 корпусах простейший программатор, подключаемый к LPT порту и всё. ценник 200 руб а то и даром. Карта расширения тоже не чень сложная. Питание материнки требуется минимальное - обычный трансформаторный БП 60 - 80 Вт (если нет дисководов). Сложности только с каналом питания +5 вольт так как стандартной "кренки" для стабилизации не хватает. Софта разработано на все случаи жизни от простейших частотомеров до сложнейших спектрографов. Вот и думаю что же не попользоваться хорошо сделанными готовыми заготовками. Спасибо за интересную дискурсию.
biff вне форума Ответить с цитированием
Старый 07.07.2008, 13:41   #8
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Респект =) Как чего-то напаяешь - выкладывай фотки где-нибудь в раздел "Железо"
пыщь
JTG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как к BIOS обращаться. Нужно чтение/запись BIOS. Dethon_ASM_Scarel Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 26.10.2011 11:40
написать модуль в Делфи для построения графика Анютик Общие вопросы Delphi 2 26.03.2008 03:04
Написать программы на языке программирования С++ или Pasckal: НиколаМГВРК Помощь студентам 3 01.02.2008 16:19
Изучение формата написания программы на языке Assembler и ее отладки в симуляторе Av Anna_fors Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 21.08.2007 14:52