mac-rom/Tidbits/BootAlerts.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

449 lines
13 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