PDA

Просмотр полной версии : Sourcer - помогите с настройками



vivat
24.06.2021, 00:43
привет!

решил вот попробовать разобраться с тем как Microid research свои BIOSы строит.
нашел тулзу для разпаковки MRBios - получил несколько модулей.
начал их пытаться Sourcer'ом декомпилировать
и да, тулза для обратной запаковки тоже нашлась. на той же BBS скачал где и коллекцию MRBIOS'ов.
но вот - какие настройки применить в толк не возьму. какой сейчас в ходу ассемблер? есть там куча MASM'ов есть TASM'ы и даже OPTASM - какой код легче читается?

для чего мне понадобилось нос сувать в биос от микроида? а узнать как устроен у них флоппи-биос и как они умудряются на одном контроллере получать 4 флоппи-устройства? да и - может быть этот биос можно выдрать да модифицировать прошивку с авардовым биосом?

может быть инфа поможет написать кому-то другому разширитель для стандартного флоппи-биоса? я не знаю, но попробовать надо.

словом, подсобите кто знает. какие настройки Sourcer'a помогут легче в коде разобраться.

и да, тема лишь частично оффтопна для данного ресурса. на вторую половину, а именно модификация старого железа программным путем - она вполне себе влазит.

Gleb
24.06.2021, 07:44
Возможно не совсем в тему, но классический PC/XT контроллер NEC µPD765 / i8272 и более поздний i82072A поддерживает до 4-х floppy приводов.
И классические платы FDC (регистры и цепи на них) тоже на это рассчитаны, они оперируют с FDD0 - FDD3.

Используется два коннектора, каждый из которых поддерживает по два привода.
Обычно один коннектор использовался классически внутри корпуса, а второй был выведен наружу для подключения внешних дисководов.
Например здесь есть фото классической старой платы : https://en.wikipedia.org/wiki/Floppy-disk_controller
Левый коннектор - для внутренних двух дисков, правый - наружу, для внешних. И это работало.
На советской ЕС1840/41 тоже два разъема, на каждый можно повесить по два привода.

В этом случае в БИОСе ничего мудрить не надо. Старые БИОСы есть в исходниках, их реассемблировать не надо.

Другое дело, что позднее поддержку 4-х FDD устройств на платах перестали поддерживать. Чем современнее железо, тем меньше шансов.

Это если речь о физических устройствах.
Существует вариант логического разделения (две буквы на одном приводе), это реализовано программно на 80-дорожечных дисководах, эмулирующих две 40-дорожечных дискеты. При этом четные дорожки работают как обычно, а нечетные отображаются как второй диск. Реализация этого проста - seek через одну дорожку, исходники тоже есть.

Что именно делает MRBIOS не скажу, не интересовался.
Если он чем-то оригинален и действительно нужно его реассемблировать - рекомендую использовать IDA, не SOURCER, но это мое личное мнение.

Sandro
24.06.2021, 08:26
словом, подсобите кто знает. какие настройки Sourcer'a помогут легче в коде разобраться.


У Sourcer'а есть ровно одна полезная настройка: стереть его нахрен.

IDA наше всё.

vivat
24.06.2021, 10:22
одна полезная настройка: стереть его нахрен
бгггы =))) ну спасибо, ну порадовали.
ну че ок, полезу за Идой...
а я такой помню его со времен ЕС1840 (и на таком поработать приходилось когда лаборантом в своем родном Куйбышевском Политехе трудился) - штуденты им дизассемблировали.

- - - Добавлено - - -


Что именно делает MRBIOS не скажу, не интересовался.
че делает - скажем так, он ненавидел Зойдберга еще до того как это стало модным - умел софтовый райд до того как это стало мейнстримом. как минимум 8 иде устройств по 2 иде каналам умел. не напрямки а при помощи хитрой схемки сплиттера-демультипликатора из парной ИДшки и нужного колва буферных элементов.

http://www.rom.by/book/MrBIOS а это небольшое ромбаевское вики по этой линейке биосов и по фирме. а я такой биос на собственной шкуре изпытал. в политехе работал. попросил обновление для своего компа - дали пенек (был 386) на intel Anvanced/EV Endeavor i430fx) к нему случайно нашелся mrbios - тогда сайт и фирма еще были живы. влил, офигел. он и память чутка подразгонял - штатно было 60 и 70 наносекунд. мрбиос умел 50 поставить. чучуть но был прирост, очень небольшой но я был рад до пяток. и про 4 флопа и 8 винтов (с возможностью софт-райда) фичу заметил.
и на моей мамке он пофиксил то что не мог мегатренд - вибро-блястер глюкаво работал под родным биосом - так до смерти мамки и не пофиксили. а под мровским биосом блястер заржал аки конь.

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

мрбиос это как брабус в мире машин - любой брабус это мерседес,но со знаком "сто лучших товаров".

vivat
24.06.2021, 14:31
а правда ли что из биоса int19 не вызывают? а как тогда отловить процедуру работающую с дисковыми (флоповыми) устройствами?
и да вот листинг разпотрошенного (пока только почиканного на модули) БИОСа

MRDECO * V.K. * 27.04.1998
mr_asus1.bio...
Decompressor=$f000:17d0
f000:0b20 [06b7] -> [0a63]
f000:1900 [1133] -> [149c]
f000:2a50 [0bdf] -> [0de5]
e900:0000 [41e0] -> [527a]

с какого модуля следует начинать копания?

Gleb
24.06.2021, 15:45
int 19 (в десятичной системе, он же int 13h в шестнадцатиричной) вызывают и из БИОСа, например при загрузке.

Но вам то нужны не вызовы, а сам обработчик (вектор) этого прерывания.

Находиться теоретически может в любой части, лично я бы начал с f000:2a50, но не факт.

vivat
24.06.2021, 18:40
в модуле e900:0000 [41e0] -> [527a]
нашел вот че
mov al, 0
mov dx, 3F2h
out dx, al ; Floppy: digital output reg bits:
; 0-1: Drive to select 0-3 (AT: bit 1 not used)
; 2: 0=reset diskette controller; 1=enable controller
; 3: 1=enable diskette DMA and interrupts
; 4-7: drive motor enable. Set bits to turn drive ON.
;
mov dx, 372h
out dx, al ; Floppy: digital output reg bits:
; 0-1: Drive to select 0-3 (AT: bit 1 not used)
; 2: 0=reset diskette controller; 1=enable controller
; 3: 1=enable diskette DMA and interrupts
; 4-7: drive motor enable. Set bits to turn drive ON.
;

чето мне кажется что клад Флинта на вид должен быть побольше

Gleb
24.06.2021, 19:10
Конечно же это не весь обработчик int 13h, возможно лишь кусок тестовой процедуры по включению (POST), нужно искать дальше...

- - - Добавлено - - -

Чисто для ориентации - в классическом BIOS обработчик int 13h выглядит примерно так: https://github.com/kaneton/appendix-bios/blob/master/src/diskette.asm

Позднее накладываемая на "дискетный" int 13h поддержка жестких дисков перенаправляла старый int 13h на int 40h, не пугайтесь, если встретите такое.

vivat
25.06.2021, 10:36
Ёшки-матрешки!
загрузил я весь биос в иду - вижу сплошные db
смеха ради тыкнул команду code - а мамыньки-родные че тама полезло - нечисти-то всякоразной, а на вид все благопристойно... =)
вот ведь в тихом омуте черти водятся...

но все равно я не нашел в файле такого адреса старта разпаковщика биоса в оперативку чтоб стартануть из теневого озу.
в смещении 5 циферок ида кажет а сегмент 0000
может мне надо чето подправить? а можно ли адрес сегмента изменить? чтоб стало не 0000 а скажем f000? в каком меню это надо переназначение сделать?
Decompressor=$f000:17d0 - решил я его поглядеть для начала.


не пугайтесь, если встретите такое.
чтоб напугаться надо еще продраться в этот лес а меня какие-то кусты не пускают =)
не могу понять как в иде загрузить так бинарник, чтоб вместо seg000 мне показывало нужные f000.

- - - Добавлено - - -

решил я поглядеть декомпрессор что находится вначале "бутблока" флеш-биоса.
Decompressor=$f000:17d0
представил понарошку что базовый сегмент у нас не f000 а 0000 а все адреса становятся пятизначными тогда по правилу сложения базы со смещением должон получиться нечто подобное 117d0
и я таки пошел по тому адресу, а там -
seg000:117D0 ; ---------------------------------------------------------------------------
seg000:117D0 xor si, si
seg000:117D2 xor di, di
//di:=0
//si :=0
seg000:117D4 lodsw
//??? ... f**k it for now
//Команда LODSW копирует слово из памяти по адресу DS:SI в регистр AX. После выполнения команды, //регистр SI увеличивается на 2
//ax:=@0:0??; (nyet!!! DS:= адрес нахождения первого пакованного модуля BIOS во флешке.
снова не то. )

//cx=? cx:=0??
//CPU RESET = all_regs:=0???
seg000:117D5 mov cx, ax
//cx:=ax(nyet!!!)
//ax:=cx(da!)
seg000:117D7 add ax, 2
//ax:=ax+2
seg000:117DA xchg ax, bx
//tmp:=ax
//ax:=bx
//bx:=tmp
seg000:117DB mov dh, [bx]
//dh:=@bx
seg000:117DD mov dl, 1
seg000:117DF mov bp, 1
//addr:=1@bx
seg000:117E2 jmp near ptr unk_1866
seg000:117E2 ; ---------------------------------------------------------------------------
а там меня послали куда Макар телят не пас.
unk_1866 указывает на область где лишь одни ff пасутся табунами. =( как туда джампать?
наверное я с неверного места начал дизассемблинг? или так задумано?

наверное 1866 это адрес по которому кладутся некоторые данные в результате работы процедуры.

где я ошибся?
(вариант ВЕЗДЕ отбрасываю как очевидный =)
что остается?

Gleb
26.06.2021, 18:15
Поддержка int 13h в основной части (прямо в нераспакованном файле).
Проект для ida 4.1.5 и MrBIOS 3.19 во вложении, можно распутывать например с адреса F000 : DCA8

Но особого смысла в дизассемблировании не вижу.
Уверен, что никаких финтов там нет, обычная работа с контроллерами.

Уже сейчас, без дальнейшего распутывания видно, что поддерживаются два контроллера (Primary 3F0h и Secondary 370h), соответственно этот БИОС может теоретически поддерживать до 8-ми FDD в зависимости от типа примененных контроллеров.

Для поддержи 4-х дисководов нужно иметь как минимум два коннектора для дисководов.
Оба в материнке очень большая редкость, скорее дополнительный контроллер в слоте расширения.

Разве что спортивный интерес. Удачи !


75685

vivat
26.06.2021, 23:42
Уверен, что никаких финтов там нет, обычная работа с контроллерами.
в мануале на контроллер говорилось что-то о каком-то бите в слове управления контроллером. этот бит управляет дешифрацией. дешифратор при включении оного начинает разсматривать два бита DS0 DS1 как два дополнительных бита DS2 DS3 ну и конечно же и мотор 0 мотор 1 становятся мотор 2 мотор 3.
считай что слово "финт" я употребил возможно неправильно.
наверное сказать правильно будет "нетипичное управление контроллером"
схемка кстати прилагалась к контроллеру.
и, да, а как ты файло прикрутил? я не вижу "вставить файл". как это сделать? а то я тогда пдф прикручу на контроллер.




Bit 4 When this bit is zero the PC87306 can control two
floppy disk drives directly without an external decoder.
When this bit is one the two drive select signals
and two motor enable signals from the FDC are encoded
so that four floppy disk drives can be controlled
(see Table 2-3 and Figure 2-2 ). Controlling
four FDDs requires an external decoder. The pin
states shown in Table 2-3 are a direct result of the bit
patterns shown. All other bit patterns produce pin
states that should not be decoded to enable any
drive or motor.
там же приведена схема подключения к одному контроллеру 4 флопов.

Gleb
27.06.2021, 03:22
в мануале на контроллер говорилось что-то о каком-то бите в слове управления контроллером. этот бит управляет дешифрацией. дешифратор при включении оного начинает раcсматривать два бита DS0 DS1 как два дополнительных бита DS2 DS3 ну и конечно же и мотор 0 мотор 1 становятся мотор 2 мотор 3.

Мы друг друга не понимаем.

В одном разъеме для дисковода только два сигнала выбора дисковода (DS0/DS1 и соответственно Motor0/Motor1).
Для еще двух дисководов нужен еще один разъем и вышеупомянутый бит и определит на какой из разъемов пойдет сигнал.
На примере DSx:

DS0 => Разъем 1, сигнал DS0
DS1 => Разъем 1, сигнал DS1
DS2 => Разъем 2, сигнал DS0
DS3 => Разъем 2, сигнал DS1


Это классическая схема для старых контроллеров, можно увидеть на схемах старших компьютеров. Управление осуществляется портом 3F2.
Ее поддерживает старый нативный БИОС PC/XT, это совершенно нормально. Для этого его не нужно дизассемблировать. Но те БИОСы не имели BIOS SETUP, не позволяли настраивать количество количество и тип дисководов, работали как правило только с 40-дорожечными дисководами.

А в более поздних распространенных BIOS (Award/AMI/Phoenix) четыре дисковода редкость, потому что схемотехническая реализация в то время уже стала рассчитана на два дисковода и этот бит не используется. Грубо говоря зачем обычному пользователю компьютера АТ четыре дисковода если есть жесткий диск, а то и несколько ? Я говорю именно об обычном пользователе, на которого ориентируется рынок.

А нынче и вовсе без дисководов.

Но для пользователя продвинутого, можно поставить два контроллера, и тогда MRBIOS (возможно и некоторые версии других производителей) позволит получить 4-е дисковода.
Но это не магия, просто поддержка двух контроллеров FDC (и, возможно, вышеупомянутого бита, тут надо смотреть).
И насколько я знаю MRBIOS выше 486-го не поддерживает (могу ошибаться).

В любом случае:

Без второго физического разъема четыре дисковода не получить.
Поддержка четырех дисководов в БИОС не новшество MRBIOS, а либо поддержка в нем двух контроллеров FDC, либо поддержка вышеописанной исторической стандартной возможности при наличии соответствующего HW, либо комбинация обоих вариантов.



наверное сказать правильно будет "нетипичное управление контроллером"
схемка кстати прилагалась к контроллеру.
Типичное. При наличии соответствующей схемной реализации (управление через порт 3F2) и наличии второго разъема для дисководов.


и, да, а как ты файло прикрутил? я не вижу "вставить файл". как это сделать?
Файлы прикрепляются в "Управлении вложениями" ниже под окном редактировании при стандартном (не быстром) ответе.


а то я тогда пдф прикручу на контроллер. Там же приведена схема подключения к одному контроллеру 4 флопов.
Не нужно, я это не оспариваю.
Но должно быть два разъема для дисководов.
И БИОС для этого не нужно дизассемблировать.

vivat
27.06.2021, 07:47
Но должно быть два разъема для дисководов.
два разъема генерятся посредством этой вот навесной схемы из одного разъема.
https://imageup.ru/img49/3766824/4fdd.jpg
74LS139+7407x2 это просто как халва - собери да покушай
не, ну правда же, не долблюсь же я в глаза, в самом же деле.

200 кило на pdf-безбожное издевательство!!! - не смог я вставить даташит.
словом, вот ссылка на оный: https://html.alldatasheet.net/html-pdf/9310/NSC/PC87306/80/2/PC87306.html

- - - Добавлено - - -


В одном разъеме для дисковода только два сигнала выбора дисковода (DS0/DS1 и соответственно Motor0/Motor1).
Для еще двух дисководов нужен еще один разъем и вышеупомянутый бит и определит на какой из разъемов пойдет сигнал.

верно. и эти два разъема делаются из одного посредством схемы приведенной на рисунке Figure 2-2
Придется развести и изготовить простую платку которая накалывается на материнский FDD-разъем и имеет на борту 3 микросхемы и два флоппи-разъема на которые надеваются стандартные FDD-шлейфы на каждом 2 FDD-устройства.
и если б это все решалось одной лишь навесочкой... без софт-поддержки это все превращается в тыкву.


А нынче и вовсе без дисководов.
хе-хе... рыночек порешал... нет удобства для пользователя - есть удобство для производителя ака "я так вижу" и есть вывернутые у покупателя руки ака "не хочешь - не бери". Генри Форд это все изящно обернул в элегантную формулу "вы можете купить у нас любую машину любого цвета при условии что машина - форд, а цвет - черный"
(впрочим это претензия не к сюда - это к вообще, к рыночному сговору.
я свою гранту купил на 14 колесах. нет в салонах гранты на 13 колесах, хоть ты лопни - хотя если согласен ждать пока на ВАЗе под заказ изготовят...
к счастью, установка скобы суппорта от ранней калины и десятошного тормозного диска - решение проблемы. и - вуаля - можно поставить грязевую резину "снежинка")


(возможно и некоторые версии других производителей)
ннна-а - пробовал я редактором биоса от авард поглядеть спрятанные пункты меню - нету там 4 флоппи-устройств.
и 8 IDE устройств тоже ни один ами\авард\феникс биос не даст (мрбиос умеет делать из них софт-райд - и это до того как промис научился это делать! впрочим не за софт-райдом я к мрбиосу иду)

Sandro
27.06.2021, 08:58
В одном разъеме для дисковода только два сигнала выбора дисковода (DS0/DS1 и соответственно Motor0/Motor1).


Это в версии от IBM. В случае оригинального Шугартовского интерфейса там четыре сигнала выбора привода и общий сигнал включения мотора.

https://old.pinouts.ru/HD/InternalDisk_pinout.shtml



Но должно быть два разъема для дисководов.


См. выше.

vivat
27.06.2021, 11:40
Это в версии от IBM. В случае оригинального Шугартовского интерфейса там четыре сигнала выбора привода и общий сигнал включения мотора.

https://old.pinouts.ru/HD/InternalDisk_pinout.shtml



См. выше.

спасибо за поддержку
но имеем мы дело с big blue. потому только хардкор. только два drive select и целых два motor on

Gleb
27.06.2021, 17:18
Это в версии от IBM. В случае оригинального Шугартовского интерфейса там четыре сигнала выбора привода и общий сигнал включения мотора.
https://old.pinouts.ru/HD/InternalDisk_pinout.shtml


Вы правы. Но здесь то речь именно об IBM.


два разъема генерятся посредством этой вот навесной схемы из одного разъема.
74LS139+7407x2 это просто как халва - собери да покушай
...
Придется развести и изготовить простую платку которая накалывается на материнский FDD-разъем и имеет на борту 3 микросхемы и два флоппи-разъема на которые надеваются стандартные FDD-шлейфы на каждом 2 FDD-устройства.


А, я просто не понял, что допускаются аппаратные доработки.
Тогда да, тогда молчу.


и если б это все решалось одной лишь навесочкой... без софт-поддержки это все превращается в тыкву.

Опять же не факт.
Как я уже говорил управление выбором разьема в нормальной схеме на дискретных элементах осуществляется через порт 3F2. Порт называется DOR (Digital Output Register).

Так что мешает внутри этой БИС управлять вышеупомянутым битом тоже через порт 3F2 ?
Бегло посмотрев даташит вижу:

75688

DOR как раз расположен как базовый адрес + 2 (то есть 3F2).
И биты совпадают, там расписано.

То есть вполне может быть, что ничего не понадобится доделывать в БИОС.
Но, конечно, надо разбираться.

vivat
29.06.2021, 09:41
То есть вполне может быть,
как знать...
чую я опять барахтаюсь не в силах нащупать твердую почву. чтож буду курить даташит может посинею. =)