mirror of
https://github.com/elliotnunn/supermario.git
synced 2024-11-26 01:49:19 +00:00
202 lines
6.6 KiB
Plaintext
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
|