Power OFF

Тема в разделе "WASM.ASSEMBLER", создана пользователем valeri, 3 июн 2005.

  1. valeri

    valeri New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2005
    Сообщения:
    59
    Адрес:
    Russia
    Может кто подскажет, как выполнить выключение питания компьютера на ассемблере, но не из под Windows. Я знаю, что это возможно в реальном режиме через int 15h. А можно ли выключить компьютер из защищенного режима.
     
  2. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229


    Да, можно и делается из ядра.
     
  3. Kreoton

    Kreoton New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2005
    Сообщения:
    5
    Адрес:
    Moscow
    >А можно ли выключить компьютер из защищенного режима.

    Само-собой.... могу даже показать свою прогу...

    >Да, можно и делается из ядра.

    Из какого ядра? Можно и через драйвер!
     
  4. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Из какого ядра? Можно и через драйвер!



    no comment
     
  5. Same

    Same New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2003
    Сообщения:
    114
    2 valeri только одно на ум приходит ACPI



    2 volodya

    no comment

    Если не ошибаюсь то у чела есть ОСь(своя) с подобием драиверов он наверное про них?
     
  6. halyavin

    halyavin New Member

    Публикаций:
    0
    Регистрация:
    13 май 2005
    Сообщения:
    252
    Адрес:
    Russia
    Если ОС под GPL, то посмотри код в MenuetOS. Файл shutdown.inc
     
  7. Same

    Same New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2003
    Сообщения:
    114
    2 halyavin Достали чесно говоря с менуетом - такая лажа там порой встречается в ядре версии 0.72 если не ошибаюсь в файле shutdown.inc для выключения компа совершался переход в режим реальных адресов и выключался комп через вышеупомянутый INT 15h (APM BOIS)
     
  8. halyavin

    halyavin New Member

    Публикаций:
    0
    Регистрация:
    13 май 2005
    Сообщения:
    252
    Адрес:
    Russia
    Ага, а по-другому тяжело написать будет. Пока что универсального способа сделать это через порты не придумано (точнее придумано, но держится в секрете соотвествующими фирмами). (Извиняюсь, что сразу не вспомнил как комп выключается в менуете - int 15h valeri, по-видимому, не интересует) Частных способов я, к сожалению, не помню. Возможно что-то про это есть на сайте АТОМОС или, по крайней мере, они эти занимались и могут подсказать как это делается.

    Есть в менуете и "лажа". Но люди постепенно занимаются ее исправлением (я в том числе). Попробуй еще по новее ядро посмотреть, желательно с русских сайтов, а не с menuetos.org.
     
  9. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    Выключить компьютер можно с помощью ACPI SoftOFF. Сам интерфейс ACPI -- стандарт, но вот базовый адрес портов ACPI можно менять. А вот способ замены/определения базы ACPI-портов (PMBASE) уже 'вендорозависимый'. Но, как правило, база PMBASE равна 4000h. За soft-off отвечает PMBASE + 4 регистр.

    В общем, лучше посмотри ACPI-спецификацию.
     
  10. valeri

    valeri New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2005
    Сообщения:
    59
    Адрес:
    Russia
    Про ACPI понятно, спасибо. Ну а если через int 15h, то как переключиться обратно в реальный режим.
     
  11. R_NEW

    R_NEW New Member

    Публикаций:
    0
    Регистрация:
    6 май 2005
    Сообщения:
    86
    Адрес:
    Россия
    В реальный режим можно переключиться несколькими способами. Вот пример:
    Код (Text):
    1.  
    2. ; в fs должен лежать селектор дескриптора с базой = 0
    3. mov word ptr fs:[467h],offset in_real_mode
    4. mov word ptr fs:[469h],cseg
    5. ;сегмент:смещение должны лежать по адресу 40:67
    6. cli
    7. mov al,8fh
    8. out 70h,al
    9. mov al,5
    10. out 71h,al
    11. ;устанавливаем код сброса
    12. mov al,0feh
    13. out 64h,al
    14. wait_reset:
    15. jmp wait_reset
    16. ;сбрасываем процессор
    17. in_real_mode:
    18. ;реальный режим
    19. ; ...
    20. int 15h
    21.  
     
  12. valeri

    valeri New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2005
    Сообщения:
    59
    Адрес:
    Russia
    За код спасибо.

    А что указывать в качестве cseg?
     
  13. R_NEW

    R_NEW New Member

    Публикаций:
    0
    Регистрация:
    6 май 2005
    Сообщения:
    86
    Адрес:
    Россия
    Код (Text):
    1.  
    2. cseg segment
    3. ; ...
    4. ; в fs должен лежать селектор дескриптора с базой = 0
    5. mov word ptr fs:[467h],offset in_real_mode
    6. mov word ptr fs:[469h],cseg
    7. ;сегмент:смещение должны лежать по адресу 40:67
    8. cli
    9. mov al,8fh
    10. out 70h,al
    11. mov al,5
    12. out 71h,al
    13. ;устанавливаем код сброса
    14. mov al,0feh
    15. out 64h,al
    16. wait_reset:
    17. jmp wait_reset
    18. ;сбрасываем процессор
    19. in_real_mode:
    20. ;реальный режим
    21. ; ...
    22. int 15h
    23. cseg ends
    24.  


    cseg - это сегментный адрес метки in_real_mode(адресация реального режима).
     
  14. valeri

    valeri New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2005
    Сообщения:
    59
    Адрес:
    Russia
    Я так понял, что должна использоваться адресация реального режима вида сегмент:смещение.

    А что если код in_real_mode располагается по адресу за пределами 0fffffh, например, 400000h?
     
  15. R_NEW

    R_NEW New Member

    Публикаций:
    0
    Регистрация:
    6 май 2005
    Сообщения:
    86
    Адрес:
    Россия
    valeri





    Понял правильно.



    В любом случае код, исполняемый в реальном режиме должен располагаться по физическому адресу меньше 0fffffh. Что-бы можно было ответить, скажи, что ты пишешь? Свою ось?
     
  16. Kreoton

    Kreoton New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2005
    Сообщения:
    5
    Адрес:
    Moscow
    >Если не ошибаюсь то у чела есть ОСь(своя) с подобием драиверов он наверное про них?

    Да, в моей оси как-раз драйвер ACPI отвечает за PowerOFF, до появления драйвера ACPI, мне приходилось переходить в V86 для выполнения пруцедуры с int 0x15.
     
  17. R_NEW

    R_NEW New Member

    Публикаций:
    0
    Регистрация:
    6 май 2005
    Сообщения:
    86
    Адрес:
    Россия
    Я про V86 не подумал. Наверно так легче.
     
  18. valeri

    valeri New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2005
    Сообщения:
    59
    Адрес:
    Russia
    Точно, я пишу свою ОС. И правда можно попробовать через V86.
     
  19. R_NEW

    R_NEW New Member

    Публикаций:
    0
    Регистрация:
    6 май 2005
    Сообщения:
    86
    Адрес:
    Россия
    Если ты пишешь свою ось,то что тебе мешает расположить код по физическому адресу меньше 0fffffh?
     
  20. valeri

    valeri New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2005
    Сообщения:
    59
    Адрес:
    Russia
    В принципе можно, но будут ли действовать преравания BIOS после входа в реальный режим?