OSDev http://osdev.su/ |
|
Гугл подвел... Ищется функция scan2ascii... http://osdev.su/viewtopic.php?f=6&t=920 |
Страница 2 из 3 |
Автор: | scuter [ 04 май 2014, 23:20 ] |
Заголовок сообщения: | Re: Гугл подвел... Ищется функция scan2ascii... |
Mirmik писал(а): Как из защищенного режима выполнить перезагрузку? да мне это тоже интересно, есть варианты 1 - смотри ACPI 2 - переводи обратно в режим RM и выключай. |
Автор: | Nable [ 05 май 2014, 01:15 ] |
Заголовок сообщения: | Re: Гугл подвел... Ищется функция scan2ascii... |
Mirmik писал(а): Вопрос в догонку. Как из защищенного режима выполнить перезагрузку? Перезагрузиться просто: 1) если есть клавиатурный контроллер (8042) - через него можно 2) ещё можно triple-fault устроить 3) ещё можно посмотреть чего делает ключ параметр reboot=pci у линуха. Вот выключать уже куда сложнее, нужно поддерживать ACPI. |
Автор: | Himik [ 05 май 2014, 02:33 ] |
Заголовок сообщения: | Re: Гугл подвел... Ищется функция scan2ascii... |
Есть ещё системный порт 92h: in al, 92h or al, 1 out 92h, al Я рекомендую выполнять цепочку процедур "перезагрузки", тоесть после этого способа сразу вызывать другой (с помощью порта клавиатуры) и т.д. пока комп не уйдёт в перезагрузку. |
Автор: | Nable [ 05 май 2014, 02:57 ] |
Заголовок сообщения: | Re: Гугл подвел... Ищется функция scan2ascii... |
Himik писал(а): Есть ещё системный порт 92h: Где-то, может, и есть, но похоже что далеко не везде, а писать в нереализованные/нестандартные порты - идея плохая. Например, народ пишет что на машинах без 8042 попытка работы с портами 0x60/0x64 приводит к зависанию.in al, 92h or al, 1 out 92h, al Я рекомендую выполнять цепочку процедур "перезагрузки", тоесть после этого способа сразу вызывать другой (с помощью порта клавиатуры) и т.д. пока комп не уйдёт в перезагрузку. Но да, в случаях когда способов несколько - есть последовательности в которых способы лучше пробовать. Касательно ребута: http://wiki.osdev.org/Reboot Там и про выключение немного есть: http://wiki.osdev.org/Category:Power_management |
Автор: | pavia [ 05 май 2014, 05:30 ] |
Заголовок сообщения: | Re: Гугл подвел... Ищется функция scan2ascii... |
Ну не знаю где автор строк нашёл машину без 8042 это нонценс!! И там явно уже специфичные вещи. Но да способ этот устаревший. И насколько знаю МС от него давно отошла в сторону 92 порта. Есть ещё PCI перезагрузка. Она более полная перезагружает почти все устройства компьютера. |
Автор: | Mirmik [ 05 май 2014, 10:08 ] |
Заголовок сообщения: | Re: Гугл подвел... Ищется функция scan2ascii... |
А как перезагружаться правильно?... Ну, например, как винда, или линух... З.Ы. У некоего линуха нашел reboot.c, но там текста больно много... |
Автор: | phantom-84 [ 05 май 2014, 10:12 ] |
Заголовок сообщения: | Re: Гугл подвел... Ищется функция scan2ascii... |
У меня сброс через клавиатурный контроллер – основной способ, через системный порт A – дополнительный. Для установки шлюза A20 аналогично. Проблем не наблюдал. Mirmik, если вы еще не осилили ACPI, то мой способ вполне нормальный. |
Автор: | Mirmik [ 05 май 2014, 12:06 ] |
Заголовок сообщения: | Re: Гугл подвел... Ищется функция scan2ascii... |
phantom-84 писал(а): У меня сброс через клавиатурный контроллер – основной способ, через системный порт A – дополнительный. Для установки шлюза A20 аналогично. Проблем не наблюдал. Mirmik, если вы еще не осилили ACPI, то мой способ вполне нормальный. К... Но, наверное, ACPI всё же надо осилить... |
Автор: | эмбрион [ 06 май 2014, 12:11 ] |
Заголовок сообщения: | Re: Гугл подвел... Ищется функция scan2ascii... |
Mirmik писал(а): Не могу найти функцию scan2ascii... Рекомендую познакомиться с готовыми ОС с открытым кодом. Есть вполне нормально документированные экземпляры - оттуда и можно содрать нужные функции. Ну или как минимум познакомиться с нормально работающим драйвером.
|
Автор: | Bargest [ 07 май 2014, 20:38 ] |
Заголовок сообщения: | Re: Гугл подвел... Ищется функция scan2ascii... |
У меня такой вариант (через ACPI): Код: ;----------------------------------------------------------------
; Reboots computer ;---------------------------------------------------------------- RebootFunc: ; Old school: ; mov al, 0xFE ; out 0x64, al ; ; New school: RESET_REG = 116 ; 12 bytes RESET_VAL = 128 ; 1 byte struc ResetRegStruc A { virtual at A .SpaceID db 0 .BitWidth db 0 .BitOffset db 0 .AccessWidth db 0 .Address dq 0 end virtual } ResetReg ResetRegStruc rdi cli mov rdi, [FADTAddr] ; FADT from ACPI xor rax, rax mov al, [rdi+RESET_VAL] ; Load Reset Value add rdi, RESET_REG mov rdx, [ResetReg.Address] mov cl, [ResetReg.SpaceID] cmp cl, 0 ; Memory space jnz @f mov [rdx], al @@: cmp cl, 1 ; IO space jnz @f out dx, al @@: ; PCI CFG Space cmp cl, 2 jnz @f mov r14b, al ; Value mov ebx, edx shr ebx, 24 ; Dev (ddddd) and bl, 1Fh shl bl, 3 mov eax, edx shr eax, 16 and al, 7 ; Func (fff) or bl, al ; dddddfff shl bx, 8 ; move to bh xor ax, ax ; Byte count and bus mov bl, dl ; Addr call PCIRegWrite @@: jmp $ |
Страница 2 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |