home *** CD-ROM | disk | FTP | other *** search
/ Die Ultimative Software-P…i Collection 1996 & 1997 / Die Ultimative Software-Pakete CD-ROM fur Atari Collection 1996 & 1997.iso / i / internet / software / tuwtcpsr / tuwstart.s < prev    next >
Encoding:
Text File  |  1992-11-06  |  6.9 KB  |  378 lines

  1. *      PCSTART.S
  2. *
  3. *      Pure C Startup Code
  4. *       adapted for fixed Stack
  5. *      Copyright (c) Borland International 1988/89/90
  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.         .IMPORT    NEWSTACKBOTTOM
  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. __text:
  136.  
  137.  
  138. ******** PcStart ********************************************************
  139.  
  140. Start:
  141.         BRA.B   Start0
  142.  
  143.  
  144.  
  145. ******* Configuration data
  146.  
  147.  
  148. * Redirection array pointer
  149.  
  150.         .DC.L   _RedirTab
  151.  
  152.  
  153. * Stack size entry
  154.  
  155.         .DC.L   _StkSize
  156.  
  157.  
  158.  
  159. ******* Pc library copyright note
  160.  
  161.         .ALIGN  16
  162.  
  163.         .DC.B   '>>>> PURE-C <<<<'
  164.         .DC.B   '  for ATARI-ST  '
  165.         .DC.B   '  Version  1.0  '
  166.         .DC.B   '(C)88-90 Borland'
  167.         .DC.B   ' International  '
  168.  
  169. EmpStr:
  170.         .DC.B   $00
  171.         .EVEN
  172.  
  173.  
  174.  
  175. ******** Pc startup code
  176.  
  177. * Setup pointer to base page
  178.  
  179. Start0:
  180.         MOVE.L  A0, A3
  181.         MOVE.L  A3, D0
  182.         BNE     ACC
  183.  
  184.         MOVE.L  4(A7), A3   ; BasePagePointer from Stack
  185.         MOVEQ.L #1, D0      ; Program is Application
  186.         BRA     APP
  187. ACC:
  188.         CLR.W   D0          ; Program is DeskAccessory
  189.  
  190. APP:
  191.  
  192.         MOVE.L  A3, _BasPag
  193.  
  194. * Setup applikation flag
  195.  
  196.         MOVE.W  D0,_app
  197.  
  198.  
  199. * Compute size of required memory
  200. * := text segment size + data segment size + bss segment size
  201. *  + stack size + base page size
  202. * (base page size includes stack size)
  203.  
  204.         MOVE.L  TextSegSize(A3),A0
  205.         ADD.L   DataSegSize(A3),A0
  206.         ADD.L   BssSegSize(A3),A0
  207.         ADD.W   #BasePageSize,A0
  208.         MOVE.L  A0, _PgmSize
  209.  
  210. * Setup longword aligned application stack
  211.  
  212.         MOVE.L  #NEWSTACKBOTTOM,D0
  213.         ADD.L   #4096,D0
  214.         AND.B   #$FC,D0
  215.         MOVE.L  D0,A7
  216.  
  217. * Setup stack limit variable
  218.  
  219.         MOVE.L  #NEWSTACKBOTTOM+100,_StkLim
  220.  
  221. * check application flag
  222.  
  223.         TST.W   _app
  224.         BEQ     Start8  * No environment and no arguments
  225.  
  226. * scan environment
  227.  
  228.         SUB.L   #250, D0
  229.         AND.B   #$FC, D0
  230.         MOVE.L  D0, A1
  231.         MOVE.L  A1, A4
  232.         MOVE.L  EnvStrPtr(A3), A2
  233.         MOVE.L  A2, (A1)+
  234. Start1:
  235.         TST.B   (A2)+
  236.         BNE     Start1
  237.         MOVE.L  A2, (A1)+
  238.         TST.B   (A2)+
  239.         BNE     Start1
  240.         CLR.L   -(A1)
  241.  
  242. * Free not required memory
  243.  
  244.         MOVE.L  A0,-(A7)
  245.         MOVE.L  A3,-(A7)
  246.         MOVE.W  #0,-(A7)
  247.         MOVE.W  #74,-(A7)
  248.         TRAP    #1
  249.         LEA.L   12(A7),A7
  250.  
  251. * scan commandline
  252.         LEA     CmdLine(A3), A0
  253.         MOVE.B  (A0), D1
  254.  
  255.         CMP.B   #126, D1        * Is this a valid command_tail length ?
  256.         BMI     vallidLength
  257.         ADDQ.L  #1, A0
  258.         MOVEQ.L #-1, D1
  259. getLen:
  260.         ADDQ    #1, D1
  261.         MOVE.B  (A0)+, D0
  262.         BNE     getLen
  263.         LEA     CmdLine(A3), A0
  264.  
  265. vallidLength:
  266.         MOVE    #1, D3
  267.         EXT.W   D1
  268.         LEA     1(A0, D1.W), A1
  269.         CLR.B   (A1)
  270.         CLR.l   -(A7)           * argv[argc] = 0
  271.         BRA     Start5
  272.  
  273. Start2:                         * testing blank (seperator)
  274.         CMPI.B  #' '+1, (A1)
  275.         BPL     Start3
  276.         CLR.B   (A1)
  277.         TST.B   1(A1)
  278.         BEQ     Start3
  279.         PEA     1(A1)
  280.         ADDQ    #1, D3
  281.         BRA     Start5
  282.  
  283. Start3:                         * testing quotation marks
  284.         CMPI.B  #'"', (A1)
  285.         BNE     Start5
  286.         MOVE.B  #0, (A1)
  287.  
  288. Start4:                         * scan previous
  289.         SUBQ    #1, A1
  290.         CMPI.B  #'"', (A1)
  291.         DBEQ    D1, Start4
  292.         SUBQ    #1, D1
  293.         BMI     Start6
  294.         PEA     1(A1)
  295.         ADDQ    #1, D3
  296.         CLR.B   (A1)
  297.  
  298. Start5:
  299.         SUBQ.L  #1, A1
  300.         DBF     D1, Start2
  301.  
  302. Start6:
  303.         TST.B   1(A1)
  304.         BEQ     Start7
  305.         PEA     1(A1)
  306.         ADDQ    #1, D3
  307.  
  308. Start7:
  309.         PEA     EmpStr
  310.         MOVEA.L A7, A2
  311.  
  312. * Test if fpu 68881 is present
  313.  
  314. Start8:
  315.         JSR     _fpuinit
  316.  
  317. ******* Execute main program *******************************************
  318. *
  319. * Parameter passing:
  320. *   <D0.W> = Command line argument count (argc)
  321. *   <A0.L> = Pointer to command line argument pointer array (argv)
  322. *   <A1.L> = Pointer to tos environment string (env)
  323.  
  324.         MOVE    D3, D0
  325.         MOVE.L  A2, A0
  326.         MOVE.L  A4, A1
  327.         JSR     main
  328.  
  329.  
  330.  
  331. ******** exit ***********************************************************
  332. *
  333. * Terminate program
  334. *
  335. * Entry parameters:
  336. *   <D0.W> = Termination status : Integer
  337. * Return parameters:
  338. *   Never returns
  339.  
  340. exit:
  341.         MOVE.W  D0,-(A7)
  342.  
  343. * Execute all registered atexit procedures
  344.  
  345.         MOVE.L  _AtExitVec,D0
  346.         BEQ     __exit
  347.  
  348.         MOVE.L  D0,A0
  349.         JSR     (A0)
  350.  
  351.  
  352. * Deinitialize file system
  353.  
  354. __exit:
  355.         MOVE.L  _FilSysVec,D0
  356.         BEQ     Exit1
  357.  
  358.         MOVE.L  D0,A0
  359.         JSR     (A0)
  360.  
  361.  
  362. * Deallocate all heap blocks
  363.  
  364. Exit1:
  365.         JSR     _FreeAll
  366.  
  367.  
  368. * Program termination with return code
  369.  
  370.         MOVE.W  #76,-(A7)
  371.         TRAP    #1
  372.  
  373.  
  374.  
  375. ******* Module end *****************************************************
  376.  
  377.         .END
  378. ə