Как стать автором
Обновить

Комментарии 70

Есть ещё один вариант использования bootrom на старых системах(ну где-то до 4 пня включительно работает). Зашить его как часть биоса, для Award можно было сделать через утилиту CBROM.
Сам так добавлял бутром для сетевух без онного, с целью получить PXE.

//Чтобы код с сетевой карты выполнился, необходимо

ROM состоит из двух частей, инициализирующей железяку, которая выполняется не из С000-Е000, и рабочая часть, та которую загружают в С000-Е000, и на которую переходят в момент загрузки ОС/PXE/Basic

А где об этом прочитать? И как это мапится в памяти?

Ну например в описании выхода из Protected Mode в Real Mode, которая выполняется на 80286 процессоре только перезагрузкой. Более менее подробное описание как писать такие программы содержит и описание куда именон выпадает процессор после перезагрузки (по-моему это F000:FFF0, но может быть и какой-нибудь FFF0:00F0 - не помню). Там же рядышком записана текстом дата BIOS'а и тип компьютера (сегодня они все IBM PC AT 286, но до него было много вариантов).

Классической бумажной книгой тогда был Джордейн и после него Нортон.
https://infopedia.su/17xe20a.html
http://lib.ru/TECHBOOKS/JURDAIN/jourdain.txt
Но там это самым краешком, как и в TechHELP!

------------------

А вообще вам надо на Интеле или на bitsavers или на wikichip поискать технические описание процессоров 80286 и 80386 и именно с прицелом на состояние процессора после включения/reset'a (system initializaiton sequence). На старых компьютерах это ещё относительно просто было.

Яндекс на "80386 initialization code" выдает много интеловских книг на разных сайтах.
Вот пример перевода - https://qsetup.ru/initsializatsiya-protsessora-chto-eto/

Вот пример такой официальной доки на относительно современные ПеньПро - смотри, в самом ли деле такое интересно? Я что-то сомневаюсь: http://datasheets.chipdb.org/Intel/x86/Pentium Pro/PPPBIOS.PDF

Вот тут в описании куча книг: https://www.youtube.com/watch?v=7yb62vgtu7o

Тут можешь порыться https://wiki.osdev.org/System_Initialization_(x86)

Если не ошибаюсь, при вскрытии внутренних кодов процессоров VIA использовали самописный спец-BIOS, но это не точно, это смутно помнится, потому что несмотря на вопля жёлтой прессы про бэкдор - ничего интересного там не нашли.

All in all, это только издалека глядеть интересно, а в конкретной материнке придется нудно перебирать предписанные изготовителями микросхем последовательности их первичной настройки, зная что на другой материнке хорошо если пловина от этого понадобится, а то и 90% в мусор :-)

------------------

В проектах SeaBIOS/Coreboot/Libreboot наверное много документации есть под более-менее современные процессоры.

-----------------

"Controlling the Bootstrap Process Firmware Alternatives for an x86 Embedded Platform" такая штука гуглится. http://uu.diva-portal.org/smash/get/diva2:469328/FULLTEXT01.pdf

Доки по Intel MCS-86 и Intel MCS-51 можно поискать, например см. chapter 10 у https://archive.org/details/Intel-iAPX286OperatingSystemsWritersGuide1983OCR

Но, такие доки низкоуровневые очень привязаны к конкретной модели процессора (надеюсь хоть у разных степпингов одной модели не отличаются)

Вообще, выше мной по памяти названный адрес F000:FFF0 - это уже после инициализации DOS-режима. ЕМНИП сразу после ресета BIOS отображается на самый-самый конец физического адресного пространства, и процессор находится в очень специфическом режиме, почти real, но не совсем (кэши селекторов другие как после LOADALL). И ещё надо успеть "переотразить" BIOS на конец 1-го мегабайта вместо RAM, либо скопировать его туда (обычно это, потому что RAM быстрее ПЗУ), и только потом делать "нормальные" сегменты.

https://www.intel-vintage.info/inteldevelopmenttools.htm - это большей частью музей макулаторы, но вот например в 486SX - Intel Processor Evaluation Board Manual есть любопытная схема Figure 3-3. Boot Block Flash Memory Selection и пара страниц текста перед ней. Но в целом думаю, что ты там скорее закопаешься, чем что-то полезное найдёшь. Выпадешь в какой-нибудь не-86 процессор (например MCS-96, 80286, ISIS в одной из не-86 веток. Вообще, много чего не-86 у интелей было) и понеслась :-)

----

про XT-CF - ну а что же это может быть ещё? :-D

CompactFlash - Это и есть IDE-диск, только на иголках вместо шлейфа и молекса :-)
Самые первые SSD, когда еще такого термина не было :-D
И даже не всегда SSD - см. IBM MicroDrive :-S

Тот случай, когда комментарий звучит как трейлер для статьи. Про CompactFlash и его использование в DIY-компьютерах в стиле старых машин (и их инициализацию) я бы с удовольствием почитал!

Добавлю: я бы ещё с удовольствием почитал про то, как заставить работать CF в UDMA режиме. Когда-то, ещё до того, как поставил нативный IDE SSD в ThinkPad 600X, пробовал запихивать туда CF через переходник. PIO работал, но, разумеется, дико медленно и с полной загрузкой процессора. Либо CF-карта не поддерживала, либо что-то в переходнике не получалось. Вот этот момент очень интересно узнать.

В целом было достаточно понять, что в реальном режиме и располагается в старших адресах. Но я сомневаюсь что так делали, потому что места мало, и проще всё в реальном режиме делать, а по нужде мапить области памяти переключая банки.

Шины PCI, PCI Express. Архитектура, дизайн, принципы функционирования. Автор Сергей В. Петров Глава 11 ПЗУ расширения

Лучи добра, создателям "кармы".

Спасибо за книгу, не знал о ней.

Лучи добра, создателям «кармы».

Да, в действительности, спасибо большое. Очень удачно отсеивает токсиков и неадекватов.
Кстати, существует достаточно хорошо документированный исходный текст «Super PC/Turbo XT BIOS 3.1», с соответствующими утилитами и программами. Думаю, будут интересно ознакомиться с ним.
Summary
The Super PC/Turbo XT BIOS is heavily modified version of the widely-distributed "© Anonymous Generic Turbo XT" BIOS. It is a drop-in replacement for the IBM 5150/5155/5160 BIOS and most XT clones, including 8/10 MHz turbo systems.
Besides fixing several bugs from the Generic BIOS, many additional features have been added, including CPU/FPU detection, fast memory checking, UMB initialization, expansion ROMs in the F000-FE00 region, ROM BASIC boot option, 101-key enhanced keyboard support, and more.
All the tools required to modify and build the BIOS in are included, in DOS, Windows, or Linux.

Спасибо за статью, как обычно стабильное гик-порно.

В качестве альтернативы различным сетёвкам, могу посоветовать попробовать с платкой XT-CF Lite. Собирается на старой доброй 74 логике, правда для неё нужна машина старее 423 сокета, то бишь с ISA. Бонусом получается одна плата под CFки, без всяких длинных шлейфов и мультикарт.

Фотографии это прелести за авторством Макса Крюкова + его версия платы:

А разве это не обычный IDE контроллер? На плате вон, прям на фото, есть такой же ROM BIOS.

UPD. Я понял вашу идею. Ну мне проще купить на досках сетевуху, чем паять новое.

Кстати, такие панельки для PLCC легко запаять и без монтажника, если выломать дно и паять паяльником изнутри. Потом дно можно вернуть, посадив на каплю термосоплей.

Спасибо за идею, буду знать.

Я так понимаю БИОС на сетевухах нужен чтобы запустить ОС по сети.
Удалось проделать подобный фокус?

Этот фокус проделывал сотни раз при отладке встраиваемых систем. Только на ARM, MIPS и прочих архитектурах. Нужно поднять tftp сервер для этих целей. Ничего сложного, документации валом. Гуглите pxe tftp.

Я искал что то простенькое и под винду, чтобы накидать разных ИСОшек и они добавились бы в менюшку. Аля загрузочная флешка.

Пока не было всяких Pi, маленькие бездисковые машинки (например, принт-серверы в сети организации) делались таким образом на ура.

Помнится, для сетевых карт на Realtek была какая-то утилита настроек, в которой, ЕМНИП, была и настройка начального адреса ROM (карта то безджамперная). Возможно, по умолчанию там выкл.

В студенческие времена использовал сетевую карту в качестве «только чтение» программатора 27Схх.

Хочу дать идею для следующей статьи - сделать ROM DOS. DOS, который грузится из ПЗУ для совсем ретро машин. Один любитель из Чехословакии сделал что то подобное, но у меня так и не получилось его запустить на Электронике 1502.

А есть исходники, где почитать?

жаль сайт rom.by умер потиху... но, по идее, его автор Роман Севко @applerom должен ещё быть доступен в фейсбуке

Посмотрел, по идее из коробки должно работать.

О, rayer.

Я свой первый LPT-программатор для SPI собирал по его мануалу и софту.

Потом, правда, обнаружил поддержку этого поделия в flashrom и софт выкинул.

в нынешних условиях лучше зашить ROM модуль для запуска с NVME ssd, воткнутого в pci-e через переходник за пару баксов.

на сайте DNS-SHOP есть статейки про внеднение такого модуля

также на ixbt и wims-bios

Любопытно, а в чем смысл?

Старые платы/биосы неумеют грузится с nvme, поэтому как минимум загрузчик приходится оставлять на sata hdd/ssd

емнип распостранненый вариант: модуль поддержки nvme из биоса матплаты на чипсете z97 подсаживается в биос матплаты на чипсете z77 / z87 , после этого эти платы обретают возможность грузится сразу с nvme, подключенного в pcie через переходник




Понял идею.

Может быть и лучше) но у ретро компов нет pci-e.

PS. Спасибо за ссылку на ROMOS, начал ее усиленно гуглить, но не нашел.

В репозитории FreeDOS есть и Package romdsk и Package romos
Кстати, с ROM DOS вы наверняка сталкивались при посещении боулинга. Именно под его управлением, работает та часть что общается с игроками. :)

на ixbt в форуме товарищ вшивал в VIA 6421 RAID софт для работы с HDD

ещё был проект RomOS (в биос материнки вшивали DOS)

биостар вшивала в материнки MemTest в виде ROM модуля

MemTest

На топовых материнках асус его до сих пор вшивает, но уже, конечно, в виде EFI-приложения.

Отличная статья. В своё время тоже интересовался подобным, но, увы, не вышло.

Вот ссылка в тему: https://www.radiokot.ru/circuit/digital/pcmod/09/

Тут в деталях и с использованием так нами любимого старого железа описано, как собрать плату на ISA и как запустить это расширение BIOS.

Ух какая прелесть, спасибо за классную ссылку!
Да, оно вроде всё просто, но не просто.

Это было на КУВТах на 286 - да, существовали и такие чудеса, в 1993 году примерно. В сетевой карте стояло ПЗУ с неким "Novell NetWare remote program loader". DOS и всё остальное грузилось по коаксиальному кабелю с "сервера" - тоже на 286, но с жёстким диском. При отключении питания "сервера" остальные машины превращались в "гробы".

Автору спасибо за статью, но больше всего меня поразило, что в 512Б можно втиснуть интерпретатор Бейсика.

Вот это реально интересно, самый миниатюрный из Бейсиков, что доводилось встречать - 768 байт. Спасибо за наводку, буду знать, что есть и 512.

А GW-BASIC умельцам уже удалось скомпилировать, существует репозиторий.

Да, удалось, мне в личку написали и дали ссылку на репозиторий. Но всё равно, не всё гладко. И для моих целей он не подходит.

Для ваших - да, не подходит, он довольно крупный, 50 килобайт почти А жаль, разработчики "Радио-86РК" не подозревали о самой возможности написать 512-байтный Бейсик. Знали бы - написали бы обязательно, и в 2-килобайтное ПЗУ втиснули, возможно, чуть уменьшив МОНИТОР, если бы понадобилось.

А не знаете, как сделать загрузочную флешку с Boot Basic? Там есть img-файл, загнать на флешку утилитой dd, как это обычно делают - получится?

Дело не в размере (у меня 64 кБ). А в в том, что там используются функции ДОС.

По идее да, должно работать.

Там ещё вот что выяснилось, в Boot Basic нету FOR и NEXT, но IF и GOTO прекрасно их заменяют, такой минимализм мне по нраву.

А когда-то я недоумевал, зачем нужны такие языки программирования, как, например, яблочный Integer Basic, работающий только с целыми числами, хотя любой калькулятор может работать с дробными. Или язык BAT-файлов, позволяющий делать профессиональные, просто зубодробительные многоуровневые меню, и имеющий много других полезных функций, но не работающий с числами вообще. А потом узнал про HTML, ещё тот, который без Javascript, тоже функций дофига, а с числами не работает. И ещё позже - про Ladder, тоже с числами не работающий, но в тех задачах, для решения которых он предназначен, равных по удобству не имеющий. И понял, что "задачеориентированные" языки тоже могут полезными быть.

В BAT-файлах есть переменные, он с ними работает и все считает, потом можно и результат на экран вывести.

Но пока напишешь там нормальное многоуровневое меню мозг сломаешь. А на обычном, не "задачеориентированном" языке это намного проще делается.

Choice (внешний исполняемый файл, если склероз не изменяет) и переменная errorlevel. И меню - легко. Можно, кстати, и такой внешний исполняемый файл сделать, чтобы ему подсовывать математическое выражение, а он результат в errorlevel возвращал. Но почему-то никто не делал.

Тут (https://www.pcjs.org/machines/pcx86/ibm/5160/rom/) пишут про 8кб IBM ROM BASIC, правда это было только для некоторых моделей IBM PC XT. По ссылке есть прошивки, но нет уверенности, что они будут работать в отвязке от оригинального BIOS-а.

Да, я видел это. Проверить несложно, главное конвертнуть json в бинарный формат и настроить базовый адрес ROM
Хотя скорее всего не выйдет, без исходников.

image

Форт, вроде как, наоборот, проще Бейсика компактным сделать. Как и Фокал. Вот Лисп - это да!

Не помню подробностей таких древностей (какого объёма были ПЗУ — не 27256 ли минимум?), но осмелюсь предположить, что начальная неработоспособность могла быть вызвана применением излишне мелкой 2764. У неё на месте входа 15 разряда адреса (вывод 27) — вход !P cтроба записи. Попробуйте заизолировать 27 контакт панельки.

Так значит с РФкой сетевуха так и не заработала?

А я РФ-ку и не пробовал.

я про УФ стираемое ПЗУ... А разве его так сложно к PCI напрямую подключить, что там выведено по шине то ( не смотрел) Помнится надо то адрес данные да пару сигнальчиков??

Подключите, расскажите.
Раздел ЧаВО по приведенной вами ссылке
«How does it work?
The ISA bus consists of address signals ('address lines'), data lines, and read/write command lines. For each bus cycle, the address lines are set first, and the values held. Then on the next cycle, the read or write command signal is asserted, instructing the selected device to present or store data.
The values on the address lines are matched to the values set with the DIP switches by IC2, and when the values match the chip-select (ROM-CS) signal is asserted on the flash chip IC1. Next, the read or write command line is asserted, causing the flash chip to present or store data at the specified address.
The DIP switches provide a logic 1 or 0 (high or low) by being connected directly to 0V on one side, and to 5V on the other via 10K-Ohm „pull up“ resistors. In the ON position, the connection to 0V 'wins' and a logic low (0V) is observed. In the OFF position, the only connection is to 5V via the resistors, so a logic high (5V) is observed.
To work in IBM Personal Computer XT System Board Slot 8, the card echos the read command back to the PC via a 'Card Select' line (ISA pin B8), which is done by a pair of NOR gates wired together in IC3. IC3 is an 'open collector' device, meaning it only drives the signal to a logic low (0V) — when ISA B8 is not driven by IC3, another device in the PC can drive it instead.»


Вроде там ничего не упустили?

Как на исе все работало я еще в институте учил в можнатые годы, все немудрено как по ссылочке. А на PCI то во что выливается, плисину притыкать?

Совершенно точно, плюс необходимо получить зарезервированные дескрипторы оборудования от PCI SIG. Плюс к этому нужно получить членство в этой группе за 4000$ в год, чтоб иметь доступ к спецификациям онлайн, от 100$ до 495$ за бумажную копию, от 1500$ за полную копию спеков на CDROM.
Так что для обычного самоделкина, создающего что-то для себя на коленке, сумма становится ощутимой.
Добавлю ссылку на отрывок с описанием работы PCI шины.. Не претендую на полное раскрытие всех деталей в этом отрывке, но думаю, что в общих чертах этот отрывок раскроет некоторые важные детали.
«Если бы тут были спички!»
PCI шина сильно отличается от ISA, точнее от AT-bus, как минимум тем что каждая PCI карта должна иметь возможность широкой автоконфигурирования запрашиваемых ей ресурсов как по памяти, так и по прерываниям.
Цитата:
«PCI-устройства с точки зрения пользователя самонастраиваемы (Plug and Play). После старта компьютера системное программное обеспечение обследует конфигурационное пространство PCI каждого устройства, подключённого к шине, и распределяет ресурсы.
Каждое устройство может затребовать до шести диапазонов в адресном пространстве памяти PCI или в адресном пространстве ввода-вывода PCI.
Кроме того, устройства могут иметь ПЗУ, содержащее исполняемый код для процессоров x86 или PA-RISC, Open Firmware (системное ПО компьютеров на базе SPARC и PowerPC) или драйвер EFI.
Настройка прерываний осуществляется также системным программным обеспечением (в отличие от шины ISA, где настройка прерываний осуществлялась переключателями на карте). Запрос на прерывание на шине PCI передаётся с помощью изменения уровня сигнала на одной из линий IRQ, поэтому имеется возможность работы нескольких устройств с одной линией запроса прерывания; обычно системное ПО пытается выделить каждому устройству отдельное прерывание для увеличения производительности.»

А как-же plug&playpray ISA спросите вы?
Ну там было было всё очень печально, иногда для её реализации требовалась загрузка DOS драйвера, причем только в нижнюю память, в UMA он категорически глючил, появившаяся поддержка в BIOS была возложена полностью на утилиты конфигурации соответствующих устройств. А там как уж playpray ляжет.
Но самая веселуха, началась с появлением Win9x который самостийно пытался настроить куст P&P устройств по своему разумению. Вот только разумение его часто подводило, и работающий под DOS комп, набитый картами расширения, резко переставал работать в Win9x из-за конфликта P&P устройств.

Интересно, я всегда думал, что прерывания int xx — это привелегия какой-нибудь ОС и без нее не будет работать. Ан, нет.

А как же прерывания BIOS?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий