boot3/Libs/InterfaceSrcs/Power.a
Elliot Nunn 5b0f0cc134 Bring in CubeE sources
Resource forks are included only for .rsrc files. These are DeRezzed into their data fork. 'ckid' resources, from the Projector VCS, are not included.

The Tools directory, containing mostly junk, is also excluded.
2017-12-26 10:02:57 +08:00

202 lines
6.6 KiB
Plaintext

;
; File: Power.a
;
; Contains: Power Manager glue
;
; Written by: Dennis Hescox
;
; Copyright: © 1990-1992 by Apple Computer, Inc. All rights reserved.
;
; Change History (most recent first):
;
; <SM3> 11/6/92 SWC Rewrote all the routines (read: cleanup).
; <SM2> 10/28/92 SWC Changed INCLUDEs to a LOAD of StandardEqu.d.
; <6> 11/15/91 JL Changed MoveA.L RBuffer(A6) to MoveA.L PmgrRPtr(A0) after the
; trap call to put an address in A0 instead of data.
; <5> 11/12/91 JL stb: allocated receive buffers for BatteryStatus, ModemStatus,
; and GetWUTime.
; <4> 1/22/91 ag MSH: Moved Power Manager command equates directly into this file
; from PowerEqu.a to make them private.
; <3> 1/22/91 ag MSH - Moved Power Manager command equates directly into this
; file from PowerEqu.a to make them private.
;
LOAD 'StandardEqu.d'
; Power Manager command block
pmCommandRec RECORD 0,INCREMENT
pmCommand DS.W 1 ; command
pmLength DS.W 1 ; length of data to send
pmSBuffer DS.L 1 ; pointer to send buffer
pmRBuffer DS.L 1 ; pointer to receive buffer
pmData DS.L 1 ; data
pmBlkSize EQU *-pmCommandRec
ENDR
; commands for Power Manager parameter block
modemRead EQU $58 ; internal modem setup
batteryRead EQU $68 ; battery/charger level and status
setWakeUp EQU $80 ; set WakeUp timer
disableWakeUp EQU $82 ; disable WakeUp timer
readWakeUp EQU $88 ; read WakeUp timer
;_______________________________________________________________________________________
;
; FUNCTION DisableWUTime: OSErr
;
; This function will disable the wakeup timer on portable Macintoshes.
;
; on entry: 4(SP) - space for function result
; 0(SP) - return address
;_______________________________________________________________________________________
DisableWUTime PROC EXPORT
WITH pmCommandRec
CLR.L -(SP) ; pmRBuffer (none)
CLR.L -(SP) ; pmSBuffer (none)
CLR.W -(SP) ; pmLength (no data to send)
MOVE.W #disableWakeUp,-(SP) ; pmCommand
MOVEA.L SP,A0 ; point to the parameter block
_PMgrOp ; disable the timer
LEA pmRBuffer+4(SP),SP ; toss the parameter block
MOVE.W D0,4(SP) ; return the result
RTS
ENDP
;_______________________________________________________________________________________
;
; FUNCTION GetWUTime(VAR WUTime: LONGINT; VAR WUFlag: Byte): OSErr
;
; This function will return the current setting of the wakeup timer on portable
; Macintoshes. The time returned is the number of seconds since Jan 1, 1904.
;
; on entry: 12(SP) - space for function result
; 8(SP) - pointer to ÔWUTimeÕ
; 4(SP) - pointer to ÔWUFlagÕ
; 0(SP) - return address
;_______________________________________________________________________________________
GetWUTime PROC EXPORT
WITH pmCommandRec
MOVEA.L (SP)+,A1 ; pop the return address
SUBQ.W #4+2,SP ; make space for wakeup time + flags
MOVE.L SP,-(SP) ; pmRBuffer
CLR.L -(SP) ; pmSBuffer (none)
CLR.W -(SP) ; pmLength (no data to send)
MOVE.W #readWakeUp,-(SP) ; pmCommand
MOVEA.L SP,A0 ; point to the parameter block
_PMgrOp ; read the timer
LEA pmRBuffer+4(SP),SP ; toss the parameter block
MOVE.L (SP)+,D1 ; get the timer setting
MOVE.B (SP)+,D2 ; and the flags
MOVEA.L (SP)+,A0 ; get the pointer to ÔWUFlagÕ
MOVE.B D2,(A0) ; and update it
MOVEA.L (SP)+,A0 ; get the pointer to ÔWUTimeÕ
MOVE.L D1,(A0) ; and update it
MOVE.W D0,(SP) ; save the result
JMP (A1)
ENDP
;_______________________________________________________________________________________
;
; FUNCTION SetWUTime(WUTime: LONGINT): OSErr
;
; This function will set the wakeup timer on portable Macintoshes. The time passed
; is the number of seconds since Jan 1, 1904.
;
; on entry: 8(SP) - space for function result
; 4(SP) - WUTime
; 0(SP) - return address
;_______________________________________________________________________________________
SetWUTime PROC EXPORT
WITH pmCommandRec
MOVE.L (SP)+,A1 ; pop the return address
MOVE.L SP,-(SP) ; pmSBuffer (points to WUTime on the stack)
MOVE.W #4,-(SP) ; sending 4 bytes
MOVE.W #setWakeUp,-(SP) ; command
MOVEA.L SP,A0 ; point to the parameter block
_PMgrOp ; send the command
LEA pmRBuffer+4(SP),SP ; toss the parameter block
MOVE.W D0,(SP) ; stuff the function result
JMP (A1)
ENDP
;_______________________________________________________________________________________
;
; FUNCTION BatteryStatus(VAR status: Byte; VAR power: Byte): OSErr
;
; This function will return the current status of the battery on portable Macintoshes.
;
; on entry: 12(SP) - space for function result
; 8(SP) - pointer to ÔstatusÕ
; 4(SP) - pointer to ÔpowerÕ
; 0(SP) - return address
;_______________________________________________________________________________________
BatteryStatus PROC EXPORT
WITH pmCommandRec
MOVE.L (SP)+,A1 ; pop the return address
CLR.L -(SP) ; buffer for flags, power, temperature (, pad)
MOVE.L SP,-(SP) ; pmRBuffer
CLR.L -(SP) ; pmSBuffer (none)
CLR.W -(SP) ; pmLength (no data to send)
MOVE.W #batteryRead,-(SP) ; command
MOVEA.L SP,A0 ; point to the parameter block
_PMgrOp ; get battery info
LEA pmRBuffer+4(SP),SP ; toss the parameter block
MOVEA.L SP,A0 ; point to the buffer
MOVE.B (A0)+,D1 ; get the flags
MOVE.B (A0)+,D2 ; and battery power
ADDQ.W #4,SP ; toss the buffer
MOVEA.L (SP)+,A0 ; get the pointer to ÔpowerÕ
MOVE.B D2,(A0) ; and update it
MOVEA.L (SP)+,A0 ; get the pointer to ÔstatusÕ
MOVE.B D1,(A0) ; and update it
MOVE.W D0,(SP) ; save the result
JMP (A1)
ENDP
;_______________________________________________________________________________________
;
; FUNCTION ModemStatus(VAR status: Byte): OSErr
;
; This function will return the current setting of the modem on portable Macintoshes.
;
; on entry: 8(SP) - space for function result
; 4(SP) - pointer to ÔstatusÕ (receive buffer)
; 0(SP) - return address
;_______________________________________________________________________________________
ModemStatus PROC EXPORT
WITH pmCommandRec
MOVE.L (SP)+,A1 ; pop the return address
CLR.L -(SP) ; no send buffer
CLR.W -(SP) ; no data to send
MOVE.W #modemRead,-(SP) ; command
MOVEA.L SP,A0 ; point to the parameter block
_PMgrOp ; send the command
LEA pmRBuffer+4(SP),SP ; toss the parameter block
MOVE.W D0,(SP) ; stuff the function result
JMP (A1)
ENDP
END