mov ax,5301h
xor bx,bx
int 15h ; подключиться к APM BIOS
mov ax,530fh
mov bx,1
mov cx,1
int 15h ; запустить сервис BIOS
mov ax,5307h
mov bx,1
mov cx,3
int 15h ; выключить компьютер
Как выключить ATX-блок из pm?
Я пишу ОС, отлаживая на VMWare, в общем, мне бы хотелось узнать, как можно выключить компьютер (виртуальный пока что) из защищенного режима? Например, windows 98 с этим справляется влегкую - VMWare гаснет, а как это мне сделать? Возможно ли это?
PS VMWare rulez;)
windows 98 использует APM (Advanced Power Management) BIOS
Код:
для защищенного режима, код измениться нужно будет вызвать 5302h или 5303h получишь адресса для базы сегмента данных, кода и точку входа и тд. Через точку входа будешь вызывать из защищенного режима. Подробнее в APM12.rtf.
Phantom-84 писал что выходит в реальный режим и там выключается через int 15h.
Просто так выключить не получится. Там есть одна хитрая вещь. Нужно сообщить версию "APM-драйвера", большую или равную версии APM, поддерживающей полное выключение компьютера.
Код:
mov ax,5301h
xor bx,bx
int 15h ; подключиться к APM BIOS
mov ax,530fh
mov bx,0FFFFh
mov cx,1
int 15h ; запустить сервис BIOS
mov ax,5307h
mov bx,0FFFFh
mov cx,3 ; здесь ошибка была поправил
int 15h ; выключить компьютер
xor bx,bx
int 15h ; подключиться к APM BIOS
mov ax,530fh
mov bx,0FFFFh
mov cx,1
int 15h ; запустить сервис BIOS
mov ax,5307h
mov bx,0FFFFh
mov cx,3 ; здесь ошибка была поправил
int 15h ; выключить компьютер
как альтернатива: перевести комп в реальный режим и оттуда выключить его
Pavia, дай мне тоже почитать... Я же когда-то писал на sysbin'е, что при использовании интерфейса версии 1.0 осуществить выключение редко когда получается... Здесь есть одна проблема: лично мне трудно найти компьютеры, в которых действительно имеется в наличии версия 1.0, но по спецификации последующих версий они будут работать, как версия 1.0 (не считая возможности вызова дополнительных функций), пока не будет вызвана функция APM Driver Version (0Eh) с указанием версии "APM-драйвера", большей или равной 1.1. У меня в оси выключение происходит при наличии версии 1.1 или выше с использованием идентификатора устройства 0001h. Тот фрагмент, который ты вывесил (с использованием идентификатора 0FFFFh без вызова функции с номером 0Eh), не приводит к нужному результату. Может быть, это происходит потому, что в действительности на компьютере имеется более новая версия. Мне бы почитать спецификацию версии 1.0, а то я стал сильно сомневаться, что этой версией вообще поддерживается полное выключение компьютера.
Последовательность вызовов именно такая при условии, что имеется версия 1.1 и выше, а управление получено от BIOS и ни какой софт еще не коннектился к данному интерфейсу. Но лично меня все-таки интересует информация по версии 1.0!
Насчет APM 1.0 спецификации на нее нет. Но есть на APM 1.2 в которой говорится о том что есть ID=FFFFh который использовался в APM 1.0 для обозночения всех устройств. Этот ID должен поддерживать и APM 1.2