Речь пойдет о плагине BsReadFlash

Речь пойдет о плагине BsReadFlash (и не только о нем).

Этот плагин должен обеспечивать чтение содержимого Flash-памяти с образом биоса. Главная проблема - настройка чипсета для обеспечение доступа ко всему диапазону адресов ПЗУ. Эта настройка сильно зависит от конкретного чипсета.
Хотелось бы эту чипсет-зависимую часть вынести во внешний файл (базу данных оболочки). Тогда добавка нового железа не будет требовать изменения и перекомпиляции программы.Осталось выбрать формат хранения этой чипсет-зависимой части. Этот формат, с одной стороны, должен быть достаточно гибким, а с другой - простым для реализации и удобным для пользователя.

Например, для моего компьютера (Host bridge 0x1039:0x0650, LPC bridge 0x1039:0x0008) перед чтением прошивки биоса необходимо записать в устройство LPC Bridge (Class 0x060100) в регистр 0x40 значение 0x03.

На языке C++ с использованием оболочки это выглядит так:

DWORD bdfLpcBridge = PCI_REG(0, 2, 0, 0); // bus=0, dev=2, fun=0, reg=0
BYTE r40 = theApp.m_pIPci->rdPciRegByte(bdfLpcBridge + 0x40);

theApp.m_pIPci->wrPciRegByte(bdfLpcBridge + 0x40, (r40 & 0xFF) | 0x03);

Но в таком виде алгоритм настройки железа для чтения прошивки хранить нельзя.

Поэтому предлагается другой формат - более многословный, но зато простой для интерпретации.

FIND_PCI_DEVICE_BY_CLASS dw0, 0x060100 	// dw0=0x80001000 (адрес Lpc Bridge)
ADD dw0, 0x40  // dw0 = 0x80001040 (полный адрес регистра 0x40)
READ_PCI_REG_BYTE b0, dw0  // чтение регистра
MOV b1, b0  // запомним прежнее значение
OR b0, 0x03  // новое значение
WRITE_PCI_REG_BYTE b0, dw0  // запись регистра
READ_FLASH   // Вызов функции для чтения прошивки
WRITE_PCI_REG_BYTE b1, dw0  // запись прежнего значения регистра

В таком виде чипсет-зависимые настройки можно хранить в базе данных.
Поиск настроек будет осуществляться по Vendor_ID/Device_ID южного моста.

Аналогичный подход можно будет использовать и для плагина BsWriteFlash. Но кое-что придется добавить (чтение-запись в порты и пр.).

Какие будут мнения по поводу такого специального языка для записи настроек в базе данных?

BIOStrip - пишем программу для удаления/добавления модулей в BIOS
  • Часть инфы по флэшкам можно почерпнуть из AmiFlash,
  • Бегло ознакомился с проектом UniFlash .
  • Еще кусок структурированной информации с какого-то китайского форума:
  • Немного не совсем структурированной информации из разных источников:
  • Читал ветку форума. Много думал :)
  • Господа, мне нужна ваша помощь. Для завершения работы
  • Ник к месту..
  • Хотели как лучше, а получилось как всегда -
  • Root 3) ...И сразу же
  • Ага, теперь понятно, весь доступ через
  • Compiller Насчёт пунктов 4 и
  • Насчёт пунктов 4 и 5 - они у
  • ТоварищЪ А как
  • Однако ACE(Advansed CMOS Editor)by luk1999 - прекрасно работает.
  • Strelets, А как под ХР прочитать
  • Интерфейс IMemport используется
  • Реализованный в оболочке интерфейс
  • Родился ещё один новый дополнительный интерфейс оболочки
  • Сегодня у оболочки появился новый дополнительный интерфейс -
  • Согласен. Плагин BsCrc будет переименован в
  • Формальное замечание CRC - cyclic redundancy check Checksum - контрольная
  • Предлагается для ознакомления очередная альфа-версия
  • В процессе всенародного обсуждения проявились следующие типы
  • В последующих версиях оболочка будет поддерживать
  • Итак, у Вас есть оболочка BIOStrip.exe
  • Santa Может проще вставлять сразу
  • Strelets А ля Awdbedit.. Дайте, пожалуйста,
  • На мой взгляд пункты 1, 2, 3 актуальны
  • Santa кнопка
  • Root Это все, конечно, полезно
  • To Root: Ну привычки и изменить не
  • даже не знаю что сказать... Это все,
  • Предлагается обсудить практическую ценность реализации
  • Скриншот и ссылка для скачивания альфа-версии программы.