1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
; ****************************************************************************
;
; poweroff.asm
;
; Copyright 2009 Sebastian Herbszt
;
; APM poweroff module.
;
; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation, Inc., 53 Temple Place Ste 330,
; Boston MA 02111-1307, USA; either version 2 of the License, or
; (at your option) any later version; incorporated herein by reference.
;
; ****************************************************************************
absolute 0
pspInt20: resw 1
pspNextP: resw 1
resb 124
pspCmdLen: resb 1
pspCmdArg: resb 127
section .text
org 0x100
_start:
mov ax,5300h ; APM Installation Check (00h)
xor bx,bx ; APM BIOS (0000h)
int 15h
jnc check_sig
mov bx, msg_notpresent
jmp error
check_sig:
cmp bx,504Dh ; signature 'PM'
je check_ver
mov bx, msg_notpresent
jmp error
check_ver:
cmp ax,0101h ; Need version 1.1+
jae check_state
mov bx, msg_notsup
jmp error
check_state:
test cx,8 ; bit 3 APM BIOS Power Management disabled
jz connect
mov bx, msg_pmdisabled
jmp error
connect:
mov ax,5301h ; APM Real Mode Interface Connect (01h)
xor bx,bx ; APM BIOS (0000h)
int 15h
jnc connect_ok
mov bx, msg_connect
jmp error
connect_ok:
mov ax,530Eh ; APM Driver Version (0Eh)
xor bx,bx ; APM BIOS (0000h)
mov cx,0101h ; APM Driver version 1.1
int 15h
jnc apm0101_check
mov bx, msg_notsup
jmp error
apm0101_check:
cmp cx,0101h ; APM Connection version
jae apm0101_ok
mov bx, msg_notsup
jmp error
apm0101_ok:
mov ax,5307h ; Set Power State (07h)
mov bx,0001h ; All devices power managed by the APM BIOS
mov cx,0003h ; Power state off
int 15h
jnc off
mov bx, msg_failed
error:
mov ax,2
int 22h
off:
ret
msg_notpresent: db 'APM not present.',0dh,0ah,0
msg_notsup: db 'APM 1.1+ not supported.',0dh,0ah,0
msg_pmdisabled: db 'Power management disabled.',0dh,0ah,0
msg_connect: db 'APM RM interface connect failed.',0dh,0ah,0
msg_failed: db 'Power off failed.',0dh,0ah,0
|