mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2025-01-21 03:31:39 +00:00
0ba83392d4
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.
94 lines
2.9 KiB
Plaintext
94 lines
2.9 KiB
Plaintext
;__________________________________________________________________________________________________
|
|
;
|
|
; File: NetBootUtil.a
|
|
;
|
|
; Contains: Network booting utility routines.
|
|
;
|
|
; Written by: Patrick Dyson
|
|
;
|
|
; Copyright © 1989 by Apple Computer, Inc. All rights reserved.
|
|
;
|
|
; Change History (most recent first):
|
|
;
|
|
; <3> 12/28/89 SWC Fixed header and set tabs to 4.
|
|
; <2> 12/19/89 PD Adding to bbs
|
|
; <1.1> 12/12/89 PWD Added support for self-authenticating images
|
|
; <1.0> 10/30/89 PWD Adding to EASE
|
|
;__________________________________________________________________________________________________
|
|
|
|
CASE OBJ ; save case for C linker
|
|
myExtFSFilter
|
|
PROC EXPORT ; imported by netBoot.c
|
|
MOVEM.L A0-A4/D1-D2, -(SP) ; savem
|
|
CMP.B #$0F,ioTrap+1(A0) ; is this a MountVol call?
|
|
BNE @NotOurs
|
|
|
|
MOVE.W IODrvNum(A0), D0 ; pick up drive
|
|
CMP.W #4, D0 ; is this for us?
|
|
BNE @NotOurs
|
|
;
|
|
; go find the drive queue entry
|
|
;
|
|
LEA DrvQHdr,A2 ; get the drive queue header
|
|
MOVE.L qHead(A2),A1 ; start with first drive
|
|
CheckDrv
|
|
CMP.W dqDrive(A1),D0 ; our drive?
|
|
BEQ.S GotDrvNum ; yep, cruise
|
|
CMP.L qTail(A2),A1 ; no, are we at the end of the queue?
|
|
BEQ.S @NotOurs ; yes, we're hosed
|
|
MOVE.L qLink(A1),A1 ; point to next queue element
|
|
BRA.S CheckDrv ; go check it.
|
|
|
|
GotDrvNum ; in A1
|
|
CMP.W #dFSID, dQFSID(A1) ; ours?
|
|
BNE @NotOurs
|
|
|
|
MOVE.L dStorage(A1), D0 ; pick up driver globals (on end of entry)
|
|
MOVE.L A1, A4 ; save drive entry pointer
|
|
BEQ @Error
|
|
|
|
MOVE.L D0, A2 ; get globals pointer
|
|
SUB #ioQElSize,SP ; make a queue element
|
|
MOVE.L SP,A0 ; A0 -> queue element
|
|
MOVE #mountSysVol,csCode(A0) ; set control code
|
|
MOVE dProtoRefNum(A2),ioRefNum(A0) ; set driver refNum
|
|
_Control
|
|
BEQ.S @Good ; branch if no error
|
|
ADD #ioQElSize, SP ; restore stack
|
|
BRA @ControlError ; punt if error
|
|
|
|
@Good MOVE.L ioBuffer(A0), A1 ; pick up VCB pointer
|
|
MOVE.L A1, DefVCBPtr ; set as default volume
|
|
MOVE.L WDCBsPtr, A3
|
|
MOVE.L A1, WDVCBPtr+2(A3) ;
|
|
MOVEQ #2, D0 ; FSRtDirID
|
|
MOVE.L D0, WDDirID+2(A3) ;
|
|
CLR.L WDCatHint+2(A3)
|
|
CLR.L WDProcID+2(A3)
|
|
|
|
MOVE.L ioMisc(A0), A1 ; pick up drive queue pointer
|
|
|
|
MOVE dQFSID(A1), dQFSID(A4) ; set drive queue entry fsid
|
|
MOVE dQRefNum(A1), dQRefNum(A4) ; set driver refnum to handle calls
|
|
MOVE.B -3(A1), -3(A4) ; set flags
|
|
|
|
SUBQ #4, A1 ; point to buffer start
|
|
EXG A0, A1 ; set up for _Dispos
|
|
_DisposPtr ; nuke it
|
|
|
|
CLR.L dStorage(A4) ; wipe out reference to our storage
|
|
|
|
MOVE.L doldToExtFS(A2), ToExtFS ; restore ToExtFS (unhook ourselves)
|
|
|
|
MOVEQ #0, D0 ; set no error
|
|
ADD #ioQElSize, SP ; restore stack
|
|
BRA.S @Leave ; outta' here
|
|
|
|
@ControlError
|
|
@Leave
|
|
@NotOurs
|
|
MOVEM.L (SP)+, A0-A4/D1-D2 ; restorem
|
|
RTS
|
|
ENDP
|
|
END
|