Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];

Вниз

Отлаживаю 186 - проблемка :(   Найти похожие ветки 

 
HolyGlory   (2003-06-24 11:53) [0]

Вообще, по спецификации, после reset регистры ax,bx,cx,dx,si,di,bp,sp,ip сбрасываются в ноль. Также в ноль сбрасываются ds,es,ss. cs сбрасывается в 0xffff. Т.Е. ентри поинт - $ffff:$0000. Теперь вставляю туда retf (0xCB) - по идее должен произойти вызов int 0. (Т.е из стэка выталкиваются четыре байта с $0000:$0000 по $0004 - один cs, другой ip) - а там уже лежит значение 0x00001000 - т.е. переходим по адресу $0000:$1000. Только вот этого перехода не случается :( После того, как проц получает эти четыре байта, sp как и надо устанавливается в 0x0004, но проц после этого зачем-то запрашивает по шине слово по адресу 0xFFFFC (там тоже лежит 0xCBCB). После этого несколько тактов происходит что-то непонятное, после чего cs устанавливается в эти самые 0xCBCB (????), на а дальше начинается расколбас. Где я облажался?


 
Anatoly Podgoretsky   (2003-06-24 12:13) [1]

Там ничего еще не лежит


 
HolyGlory   (2003-06-24 12:17) [2]

НЕ понял?
Первые четыре байта памяти 0x00001000
Послендие 16 байт - 0xCBCBCBCB....CB
по адресу $0000:$1000 лежит какая-то программа - только управления она не получает :(
При подаче reset сброса памяти не происходит (flash).


 
Anatoly Podgoretsky   (2003-06-24 12:28) [3]

Откуда там возьмется 0x00001000 после сброса и так по адресу $0000:$1000, у тебя что там ПЗУ?
INT 0 и retf это абсолютно разные вещи и работают по разному.


 
HolyGlory   (2003-06-24 13:08) [4]

Первые 64кб - флэш память (ПЗУ, если так хочется... - вообще у меня reset проца отдельно от mem-ctrl). Я вот хочу понять ошибка у меня в ДНК или я что-то с процом не так сделал? После reset все регистры устанавливаются в ноль, кроме cs - тот уст. в 0xffff. При выполнении retf действительно должен происходить переход по адресу $0000:$1000, если в первых четырех байтах находится 0x00001000???? (а последние 16 байт - 0xCBCB... - на уровне контроллера памяти). Я понимаю, что int 0 (0xCD00) и retf(0xCB) - разные вещи. Но в данном случае должно ли передаватся управление на обработчик нулевого интеррапта или нет?


 
Anatoly Podgoretsky   (2003-06-24 13:20) [5]

А как насчет программы по адресу 0000:$1000 она не ожидает, что к ней будут обращаться через вектор прерывания, с соответсвующим состоянием стека и его фрейма, а они разные для этих случаев, кроме того она не собирается писать в стек, который у тебя в ПЗУ?


 
HolyGlory   (2003-06-24 13:31) [6]

Fuck! Фишка в том, что там находится именно загрузчик! Она как раз ожидает, что к ней перейдет управление, при ss=0, sp=4, и что в сэк писать нельзя. Надо сперва sp поменять. Она не ожидает, что ее вызовут как Int 0 - и хрен с ним. У нас никогда не будет division by zero!

Только ПРОБЛЕМА НЕ В ЭТОМ!!! Программа управления не получает вообще!!!!!!!!!!!!!!!!!!! Симптомы я описал.


 
HolyGlory   (2003-06-24 13:31) [7]

ЗЫ
ПЗУ и Flash - все же разные вещи.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.012 c
1-31272
MegaVolt
2003-06-26 12:33
2003.07.10
Как преобразовать строку в PWideString ?


6-31395
Del
2003-05-01 00:41
2003.07.10
Как сделать сервер с использованием WinSock. В проекте без форм!


1-31292
Maksss
2003-06-26 13:58
2003.07.10
hotmail


3-31109
Parusstepu
2003-06-17 12:51
2003.07.10
Генерация отчета


7-31554
prihod
2003-04-25 09:43
2003.07.10
Как определить частоту процессора???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский