Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.10;
Скачать: CL | DM;

Вниз

Отлаживаю 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
1-31284
Col Isaev
2003-06-26 13:32
2003.07.10
свой класс


1-31263
Dima2
2003-06-28 17:02
2003.07.10
OleContainer : Word - > ASCII


14-31468
euru
2003-06-20 12:03
2003.07.10
Шаблоны и ООП


14-31483
IronHawk
2003-06-24 11:39
2003.07.10
Кто тут собирал скриншоты Desktop-ов?


14-31434
HermitAlex
2003-06-20 21:11
2003.07.10
Как реализовать автоматическое обновление клиентов?