OSDev http://osdev.su/ |
|
запись в память с выше 1MB (0010:0000h) http://osdev.su/viewtopic.php?f=6&t=698 |
Страница 3 из 5 |
Автор: | pavia [ 24 фев 2013, 14:28 ] |
Заголовок сообщения: | Re: запись в память с выше 1MB (0010:0000h) |
Нормальный, правильный код. Ничего не упрощенный. Просто не поддерживает барахло времён 386 процессоров. |
Автор: | phantom-84 [ 24 фев 2013, 16:12 ] |
Заголовок сообщения: | Re: запись в память с выше 1MB (0010:0000h) |
Быстрое включение A20 может не работать не только на "барахле времён 386 процессоров". Кроме того, проверка на включение A20 нужна обязательно. Более правильный способ отключения NMI: Код: mov al,8Fh
out 70h,al in al,71h |
Автор: | pavia [ 24 фев 2013, 17:19 ] |
Заголовок сообщения: | Re: запись в память с выше 1MB (0010:0000h) |
Проверка нужна. Но задача её не подразумевала, поэтому писать не стал. Думаю автор и сам добавит. Цитата: Быстрое включение A20 может не работать В исходниках Award прошита жёстко. Так что мало вероятно. Да и во всех документациях я её видел. А оставшийся 0.1% систем будем отлавливать во время бета тестирования. Цитата: mov al,8Fh out 70h,al in al,71h Забыл про это поправлю. |
Автор: | scuter [ 25 фев 2013, 18:16 ] |
Заголовок сообщения: | Re: запись в память с выше 1MB (0010:0000h) |
блин, после включения Protected Mode отключается прерывания биоса int 13h что бы не было недопонимания поясню порядок действий, загружаю сегмент через int 13h включаю PM перенашу данные в адрес 110000h выключаю PM загружаю сегмент через int 13h <<--- и вот на этом месте появляется критическая ошибка и ничего не работает. |
Автор: | SII [ 25 фев 2013, 19:10 ] |
Заголовок сообщения: | Re: запись в память с выше 1MB (0010:0000h) |
Сервисы БИОС, за некоторыми исключениями, доступны только из реального режима. |
Автор: | scuter [ 25 фев 2013, 19:16 ] |
Заголовок сообщения: | Re: запись в память с выше 1MB (0010:0000h) |
SII писал(а): Сервисы БИОС, за некоторыми исключениями, доступны только из реального режима. так я из PM режима перехожу в RM режим или я не правильно это делаю. Код: mov ax, 28h ; 16-bit Protected Mode data selector.
mov ds, ax mov es, ax mov fs, ax mov gs, ax ;hlt ;ret ;iret mov EAX, CR0 AND EAX , 0x7FFFFFFe mov CR0, EAX use16 jmp far 0:GoRMode ; Perform Far jump to set CS. GoRMode: mov ax, 0 ; Reset segment registers to 0. mov ds, ax mov es, ax mov fs, ax mov gs, ax mov sp, 0x700 sti MOV BX, 7E00h MOV AX, 0201h MOV DL, 0 MOV DH, 0 MOV CX, 3 INT 13h |
Автор: | pavia [ 25 фев 2013, 19:16 ] |
Заголовок сообщения: | Re: запись в память с выше 1MB (0010:0000h) |
Цитата: загружаю сегмент через int 13h <<--- и вот на этом месте появляется критическая ошибка и ничего не работает. 1) Что за ошибка? Номер ошибки? Значения регистров в момент ошибки? 2) В какой строчке ошибка? адрес, код. В какой функции? В каком модуле находиться? 3) Как чем определил, что ошибка здесь? |
Автор: | pavia [ 25 фев 2013, 19:19 ] |
Заголовок сообщения: | Re: запись в память с выше 1MB (0010:0000h) |
Код: use16 jmp far 0:GoRMode ; Perform Far jump to set CS. А ты тут точно не напутал? Ихмо тут другой порядок нужен. Код: jmp far 0:GoRMode ; Perform Far jump to set CS.
use16 |
Автор: | scuter [ 25 фев 2013, 19:26 ] |
Заголовок сообщения: | Re: запись в память с выше 1MB (0010:0000h) |
pavia писал(а): Цитата: загружаю сегмент через int 13h <<--- и вот на этом месте появляется критическая ошибка и ничего не работает. 1) Что за ошибка? Номер ошибки? Значения регистров в момент ошибки? 2) В какой строчке ошибка? адрес, код. В какой функции? В каком модуле находиться? 3) Как чем определил, что ошибка здесь? всё просто если убрать sti перед этим кодом ошибки нет, Код: MOV BX, 7E00h MOV AX, 0201h MOV DL, 0 MOV DH, 0 MOV CX, 3 INT 13h то ошибки нет, если поставить ошибка есть, виртуальная машина говорит произошла критическая ошибка и выключается pavia писал(а): А ты тут точно не напутал? Ихмо тут другой порядок нужен. нет не попутал, когда снимаешь флаг PE начинает работать 16-битрый режим кода. |
Автор: | pavia [ 25 фев 2013, 19:32 ] |
Заголовок сообщения: | Re: запись в память с выше 1MB (0010:0000h) |
Цитата: нет не попутал, когда снимаешь флаг PE начинает радотать 16-битрый режим кода. Ошибаешься. Перезагрузка сегмента кода происходит после загрузки в CS нового значения. Это выполняется дальним прыжком. |
Страница 3 из 5 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |