home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Fish 1
/
GoldFishApril1994_CD2.img
/
d4xx
/
d498
/
cpalette
/
src
/
includes
/
startup.asm
< prev
next >
Wrap
Assembly Source File
|
1991-06-06
|
3KB
|
195 lines
; *** STARTUP.ASM
; ERROR CODES
CANTINTSYSTEM EQU 20
CANTOPENWINDOW EQU 21
CANTOPENSCREEN EQU 22
CANTALLOCMEM EQU 23
CANTOPENDEVICE EQU 24
; *** SYSTEM STARTUP CODE
_START
MOVE.L SP,_STACK
MOVE.L A0,COMMAND
MOVE.L D0,CMDLEN
SUBA.L A1,A1
SYSLIB FINDTASK
MOVE.L D0,_TASK
NOWSTARTUP
MOVE.L #1,ENDFROMWB ;ASSUME ITS FROM WB
MOVE.L D0,A2
TST.L PROC.CLI(A2) ;TEST ID TASK IS FROM CLI
BEQ.S FROM_WB
FROM_CLI ;CLI PROCESS
MOVE.L #0,ENDFROMWB
MOVE.L #1,ENDFROMCLI
MOVE.L COMMAND,A0
MOVE.L CMDLEN,D0
CLR.B -1(A0,D0.W)
BSR OPENDOS
DOSLIB INPUT
MOVE.L D0,STDIN
DOSLIB OUTPUT
MOVE.L D0,STDOUT
MOVE.L D0,STDERR
BRA NOWDOMAIN
FROM_WB ;WB PROCESS
BSR OPENDOS
LEA PROC.MSGPORT(A2),A0
SYSLIB WAITPORT
LEA PROC.MSGPORT(A2),A0
SYSLIB GETMSG
MOVE.L D0,WBMSG
IFD WBC ;WANT DEFAULT WB CONSOLE?
DEFAULTCONSOLE
MOVE.L #NEWCONSOLE,D1
MOVE.L #MODE_NEWFILE,D2
DOSLIB OPEN ;OPEN DEFAULT CONSOLE
MOVE.L D0,STDIN
MOVE.L D0,STDOUT
MOVE.L D0,STDERR
BEQ _STARTERROR ;GIVE UP IF CONSOLE ISN'T THERE
SETCONTASK ;BCPL POINTER
LSL.L #2,D0
MOVE.L D0,A0
MOVE.L _TASK,A2
MOVE.L FH.TYPE(A0),PROC.CONSOLETASK(A2)
ENDC
; *** OPEN LIBRARIES AND RUN USER'S CODE 'MAIN'
NOWDOMAIN
BSR OPENLIBS
BSR MAIN ;BRANCH TO PROGRAM CODE STARTING AT MAIN
TST.L ENDFROMWB ;IF WORKBENCH PROGRAM CLOSE DEFAULT CONSOLE WINDOW
BEQ _ERROR
MOVE.L STDOUT,D1 ;IF IT WASN'T OPENED SKIP IT
BEQ _ERROR
DOSLIB CLOSE
; *** NOW CLEAN UP AND EXIT SYSTEM
_ERROR ;RETURN HERE FROM MAIN TO CLEAR THINGS UP AND EXIT
MOVE.L D0,-(SP)
TST.L WBMSG ;WAS THERE A WB MESSAGE
BEQ.S MORFINISH
MOVE.L WBMSG,A1
SYSLIB REPLYMSG
MORFINISH
MOVE.L REMEMBERKEY,D0
BEQ.S 2$
LEA REMEMBERKEY,A0
MOVEQ.L #1,D0
INTLIB FREEREMEMBER ;GIVE BACK REMEMBER MEMORY
2$
MOVE.L _GFXBASE,D0 ;CLOSE LIBRARIES
BEQ.S 3$
BSR _CLOSELIB
3$
MOVE.L _INTBASE,D0
BEQ.S 4$
BSR _CLOSELIB
4$
MOVE.L _MATHBASE,D0
BEQ.S 5$
BSR _CLOSELIB
5$
MOVE.L _MATHTRANSBASE,D0
BEQ.S 6$
BSR _CLOSELIB
6$
MOVE.L _DOSBASE,D0
BEQ.S 7$
BSR _CLOSELIB
7$
MOVE.L (SP)+,D0
MOVE.L _STACK,SP
RTS
_STARTERROR
MOVEQ #CANTINTSYSTEM,D0
BRA _ERROR
_OPENLIB
MOVE.L #0,D0
SYSLIB OPENLIBRARY
RTS
_CLOSELIB
MOVE.L D0,A1
SYSLIB CLOSELIBRARY
RTS
OPENDOS
LEA _DOSNAME,A1
BSR _OPENLIB
MOVE.L D0,_DOSBASE
BEQ _STARTERROR
RTS
OPENLIBS
IFD GFX
LEA _GFXNAME,A1
BSR _OPENLIB
MOVE.L D0,_GFXBASE
BEQ _STARTERROR
ENDC
IFD INT
LEA _INTNAME,A1
BSR _OPENLIB
MOVE.L D0,_INTBASE
BEQ _STARTERROR
ENDC
IFD FFP
LEA _MATHNAME,A1
BSR _OPENLIB
MOVE.L D0,_MATHBASE
BEQ _STARTERROR
ENDC
IFD TRA
LEA _MATHTRANSNAME,A1
BSR _OPENLIB
MOVE.L D0,_MATHTRANSBASE
BEQ _STARTERROR
ENDC
RTS
; *** STARTUP DATA STORAGE
_STACK DC.L 0
_TASK DC.L 0
_DOSBASE DC.L 0
_GFXBASE DC.L 0
_INTBASE DC.L 0
_MATHBASE DC.L 0
_MATHTRANSBASE DC.L 0
REMEMBERKEY DC.L 0
COMMAND DC.L 0
CMDLEN DC.L 0
WBMSG DC.L 0
STDIN DC.L 0
STDOUT DC.L 0
STDERR DC.L 0
ENDFROMWB DC.L 0 ;=1 IF WB
ENDFROMCLI DC.L 0 ;=1 IF CLI
EVENPC
_DOSNAME DC.B 'dos.library',0 ;LIBRARY FILE NAMES
EVENPC
_GFXNAME DC.B 'graphics.library',0
EVENPC
_INTNAME DC.B 'intuition.library',0
EVENPC
_MATHNAME DC.B 'mathffp.library',0
EVENPC
_MATHTRANSNAME DC.B 'MATHTRANS.LIBRARY',0
EVENPC
NEWCONSOLE
DC.B 'CON:20/20/400/100/PROGRAM I/O'
EVENPC