ROM extension

16-битные ПЦ-совместимые компьютеры с процессорами 8086/8088/80286 работающие под управлением ДОС

Moderator: Shaos

User avatar
shoorick
Doomed
Posts: 487
Joined: 05 Nov 2007 05:08
Location: Украина

ROM extension

Post by shoorick »

сделал ещо одного монстрика :)

Image

http://shoorick.ho.ua/monsters/
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Мило!
Last edited by HardWareMan on 05 Jan 2014 04:37, edited 1 time in total.
User avatar
shoorick
Doomed
Posts: 487
Joined: 05 Nov 2007 05:08
Location: Украина

Post by shoorick »

сделал еще одну платку попроще: http://shoorick.ho.ua/monsters/ex27256en.html :)
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Круто, но я не смог по твоему примеру понять алгоритм вычисления контрольной суммы EXT ROM'а. Ты бы не мог просвятить (С не предлагать, лучше уж АСМ или блоксхемой).
Last edited by HardWareMan on 05 Jan 2014 04:37, edited 1 time in total.
User avatar
shoorick
Doomed
Posts: 487
Joined: 05 Nov 2007 05:08
Location: Украина

Post by shoorick »

вариант 1:
в коде ставлю:
correction db 0
компилирую
проверяю полученный образ утилитой bios_sum - она выдает значение для коррекции, например C7h
заменяю:
correction db 0C7h
компилирую снова

вариант 2:
в фасме самому может посчитать сумму всех байтов и получить значение для коррекции:

Code: Select all

sum = 0
store byte 0 at $$+5
repeat $
  load a byte from $$ + % - 1
  sum = sum + a
end repeat
store byte (-sum) and $FF at $$+5
предложили здесь: http://board.flatassembler.net/topic.php?t=9181

алгоритм простой: все байты образа складываются (включая начальные 55 и АА), байт результата должен быть нулевым
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Я вот о чем подумал.... Иногда надо вывести наружу 2-4 или там 8 ячеек порта на ввод и вывод. Причем очень шустрые. Когда был ISA это было не проблема, можно даже было заюзать готовое решение - SCSI8, дававшая доступ к 8 битам данных, RD/WR и A0. И этого мне хватало. Теперь ISA нет. Но есть идея. Принцип таков: берем PCI девайс с панелькой под EXT ROM (например сетевушку). И делаем вывод нужного количества ячеек через сопрягающую логику. Чтобы этот EXT ROM проходил при загрузке POST делаем блокировку чтения маппированных портов по сбросу, пока не будет сделана определенная запись по определенному адресу этого пространства. Далее, оформить ROM правильно, повешать заглушки (например просто выход или вывод написи "Ext Port Ready at #xxxx", где ХХХХ - текущий адрес ПЗУ полученный при POST. Чисто визуально. Т.к. часть ROMа должна считываться всегда, то там же можно и держать сигнатуру, по которой программно выяснять где наше, а где нет. Далее, пишем какое-нибудь значение в определенную ячейку для разблокировки и работаем с этим массивом байт ОЗУ как с портами. Достоинство - простота и юзание шины PCI. Недостатки и подводные камни - обсуждаем здесь.
PS При включении отображения портов ROM в этом месте естественно отключается. Обычно карты позволяют навешать 32Кб микруху, что очень много, хватит даже на маппирование целой области наружу!
Какие мысли есть у вас?
Last edited by HardWareMan on 05 Jan 2014 04:36, edited 1 time in total.
User avatar
shoorick
Doomed
Posts: 487
Joined: 05 Nov 2007 05:08
Location: Украина

Post by shoorick »

я о PCI не помышлял еще, так как у меня имеется стопка 286-386-486 (спасал от выбрасывания :D ). может, как нибудь и поизучаю (давно уж пора). насчет озушки на борту сетевухи - даже не помню, подключена ли она параллельно пзухе или нет, но в любом случае никто не запрещает повесить регистр (а то и не один) на шину данных параллельно пзу и вырезать для него кусок адресного пространства. чтоб избавиться от блокировки, думаю, достаточно выбрать дешифрацию адреса так, чтобы читабельные регистры (при наличии таковых) не попадали в адреса, по которым биус ищет сигнатуры АА55.

у меня следующий этап - хочу попробовать на 386 мамке без видео помигать в лпт. тока занят сейчас - дела, блин... ;)
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Решил плотнее изучить возможность подмены бутрома в сетевухе на собственный девайс. Буду думать.

* * *

Вот черт, с PCI картами трюк не проканает. :(
Работа с модулями ПЗУ для карт PCI выполняется в соответствии с моделью DDIM(СМ. выше). POST определяет наличие ПЗУ по полю Expansion ROM Base Address в конфигурационном пространстве и назначает ему адрес в свободном пространстве памяти. После этого программированием регистра команд разрешается считывание ПЗУ, и в нем ищется сигнатура заголовка АА55Н. Когда сигнатура найдена, POST ищет подходящий образ (по типу кода и совпадающий по идентификаторам с обнаруженными устройствами PCI) и загружает его в ОЗУ (в область C0000-DFFFFh), оставляя разрешенной запись в эту область. Далее чтение ПЗУ запрещается (записью в поле Expansion ROM Base ^Address), и вызывается процедура инициализации (по адресу 3). При вызове процедуры POST сообщает номер шины (в регистре АН), номер устройства (AL[7:3]) и номер функции (AL[2:0]), благодаря чему процедура узнает точные координаты аппаратных средств. После этого определяется размер области, которую следует оставить в памяти (по байту 2, который может быть модифицирован процедурой инициализации), и для этой области запрещается запись. Если процедура инициализации «урезает» занимаемую память, она должна позаботиться о достоверности контрольной суммы области, описанной байтом 2. Если память освобождается полностью (процедура обнуляет байт 2), то контрольная сумма, естественно, не нужна. Расширение для VGA (определяется по коду класса) обрабатывается особым образом — загружается по адресу C0000h. Процедура инициализации может определить наличие PnP BIOS в системе, проверив значение контрольной структуры PnP по адресу, указанному в Е5: DI, и исполняться в зависимости от обнаруженного системного окружения.
Last edited by HardWareMan on 05 Jan 2014 04:37, edited 1 time in total.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Вопрос в ОФФТОП но...

Post by Lavr »

... раз уж тут эту тему затронули...
Действительно тяжело, когда ИСы нет,
но еще тяжелей, когда и ПиСиАй нет -
я имею ввиду ноутбуки.
Работаю на ноуте и если что-то сэкпери-
ментировать - так только внешние порты.
Хотел заюзать ПЦМЦИА (он же КАРД БАС),
по документации - его можно проецировать
как на ИСА так и на ПиСиАй, только если я
правильно всё понял, на внешней плате
должен быть минимум контроллер, который
сработает в диалоге обмена данными, чтобы
карта прицепилась...
Никто не знает - нет ли более простого решения,
типа, скажем, счетчика с ПЗУ и регистрами,
чтобы ИСУ через КАРД Бас вытащить наружу
из ноутбука ?
User avatar
shoorick
Doomed
Posts: 487
Joined: 05 Nov 2007 05:08
Location: Украина

Post by shoorick »

если ноут совсем новый, то может лучше посмотреть в сторону UEFI (в смысле загрузки, конечно, с вытаскиванием ИСЫ это не поможет)
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

USB disk

Post by Lavr »

2 shoorick

Слушай - а вот давно у меня есть такая мысль попробовать
старую плату без HDD но с флешкой вместо него.

На своём ноутбуке я в принципе это симитировал - вполне работает,
но дрова для флешки естестенно грузились с системной дискеты
после ДОС.

Не получится ли такая штука - зашить ДОС в ПЗУ - как ты это
делаешь со своими программами, и туда же добавить дрова
от флешки - после чего она становится полноценным HDD ?

В итоге получим фактически полноценный комп, питание некритичное,
поскольку нет флопа и диска, и - ПОЛНАЯ ТИШИНА при работе оного :)

(Это меня, кстати, жутко поражает, когда я работаю иногда на Спеце... Включаю... чего-то явно не хватает в ощущениях...
Да ничего же не шумит!!! Ноут у меня тоже тихий, но в ночи винт слышен, а вот Спец - ПОЛНАЯ ТИШИНА :- )
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Я давно уже юзаю CF2IDE переходник, воткнутый в IDE, а в нем торчит CF на 4Гб.
Last edited by HardWareMan on 05 Jan 2014 04:38, edited 1 time in total.
User avatar
shoorick
Doomed
Posts: 487
Joined: 05 Nov 2007 05:08
Location: Украина

Post by shoorick »

у меня была плата от двоечного ноута, в котором дос был зашит в 27010, но я её потёр. потому что подумал, что он испорченный, а потом оказалось, что у меня на программаторе один проводок был плохо припаян, и один бит периодически пропадал. но там была обычная фат 12. это я к тому, что все это вполне реально :) другое дело зачем это нужно - вряд ли на 128 кб долго просидишь ;)
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

А почему 128?

Post by Lavr »

А почему 128? Не понял...
Я тестил на флешке 1 Гиг...
И на УСБ-винтах 40 Гиг и 120 Гиг...
правда 2 другие флешки по 512 не сработали -
ну по описанию на дрова, флешка должна быть
ДОС - форматированна, а это вроде как не все
поддерживают...
Винты специально разбивал Партишын Магиком-
чтобы подошли...
User avatar
shoorick
Doomed
Posts: 487
Joined: 05 Nov 2007 05:08
Location: Украина

Post by shoorick »

я думал речь идет о старой плате с распространенной 128 кб флэшкой для биуса на борту.

у меня есть 4 флэшки по 128 кб, причем из них 2 одинаковые с блоковой организацией, одна древняя сплошная, как обычная ПЗУ, и одна с секторной организацией. вот из этого набора я и размышляю :)

у меня в таких делах на первом месте стоит вопрос доступности железа: покупать что-либо не очень хочется, хочется использовать то, что уже имеется, а в таких делах сложно находить единомышленников, так как имеется у всех обычно разное :)