OSDev

для всех
Текущее время: 22 окт 2017, 03:50

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: mmu не работает с video ram
СообщениеДобавлено: 31 авг 2014, 09:46 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1056
mov eax, cr0
or eax, 0x80000001
mov cr0, eax

согласно вашему описанию данная конструкция не может вызывать исключения. Но она вызывает.

Вот при каких учловиях согласно интелу может происходить исключение для команды
MOV CRx,
Protected Mode Exceptions
#GP(0) If the current privilege level is not 0.
If an attempt is made to write invalid bit combinations in CR0
(such as setting the PG flag to 1 when the PE flag is set to 0, or
setting the CD flag to 0 when the NW flag is set to 1).
If an attempt is made to write a 1 to any reserved bit in CR4.
If any of the reserved bits are set in the page-directory pointers
table (PDPT) and the loading of a control register causes the
PDPT to be loaded into the processor.
Real-Address Mode Exceptions
#GP If an attempt is made to write a 1 to any reserved bit in CR4.
If an attempt is made to write invalid bit combinations in CR0
(such as setting the PG flag to 1 when the PE flag is set to 0).
Virtual-8086 Mode Exceptions
#GP(0) These instructions cannot be executed in virtual-8086 mode.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: mmu не работает с video ram
СообщениеДобавлено: 31 авг 2014, 09:48 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1056
Так что как вариант можете привести код перехода в защищенный режим, включения страничной адресации и настройки таблицы страниц.
Тогда может быть кто и подскажет где именно ошибка.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: mmu не работает с video ram
СообщениеДобавлено: 31 авг 2014, 16:54 

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 274
pavia ты лучше скажи у тебя самого пагинация работает ?
если работает, у тебя код активации пейджинга такой же ?
если да, вход в ПМ режим у тебя сделан, ТСС подгружен ?
video ram у тебя на него наложен пейджинг ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: mmu не работает с video ram
СообщениеДобавлено: 01 сен 2014, 08:10 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1056
1)Да работает. Только что запустил в VBox - полет нормальный.
2)Да такой же.
В текущей версии включение совмещено с переходом в защищенный режим.

Код:
;{procedure RunKernal(Enter:DWord; cr3:DWord; esp:DWord); Far;}

RunKernal:
MOV  BP, SP
MOV  EAX, DWord PTR [BP+8]
MOV  CR3, EAX

MOV  EAX, DWord PTR [BP+12]
MOV  DWord PTR CS:[@JMainPM], EAX

XOR  EAX, EAX
XOR  EBX, EBX

MOV  AX,SEG    GDT
MOV  BX,OFFSET GDT
SHL  EAX,4
ADD  EAX,EBX
PUSH SEG GDTR
POP  ES
MOV  DWord PTR ES:[GDTR+2],EAX
CALL DisableInt

LGDT QWord PTR ES:[GDTR]

;{ON_PM:}
MOV EAX,CR0
OR  EAX,80000001h 
MOV CR0,EAX

MOV  BX, 10h
MOV  FS,BX
MOV  GS,BX
MOV  DS,BX
MOV  ES,BX

MOV  EAX, DWord PTR [BP+4]

MOV  BX, 18h
MOV  SS, BX
MOV  EBP, EAX;{10FFFFFh ;{11MB-1}
MOV  ESP, EAX;{10FFFFFh ;{11MB-1}

          DB 066h
          DB 0EAh
@JMainPM: DD 00
          DW 08h

RETF


3) Не понял что за ТСС? У меня 1 МБайт весь отображен на 1 МБайт. Выделяю память под таблицу страниц и также линейно все заполняю.

Код:
procedure MapFirstMegabyte(PageDirectory:PPageTable);
var Addr:DWord;
 i:integer;
begin
if  PageDirectory<> nil then
  begin
  Addr:=0; {Отображаем первый мегабайт на первый}
  for i:=0 to 255 do {255=(1024*1024 div PageSize)-1}
      begin
      MapAddr(Addr,Addr);
      Addr:=Addr+PageSize;
      end;
  end;
end;


4) Да наложен. Текст выводится. Более того пробовал разные манипуляции с видео памятью.
5) MMU у меня завершен на 99% Пока тесты у меня поверхностные более детально и углубленно тесты отложены на потом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: mmu не работает с video ram
СообщениеДобавлено: 01 сен 2014, 11:17 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1195
pavia писал(а):
3) Не понял что за ТСС?
Может, имеется в виду TSS. scuter, TR можно не загружать, пока нет переключения между кольцами защиты или аппаратного переключения задач.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: mmu не работает с video ram
СообщениеДобавлено: 01 сен 2014, 21:39 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1025
Откуда: Балаково
pavia писал(а):
Код:
...
MOV  BX, 18h
MOV  SS, BX
MOV  EBP, EAX;{10FFFFFh ;{11MB-1}
MOV  ESP, EAX;{10FFFFFh ;{11MB-1}

Для эффективной работы стека, его указатель должен быть выровнен на 4. Нечётный указатель весьма необычный случай, некоторые подпрограммы (может быть и FPU) могут "не понять" прикола.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: mmu не работает с video ram
СообщениеДобавлено: 02 сен 2014, 00:31 

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 274
ну значит проблема во флагах на страницы,
либо адреса не правильные,

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

CR4 - PSE, PAE, PGE ставил такие флаги или нет ?

pavia писал(а):
3) Не понял что за ТСС? У меня 1 МБайт весь отображен на 1 МБайт. Выделяю память под таблицу страниц и также линейно все заполняю.

это имелось в виду такой маленький код,
Код:
   mov   ax, SEG_KN_TSS
   ltr   ax


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: mmu не работает с video ram
СообщениеДобавлено: 02 сен 2014, 05:32 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1056
Цитата:
ну значит проблема во флагах на страницы,
либо адреса не правильные,

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

Если адреса не правильные, то никаких исключений не будет. А если флаги неправильные, то только исключение. Но никак не критическая остановка.
Хотя есть вариант что если после or eax, 0x80000001, страница не совпадает с текущем местом кода. То тут может быть всё что угодно. Но если в эмуляторе нет ошибок то кэш таблиц должен поддерживать работоспособность.


Флаг у меня везде "3" - системная, чтение запись , присутствует.

Цитата:
CR4 - PSE, PAE, PGE ставил такие флаги или нет ?

Нет их не трогал. Под них надо код править. Да и вообще считаю это костылем. Если надо больше 4ГБ, то милости просим в 64 бита.

Да tr у меня загружается. Но это спустя несколько 1000 тактов, пока там GDT,IDT,TSS сформируется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: mmu не работает с video ram
СообщениеДобавлено: 02 сен 2014, 08:59 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1195
Himik писал(а):
Для эффективной работы стека, его указатель должен быть выровнен на 4. Нечётный указатель весьма необычный случай, некоторые подпрограммы (может быть и FPU) могут "не понять" прикола.
+1

Также рекомендуется сначала CS перезагружать, а уже после – регистры сегментов данных.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB