【发布时间】:2019-07-06 07:18:53
【问题描述】:
我正在尝试在我的操作系统中实施 APM。虽然我可以在实模式下启用 APM(使用 int 0x15),但如何在保护模式下切换电源状态?我需要跳转到实模式还是vm86模式?我阅读了文档,我更加困惑
此接口允许受保护模式的 APM 驱动程序调用 APM BIOS 功能无需首先切换到真实或 虚拟 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 procmode调用吗?
【问题讨论】:
标签: x86 nasm osdev protected-mode