Главная страница
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-31272
MegaVolt
2003-06-26 12:33
2003.07.10
Как преобразовать строку в PWideString ?


1-31174
Edvard
2003-06-27 14:56
2003.07.10
Проблема с считыванием из файла и заполнением ListBox


3-31162
RDA
2003-06-16 12:20
2003.07.10
Импорт записей из другой таблицы


1-31231
SeAl
2003-06-26 14:05
2003.07.10
нужна помощь с переводом из real в integer


1-31183
Mishenka
2003-06-27 23:50
2003.07.10
Глюки при создании узда в TreeView...