OSDev
http://osdev.su/

mmu не работает с video ram
http://osdev.su/viewtopic.php?f=6&t=1012
Страница 2 из 2

Автор:  pavia [ 31 авг 2014, 09:46 ]
Заголовок сообщения:  Re: mmu не работает с video ram

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.

Автор:  pavia [ 31 авг 2014, 09:48 ]
Заголовок сообщения:  Re: mmu не работает с video ram

Так что как вариант можете привести код перехода в защищенный режим, включения страничной адресации и настройки таблицы страниц.
Тогда может быть кто и подскажет где именно ошибка.

Автор:  scuter [ 31 авг 2014, 16:54 ]
Заголовок сообщения:  Re: mmu не работает с video ram

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

Автор:  pavia [ 01 сен 2014, 08:10 ]
Заголовок сообщения:  Re: mmu не работает с video ram

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% Пока тесты у меня поверхностные более детально и углубленно тесты отложены на потом.

Автор:  phantom-84 [ 01 сен 2014, 11:17 ]
Заголовок сообщения:  Re: mmu не работает с video ram

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

Автор:  Himik [ 01 сен 2014, 21:39 ]
Заголовок сообщения:  Re: mmu не работает с video ram

pavia писал(а):
Код:
...
MOV  BX, 18h
MOV  SS, BX
MOV  EBP, EAX;{10FFFFFh ;{11MB-1}
MOV  ESP, EAX;{10FFFFFh ;{11MB-1}

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

Автор:  scuter [ 02 сен 2014, 00:31 ]
Заголовок сообщения:  Re: mmu не работает с video ram

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

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

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

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

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


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

Автор:  pavia [ 02 сен 2014, 05:32 ]
Заголовок сообщения:  Re: mmu не работает с video ram

Цитата:
ну значит проблема во флагах на страницы,
либо адреса не правильные,

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

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


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

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

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

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

Автор:  phantom-84 [ 02 сен 2014, 08:59 ]
Заголовок сообщения:  Re: mmu не работает с video ram

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

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

Страница 2 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/