Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » IBM PC-совместимое. До 2000 года включительно » нужно опознать XT материнку, ошибка real-time clock error |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 6 * 7 8 | Печать |
uav1606
Advanced Member
Откуда: Енакиево Всего сообщений: 4373 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 16 янв. 2008 |
fre6lime, пробовали при загрузке жать что-то вроде Ctrl+Alt+Esc? Попадалсь мне отдалённо похожая XT-шка, там была как раз такая комбинация. Можно и другие клавиши с Ctrl+Alt попробовать. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Прилагаю программу для сохранения C, D, E, F сегментов в файл(bios256.exe). Компилятор Borland. Прикрепленный файл (bios256.zip, 8719 байт, скачан: 24 раза) |
Ethereal
Newbie
Откуда: Петрозаводск Всего сообщений: 19 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 9 июня 2016 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 10 июня 2016 18:33 Сообщение отредактировано: 10 июня 2016 19:00
i8088 написал: Нет. Ты не пишешь прямо из BIOS в файл. Это как??!BIOS там просто отображается на память, ничего копировать в буфер не надо (моя программа просто читает BIOS в файл). Давай возьмем твою программу bios32.exe и прогоним в отладчике DEBUG. Делай так : debug bios32.exe g 11a t g 260 тут введи имя файла t g 2a9 вот тут команда MOV AL,ES:[BX], которая байт из адресов BIOS читает в регистр AL t t t t t тут команда RET возврата из функции t тут функция вернула прочитанный байт в регистре AL t t тут команда CALL и в эту подпрограмму в стеке передан прочитанный байт t g 14db тут команда MOV -1[BX],AL, что прочитанный байт копирует в буферок в ОЗУ. Это скрытый буферок. Ты в своей программе на Си его не заводил. Си за тебя его завел. Главное, что BX=0B3Fh и буферок начинается с адреса DS:0B3Eh А теперь идем прямо на первую запись в файл g 1102 и ты увидишь INT 21h и в регистре AH число 40h, т.е вызов функции MS-DOS записи в файл. А теперь смотри на регистры DS:DX. Откуда пишеться ? Да DS:DX = DS:0B3Eh, т.е из скрытого буферка пишется. А теперь на регистр CX смотри. Сколько пишется ? Да 200h байт пишется. Это потому, что Си за тебя думает. Он автоматом буферирует побайтную запись в файл и пишет порциями размером в один сектор на диске. Ну а теперь набери d b3e d d d Вот это и есть содержимое скрытого буферка. Он заполнился на 200h байт и программа эту первую порцию в файл пишет. Из этого буферка в файл пишется. Из буферка в сегменте данных программы. А не напрямую из BIOS. Так-что alecv видимо был абсолютно прав, когда писал : alecv написал: И мы имеем дело именно с этим "некоторым BIOS-ом" Видимо надо сначала копировать кусок памяти в буфер, а потом записывать. Некоторые BIOS-ы не пишут из старших адресов. И именно поэтому не удалось свалить в файл дамп материнского BIOS с помощью DEBUG. fre6lime написал: Не в DEBUG дело, а в том, что BIOS (точнее код в нем) именно что "некоторый". С дабаговским явно что-то не то =\ |
Ethereal
Newbie
Откуда: Петрозаводск Всего сообщений: 19 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 9 июня 2016 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 10 июня 2016 19:35 Сообщение отредактировано: 10 июня 2016 19:55
Из кода материнского BIOS следует : Если подключать винчестер к разъему IDE на материнке, то материнка поддерживает 4 типа винчестеров. Тип винчестера выбирается двумя какими-то перемычками/переключалками на плате. Наверно. Точно не знаю. Во всяком случае читается байт из порта 322h и из этого байта тип винчестера определяют только 2 бита. Получается всего 4 варианта. Наверное этот порт - это состояние перемычек. Даже почти наверняка. Хотя вариант с чтением этого байта из памяти микросхемы реального времени с батарейкой все-же пока не исключен. Таблицы параметров этих четырех типов винчестеров расположены в BIOS с адресов F000:E314 F000:E324 F000:E334 F000:E344 Мы там видим : Цилинров Головок 614 4 804 2 804 4 614 4 Черт возьми, а две таблицы-то одинаковые. Значит всего поддерживается разных типов IDE-винчестеров только три. alecv написал: Нету там установки типа винта. Увы. Возможные параметры трех типов винчестеров жестко зашиты. Есть только готовый сервис по низкоуровневому форматированию винтов. Получается так. В ней похоже есть Setup c установкой времени, типа флопов и винта. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 10 июня 2016 19:48 Сообщение отредактировано: 10 июня 2016 19:49
Ethereal написал: Да, здесь я погорячился, прямо на диск писать можно, только устанавливая адрес Нет. Ты не пишешь прямо из BIOS в файл. буфера обмена с HDD/FDD на интересующие адреса BIOS (здесь или писать посекторно, без файловой системы, или работать с ФС вручную), а записать на диск информацию меньше размера сектора вообще невозможно. Ethereal написал: А за тебя думает int0x40/int0x13/DOS. DOS тоже имеет настраиваемую буферизацию. Это потому, что Си за тебя думает. Ethereal написал: Это противоречит здравому смыслу. Если бы нельзя было читать BIOS без буфера, его И мы имеем дело именно с этим "некоторым BIOS-ом" код просто не мог бы быть исполнен.Я думаю дело просто в баге реализации int0x40 и/или int0x13. Предлагаю не использовать вообще сервисы DOS и BIOS, а просто сохранить посекторно на дискету/HDD, работая с HDD/FDD через регистры. Или намного проще - для облегчения работы можно просто сделать вывод областей BIOS на экран - уже будет видно корректность дампа, а для сохранения перенаправить вывод в файл. Здесь можно я думаю испорльзовать сервисы DOS/BIOS для работы с экраном, но для чистоты эксперимента можно и напрямую (тогда перенаправить вывод в файл не получится. В принципе, для вывода дампа на экран через сервисы DOS можно просто DEBUG воспользоваться. |
Ethereal
Newbie
Откуда: Петрозаводск Всего сообщений: 19 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 9 июня 2016 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 10 июня 2016 19:59 Сообщение отредактировано: 10 июня 2016 20:22
i8088 написал: А я тебе про что ? Если на данном компе вызвать int 0x13/0x40 (или равно функцию 40h сервиса MS-DOS, которая все равно к int 13h обратится /хотя вот тут вот я не знаю напрямую ли DOS перекинет адрес в BIOS или будет гонять данные по своим буферам/) с адресом данных для записи в сегменте F000, то запишется хрень какая-то. Я думал будет понятно, что я именно об этом и говорю. Я думаю дело просто в баге реализации int0x40и/или int0x13. Причем бага эта почти наверняка из-за того, что при записи работает не родной обработчик int 13h/40h материнки, а обработчик из не родного материнке расширения BIOS от MFM-контроллера. Да и черт-то с ним в чем тут причина. Факт, что указываем адрес данных для записи что для DOS, что для BIOS в сегменте F000 и получается ерунда. Значит надо сначала скопировать данные в буфер в ОЗУ и функцию записи вызывать уже для данных в этом буфере. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 10 июня 2016 20:15 Сообщение отредактировано: 10 июня 2016 20:15
Ethereal написал: Мне это совсем не было понятно из текста в предыдущих сообщениях. Я думал будет понятно, что я именно об этом и говорю. Я поддерживаю, что возможно виноват BIOS MFM контроллера. Надо попросить автора сделать это сохранение на floppy, и для чистоты эксперимента вытащить из платы MFM controller, чтобы его расширение int0x13 убрать. |
fre6lime |
uav1606 написал: Тут все реверс-инжиниринг биоса устраивают, а он пришел и разрулил fre6lime, пробовали при загрузке жать что-то вроде Ctrl+Alt+Esc? Попадалсь мне отдалённо похожая XT-шка, там была как раз такая комбинация. Ctrl+Alt+Esc сработало, и я увидел сокровенное: Как и писал alecv поддерживает один 1.44мб флоп. Также стало понятно как пользоваться встроенным контроллером xt-ide: Выбрать параметры диска не дает, можно только список бедов ввести. Скорее всего имеет место некий автодетект, из тех 3-х типов винчейстеров, про которые писал Ethereal. Дата и время нормально устанавливается и что крайне приятно дос их отлично читает из биоса без спец. утилиты. На всякий случай прикрепил дамп полченный через bios256.exe. Прикрепленный файл (BIOS256.ROM, 262144 байт, скачан: 21 раз) |
Ethereal
Newbie
Откуда: Петрозаводск Всего сообщений: 19 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 9 июня 2016 |
Вот здорово. Путь к решению задачи вышел весьма замысловатым, причем к финишу привел совершенно неожиданный поворот |
fre6lime |
В принципе больше по этой материнке вопросов серьезных нет. Не смог найти перемычку для турбо и назначение остальных джамперов не ясно, но это уже мелочи |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 6 * 7 8 | Печать |
Полигон-2 » IBM PC-совместимое. До 2000 года включительно » нужно опознать XT материнку, ошибка real-time clock error |
1 посетитель просмотрел эту тему за последние 15 минут |
В том числе: 1 гость, 0 скрытых пользователей |
Последние | |
[Москва] LIQUID-Акция. Сливаются разъемы CF МС7004 и 7004А на AT и XT Пайка термотрубок Проммать s478 PEAK 715VL2-HT ( Full-Size SBC) Подскажите по 386 материке по джамперам. |
Самые активные 5 тем | |