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} |
Автор: | 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/ |