Я пытаюсь внедрить APM в мою ОС.Хотя я могу включить APM в реальном режиме (используя int 0x15), как я могу переключать состояния питания в защищенном режиме?Мне нужно перейти в реальный режим или в режим vm86?Я прочитал документацию и запутался
Этот интерфейс позволяет драйверу APM защищенного режима вызывать функции APM BIOS без необходимости для первого переключения на реальный илирежим virtual-86 .
Итак, как я могу вызвать прерывание 0x15 (для использования функций APM), если я нахожусь в защищенном режиме?Я не могу этого сделать!
Я знаю, что APM немного устарел, но ACPI слишком сложен, сейчас я просто хочу, чтобы все было просто.
Кстати, вот мой код:
extern print_string
global set_power_stateoff
enableAPM:
; Installation check
mov ah, 0x53
mov al, 0x00
xor bx, bx
int 0x15
jc .error
; Conecting to protected mode APM interface
mov ah, 0x53
mov al, [0x3]
xor bx, bx
int 0x15
jc .error
; Enabling power mngm. for all devices
mov al, 0x53
mov ah, 0x08
mov bx, 0001h
mov cx, 0001h
int 0x15
jc .error ; if carry = 1, we have an error
.error:
mov si, apmerrno
call print_string
ret
set_power_stateoff:
; All devices off
mov ah, 0x53
mov al, 0x07
mov bx, 0x0001
mov cx, [0x0003]
int 0x15
section .data:
apmerrno: db "APM interface not supported! :(", 0x0A, 0x0D, 0
РЕДАКТИРОВАТЬ: Я обнаружил, что то, что называется "BIOS32", который используется для вызова прерываний BIOS из защищенного режима.Может использоваться для вызова процесса APM?