home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 1 / GoldFishApril1994_CD2.img / d4xx / d498 / cpalette / src / includes / startup.asm < prev    next >
Assembly Source File  |  1991-06-06  |  3KB  |  195 lines

  1. ; *** STARTUP.ASM
  2.  
  3. ; ERROR CODES
  4.  
  5. CANTINTSYSTEM    EQU 20
  6. CANTOPENWINDOW    EQU 21
  7. CANTOPENSCREEN    EQU 22
  8. CANTALLOCMEM    EQU 23
  9. CANTOPENDEVICE    EQU 24
  10.  
  11. ; *** SYSTEM STARTUP CODE
  12.  
  13. _START
  14.  MOVE.L SP,_STACK
  15.  MOVE.L A0,COMMAND
  16.  MOVE.L D0,CMDLEN
  17.  SUBA.L A1,A1
  18.  SYSLIB FINDTASK
  19.  MOVE.L D0,_TASK
  20. NOWSTARTUP
  21.  MOVE.L #1,ENDFROMWB    ;ASSUME ITS FROM WB
  22.  MOVE.L D0,A2
  23.  TST.L PROC.CLI(A2)    ;TEST ID TASK IS FROM CLI
  24.  BEQ.S FROM_WB
  25.  
  26. FROM_CLI        ;CLI PROCESS
  27.  MOVE.L #0,ENDFROMWB
  28.  MOVE.L #1,ENDFROMCLI
  29.  MOVE.L COMMAND,A0
  30.  MOVE.L CMDLEN,D0
  31.  CLR.B -1(A0,D0.W)
  32.  BSR OPENDOS
  33.  DOSLIB INPUT
  34.  MOVE.L D0,STDIN
  35.  DOSLIB OUTPUT
  36.  MOVE.L D0,STDOUT
  37.  MOVE.L D0,STDERR
  38.  BRA NOWDOMAIN
  39.  
  40. FROM_WB        ;WB PROCESS
  41.  BSR OPENDOS
  42.  LEA PROC.MSGPORT(A2),A0
  43.  SYSLIB WAITPORT
  44.  LEA PROC.MSGPORT(A2),A0
  45.  SYSLIB GETMSG
  46.  MOVE.L D0,WBMSG
  47.  
  48.  IFD WBC        ;WANT DEFAULT WB CONSOLE?
  49. DEFAULTCONSOLE
  50.  MOVE.L #NEWCONSOLE,D1
  51.  MOVE.L #MODE_NEWFILE,D2
  52.  DOSLIB OPEN        ;OPEN DEFAULT CONSOLE
  53.  MOVE.L D0,STDIN
  54.  MOVE.L D0,STDOUT
  55.  MOVE.L D0,STDERR
  56.  BEQ _STARTERROR    ;GIVE UP IF CONSOLE ISN'T THERE
  57. SETCONTASK        ;BCPL POINTER
  58.  LSL.L #2,D0
  59.  MOVE.L D0,A0
  60.  MOVE.L _TASK,A2
  61.  MOVE.L FH.TYPE(A0),PROC.CONSOLETASK(A2)
  62.  ENDC
  63.  
  64. ; *** OPEN LIBRARIES AND RUN USER'S CODE 'MAIN'
  65.  
  66. NOWDOMAIN
  67.  BSR OPENLIBS
  68.  BSR MAIN        ;BRANCH TO PROGRAM CODE STARTING AT MAIN
  69.  TST.L ENDFROMWB    ;IF WORKBENCH PROGRAM CLOSE DEFAULT CONSOLE WINDOW
  70.  BEQ _ERROR
  71.  MOVE.L STDOUT,D1    ;IF IT WASN'T OPENED SKIP IT
  72.  BEQ _ERROR
  73.  DOSLIB CLOSE
  74.  
  75. ; *** NOW CLEAN UP AND EXIT SYSTEM
  76.  
  77. _ERROR        ;RETURN HERE FROM MAIN TO CLEAR THINGS UP AND EXIT
  78.  MOVE.L D0,-(SP)
  79.  TST.L WBMSG        ;WAS THERE A WB MESSAGE
  80.  BEQ.S MORFINISH
  81.  MOVE.L WBMSG,A1
  82.  SYSLIB REPLYMSG
  83. MORFINISH
  84.  MOVE.L REMEMBERKEY,D0
  85.  BEQ.S 2$
  86.  LEA REMEMBERKEY,A0
  87.  MOVEQ.L #1,D0
  88.  INTLIB FREEREMEMBER    ;GIVE BACK REMEMBER MEMORY
  89. 2$
  90.  MOVE.L _GFXBASE,D0    ;CLOSE LIBRARIES
  91.  BEQ.S 3$
  92.  BSR _CLOSELIB
  93. 3$
  94.  MOVE.L _INTBASE,D0
  95.  BEQ.S 4$
  96.  BSR _CLOSELIB
  97. 4$
  98.  MOVE.L _MATHBASE,D0
  99.  BEQ.S 5$
  100.  BSR _CLOSELIB
  101. 5$
  102.  MOVE.L _MATHTRANSBASE,D0
  103.  BEQ.S 6$
  104.  BSR _CLOSELIB
  105. 6$
  106.  MOVE.L _DOSBASE,D0
  107.  BEQ.S 7$
  108.  BSR _CLOSELIB
  109. 7$
  110.  MOVE.L (SP)+,D0
  111.  MOVE.L _STACK,SP
  112.  RTS
  113.  
  114. _STARTERROR
  115.  MOVEQ #CANTINTSYSTEM,D0
  116.  BRA _ERROR
  117.  
  118. _OPENLIB
  119.  MOVE.L #0,D0
  120.  SYSLIB OPENLIBRARY
  121.  RTS
  122.  
  123. _CLOSELIB
  124.  MOVE.L D0,A1
  125.  SYSLIB CLOSELIBRARY
  126.  RTS
  127.  
  128. OPENDOS
  129.  LEA _DOSNAME,A1
  130.  BSR _OPENLIB
  131.  MOVE.L D0,_DOSBASE
  132.  BEQ _STARTERROR
  133.  RTS
  134.  
  135. OPENLIBS
  136.  IFD GFX
  137.  LEA _GFXNAME,A1
  138.  BSR _OPENLIB
  139.  MOVE.L D0,_GFXBASE
  140.  BEQ _STARTERROR
  141.  ENDC
  142.  IFD INT
  143.  LEA _INTNAME,A1
  144.  BSR _OPENLIB
  145.  MOVE.L D0,_INTBASE
  146.  BEQ _STARTERROR
  147.  ENDC
  148.  IFD FFP
  149.  LEA _MATHNAME,A1
  150.  BSR _OPENLIB
  151.  MOVE.L D0,_MATHBASE
  152.  BEQ _STARTERROR
  153.  ENDC
  154.  IFD TRA
  155.  LEA _MATHTRANSNAME,A1
  156.  BSR _OPENLIB
  157.  MOVE.L D0,_MATHTRANSBASE
  158.  BEQ _STARTERROR
  159.  ENDC
  160.  RTS
  161.  
  162. ; *** STARTUP DATA STORAGE
  163.  
  164. _STACK DC.L 0
  165. _TASK DC.L 0
  166. _DOSBASE DC.L 0
  167. _GFXBASE DC.L 0
  168. _INTBASE DC.L 0
  169. _MATHBASE DC.L 0
  170. _MATHTRANSBASE DC.L 0
  171. REMEMBERKEY DC.L 0
  172. COMMAND DC.L 0
  173. CMDLEN DC.L 0
  174. WBMSG DC.L 0
  175. STDIN DC.L 0
  176. STDOUT DC.L 0
  177. STDERR DC.L 0
  178. ENDFROMWB DC.L 0    ;=1 IF WB
  179. ENDFROMCLI DC.L 0    ;=1 IF CLI
  180.  EVENPC
  181. _DOSNAME DC.B 'dos.library',0        ;LIBRARY FILE NAMES
  182.  EVENPC
  183. _GFXNAME DC.B 'graphics.library',0
  184.  EVENPC
  185. _INTNAME DC.B 'intuition.library',0
  186.  EVENPC
  187. _MATHNAME DC.B 'mathffp.library',0
  188.  EVENPC
  189. _MATHTRANSNAME DC.B 'MATHTRANS.LIBRARY',0
  190.  EVENPC
  191. NEWCONSOLE
  192.  DC.B 'CON:20/20/400/100/PROGRAM I/O'
  193.  EVENPC
  194.  
  195.