mirror of
https://github.com/elliotnunn/supermario.git
synced 2024-11-22 04:31:30 +00:00
96 lines
2.7 KiB
Plaintext
96 lines
2.7 KiB
Plaintext
|
;
|
|||
|
; File: ParityINIT.a
|
|||
|
;
|
|||
|
; Contains: code to put up a dialog if we have a parity troubles (replaces two ParityINITs)
|
|||
|
; this version depends on the newer INIT loading code
|
|||
|
;
|
|||
|
; Written by: Gary Rensberger and Darin Adler
|
|||
|
;
|
|||
|
; Copyright: © 1990 by Apple Computer, Inc., all rights reserved.
|
|||
|
;
|
|||
|
; Change History (most recent first):
|
|||
|
;
|
|||
|
; <3> 3/26/91 dba dty, #84429: deallocate stack after WriteXPram
|
|||
|
; <2> 8/18/90 dba do a Shut Down instead of a Restart, since Restart just gives
|
|||
|
; you this dialog again
|
|||
|
; <1> 4/19/90 dba checked in for the first time
|
|||
|
; 4/18/90 dba create from two older ParityINITs; dispose of ourselves when we’re done
|
|||
|
;
|
|||
|
|
|||
|
load 'StandardEqu.d'
|
|||
|
include 'GestaltEqu.a'
|
|||
|
include 'ShutDownEqu.a'
|
|||
|
|
|||
|
ParityAlert equ -16392 ; our alert number
|
|||
|
ErrPGCTest equ $8E ; major error code for parity generator
|
|||
|
|
|||
|
Parity main export
|
|||
|
|
|||
|
bra.s @skipHeader
|
|||
|
DC.L ('INIT') ; resource type
|
|||
|
DC.W 10 ; id
|
|||
|
DC.W 2 ; version
|
|||
|
@skipHeader
|
|||
|
|
|||
|
move.l a0,-(sp) ; save handle to this code (from INIT loader)
|
|||
|
|
|||
|
; Check for PGC chip present, parity disabled.
|
|||
|
|
|||
|
move.l #gestaltParityAttr,d0
|
|||
|
_Gestalt
|
|||
|
tst.w d0 ; did gestalt work?
|
|||
|
bne @noDialog ; no, exit
|
|||
|
|
|||
|
move.w a0,d0 ; do we have a PGC chip?
|
|||
|
btst #gestaltHasParityCapability,d0
|
|||
|
beq.s @noDialog ; no, exit
|
|||
|
|
|||
|
btst #gestaltParityEnabled,d0 ; is parity enabled?
|
|||
|
beq.s @doDialog ; no, put up dialog
|
|||
|
|
|||
|
; Check for PGC chip present, parity enabled, failed startup diagnostics (probably won’t happen).
|
|||
|
|
|||
|
clr.l -(sp) ; make buffer to read into
|
|||
|
move.l sp,a0 ; point to buffer
|
|||
|
move.l #$000300F9,d0 ; setup to read 3 bytes at loc F9
|
|||
|
_ReadXPRAM ; go read them
|
|||
|
move.b (sp)+,d0 ; get first byte
|
|||
|
move.b (sp)+,d1 ; get third byte
|
|||
|
|
|||
|
lsr.b #1,d0 ; test non-critical error flag bit
|
|||
|
bcc.s @noDialog ; not set, no problem
|
|||
|
|
|||
|
cmp.b #ErrPGCTest,d1 ; some error, was it PGC?
|
|||
|
bne.s @noDialog ; no, don’t put up alert
|
|||
|
|
|||
|
clr.b -(sp)
|
|||
|
move.l sp,a0
|
|||
|
move.l #$000100F9,d0 ; clear PRAM error flag
|
|||
|
_WriteXPRAM
|
|||
|
addq #2,sp ; deallocate space used for buffer <3>
|
|||
|
|
|||
|
; Put up the dialog
|
|||
|
|
|||
|
@doDialog
|
|||
|
_InitWindows ; init the window manager
|
|||
|
_InitMenus ; init the menu manager
|
|||
|
_TEInit ; init TextEdit
|
|||
|
clr.l -(sp) ; no resume proc
|
|||
|
_InitDialogs
|
|||
|
subq #2,sp ; room for function result
|
|||
|
move.w #ParityAlert,-(sp) ; push our alert ID
|
|||
|
clr.l -(sp) ; no ProcPtr
|
|||
|
_CautionAlert ; put up the alert
|
|||
|
cmp.w #2,(sp)+ ; did he hit 'Restart'?
|
|||
|
bne.s @done ; no, just continue
|
|||
|
_SDPowerOff
|
|||
|
@noDialog
|
|||
|
@done
|
|||
|
|
|||
|
move.l (sp)+,a0
|
|||
|
_DisposHandle ; get rid of this INIT
|
|||
|
|
|||
|
rts
|
|||
|
|
|||
|
end
|