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