home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / program / c / plstsrc / tcstuff / tcstart.s < prev    next >
Encoding:
Text File  |  1988-12-18  |  5.8 KB  |  353 lines

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