Machine Check Error

Использование и разработка софта (преимущественно на ПЦ)

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Machine Check Error

Post by Lavr »

В новом ноуте при загрузке в DOS под НЕ UEFI BIOS запуск некоторых старых программ
вызывает:
Machine Check Error - да-да... :lol: вот такой - как в режиме видео 13Н.

Я погуглил эту проблему - а она случается у многих - и даже не под DOS - BIOS и выяснил, что
support.microsoft.com wrote:Подобное поведение вызвано тем, что процессор компьютера обнаружил неустранимую аппаратную ошибку и сообщил об этом Windows XP. Чтобы сделать это, он использовал функцию MCE (Machine Check Exception) для процессоров Pentium или функцию MCA (Machine Check Architecture) для некоторых процессоров Pentium Pro. К появлению этого сообщения об ошибке могут привести следующие факторы.
Ошибки системной шины.
Ошибки памяти, которые могут включать ошибки четности или кода исправления ошибок (ECC).
Ошибки кэша в процессоре или оборудовании системы.
Ошибки ассоциативного буфера TLB в процессоре.
Другие обнаруженные ошибки оборудования поставщиков ЦП.
Обнаруженные ошибки оборудования сторонних поставщиков.
Я затащил под DOS-загрузку старую утилиту ndiags и выяснил, что все видео-режимы VESA
не вызывают краха системы под новым BIOS.
Прогон программы под debug - так же не выявил, что именно вызывет Machine Check Error... :(

Вопрос вот в чем - получается, что новый НЕ UEFI BIOS безо всяких виндей понимает
эти функции процессора? Или это не с этим связанная ошибка
?
(Хотя совершенно непонятно, что может быть некорректного в программе на Паскале,
если это не работа с видео-режимами... до них - не доходит...
)

И второй вопрос - так получается, что новые ноуты и спикер не поддерживают?
Все программы, работающие с таймером и на спикер - молчат как рыба... :(
Тест спикера из ndiags - также молчалив...

В старом ноуте звук спикера у меня великолепно выводился на встроенные динамики.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Совсем непонятно, но обслуживание клавиатуры через INT 16H тормозит в голом DOS феноменально... :(

В Венде 7 клавиатура видна правильно своими обычными портами.

Встроенная звуковая карта Realtek High Definition Audio в голом DOS не видна.
Даже как 8-битный DAC.

Странно, но и под Вендой 7 у нее нет аппаратных портов. Видна как "устройство на внутренней
шине
".

Спикер на звуковую карту, видимо, не выводится совсем, если такой порт есть реально в принципе...

Поствил DOSBOX-v0.74 - спикер и аудиокарта эмулируются шустрее, но, судя по всему, формируется
файл выборок, которые проигрываются встроенной звуковухой через драйверы Венды.
Звук более приятный, но отрезками с перерывом.

DOSBOX-v0.74 совсем не умеет в полноэкранный режим развернуть. Просто - черный экран.

У DOSBOX-v0.72 полноэкранный режим через раз на третий всё ж получался. Но оставшиеся
разы он просто напрочь портил видео-режим.


PS. Я вот думаю - не поставить ли DIRECT_X... "Протезус" прямо указал, что с DIRECT_X
будет работать быстрее...
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Покурил я мануалы, даташыты и прочие хелпы...

Получается, что к аудиокарте, которую Венда показывает как:
Audio Device on High Definition Audio Bus просто так и не подлезешь,
потому как у неё нет привычных для DOS портов...

Но... пишут, что есть заплатка от М$, частично эту проблему снимающая:
Решение кроется в установке обновления Microsoft UAA (Universal Audio Architecture) Bus driver for high definition audio KB888111. Одна проблема, это обновление Microsoft не публикует на своем сайте, т.к. оно специфично для разных чипсетов.

Для ноутбуков Asus
На сайтах производителей, например на сайте Asus опубликовано это коммулятивное обновление для Windows XP на всех языках, которое занимает 50 мегабайт. Единожды выкачав эти 50 мегабайт мы решили вынуть оттуда обновление по русски и по английски, дабы упростить жизнь согражданам, покупающим ноутбуки с операционкой Free DOS. Обновление взято от серии F3, но, думается, подойдет и к другим сериям.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Две ссылочки, где программно пытаются заставить звуковые карты
on High Definition Audio Bus работать под чистым DOS:

DOS ain't dead - SOUND support in DOS (HDA)
APOCALYPTIC SOFTWAREMIXING SOUNDSYSTEM FOR DOS

Интересно, что
Piotr wrote:Тhat HDA code was written after analyzing various HDA linux related sources, the drivers from ALSA project, the OSS sound system project. Although this code is different and pretty unique some similarities especially in the HDA nodes access strategy can be found.
То есть, автор посматривал в исходники дровишек linux...
А вот куда, интересно, дровописцы linux подсматривали?
Я сам-то заглянул в MSDN, но там - всё под Венду, а в ней
у меня проблем не имеется...
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Запустил я на новом ноуте утилиту ICHINIT.EXE из пакета:

APOCALYPTIC SOFTWAREMIXING SOUNDSYSTEM FOR DOS

По идее, она должна сделать вот что:
This is a real mode DOS initializer (V86 mode supported too) for Intel 8xx
chipsets
(or anything else with the ICH compatible southbridge access)...
Ну и вот что она мне выдала:

Code: Select all

ICHINIT Utility:
Intel 82801G (ICH7) integrated High Definition Audio controller detected.
Error: High Definition Audio controllers not supported yet!
Ну и поскольку она с исходниками, то я посмотрел, что она только с ICH4 взаимодействовать способна.

Но теперь хоть понятно, в чем проблема: BIOS не инициаллизирует Intel ICH7 (In/Out Controller Hub Rev.7)
для работы с High Definition Audio Bus.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Machine Check Error

Post by Lavr »

Lavr wrote:И второй вопрос - так получается, что новые ноуты и спикер не поддерживают?
Все программы, работающие с таймером и на спикер - молчат как рыба... :(
Тест спикера из ndiags - также молчалив...
HD Audio Guidelines for Windows
PC Beep
Windows 7 does not use the 8254 timer hardware, which was used in earlier operating systems for
PC Beep. Remember that this extra hardware is no longer necessary while you design your board.
Обидно... :-?
iLavr
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

А может общими усилиями сделаем страждущим дософилам недоком-конструктор на 286+287? ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:А может общими усилиями сделаем страждущим дософилам недоком-конструктор на 286+287? ;)
Ну разве что "страждущим дософилам" - у меня он лично - есть.

Ты только не путай средство и цель.

Мне в этом топике интересно - а что же изменилось для DOS в системах на
новых чипах. И как люди это преодолевают.

Хоть спикера и нет, но, читаю я, - люди программно подключают его выход к
звуковой карте...
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Machine Check Error

Post by Lavr »

Lavr wrote:В новом ноуте при загрузке в DOS под НЕ UEFI BIOS запуск некоторых старых программ
вызывает:
Machine Check Error - да-да... :lol: вот такой - как в режиме видео 13Н.
И кажется мне - я догадался, откуда растут уши у Machine Check Error! :lol:
У паскалевских программ был такой грешок на быстрых процессорах: Error 200: Divisiоn by zero.
Для его коррекции, помнится, придумали некий патч, который не очень корректно, но устранял
проблему.
Теперь, видимо, Machine Check Error выскакивает снова, как реакция на Divisiоn by zero.

PasP2fix

Code: Select all

Упрощённо алгоритм
Fixing ERROR 200:
Ищем байты db 0B9h,37h,00,0F7h,0F1h
Меняем на db 0B9h,37h,00,090h,090h
Сейчас попробую - проверю это нарошно...

PS. Угадал-угадал!!! :D
Просто забавно становится!

Code: Select all

0000D487: E83C02                       call      00000D6C6
0000D48A: F7D0                         not       ax
0000D48C: F7D2                         not       dx
0000D48E: B93700                       mov       cx,00037 ;
0000D491: F7F1                         div       cx
0000D493: A3A60C                       mov       [00CA6],ax
вызывает Error 200: Divisiоn by zero

А вот

Code: Select all

0000D487: E83C02                       call      00000D6C6
0000D48A: F7D0                         not       ax
0000D48C: F7D2                         not       dx
0000D48E: B93700                       mov       cx,00037 ;
0000D491: 90                           nop
0000D492: 90                           nop
0000D493: A3A60C                       mov       [00CA6],ax
вызывает Machine Check Error!!!
iLavr
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

дос то конечно жив, но новое пц-железо о нём уже и не задумывается даже :)

для нового пц-железа существует только вынь8

ну или линух, если производитель пц-железа ещё не потерял остатки разума...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Ну а люди, поддерживающие Free DOS, - задумываются...
И у них, порой, весьма неплохо получаются их задумки!
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Продебужил эмулятор "Специлиста" Шевцова до точки выпадения в Machine Check Error.
Странно, но причина в прямом обращении к регистрам видеоадаптера:

Code: Select all

3ceH  Write: graphics 1 and 2 address register
3cfH  Write: graphics controller data register
На манипуляциях с ними и выскакивает Machine Check Error.
Странно, потому как начиная с EGA-карт, эмулятор "Специлиста" Шевцова всегда
очень корректно работал с видео, на мой взгляд... :-?

Точно отслеживать не стал - в Паскале это внутри его графических модулей и вряд ли
это можно исправить.

От задержки CRT избавился вот так:

Code: Select all

0000D487: E83C02                       call      00000D6C6 
0000D48A: F7D0                         not       ax 
0000D48C: F7D2                         not       dx 
0000D48E: B93700                       mov       аx,0ffff ; 
0000D491: 90                           nop 
0000D492: 90                           nop 
0000D493: A3A60C                       mov       [00CA6],ax
но, как оказалось - причина была не в ней...

Сразу решил попробовать под Atom и голым DOS эмулятор emu80 Пыхонина.
Он на удивление работает нормально, но очень сжат к центру, что странно и некрасиво... :(

Насколько я помню, в нём задается режим 800х600 и в этом режиме укладывается удвоенный
экран "Специалиста" 384*2 х 256*2 = 768х512.
На моём старом ноутбуке это выглядeло прямо-таки практически родным экраном в матрице 1024х768!
А на новом ноуте 1024х600 по идее должно бы лечь крупно посредине экрана, но почему-то сжато.
Звука, конечно же, под голым DOS - нет... :(

Сразу же попробовал и пыхонинский emu80sdl под Вендой 7.
Можно сказать, что работает неплохо, звучок, в отличие от DOSBOX, ровный и приятный.
Но "артефакты" есть... и курсор, бывает, исчезает и отображение на экран замирает, порой...
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Lavr wrote:Продебужил эмулятор "Специлиста" Шевцова до точки выпадения в Machine Check Error.
Странно, но причина в прямом обращении к регистрам видеоадаптера:

Code: Select all

3ceH  Write: graphics 1 and 2 address register
3cfH  Write: graphics controller data register
На манипуляциях с ними и выскакивает Machine Check Error.
Странно, потому как начиная с EGA-карт, эмулятор "Специлиста" Шевцова всегда
очень корректно работал с видео, на мой взгляд... :-?
Нет - сам эмулятор, оказывается, работает нормально! :lol:

Image

А то было даже непонятно в чем замес: я же проверял, как устроена отрисовка графики и в
Шевцовском и в Пыхонинском эмулях - всё казалось весьма корректным!

Оказалось, что глюк в Шевцовской библиотеке окон-рамочек:

Image

Если их под дебаггером обойти, то сам эмуль не конфликтует ни с чем под Atom и голым DOS.
Ну это уже лучше... при случае - можно посмотреть, в чем там глюк с рамочками...
Скорее всего в паскалевской графике, т.к. сам эмулятор через регистры контроллера
отрабатывает графику экрана корректно.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Machine Check Error

Post by Lavr »

Приподниму тему, раз уж об ней неожиданно вспомнили...

Проверил две ссылки, они рабочие: DOS ain't dead!... DOS Alive !
iLavr
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: Machine Check Error

Post by Vic3Dexe »

Эмм... честно признаюсь, выкладки не читал, т.к. незачем.

Machine Check Exception - это исключение проца (такое же как #GP или #PF). И возникает оно безотносительно выполнения кода, так что отладчиком это ловить бесполезно. Это какие-то ошибки железа (контроллера памяти или кэша например), не более. Подозреваю, что биос этого ноута просто забывает его отключить, рассчитывая на то, что будет загружена винда, которая с ними разберется (или тоже выключит).

Выключается путем снятия бита 6 в регистре CR4.
Если надо - напишу код, но он тривиален.
Проверьте, если не тот случай - будем искать дальше.

Подробнее об MCE см. Intel Software Developer Manual, раздел 15.