OSDev

для всех
Текущее время: 27 апр 2024, 17:44

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




Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: запись в память с выше 1MB (0010:0000h)
СообщениеДобавлено: 23 фев 2013, 07:25 

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 277
вот ни как не могу понять почему ничего не записывается,
пробовал разные режимы (PM, RM), загружал IDT GDT
в оперативку ничего не записывается (адрес 0010:0000h)
но самое странное VESA LFB записывает замечательно
скажите как это сделать, может там какой то переключательесть?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запись в память с выше 1MB (0010:0000h)
СообщениеДобавлено: 23 фев 2013, 08:46 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Цитата:
скажите как это сделать, может там какой то переключательесть?

Да есть A20
http://ru.osdev.wikia.com/wiki/Включение_линии_A20

Цитата:
в оперативку ничего не записывается (адрес 0010h:0000h)
в RM этот адрес соответствует 100h физическому, что явно ниже мегабайта.
http://protectmode.narod.ru/ch1_1.htm
В PM это зависит от настройки сегмента и страниц.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запись в память с выше 1MB (0010:0000h)
СообщениеДобавлено: 23 фев 2013, 15:03 

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 277
pavia писал(а):
Цитата:
скажите как это сделать, может там какой то переключательесть?

Да есть A20
http://ru.osdev.wikia.com/wiki/Включение_линии_A20

не эта штука не помогает,
Код:
    in     al, 92h
    or     al, 02h
    out    92h, al

её тоже пробовал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запись в память с выше 1MB (0010:0000h)
СообщениеДобавлено: 23 фев 2013, 15:39 
Аватара пользователя

Зарегистрирован: 16 апр 2010, 10:10
Сообщения: 320
Откуда: Псковская обл.
А как ты проверяешь - есть запись или нет. И как переводишь cpu. У меня есть готовые куски кода на фасм. Для перехода в нереальный режим и защищённый. Я как-то пробовал примеры из Зубкова - там может ошибки были - помню пришлось в конце-концов разбираться добросовестно. А еще надо прерывания запретить - если не настроены они, конечно. Но если работает веса - тогда странно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запись в память с выше 1MB (0010:0000h)
СообщениеДобавлено: 23 фев 2013, 15:46 

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 277
Цитата:
А как ты проверяешь - есть запись или нет.

на виртуальной машине в дебаг режиме смотрю что находится по адресу 0010:0000h
Цитата:
И как переводишь cpu.

во пример кода.
Код:
CLI
LGDT [GDTR]

in al, 0x92
or al, 2
out 0x92, al
in   al,70h
and   al,07FH
out   70h,al
wait
wait
wait
wait
wait
wait
wait
wait
wait
wait
wait
wait
wait
wait
wait
wait
wait
wait
wait
wait
wait
MOV EAX, CR0
OR  AL, 1
MOV CR0, EAX
;mov eax, cr0
;and eax, 0x7FFFFFFe   ; Disable paging bit & enable 16-bit pmode.
;mov cr0, eax
mov ecx, 0FFh
mov edi, 110000h
mov AL, '<'
rep stosb
STI
LIDT [IDTR]
hlt
IRET


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запись в память с выше 1MB (0010:0000h)
СообщениеДобавлено: 23 фев 2013, 15:50 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Ещё раз: адрес 0010:0000 для реального режима соответствует физическому адресу 100 -- т.е. очень далеко до границы первого мегабайта (который начинается с 100000). А в защищённом режиме зависит от того, что находится в дескрипторе соответствующем и загружен ли его селектор в нужный сегментный регистр.

ADD. По коду: первой же командой после переключения в защищённый режим должен быть дальний (межсегментный) переход, без которого не вступит в действие новый сегмент кода. А далее надо перезагружать сегментные регистры данных и стека -- по той же причине.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запись в память с выше 1MB (0010:0000h)
СообщениеДобавлено: 23 фев 2013, 15:54 
Аватара пользователя

Зарегистрирован: 16 апр 2010, 10:10
Сообщения: 320
Откуда: Псковская обл.
надо по линейному адресу типа mov 0x01000000,eax


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запись в память с выше 1MB (0010:0000h)
СообщениеДобавлено: 23 фев 2013, 16:10 

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 277
не понял так чего делать,
и под каким режимом?
Цитата:
ADD. По коду: первой же командой после переключения в защищённый режим должен быть дальний (межсегментный) переход, без которого не вступит в действие новый сегмент кода. А далее надо перезагружать сегментные регистры данных и стека -- по той же причине.

как то результат такой же
Код:
CLI
LGDT [GDTR]
in al, 0x92
or al, 2
out 0x92, al
in   al,70h
and   al,07FH
out   70h,al
wait
wait
wait
wait
wait
wait
wait
wait
wait
wait
wait
wait
wait
wait
wait
wait
wait
wait
wait
wait
wait
MOV EAX, CR0
OR  AL, 1
MOV CR0, EAX
JMP FAR 08h:PModeMain
PModeMain:
mov ax,8   
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
mov ecx, 0FFh
mov edi, 110000h
mov AL, '<'
mov [0x01000000],eax
mov [0x01000000+1],eax
mov [0x01000000+2],eax
mov [0x01000000+3],eax
rep stosb
STI
LIDT [IDTR]
hlt
IRET


вот так записть идёт в адрес 0000h
Цитата:
CLI
LGDT [GDTR]
a20_on
MOV EAX, CR0
OR AL, 1
MOV CR0, EAX
mov ax, 8
mov fs, ax
mov gs, ax
mov ax, 10h
mov ds, ax
mov es, ax
JMP FAR 08h:PModeMain
PModeMain:
mov ecx, 0FFh
mov edi, 110000h
mov AL, '<'
mov [100050h],eax
mov [100050h+4],eax
mov [100050h+8],eax
mov [100050h+12],eax
rep stosb
STI
hlt
IRET

a20 заменил макросом.


Последний раз редактировалось scuter 23 фев 2013, 16:55, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запись в память с выше 1MB (0010:0000h)
СообщениеДобавлено: 23 фев 2013, 16:36 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
По режимом Ofline или Online читаем про память.
А именно.
Сегментная модель организации памяти.
Плоская модель организации памяти.
Могут ли сегменты перекрываться?
Как эти можно организовать на x86?

Разобраться с понятием линейного адреса.
Логического адреса.
Физического адреса.

Логическом адрес имеет запись хххх:yyyy
Вопрос что означает хххх? В реальном и в защищенном режиме?
Что означает yyyy? В реальном и в защищенном режиме?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запись в память с выше 1MB (0010:0000h)
СообщениеДобавлено: 23 фев 2013, 17:23 

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 277
pavia писал(а):
По режимом Ofline или Online читаем про память.
А именно.
Сегментная модель организации памяти.
Плоская модель организации памяти.
Могут ли сегменты перекрываться?
Как эти можно организовать на x86?

Разобраться с понятием линейного адреса.
Логического адреса.
Физического адреса.

Логическом адрес имеет запись хххх:yyyy
Вопрос что означает хххх? В реальном и в защищенном режиме?
Что означает yyyy? В реальном и в защищенном режиме?

так всё таки что делать и в чём ошибка.


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

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


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

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


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

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