sys7.1-doc-wip/Tidbits/BootAlerts.a

449 lines
15 KiB
Plaintext

;
; File: BootAlerts.a
;
; Contains: deep shit alerts for booting
;
; Copyright: © 1986-1991 by Apple Computer, Inc., all rights reserved.
;
; This file is used in these builds: BigBang
;
; Change History (most recent first):
;
; <17> 6/12/91 LN removed #include 'HardwareEqu.a'
; <16> 6/11/91 gbm Take out conditional for Regatta
; <15> 4/2/91 SAM Changed the Boot strings for the Regatta build.
; <14> 3/4/91 dba dty: get rid of SysVers conditionals
; <13> 1/14/91 stb & JDR; reword MacsBug installed and Extensions off.
; <12> 12/11/90 stb tweak message extensions disabled
; <11> 8/6/90 stb add message for “System x.x needs more memory to start up.” for
; 7.0 and later
; <10> 8/1/90 SAM Reverted MissingPatchMessage to the way it was in rev 7 of this
; file. See brain-fade.
; <9> 7/30/90 SAM Reworded MissingPatchMessage (again).
; <8> 7/30/90 SAM Reworded MissingPatchMessage.
; <7> 7/10/90 BA Fixed length of dssSwitch button string. This fixes some bugs
; related to the 24/32 bit mode alert.
; <6> 5/30/90 dba capitalize the D in “Extensions Disabled.”; change RAM parity
; message to match the messages in UserAlerts
; <5> 4/10/90 dba added message for “Extensions disabled.”; added alert for “need
; to write boot blocks, but the disk is write-protected”; got rid
; of a few alerts for 7.0 that are only used from UserAlerts.a
; since the boot code cleanup makes the loading time consistent
; between different ROMs
; <4> 1/30/90 dba get rid of warnings when assembling; put in fancier messages;
; conditionalize out stuff needed only on systems that do not
; support 32-bit addressing
; <3> 1/12/90 CCH added include of “HardwarePrivateEqu.a”
; <2> 12/28/89 dba changed from PROC to MAIN so we get dead code stripping
; <1.4> 10/11/89 dba changed IDs to conform with UserAlerts; improved icons
; <1.3> 8/15/89 dba NEEDED FOR 6.0.4: expunged references to “32-Bit Mode” for the
; greater good of humanity
; <1.2> 8/11/89 dba NEEDED FOR 6.0.4: changed text for alerts; improved ShutDown
; code used when ShutDown Manager is not present; added duplicate
; button lists to handle case where ResumeProc is not NIL; added
; system version to text of some alerts
; <1.1> 5/15/89 CCH Added alert for memory parity error. (#101)
; <1.0> 11/16/88 CCH Added to EASE.
; 3/20/88 EKH Added SysErr #98 (dsNoPatch) for RomNoPatch, so it has it's very
; own SysErr number. Also, I changed the proc ID from 90 to 91 to
; match UserAlerts.a <EKH 20Mar88 S429> Also, modified proc ID 80
; to seperate the eject code so I use it. This is paralleled in
; the UserAlerts.a code.
; 1/17/88 EKH Added Alert for "needed resource can't be loaded" error at boot
; time (SysErr #99). This error is generated by PTCH id -1, and
; anyone else who can not load a "do or die" resource from the
; system file. <EKH 14Jan88 S359> ALSO, I documented the file so
; it is MUCH easier to add SysErrs!
; 3/30/87 jdt Removed the HD20 Startup alert. It now resides in the user alert
; table.
; 7/23/86 DLD Converted source to MPW.
;
string asis
load 'StandardEqu.d'
include 'ShutDownEqu.a'
include 'HardwarePrivateEqu.a'
ShutDownTrapNumber equ $95 ; _ShutDown
UnimplementedTrapNumber equ $9F ; _Unimplemented
macro
dcSystemVersion
gblc &SysVersion
dc.b '&SysVersion'
endm
; ——————————————————————————————————————————————————————————————————————————————————————————————————
BootAlerts main
; ——————————————————————————————————————————————————————————————————————————————————————————————————
;
; Icon numbering:
;
; The internal icon numbers are also used as resource IDs for color icons,
; so they must be assigned like all other reserved resource IDs.
; Also, like all the other numbers below, they must steer clear of system errors.
; For this reason we use negative numbers lower than -10000.
dsiBomb equ -16397
dsiStop equ -16400
dsiPicasso equ -16396
; ——————————————————————————————————————————————————————————————————————————————————————————————————
;
; Numbering scheme:
;
; These IDs must not conflict with actual system errors.
; For this reason, we use negative numbers lower than -10000 (we start at -20000).
; for text
dstMissingPatch equ -20000
dstParityError equ -20001
dstSystemDamaged equ -20002
dst32BitMode equ -20100
dstGreeting equ -20101
dstMacsBugInstalled equ -20102
dstOldSystem equ -20103
dstNeedToWriteBootBlocks equ -20104
dstExtensionsDisabled equ -20105
dstNotEnoughRAMToBoot equ -20106
; for procedures
dspRestart equ -21000
dspSwitch equ -21100
; for button lists
dsbRestart equ -22001 ; also uses -22000
dsb32BitMode equ -22101 ; also uses -22100
; for button strings
dssRestart equ -23000
dssSwitch equ -23100
; ——————————————————————————————————————————————————————————————————————————————————————————————————
;
; Entry count: bump 1 for each new item.
NumEntries: set 21 ; 8 alerts, 2 icons, 7 texts, 1 proc, 2 button lists, 1 button string
dc.w NumEntries
; ——————————————————————————————————————————————————————————————————————————————————————————————————
;
; Alert definitions.
;
; (word) error ID
; (word) 10 (length of remaining items)
; (word) primary text definition ID
; (word) secondary text definition ID
; (word) icon definition ID
; (word) procedure definition ID
; (word) button definition ID
; greetings
dc.w dsGreeting,10,dstGreeting,0,dsiPicasso,0,0
dc.w dsMacsBugInstalled,10,dstMacsBugInstalled,0,0,0,0
dc.w dsDisassemblerInstalled,10,0,0,0,0,0
dc.w dsExtensionsDisabled,10,dstExtensionsDisabled,0,0,0,0
; errors
dc.w dsOldSystem,10,dstOldSystem,0,dsiStop,0,dsbRestart
dc.w dsNeedToWriteBootBlocks,10,dstNeedToWriteBootBlocks,0,dsiStop,0,dsbRestart
; errors in both BootAlerts and UserAlerts
; (boot 2 resource fixes it so that only BadPatch is needed before UserAlerts take over)
dc.w dsBadPatch,10,dstSystemDamaged,0,dsiStop,0,dsbRestart
dc.w dsNotEnoughRAMToBoot,10,dstNotEnoughRAMToBoot,0,dsiStop,0,dsbRestart
; ——————————————————————————————————————————————————————————————————————————————————————————————————
;
; Text definitions.
;
; (word) text definition ID
; (word) length of rest of definition
; (long) location (point) - global coordinates
; (??) ASCII text
; (byte) null character
GreetingMessage
dc.w dstGreeting,@end-@rest
@rest
dc.w 108,192
DC.B 'Welcome to Macintosh.'
DC.B 0
align
@end
MacsBugInstalledMessage
dc.w dstMacsBugInstalled,@end-@rest
@rest
dc.w 126,192
DC.B 'Debugger installed.'
DC.B 0
align
@end
ExtensionsDisabledMessage
dc.w dstExtensionsDisabled,@end-@rest
@rest
dc.w 126,192
DC.B 'Extensions off.'
DC.B 0
align
@end
OldSystemMessageMessage
dc.w dstOldSystem,@end-@rest
@rest
dc.w 94,114
dc.b 'This startup disk will not work on this Macintosh/'
dc.b 'model. Use the latest Installer to update this disk/'
dc.b 'for this model. (System '
dcSystemVersion
dc.b ' does not work on/'
dc.b 'this model; you need a newer version that does.)'
dc.b 0
align
@end
NeedToWriteBootBlocksMessage
dc.w dstNeedToWriteBootBlocks,@end-@rest
@rest
dc.w 94,114
dc.b 'This disk must be unlocked in order to perform/'
dc.b 'one-time housekeeping. If you wish to use this/'
dc.b 'disk to start your Macintosh, unlock it.'
dc.b 0
align
@end
SystemDamagedMessage
dc.w dstSystemDamaged,@end-@rest
@rest
dc.w 94,114
DC.B 'The “System” file on this startup disk may be/'
dc.b 'damaged. The Installer can be used to repair this/'
dc.b 'disk.'
DC.B 0
align
@end
NotEnoughRAMToBootMessage
dc.w dstNotEnoughRAMToBoot,@end-@rest
@rest
dc.w 94,114
dc.b 'System '
dcSystemVersion
dc.b ' needs more memory to start up.'
dc.b 0
align
@end
; ——————————————————————————————————————————————————————————————————————————————————————————————————
;
; icon definitions
;
; (word) icon definition ID (used as resource ID for cicn)
; (word) length of rest of definition
; (8 bytes) location (rectangle) - global coordinates
; (128 bytes) icon data
; Picasso Macintosh icon
PicassoIcon
dc.w dsiPicasso,@end-@rest
@rest
dc.w 89,56,121,88
dc.l $0007FF80, $00080000, $00087E20, $00080120
dc.l $00080120, $04080120, $0C080120, $08080120
dc.l $66080120, $99080120, $8108FE20, $80080020
dc.l $80080020, $4A001F20, $34000020, $00FC0020
dc.l $03000000, $0401FFF0, $04000008, $03E01FE4
dc.l $00100552, $001000A9, $00200001, $002001FE
dc.l $00180000, $00040000, $0000C000, $00012000
dc.l $00025000, $00008800, $00000800, $00001000
@end
; stop icon
DSStopIcon
dc.w dsiStop,@end-@rest
@rest
dc.w 81,60,113,92
dc.l $00FFFF00, $01FFFF80, $03FFFFC0, $07FEFFE0
dc.l $0FFC7FF0, $1FEC67F8, $3FC447FC, $7FC447FE
dc.l $FF4447FF, $FE4447FF, $FE4447FF, $FE4447FF
dc.l $FE4447FF, $FE4447FF, $FE40071F, $FE00061F
dc.l $FE00061F, $FE00043F, $FE00003F, $FE00007F
dc.l $FE00007F, $FE0000FF, $FE0000FF, $FE0001FF
dc.l $FE0001FF, $7E0403FE, $3F0207FC, $1FFFFFF8
dc.l $0FFFFFF0, $07FFFFE0, $03FFFFC0, $01FFFF80
@end
; ——————————————————————————————————————————————————————————————————————————————————————————————————
;
; button lists
;
; (word) button definition ID
; (word) length of rest of definition
; (word) number of buttons
; (word) string ID
; (4 words) button location (rectangle)
; (word) procedure definition ID
; Restart button list
; this is the copy used if there is no ResumeProc
; note that these two are identical
RestartButtons1
dc.w dsbRestart,@end-@rest
@rest
dc.w 1
dc.w dssRestart,154,404,174,463,dspRestart
@end
; Restart button list
; this is the copy used if there is a ResumeProc
; note that these two are identical
RestartButtons2
dc.w dsbRestart+1,@end-@rest
@rest
dc.w 1
dc.w dssRestart,154,404,174,463,dspRestart
@end
; ——————————————————————————————————————————————————————————————————————————————————————————————————
;
; button strings
;
; (word) string ID
; (word) length of string (rounded to next word)
; (??) ASCII characters
;
dc.w dssRestart,8
DC.B 'Restart '
; ——————————————————————————————————————————————————————————————————————————————————————————————————
;
; Procedures.
;
; (word) procedure definition ID
; (word) length of rest of definition
; (??) procedure code
; —————————————————————————————————————————————————
;
; DoRestart is used to restart.
dc.w dspRestart,EndDoRestart-DoRestart
DoRestart
; restart the machine, first try to use the shutdown manager, then do our own restart
bsr.s ShutDownManagerInstalled ; is there a ShutDown Manager?
bz.s @noShutDownManager
_SDRestart ; use the ShutDown Manager
; This code is executed on machines without ShutDown Managers in ROM.
@noShutDownManager
bsr.s DoUnmount ; unmount all of the volumes
Move.L ROMBase,a0 ; point to the ROM
Lea ROMHeader.ReStart(a0),a0 ; point to the restart routine
btst #6,ROM85 ; old machines only need reset
bz.s @tooNewForReset
reset
@tooNewForReset
Jmp (a0) ; exit thru the restart routine
; ShutDownManagerInstalled
;
; This determines if the ShutDown Manager is installed.
; It returns NZ if there is a ShutDown Manager and Z if there is not.
ShutDownManagerInstalled
Move.W #UnimplementedTrapNumber, D0
_GetTrapAddress ; get Unimplemented
Move.L A0, A1 ; save result
Move.W #ShutDownTrapNumber, D0
_GetTrapAddress ; get ShutDown
Cmp.L A0, A1 ; compare the two
rts
; The following routines (DoUnmount and ZapVCBQueue) are copied from the ShutDown Manager:
;
; DoUnmount - Unmount all of the Volumes on line, so the disks will be
; updated before our power off.
;
; Entry: No parameters.
DoUnmount
Sub #ioQElSize,SP ; allocate pBlock
; Go through the VCB Queue to Flush and eject all volumes.
Move.L SP,A0 ; point to the parameter block.
Clr.L ioVNPtr(A0)
Clr.W ioRefNum(A0)
Move.L VCBQHdr+QHead,A1 ; get the queue header
Move.L VCBQHdr+QTail,D2 ; get the tail too.
Beq.S @AllFlushed
Bsr.S ZapVCBQueue ; wipe out the whole Queue
@AllFlushed
Add #ioQElSize,SP ; deallocate pBlock
Rts
; ZapVCBQueue - This ReEntrant routine goes through the VCB Queue, and calls
; UnmountVol for each entry.
; Entry: A0 - IOParam Block
; A1 - Pointer to current Entry
; D2 - Tail entry Pointer.
; Exit: A1 - Pointer to next Entry.
; D1 - Preserved.
ZapVCBQueue
Move.W D1,-(SP) ; save for re-entrancy.
Move.W vcbVRefNum(A1),D1 ; get a VRefNum
Move.L QLink(A1),-(SP) ; go on to the next VCB
Cmp.L D2,A1
Move.L (SP)+,A1
Beq.S @FlushTime ; have we reached the end?
Bsr.S ZapVCBQueue ; not yet, save the VRefNum, call self.
@FlushTime
Move.W D1,ioVRefNum(A0) ; set up the refNum in the PBlock.
_Eject
_HUnmountVol ; shut the volume down.
Move.W (SP)+,D1 ; restore crucial VRefNum
Rts ; for reentrancy.
EndDoRestart
; ——————————————————————————————————————————————————————————————————————————————————————————————————
end