home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_07 / TURBOC_1.ZIP / LIB / TCSTART.S < prev    next >
Text File  |  1990-03-02  |  7KB  |  367 lines

  1. *      TCSTART.S
  2. *
  3. *      Turbo C Startup Code, Version 1.1
  4. *
  5. *      Copyright (c) Borland International 1988/89
  6. *      All Rights Reserved.
  7.  
  8.  
  9. *>>>>>> Export references <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  10.  
  11.         .EXPORT exit, _exit
  12.  
  13.         .EXPORT _BasPag
  14.         .EXPORT _app
  15.         .EXPORT errno
  16.         .EXPORT _AtExitVec, _FilSysVec
  17.         .EXPORT _RedirTab
  18.         .EXPORT _StkLim
  19.         .EXPORT _PgmSize
  20.  
  21.     .EXPORT __text, __data, __bss
  22.  
  23. *>>>>>> Import references <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  24.  
  25.         .IMPORT main
  26.         .IMPORT _fpuinit
  27.         .IMPORT _StkSize
  28.         .IMPORT _FreeAll
  29.  
  30.  
  31.  
  32.  
  33. *>>>>>> Data structures <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  34.  
  35.  
  36. * Base page structure
  37.  
  38.         .OFFSET 0
  39.  
  40. TpaStart:
  41.         .DS.L   1
  42. TpaEnd:
  43.         .DS.L   1
  44. TextSegStart:
  45.         .DS.L   1
  46. TextSegSize:
  47.         .DS.L   1
  48. DataSegStart:
  49.         .DS.L   1
  50. DataSegSize:
  51.         .DS.L   1
  52. BssSegStart:
  53.         .DS.L   1
  54. BssSegSize:
  55.         .DS.L   1
  56. DtaPtr:
  57.         .DS.L   1
  58. PntPrcPtr:
  59.         .DS.L   1
  60. Reserved0:
  61.         .DS.L   1
  62. EnvStrPtr:
  63.         .DS.L   1
  64. Reserved1:
  65.         .DS.B   7
  66. CurDrv:
  67.         .DS.B   1
  68. Reserved2:
  69.         .DS.L   18
  70. CmdLine:
  71.         .DS.B   128
  72. BasePageSize:
  73.         .DS     0
  74.  
  75.  
  76.  
  77. *>>>>>>> Data segment <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  78.  
  79.         .BSS
  80. __bss:
  81.  
  82. * Pointer to base page
  83.  
  84. _BasPag:
  85.         .DS.L   1
  86.  
  87.  
  88. * Applikation flag
  89.  
  90. _app:
  91.         .DS.W   1
  92.  
  93.  
  94. * Stack limit
  95.  
  96. _StkLim:
  97.         .DS.L   1
  98.  
  99. * Program size
  100.  
  101. _PgmSize:
  102.         .DS.L   1
  103.  
  104. * Redirection address table
  105.  
  106. _RedirTab:
  107.         .DS.L   6
  108.  
  109. *>>>>>>> Initialized data segment <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  110.  
  111.         .DATA
  112. __data:
  113.  
  114. * Global error variable
  115.  
  116. errno:
  117.         .DC.W   0
  118.  
  119.  
  120. * Vector for atexit
  121.  
  122. _AtExitVec:
  123.         .DC.L   0
  124.  
  125.  
  126. * Vector for file system deinitialization
  127.  
  128. _FilSysVec:
  129.         .DC.L   0
  130.  
  131.  
  132. *>>>>>>> Code segment <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  133.  
  134.         .CODE
  135.  
  136.  
  137.  
  138. ******** TcStart ********************************************************
  139.  
  140. __text:
  141. Start:
  142.         BRA.B   Start0
  143.  
  144.  
  145.  
  146. ******* Configuration data
  147.  
  148.  
  149. * Redirection array pointer
  150.  
  151.         .DC.L   _RedirTab
  152.  
  153.  
  154. * Stack size entry
  155.  
  156.         .DC.L   _StkSize
  157.  
  158.  
  159.  
  160. ******* Tc library copyright note
  161.  
  162.         .ALIGN  16
  163.  
  164.         .DC.B   '>>> TURBO-C <<<<'
  165.         .DC.B   '  for ATARI-ST  '
  166.         .DC.B   '  Version  1.1  '
  167.         .DC.B   '(C)88/89 Borland'
  168.         .DC.B   ' International  '
  169.  
  170. EmpStr:
  171.         .DC.B   $00
  172.         .EVEN
  173.  
  174.  
  175.  
  176. ******** Tc startup code
  177.  
  178. * Setup pointer to base page
  179.  
  180. Start0:
  181.         MOVE.L  A0, A3
  182.         MOVE.L  A3, D0
  183.         BNE     ACC
  184.  
  185.         MOVE.L  4(A7), A3   ; BasePagePointer from Stack
  186.         MOVEQ.L #1, D0      ; Program is Application  
  187.         BRA     APP
  188. ACC:
  189.         CLR.W   D0          ; Program is DeskAccessory
  190.  
  191. APP:        
  192.  
  193.         MOVE.L  A3, _BasPag
  194.  
  195. * Setup applikation flag
  196.  
  197.         MOVE.W  D0,_app
  198.  
  199. * Compute size of required memory
  200.  
  201.  
  202. * Compute size of required memory
  203. * := text segment size + data segment size + bss segment size
  204. *  + stack size + base page size
  205. * (base page size includes stack size)
  206.  
  207.         MOVE.L  TextSegSize(A3),A0
  208.         ADD.L   DataSegSize(A3),A0
  209.         ADD.L   BssSegSize(A3),A0
  210.         ADD.W   #BasePageSize,A0
  211.         MOVE.L  A0, _PgmSize
  212.  
  213. * Setup longword aligned application stack
  214.  
  215.         MOVE.L  A3,D0
  216.         ADD.L   A0,D0
  217.         AND.B   #$FC,D0
  218.         MOVE.L  D0,A7
  219.  
  220. * Setup stack limit variable
  221.  
  222.         SUB.L   #_StkSize-256,D0
  223.         MOVE.L  D0,_StkLim
  224.  
  225. * scan environment
  226.  
  227.         SUB.L   #250, D0
  228.         AND.B   #$FC, D0
  229.         MOVE.L  D0, A1
  230.         MOVE.L  A1, A4
  231.         MOVE.L  EnvStrPtr(A3), A2
  232.         MOVE.L  A2, (A1)+
  233. Start1:
  234.         TST.B   (A2)+
  235.         BNE     Start1
  236.         MOVE.L  A2, (A1)+
  237.         TST.B   (A2)+
  238.         BNE     Start1
  239.         CLR.L   -(A1)
  240.         
  241. * Free not required memory
  242.  
  243.         MOVE.L  A0,-(A7)
  244.         MOVE.L  A3,-(A7)
  245.         MOVE.W  #0,-(A7)
  246.         MOVE.W  #74,-(A7)
  247.         TRAP    #1
  248.         LEA.L   12(A7),A7
  249.  
  250.  
  251. * Test if fpu 68881 is present
  252.  
  253.         JSR     _fpuinit
  254.  
  255.  
  256. * scan commandline
  257.         LEA     CmdLine(A3), A0
  258.         MOVE    #1, D3
  259.         MOVE.B  (A0), D1
  260.         EXT.W   D1
  261.         LEA     1(A0, D1.W), A1
  262.         CLR.B   (A1)
  263.         CLR.l   -(A7)           * argv[argc] = 0
  264.         BRA     Start5
  265.  
  266. Start2:                         * testing blank (seperator)
  267.         CMPI.B  #' '+1, (A1)
  268.         BPL     Start3
  269.         CLR.B   (A1)
  270.         TST.B   1(A1)
  271.         BEQ     Start3
  272.         PEA     1(A1)
  273.         ADDQ    #1, D3
  274.         BRA     Start5
  275.                                     
  276. Start3:                         * testing quotation marks
  277.         CMPI.B  #'"', (A1)          
  278.         BNE     Start5            
  279.         MOVE.B  #0, (A1)            
  280.                                     
  281. Start4:                         * scan previous            
  282.         SUBQ    #1, A1              
  283.         CMPI.B  #'"', (A1)          
  284.         DBEQ    D1, Start4        
  285.         TST     D1
  286.         BMI     Start6
  287.         PEA     1(A1)
  288.         ADDQ    #1, D3
  289.         CLR.B   (A1)
  290.  
  291. Start5:
  292.         SUBQ.L  #1, A1
  293.         DBF     D1, Start2
  294.         
  295. Start6:
  296.         TST.B   1(A1)
  297.         BEQ     Start7
  298.         PEA     1(A1)
  299.         ADDQ    #1, D3
  300.  
  301. Start7:
  302.         PEA     EmpStr
  303.         MOVE.L  A7, A2
  304.         
  305.  
  306. ******* Execute main program *******************************************
  307. *
  308. * Parameter passing:
  309. *   <D0.W> = Command line argument count (argc)
  310. *   <A0.L> = Pointer to command line argument pointer array (argv)
  311. *   <A1.L> = Pointer to tos environment string (env)
  312.  
  313.         MOVE    D3, D0
  314.         MOVE.L  A2, A0
  315.         MOVE.L  A4, A1
  316.         JSR     main
  317.  
  318.  
  319.  
  320. ******** exit ***********************************************************
  321. *
  322. * Terminate program
  323. *
  324. * Entry parameters:
  325. *   <D0.W> = Termination status : Integer
  326. * Return parameters:
  327. *   Never returns
  328.  
  329. exit:
  330.         MOVE.W  D0,-(A7)
  331.  
  332. * Execute all registered atexit procedures
  333.  
  334.         MOVE.L  _AtExitVec,D0
  335.         BEQ     _exit
  336.  
  337.         MOVE.L  D0,A0
  338.         JSR     (A0)
  339.  
  340.  
  341. * Deinitialize file system
  342.  
  343. _exit:
  344.         MOVE.L  _FilSysVec,D0
  345.         BEQ     Exit1
  346.  
  347.         MOVE.L  D0,A0
  348.         JSR     (A0)
  349.  
  350.  
  351. * Deallocate all heap blocks
  352.  
  353. Exit1:
  354.         JSR     _FreeAll
  355.  
  356.  
  357. * Program termination with return code
  358.  
  359.         MOVE.W  #76,-(A7)
  360.         TRAP    #1
  361.  
  362.  
  363.  
  364. ******* Module end *****************************************************
  365.  
  366.         .END
  367.