OSDev

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

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




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

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Код:
jmp far 0:GoRMode

Есть большое подозрения что баг в 0-селекторе сегмента. Перезагрузка сегмента кода происходит после загрузки в CS нового значения. Это выполняется дальним прыжком.

Т.е по факту мы имеем GP. Которая отправляет нас в RM. Честно не знаю как тут процессор себя поведёт.


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

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 277
я кажись понял в чём проблема,
после сброса флага PE код продолжает работать в 32-х битном дежиме т.е. получился BIG Real Mode или FLAT Real Mode
а как его перевести обратно в 16-битный режим.
http://wiki.osdev.org/Real_Mode
тут показано как войти в режим Real Mode только вот не понял эту фразу (16-bit Protected Mode data selector)


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

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Я бы отсюда взял бы код.
http://sasm.narod.ru/docs/pm/pm_in/chap_10.htm


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

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 277
pavia писал(а):
Я бы отсюда взял бы код.
http://sasm.narod.ru/docs/pm/pm_in/chap_10.htm

ага в boot он не помещается, и в добавок не работает.


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

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
scuter писал(а):
тут показано как войти в режим Real Mode только вот не понял эту фразу (16-bit Protected Mode data selector)
Вы бы сразу поясняли, что это не вы написали. Селектор 28h должен выбирать соответствующий дескриптор.

scuter писал(а):
pavia писал(а):
Я бы отсюда взял бы код.
http://sasm.narod.ru/docs/pm/pm_in/chap_10.htm

ага в boot он не помещается, и в добавок не работает.
Нефиг это тащить в "boot".


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

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Дескрипторы 16-разрядных сегментов:
Код:
DF_DATA         equ     10h
DF_CODE         equ     18h

DF_DUALACTION   equ     2

        set CODE16,$-GDT
        desc 0F8000h,0FFFFh,DF_CODE+DF_DUALACTION

        set DATA16,$-GDT
        desc 0F8000h,0FFFFh,DF_DATA+DF_DUALACTION

База (0F8000h) может быть любой. Еще не забудь флаг DF_PRESENT - у меня он добавляется дефолтом.


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

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 277
phantom-84 писал(а):
scuter писал(а):
тут показано как войти в режим Real Mode только вот не понял эту фразу (16-bit Protected Mode data selector)
Вы бы сразу поясняли, что это не вы написали. Селектор 28h должен выбирать соответствующий дескриптор.

писал его я только где то ошибся( может быть)
phantom-84 писал(а):
scuter писал(а):
pavia писал(а):
Я бы отсюда взял бы код.
http://sasm.narod.ru/docs/pm/pm_in/chap_10.htm

ага в boot он не помещается, и в добавок не работает.
Нефиг это тащить в "boot".

а куда ещё это тащить, кроме загрузочного фрагмента у меня ничего не запускается.
phantom-84 писал(а):
Дескрипторы 16-разрядных сегментов:
Код:
DF_DATA         equ     10h
DF_CODE         equ     18h

DF_DUALACTION   equ     2

        set CODE16,$-GDT
        desc 0F8000h,0FFFFh,DF_CODE+DF_DUALACTION

        set DATA16,$-GDT
        desc 0F8000h,0FFFFh,DF_DATA+DF_DUALACTION

База (0F8000h) может быть любой. Еще не забудь флаг DF_PRESENT - у меня он добавляется дефолтом.


а вот set и desc это какие то макросы?
и как выглядит флаговая часть
вот так?
Код:
code dw 0000111110011010b
data dw 0000111110010010b


пипец уже TSS_16 даже гружу но переходить в 16-битный режим не хочет
Код:
use16
   cli         ; Disable interrupts.
 
   ; Need 16-bit Protected Mode GDT entries!
   mov ax, 30h   ; 16-bit Protected Mode data selector.
   mov ds, ax
   mov es, ax
   mov fs, ax
   mov gs, ax
   ; Disable paging (we need everything to be 1:1 mapped).
   mov eax, cr0
   and eax, 0x7FFFFFFe   ; Disable paging bit & enable 16-bit pmode.
   mov cr0, eax
   mov ax, 0
   mov ds, ax
   mov es, ax
   mov ss, ax
   mov sp, 0x700
sti
MOV BX, 7E00h
MOV AX, 0201h      ; читать 1 сектор с диска
MOV DL, 0          ; читать с первого диска
MOV DH, 0          ; стартовый номер головки
MOV CX, 3          ; стартовый сектор с цилиндром
INT 13h

Код:

CODE2    TSS_16, (TSS_16_end-TSS_16), 0000111110000001b

Код:
TSS_16:
   .back_link   dw 0
   .SP0      dw 0
   .SS0      dw 0FFFFh
   .SP1      dw 0
   .SS1      dw 0FFFFh
   .SP2      dw 0
   .SS2      dw 0FFFFh
   .CR3      dw 0
   .IP         dw GoRMode
   .EFLAGS      dw 0
   .AX         dw 0
   .CX         dw 0
   .DX         dw 0
   .BX         dw 0
   .SP         dw 0
   .BP         dw 0
   .SI         dw 0
   .DI         dw 0
   .ES         dw 0
   .CS         dw 0
   .SS         dw 0
   .DS         dw 0
   .FS         dw 0
   .GS         dw 0
   .LDT      dw 0
   .offset_andT   dw 0
   .IOPB      dw 0
TSS_16_end:


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

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

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 277
во взял чужой GDT, результат аналогичный.
Код:
   NULL_descr   db      8 dup(0)
   CODE_descr   db      0FFh,0FFh,00h,00h,00h,10011010b,11001111b,00h
   DATA_descr   db      0FFh,0FFh,00h,00h,00h,10010010b,11001111b,00h
   VIDEO_descr   db      0FFh,0FFh,00h,80h,0Bh,10010010b,01000000b,00h


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

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

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 277
ура товарищи нашёл ошибку,
она была синтаксическая джамп писал так
jmp far 18:p_mode16
а надо было так
jmp far 18h:p_mode16


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

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
scuter писал(а):
phantom-84 писал(а):
scuter писал(а):
тут показано как войти в режим Real Mode только вот не понял эту фразу (16-bit Protected Mode data selector)
Вы бы сразу поясняли, что это не вы написали. Селектор 28h должен выбирать соответствующий дескриптор.

писал его я только где то ошибся( может быть)
Я про "16-bit Protected Mode data selector".

Цитата:
а куда ещё это тащить, кроме загрузочного фрагмента у меня ничего не запускается.
Так разберись сначала с этим.

В RM не используется TSS. В PM тоже не постоянно. Я тебе показал, что лимит должен быть равен 0FFFFh, так какого фига ты в 7-ом байте пишешь 0Fh!


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

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


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

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


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

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