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
|