nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 27 Apr 2024 11:38



Reply to topic  [ 45 posts ]  Go to page Previous  1, 2, 3
Machine Check Error 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
imsushka wrote:
перенеси кусок после 0f 05 в конец проги
забей нопами байт 16, а потом джамп на перенесенный блок

Ну это меня не приблизит к результату по сабжу... :wink:

Собственно, меня же не завешивание процессора интересует,
а почему вешает процессор программа, корректно написанная
на Паскале.

Я хоть и не поклонник Паскаля, но всё же считал, что он создаёт
довольно приличный код под DOS.
И я пока не вижу явных причин ему вешаться.
Отсюда и копаю код исключений, потому как под отладчиком
отловить момент не удаётся.

Порой часть программы прохожу пошагово - всё хорошо идёт.
В следующий раз - пройти эту часть быстро до метки - и тут
вдруг вылетает: Machine Check Error ... :roll:

_________________
iLavr


16 Mar 2024 11:29
Profile
Senior

Joined: 01 Jan 2022 04:34
Posts: 173
Location: USSR, Tashkent
Reply with quote
деление на ноль - это crt.tpu ошибка была. на новых процах частота больше чем 640к памяти, которой все хватит. :ebiggrin:

отладка в досе или в эмуляторе ?
пошаговая отладка (если в TD) не ловит трюки с изменением кода и с кешем команд.

только запуск до метки
причем, если до метки допрыгнули, то ставим след метку, сбрасываем прогу и стартуем от начала


16 Mar 2024 12:52
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
imsushka wrote:
деление на ноль - это crt.tpu ошибка была.
Это : Error 200: Divisiоn by zero. Давно пропатчена.

imsushka wrote:
отладка в досе или в эмуляторе ?
Отладка в чистом ДОСе с загрузочной флешки.
В ДОС-боксе никаких проблем нет, но он мне не нужен.

imsushka wrote:
пошаговая отладка (если в TD) не ловит трюки с изменением кода и с кешем команд.
Debug у меня от Novell DOS, TD и многих других полезных DOS утилит давненько уж нет... :(

Изменение кода самим современным процессором?
Я что-то не думаю, чтобы сам компилятор Паскаля был способен на такое.
Никлаус Вирт был бы явно против этого. :wink:

imsushka wrote:
только запуск до метки
причем, если до метки допрыгнули, то ставим след метку, сбрасываем прогу и стартуем от начала
Так и делаю в общем-то...
Вот только результат не повторяется... :(

Я же уже один раз запустил-таки программу обойдя под отладчиком
подозрительный очевидно CALL, но второй раз фокус не удался... :-?

Я, собственно, и повторил всё на другом ноутбуке уже, чтобы убедиться,
что вся засада не самОм ноутбуке... :wink:

_________________
iLavr


16 Mar 2024 18:02
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Я, собственно, и повторил всё на другом ноутбуке уже, чтобы убедиться,
что вся засада не самОм ноутбуке... :wink:

Вся засада всё-таки, видимо, в процессоре... :-?

Загрузился с флешки под DOS 8.0 под более старым, но не совсем уж устаревшим процессором:
Attachment:
IMG20240320162851.png
IMG20240320162851.png [ 121.33 KiB | Viewed 1940 times ]

Совершенно никаких проблем нет! :o
Attachment:
IMG20240320162120.png
IMG20240320162120.png [ 578.1 KiB | Viewed 1940 times ]


На неделе попробую еще под более новым, чем мой Intel Atom загрузиться...
Если он, конечно, сможет стартануть под DOS 8.0... :wink:

Но во всех источниках клятвенно утверждают, что процессоры Intel при старте
ведут себя как быстрый 8086 с некоторыми расширениями...
Нигде нет конкретной информации, что могут быть глюки.
В конце концов-то, многие ноутбуки продают с предустановленной Free DOS,
для удешевления.

Сегодня просто не получилось заставить новый процессор стартануть с USB HDD.
BIOS у него зело замороченный... :neutral:

_________________
iLavr


20 Mar 2024 12:12
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Собственно, получается, что разница между системами, где всё работает безошибочно
и где выскакивает ошибка, совсем небольшая.

Здесь работает безошибочно:
Lavr wrote:
Image

Здесь выскакивает ошибка:
Attachment:
Intel Atom-1_6GHz.png
Intel Atom-1_6GHz.png [ 9.2 KiB | Viewed 1893 times ]

Intel Atom даже медленнее, ядро у него одно (хотя пишут, что 2 виртуальных).

И везде клятвенно (начиная с сайта Intel) утверждают, что ошибка типа
Machine Check Error - это НЕ ошибка самогО процессора:
Quote:
The CPU Internal Error (CPU IERR) or CPU Machine Check error is usually not an error of the CPU itself. But an indication that the CPU has detected an error in the system, or received an erroneous instruction from a system component. It is caused by a non-CPU event, such as a firmware mismatch, a system BUS interruption or a memory read/write interruption. The error can theoretically be caused by ANY system component, software, or hardware.
Quote:
Внутренняя ошибка ЦП (CPU IERR) или ошибка проверки компьютера ЦП обычно не является ошибкой самого ЦП. Но это признак того, что ЦП обнаружил ошибку в системе или получил ошибочную инструкцию от компонента системы. Это вызвано событием, не связанным с процессором, например несоответствием прошивки, прерыванием системной шины или прерыванием чтения/записи памяти. Теоретически ошибка может быть вызвана ЛЮБЫМ системным компонентом, программным или аппаратным обеспечением.

Разница остаётся тогда только в следующем:
У Intel Atom на борту Графический контроллер:
Intel GMA 3600 (PowerVR SGX545) @400 MHz
И этот контроллер в Интернете не хвалят.
Хотя опять же, графика программы, вызывающей ошибку, работала даже на EGA! :o

Но с другой стороны, у этой системы:
Image
видеокарта внешняя на шине...

_________________
iLavr


21 Mar 2024 07:37
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
imsushka wrote:
только запуск до метки
причем, если до метки допрыгнули, то ставим след метку, сбрасываем прогу и стартуем от начала
Ну вот... настырно фотографируя очередные метки таким методом, повторил результат,
полученный отладчиком ещё на предыдущем ноутбуке... :wink:
Lavr wrote:
Lavr wrote:
Продебужил эмулятор "Специалиста" Шевцова до точки выпадения в Machine Check Error.
Оказалось, что глюк в Шевцовской библиотеке окон-рамочек:
Image
Если их под дебаггером обойти, то сам эмуль не конфликтует ни с чем под Atom и голым DOS.

Запуском до метки нашел крайнюю точку до которой ошибки нет, а при вызове этой
функции, что подчеркнута желтым, и вылетает ошибка Machine Check Error.
Attachment:
IMG20240321232711.png
IMG20240321232711.png [ 834.81 KiB | Viewed 1846 times ]

А вот дальше и происходит то, о чём я уже писал тут: этот вызов можно пройти пошагово
и ошибки Machine Check Error не случается.
А вот если уже успешно пройденные участки запускать "до метки" то машина падает с ошибкой! :roll:

Я посмотрел код, этот вызов повторяется многократно:
Attachment:
IMG20240322000941.png
IMG20240322000941.png [ 695.39 KiB | Viewed 1846 times ]

Поэтому в этот раз я не стал обходить этот вызов вручную, а поставил RETF на первый байт
адреса, по которому он вызывается.
И дальше всё замечательно проскочило в сам эмулятор, который отлично работает, но без
красивых элементов оформления... :-?
Attachment:
IMG20240322001303.png
IMG20240322001303.png [ 403.98 KiB | Viewed 1846 times ]

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

_________________
iLavr


21 Mar 2024 15:10
Profile
Senior

Joined: 01 Jan 2022 04:34
Posts: 173
Location: USSR, Tashkent
Reply with quote
а в той подпрограмме метку поставить зя ?

или она вызывается до этого момента часто, но ошибок не вылетает ?


21 Mar 2024 22:09
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
А вот дальше и происходит то, о чём я уже писал тут: этот вызов можно пройти пошагово
и ошибки Machine Check Error не случается.
А вот если уже успешно пройденные участки запускать "до метки" то машина падает с ошибкой!

К моему немалому удивлению оказалось, что эти два режима отладки выполняются по-разному... :o

В пошаговой отладке "Trace" используется аппаратный режим трассировки микропроцессора 8086.
(INT 01 — исключение #DB «Отладочное прерывание»)

При прохождении "до метки" - "Go" или "Proceed" Debug помещает код прерывания (0CCh - INT 03
«Точка останова») по указанным адресам точек останова.

А я почему-то был уверен, что отладчик всегда работает через INT 03... :roll:

Получается, что по командам "Go" и "Proceed" участок кода выполняется естественным образом, а по
команде "Trace" — аппаратное прерывание самим процессором после исполнения каждой команды.

imsushka wrote:
а в той подпрограмме метку поставить зя ?
или она вызывается до этого момента часто, но ошибок не вылетает ?
Метку туда поставить можно, но это сразу даёт вылет с ошибкой. :(
А вот если в неё зайти через "Trace", то некоторый участок можно ещё пройти "до метки",
но метка всякий раз разная. :-?

Я вот думаю, может быть это глюки встроенной в Intel Atom видеокарты... :neutral:
На всех машинах, где эта программа не падает, видюхи внешние.
Встроенную в Intel Atom видеокарту откровенно не хвалят, да и общие отзывы следующие:
Quote:
- Встроенная графика обычно предлагает ограниченный набор функций и возможностей по сравнению с дискретными графическими адаптерами.
- Встроенная графика может иметь ограниченную поддержку графических API, что может привести к неполной совместимости с некоторыми приложениями или играми.

_________________
iLavr


22 Mar 2024 07:27
Profile
Senior

Joined: 01 Jan 2022 04:34
Posts: 173
Location: USSR, Tashkent
Reply with quote
ну про пошаговый режим я и так знал, поэтому и говорил что надо ставить метку и прыгать до нее

до подпрограммы выполняется без ошибок ? по метке ?

как только заходит в подпрограмму метка начинает ошибку давать ?


22 Mar 2024 07:45
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
imsushka wrote:
до подпрограммы выполняется без ошибок ? по метке ?
да - по метке и без ошибок.
imsushka wrote:
как только заходит в подпрограмму метка начинает ошибку давать ?
именно так.

У меня есть ещё очень косвенное предположение, что там с сегментными регистрами что-то
напутано. Замечал я за многие годы пользования этой программой один глючок, вылетающий
на отдельных процессорах. Но он не мешал её работе в то время...
Ошибка заключалась в том, что 2 Паскалевские переменные становились видны в верхнем
левом углу экрана. :roll: А поскольку это были счетчики, на экране было поточечно видно,
как они считают. :wink:

Но в данном случае под отладкой оригинал программы без этих переменных.
Они были введены позже для эмуляции таймера К580ВИ53 на двух каналах
таймера IBM PC.

_________________
iLavr


22 Mar 2024 08:02
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
imsushka wrote:
до подпрограммы выполняется без ошибок ? по метке ?
да - по метке и без ошибок.
imsushka wrote:
как только заходит в подпрограмму метка начинает ошибку давать ?
именно так.
Продебужил под DOS-BOX чтобы посмотреть, что ж там без ошибки происходит...

Я бы такой код руками ни за что не написал! :o
Debug, ожидая "до метки", теряет управление, потому как из этой функции по-человечески
не выходят! :roll:
Из неё выходят дальним джампом в код раньше вызова этой функции, а потом вызывают
её снова... Стек, может быть, где-то и встаёт на место, но Debug теряется в таком коде... :-?
Понятно, что по одному оператору аппаратно это как-то проходится...
Attachment:
SPMX_VIDEO14.PNG
SPMX_VIDEO14.PNG [ 59.91 KiB | Viewed 1736 times ]

Похоже на странную рекурсию... :neutral:

_________________
iLavr


22 Mar 2024 10:44
Profile
Senior

Joined: 01 Jan 2022 04:34
Posts: 173
Location: USSR, Tashkent
Reply with quote
это больше на турбовижн похоже
типа вызов методов

нету у меня старых прог на просмотреть код


22 Mar 2024 11:19
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
imsushka wrote:
нету у меня старых прог на просмотреть код

Да и не надо, пожалуй, чего на него смотреть, когда в общем-то всё ясно.
Этот код не подпатчить просто парой байтов, чтобы вдруг заработало.
А отслеживать его странности смысла особого нет.
Хотелось чтобы старая прога работала на ноутбуках с Виндой 7, но не судьба ей, видимо...

_________________
iLavr


22 Mar 2024 12:13
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Lavr wrote:
А вот дальше и происходит то, о чём я уже писал тут: этот вызов можно пройти пошагово
и ошибки Machine Check Error не случается.
А вот если уже успешно пройденные участки запускать "до метки" то машина падает с ошибкой!
В пошаговой отладке "Trace" используется аппаратный режим трассировки микропроцессора 8086.
(INT 01 — исключение #DB «Отладочное прерывание»)

Пришла мне напоследок совсем шаловливая мысль: Если пошаговое прохождение не вызывает
ошибки, то, может быть, запустить всю программу под постоянным контролем каждого кода под
пошаговым прерыванием
INT 01, которое я перехватываю в собственный "костылик"? :roll:

Получилось неплохо, хотя и INT 03 пришлось задействовать: первый байт программы меняется
на 0CCH, в перехваченном мной INT 03 байт 0CCH заменяется на нормальный первый байт,
IP откатывается на шаг назад, после чего взводится флаг INT 01 и программа запускается
сначала, но уже под контролем INT 01.

К сожалению, результат был всё тот же: Machine Check Error. :(

По пути выяснил, что программу можно неплохо замедлить, если внутри INT 01 вставить циклы
задержки...
Это тоже не помогло, хотя и медленно было видно, как программа стартует, входит в свой графический
режим 640х350х16 и тут уже падает с Machine Check Error крупным шрифтом...

Наткнулся я на форум Паскалистов А как у AMD с паскалевскими программами для DOS?,
где посетители пишут, что некоторые Паскалевские программы перестают падать при замедлении.
Так что если кто захочет замедлить свою программу через INT 01, выкладываю здесь код:
Attachment:
SPMX_INT1.zip [7.55 KiB]
Downloaded 7 times

Код грязноватый, так как я адаптировал одну свою старую программу, взятую с этого форума.
Но разобраться можно, я думаю, если понадобится.
Сам я, возможно, её как-нибудь доделаю в простой отладчик с выводом информации в одну верхнюю
строчку - такой фокус есть в "Специалист_МХ", и здесь мне его очень не хватало...

_________________
iLavr


04 Apr 2024 13:01
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Ну вот... повторил результат, полученный отладчиком ещё на предыдущем ноутбуке... :wink:
Lavr wrote:
Lavr wrote:
Продебужил эмулятор "Специалиста" Шевцова до точки выпадения в Machine Check Error.
Оказалось, что глюк в Шевцовской библиотеке окон-рамочек...

Любопытно мне стало, что же такое может быть в библиотеке, написанной также на Паскале, что приводит
к этому сАмому Machine Check Error.
Разыскал я старые исходники этой программы, расставил точки останова, и был чрезвычайно удивлён
полученным результатом! :o

Программа вылетает в Machine Check Error на собственных графических примитивах Паскаля:

Line(x1, y1, x2, y2: Integer); и
Bar(x1, y1, x2, y2: Integer); - соответственно, отрисовка линии и закрашенного прямоугольника
из egavga.obj .

Чтобы точно убедиться в этом, написал аналоги этих функций через прерывание BIOS INT10H, AH=0CH:

 АНАЛОГ Line()
Code:
procedure TWin.WDrawRec(x,y,x1,y1:integer; flag:boolean);
 var colx: integer; {подпрограмма рисует прямоугольник}
 begin
  {if flag then SetColor((not col1) and $f) else SetColor(col1);}
   if flag then colx:=((not col1) and $f) else colx:=col1;

  {Line(x1,y1,x1,y); Line(x1,y1,x,y1);}
  asm
    push ax
    push bx
    push cx
    push dx

    mov    dx,y1   {graphics row    = y}
@00:mov    cx,x1   {graphics column = x}
    mov    bh,$0
    mov    ax,colx {color number }
    mov    ah,$0c
    int    $10

    dec    dx
    cmp    dx,y
    jnz    @00

    mov    cx,x1   {graphics column = x}
@01:mov    dx,y1   {graphics row    = y}
    mov    bh,$0
    mov    ax,colx {color number }
    mov    ah,$0c
    int    $10
    mov    ah,$0c
    int    $10

    dec    cx
    cmp    cx,x
    jnz    @01

    mov    ah,$0c
    int    $10

    pop dx
    pop cx
    pop bx
    pop ax
  end;

  {if flag then SetColor(col1) else SetColor((not col1) and $f);}
   if flag then colx:=col1 else colx:=((not col1) and $f);

  {Line(x,y,x1,y); Line(x,y,x,y1);}
  asm
    push ax
    push bx
    push cx
    push dx

    mov    cx,x1   {graphics column = x}
@02:mov    dx,y    {graphics row    = y}
    mov    bh,$0
    mov    ax,colx {color number }
    mov    ah,$0c
    int    $10

    dec    cx
    cmp    cx,x
    jnz    @02

    mov    ah,$0c
    int    $10

    mov    dx,y1   {graphics row    = y}
@03:mov    cx,x    {graphics column = x}
    mov    bh,$0
    mov    ax,colx {color number }
    mov    ah,$0c
    int    $10

    dec    dx
    cmp    dx,y
    jnz    @03

    pop dx
    pop cx
    pop bx
    pop ax
  end;
 end;

 АНАЛОГ Bar()
Code:
procedure TWin.WBar(x,y,x1,y1:integer);
 var colr: integer;
 begin
  colr:=col2;
  asm
    push ax
    push bx
    push cx
    push dx

    mov    dx,y1   {graphics row    = y}
@00:mov    cx,x1   {graphics column = x}
@01:mov    bh,$0
    mov    al,colr  {color number }
    mov    ah,$0c
    int    $10

    dec    cx
    cmp    cx,x
    jnz    @01

    mov    ah,$0c
    int    $10

    dec    dx
    cmp    dx,y
    jnz    @00

    pop dx
    pop cx
    pop bx
    pop ax
  end;
end;

Подправил я местами взаимодействие с этими самодельными функциями, и в общем-то программа
с ними впервые нормально стартанула под DOS 8.0 и Intel ATOM 1.8 GGz! :kruto:

Я был очень удивлён таким результатом, поскольку ожидал в библиотеке каких-либо програмистских
хитростей и нетривиальных решений... а там всё по-Паскалевски чистенько. :-?

Но потом я удивляться перестал, потому как сам Borland Pascal 7.0 под DOS 8.0 и Intel ATOM 1.8 GGz
падает и вовсе безо всяких сообщений. :(

А вот Quick BASIC 4.5 под DOS 8.0 и Intel ATOM 1.8 GGz HE падает! :wink:
Как не приводит к краху и его функция LINE (X1, Y1)-(X2, Y2)... :lol:

_________________
iLavr


07 Apr 2024 18:40
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 45 posts ]  Go to page Previous  1, 2, 3

Who is online

Users browsing this forum: No registered users and 85 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.