boot3/Drivers/Backlight/backlightpatch.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

266 lines
7.5 KiB
Plaintext

;
; File: backlightpatch.a
;
; Contains: patches backlight
;
; Copyright: © 1991 by Apple Computer, Inc., all rights reserved.
;
; Change History (most recent first):
;
; <3> 10/28/91 SAM Rolled in Regatta file.
;
; Regatta Change History:
;
; <4> 8/19/91 SAM (ag) removed code to patch rom driver (not needed any more).
; <3> 8/8/91 SAM Changed the InstallProc conditional so that it only installs on
; original portables only.
; <2> 8/8/91 SAM (ag) Changed something. It's not clear what, exactly.
; <1> 5/15/91 SAM Split off from TERRORProj.
;
;
;
load 'StandardEqu.d'
include 'LinkedPatchMacros.a'
include 'HardwarePrivateEqu.a'
include 'ATalkEqu.a'
include 'UniversalEqu.a'
STRING PASCAL
;------------------------------------------------------------------------------------------
;
; BklightInstall - install and open the backlight driver if available
;
;------------------------------------------------------------------------------------------
SignatureReg equ $FC0200 ; address of backlight signature
SignatureAruba equ $A5 ; signature for aruba backlight
SignatureUpgrd equ $A3 ; signature for upgrade backlight
SignatureAsahi equ $AD ; signature for asahi backlight
DriverID equ -16511 ; id of driver resource
DriverType equ 'DRVR' ; resource type of driver
ROMs Portable
BklightInstall InstallProc (Portable)
TestFor hwCbPwrMgr
beq.s @exit ; if not power manager, exit
lea #'.Backlight',A1 ; load pointer to driver name
; is there a driver to patch ???
; bsr OpenDRVR ; attempt to open backlight driver (a1/d0)
; beq patchDriver
; should we install a driver from the system file ???
move.l #DriverType,d1 ; load resource type in d1
move.w #DriverID,d2 ; load resource id in d2
move.l #SignatureReg,a0 ; point a0 to signature register
cmpi.b #SignatureAruba,(a0) ; check for aruba signature
beq.s installDriver
cmpi.b #SignatureUpgrd,(a0) ; check for upgrade signature
beq.s installDriver
cmpi.b #SignatureAsahi,(a0) ; check for derringer signature
beq.s installDriver
@exit rts ; no backlight, exit
;------------------------------------------------------------------------------------------
;
; installDriver - get the backlight driver from the system file. install and open the
; driver in the first available slot after entry 48
;
; input
; a1 - pointer to pascal name string
; d1 - Resource Type
; d2 - Resource ID
;
; output
; none
;
; usage
; d a0 - utable ptr/dce pointer
; d a1 - Handle to resource
; d a2 - pointer to pascal name string
; d d0 - Resource Type
; d1 - Resource Type
; d2 - Resource ID
;
installDriver move.l a1,a2 ; move name ptr to a2 for safe keeping
bsr.s GetDetachRes ; get and detach resource (d1,d1/a1)
beq.s @exit ; exit if no handle
bsr.s FirstEntryFree ; get ref num of first free entry (/d0,d1)
_DrvrInstall ; create dce (d0/d0)
tst.l d0 ; test for error
bne.s @releaseDrvr ; ... exit if error
move.l UTableBase,a0 ; point to utable array
move.l (a0,d1),a0 ; get handle to dce in a3
move.l (a0),a0 ; get pointer to dce
move.l a1,dCtlDriver(a0) ; load driver
move.l (a1),a1 ; get pointer to driver
move.w drvrFlags(a1),dCtlFlags(a0) ; copy data to dce
move.w drvrDelay(a1),dCtlDelay(a0)
move.w drvrEMask(a1),dCtlEMask(a0)
move.w drvrMenu(a1),dCtlMenu(a0)
bset.b #dNeedLock,dCtlFlags+1(a0) ; set the handle bit
@openDrvr move.l a2,a1 ; load pointer to driver name
bsr.s OpenDRVR ; open the driver (a1/)
@exit rts
@releaseDrvr move.l a1,a0 ; move handle to a0
_disposHandle ; release the memory
rts
;------------------------------------------------------------------------------------------
;
; FirstEntryFree - Find the first free entry
;
; input
; none
;
; output
; d0.l - driver ref num
; d1.l - offset in table
;
; usage
; a0 - pointer to unit table base
; d0 - table address offset
;
;------------------------------------------------------------------------------------------
StartEntry equ (48-1) ; this avoids appletalk area
FirstEntryFree move.l a0,-(SP) ; save a0
@findEntry move.l UTableBase,a0 ; point to utable array
move.l #(StartEntry*4),d0 ; start at entry (48-1)
@testEntry addq.l #4,d0 ; increment to next entry
tst.l 0(a0,d0) ; test entry
bne.s @testEntry ; if != 0, next entry
@calcRefnum move.l d0,d1
lsr.l #2,d0 ; divide by 4 to get entry number
addq.l #1,d0 ; add 1 (refnum is -(entry number + 1)
neg.l d0 ; negate to get reference number
move.l (SP)+,a0 ; restore a0
rts
;------------------------------------------------------------------------------------------
;
; GetDetachRes - Gets and detaches a resource.
;
; input
; d1 Resource Type
; d2 Resource ID
;
; output
; a1 Handle to resource
;
; usage
; d a1 - Handle to resource
; d d0 - Resource Type
; d1 - Resource Type
; d2 - Resource ID
;
;------------------------------------------------------------------------------------------
GetDetachRes
SUBQ.L #4, SP ; For return address
MOVE.L D1, -(SP) ; Resource type
MOVE.W D2, -(SP) ; Resource ID
_GetResource
MOVE.L (SP), A1 ; Get resource handle to return
_DetachResource
MOVE.L A1,D0 ; Set result code
RTS
;------------------------------------------------------------------------------------------
;
; OpenDRVR - routine used to open a driver
;
; input
; a1 - pointer to driver name
;
; output
; d0.l - refnum/ioResult of open
;
; usage
; a0 - pointer to iopb
; a1 - pointer to driver name
;
;------------------------------------------------------------------------------------------
OpenRegs reg A0-A3/D1-D2
OpenDRVR MOVEM.L OpenRegs,-(SP)
SUB.W #ioQElSize,SP ; Allocate IO stack frame
MOVE.L SP,A0 ; set a0 to point to the pb
MOVE.L A1,ioVNPtr(A0) ; load pointer to name
MOVE.B #fsCurPerm,ioPermssn(A0); set permission (not used)
_Open
MOVE.W ioRefNum(A0),D0 ; return ioRefNum (D0.W:HI)
SWAP D0 ; move ioRefNum HI
MOVE.W ioResult(A0),D0 ; return result (D0.W:LO)
ADD.W #ioQElSize,SP ; Release stack frame
TST.W D0 ; set condition codes based on errors
MOVEM.L (SP)+,OpenRegs
RTS ; Sucess returned in status
EndProc
;------------------------------------------------------------------------------------------
;
; NewBKLTHeader - new header for backlight driver
;
;------------------------------------------------------------------------------------------
BacklightOpen ROMBind (IIci,$e63f2) ; <r8> djw
BacklightPrime ROMBind (IIci,$e63f6) ; <r8> djw
BacklightControl ROMBind (IIci,$e63fa) ; <r8> djw
BacklightStatus ROMBind (IIci,$e63fe) ; <r8> djw
BacklightClose ROMBind (IIci,$e6402) ; <r8> djw
NewBKLTHeader PROC
dc.w $4e00 ; write,ctl,status,needslock
dc.w 0,0,0
dc.w OpenPatch-NewBKLTHeader ; open
dc.w PrimePatch-NewBKLTHeader ; prime
dc.w CtlPatch-NewBKLTHeader ; control
dc.w StatusPatch-NewBKLTHeader ; status
dc.w ClosePatch-NewBKLTHeader ; close
DC.B '.Backlight'
align 2
; Entry points back into rom
OpenPatch jmpROM BacklightOpen ; open the driver
PrimePatch jmpROM BacklightPrime
CtlPatch jmpROM BacklightControl ; continue in rom
StatusPatch jmpROM BacklightStatus
ClosePatch jmpROM BacklightClose
EndProc
End