PASM 68040 Macro Assembler Version Jun 21 1993 (C) 91 Pure Software Page 1 Source File: D:\PC\LIB\PCSTART.S 1 * PCSTART.S 2 * 3 * Pure C Startup Code 4 * 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 30 31 32 33 *>>>>>> Data structures <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 34 35 36 * Base page structure 37 38 00000000 .OFFSET 0 39 40 00000000 TpaStart: 41 00000000 .DS.L 1 42 00000004 TpaEnd: 43 00000004 .DS.L 1 44 00000008 TextSegStart: 45 00000008 .DS.L 1 46 0000000C TextSegSize: 47 0000000C .DS.L 1 48 00000010 DataSegStart: 49 00000010 .DS.L 1 50 00000014 DataSegSize: 51 00000014 .DS.L 1 52 00000018 BssSegStart: 53 00000018 .DS.L 1 54 0000001C BssSegSize: 55 0000001C .DS.L 1 56 00000020 DtaPtr: PASM 68040 Macro Assembler Version Jun 21 1993 (C) 91 Pure Software Page 2 Source File: D:\PC\LIB\PCSTART.S 57 00000020 .DS.L 1 58 00000024 PntPrcPtr: 59 00000024 .DS.L 1 60 00000028 Reserved0: 61 00000028 .DS.L 1 62 0000002C EnvStrPtr: 63 0000002C .DS.L 1 64 00000030 Reserved1: 65 00000030 .DS.B 7 66 00000037 CurDrv: 67 00000037 .DS.B 1 68 00000038 Reserved2: 69 00000038 .DS.L 18 70 00000080 CmdLine: 71 00000080 .DS.B 128 72 00000100 BasePageSize: 73 00000100 .DS 0 74 00000100 75 76 77 *>>>>>>> Data segment <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 78 79 .BSS 80 00000000" __bss: 81 82 * Pointer to base page 83 84 00000000" _BasPag: 85 00000000" .DS.L 1 86 87 88 * Applikation flag 89 90 00000004" _app: 91 00000004" .DS.W 1 92 93 94 * Stack limit 95 96 00000006" _StkLim: 97 00000006" .DS.L 1 98 99 * Program size 100 101 0000000A" _PgmSize: 102 0000000A" .DS.L 1 103 104 * Redirection address table 105 106 0000000E" _RedirTab: 107 0000000E" .DS.L 6 108 00000026" 109 *>>>>>>> Initialized data segment <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 110 111 .DATA 112 00000000` __data: PASM 68040 Macro Assembler Version Jun 21 1993 (C) 91 Pure Software Page 3 Source File: D:\PC\LIB\PCSTART.S 113 114 * Global error variable 115 116 00000000` errno: 117 00000000` 0000 .DC.W 0 118 119 120 * Vector for atexit 121 122 00000002` _AtExitVec: 123 00000002` 0000 0000 .DC.L 0 124 125 126 * Vector for file system deinitialization 127 128 00000006` _FilSysVec: 129 00000006` 0000 0000 .DC.L 0 130 0000000A` 131 132 *>>>>>>> Code segment <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 133 134 .CODE 135 00000000' __text: 136 137 138 ******** PcStart ******************************************************** 139 140 00000000' Start: 141 00000000' 60 60 BRA.B Start0 142 143 144 145 ******* Configuration data 146 147 148 * Redirection array pointer 149 150 00000002' 00000000" .DC.L _RedirTab 151 152 153 * Stack size entry 154 155 00000006' 00000000* .DC.L _StkSize 156 157 158 159 ******* Pc library copyright note 160 161 0000000A' 0000 0000 0000 .ALIGN 16 162 163 00000010' 3E3E 3E3E 2050 5552 00000018' 452D 4320 3C3C 3C3C .DC.B '>>>> PURE-C <<<<' 164 00000020' 2020 666F 7220 4154 00000028' 4152 492D 5354 2020 .DC.B ' for ATARI-ST ' 165 00000030' 2020 5665 7273 696F 00000038' 6E20 2031 2E30 2020 .DC.B ' Version 1.0 ' PASM 68040 Macro Assembler Version Jun 21 1993 (C) 91 Pure Software Page 4 Source File: D:\PC\LIB\PCSTART.S 166 00000040' 2843 2938 382D 3930 00000048' 2042 6F72 6C61 6E64 .DC.B '(C)88-90 Borland' 167 00000050' 2049 6E74 6572 6E61 00000058' 7469 6F6E 616C 2020 .DC.B ' International ' 168 169 00000060' EmpStr: 170 00000060' 00 .DC.B $00 171 00000061' 00 .EVEN 172 173 174 175 ******** Pc startup code 176 177 * Setup pointer to base page 178 179 00000062' Start0: 180 00000062' 2648 MOVE.L A0, A3 181 00000064' 200B MOVE.L A3, D0 182 00000066' 6608 BNE ACC 183 184 00000068' 266F 0004 MOVE.L 4(A7), A3 ; BasePagePointer from Stack 185 0000006C' 7001 MOVEQ.L #1, D0 ; Program is Application 186 0000006E' 6002 BRA APP 187 00000070' ACC: 188 00000070' 4240 CLR.W D0 ; Program is DeskAccessory 189 190 00000072' APP: 191 192 00000072' 23CB 00000000" MOVE.L A3, _BasPag 193 194 * Setup applikation flag 195 196 00000078' 33C0 00000000" 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 0000007E' 206B 000C MOVE.L TextSegSize(A3),A0 205 00000082' D1EB 0014 ADD.L DataSegSize(A3),A0 206 00000086' D1EB 001C ADD.L BssSegSize(A3),A0 207 0000008A' D0FC 0100 ADD.W #BasePageSize,A0 208 0000008E' 23C8 00000000" MOVE.L A0, _PgmSize 209 210 * Setup longword aligned application stack 211 212 00000094' 200B MOVE.L A3,D0 213 00000096' D088 ADD.L A0,D0 214 00000098' C03C 00FC AND.B #$FC,D0 215 0000009C' 2E40 MOVE.L D0,A7 216 217 * Setup stack limit variable 218 219 0000009E' 90BC FFFFFF00* SUB.L #_StkSize-256,D0 PASM 68040 Macro Assembler Version Jun 21 1993 (C) 91 Pure Software Page 5 Source File: D:\PC\LIB\PCSTART.S 220 000000A4' 23C0 00000000" MOVE.L D0,_StkLim 221 222 * check application flag 223 224 000000AA' 4A79 00000000" TST.W _app 225 000000B0' 6700 00AE BEQ Start8 * No environment and no arguments 226 227 * scan environment 228 229 000000B4' 90BC 0000 00FA SUB.L #250, D0 230 000000BA' C03C 00FC AND.B #$FC, D0 231 000000BE' 2240 MOVE.L D0, A1 232 000000C0' 2849 MOVE.L A1, A4 233 000000C2' 246B 002C MOVE.L EnvStrPtr(A3), A2 234 000000C6' 22CA MOVE.L A2, (A1)+ 235 000000C8' Start1: 236 000000C8' 4A1A TST.B (A2)+ 237 000000CA' 66FC BNE Start1 238 000000CC' 22CA MOVE.L A2, (A1)+ 239 000000CE' 4A1A TST.B (A2)+ 240 000000D0' 66F6 BNE Start1 241 000000D2' 42A1 CLR.L -(A1) 242 243 * Free not required memory 244 245 000000D4' 2F08 MOVE.L A0,-(A7) 246 000000D6' 2F0B MOVE.L A3,-(A7) 247 000000D8' 3F3C 0000 MOVE.W #0,-(A7) 248 000000DC' 3F3C 004A MOVE.W #74,-(A7) 249 000000E0' 4E41 TRAP #1 250 000000E2' 4FEF 000C LEA.L 12(A7),A7 251 252 * scan commandline 253 000000E6' 41EB 0080 LEA CmdLine(A3), A0 254 000000EA' 1210 MOVE.B (A0), D1 255 256 000000EC' B23C 007E CMP.B #126, D1 * Is this a valid command_tail length ? 257 000000F0' 6B0E BMI vallidLength 258 000000F2' 5288 ADDQ.L #1, A0 259 000000F4' 72FF MOVEQ.L #-1, D1 260 000000F6' getLen: 261 000000F6' 5241 ADDQ #1, D1 262 000000F8' 1018 MOVE.B (A0)+, D0 263 000000FA' 66FA BNE getLen 264 000000FC' 41EB 0080 LEA CmdLine(A3), A0 265 266 00000100' vallidLength: 267 00000100' 363C 0001 MOVE #1, D3 268 00000104' 4881 EXT.W D1 269 00000106' 43F0 1001 LEA 1(A0, D1.W), A1 270 0000010A' 4211 CLR.B (A1) 271 0000010C' 42A7 CLR.l -(A7) * argv[argc] = 0 272 0000010E' 6036 BRA Start5 273 274 00000110' Start2: * testing blank (seperator) 275 00000110' 0C11 0021 CMPI.B #' '+1, (A1) PASM 68040 Macro Assembler Version Jun 21 1993 (C) 91 Pure Software Page 6 Source File: D:\PC\LIB\PCSTART.S 276 00000114' 6A10 BPL Start3 277 00000116' 4211 CLR.B (A1) 278 00000118' 4A29 0001 TST.B 1(A1) 279 0000011C' 6708 BEQ Start3 280 0000011E' 4869 0001 PEA 1(A1) 281 00000122' 5243 ADDQ #1, D3 282 00000124' 6020 BRA Start5 283 284 00000126' Start3: * testing quotation marks 285 00000126' 0C11 0022 CMPI.B #'"', (A1) 286 0000012A' 661A BNE Start5 287 0000012C' 12BC 0000 MOVE.B #0, (A1) 288 289 00000130' Start4: * scan previous 290 00000130' 5349 SUBQ #1, A1 291 00000132' 0C11 0022 CMPI.B #'"', (A1) 292 00000136' 57C9 FFF8 DBEQ D1, Start4 293 0000013A' 5341 SUBQ #1, D1 294 0000013C' 6B0E BMI Start6 295 0000013E' 4869 0001 PEA 1(A1) 296 00000142' 5243 ADDQ #1, D3 297 00000144' 4211 CLR.B (A1) 298 299 00000146' Start5: 300 00000146' 5389 SUBQ.L #1, A1 301 00000148' 51C9 FFC6 DBF D1, Start2 302 303 0000014C' Start6: 304 0000014C' 4A29 0001 TST.B 1(A1) 305 00000150' 6706 BEQ Start7 306 00000152' 4869 0001 PEA 1(A1) 307 00000156' 5243 ADDQ #1, D3 308 309 00000158' Start7: 310 00000158' 4879 00000000' PEA EmpStr 311 0000015E' 244F MOVEA.L A7, A2 312 313 * Test if fpu 68881 is present 314 315 00000160' Start8: 316 00000160' 4EB9 00000000* JSR _fpuinit 317 318 ******* Execute main program ******************************************* 319 * 320 * Parameter passing: 321 * = Command line argument count (argc) 322 * = Pointer to command line argument pointer array (argv) 323 * = Pointer to tos environment string (env) 324 325 00000166' 3003 MOVE D3, D0 326 00000168' 204A MOVE.L A2, A0 327 0000016A' 224C MOVE.L A4, A1 328 0000016C' 4EB9 00000000* JSR main 329 330 331 PASM 68040 Macro Assembler Version Jun 21 1993 (C) 91 Pure Software Page 7 Source File: D:\PC\LIB\PCSTART.S 332 ******** exit *********************************************************** 333 * 334 * Terminate program 335 * 336 * Entry parameters: 337 * = Termination status : Integer 338 * Return parameters: 339 * Never returns 340 341 00000172' exit: 342 00000172' 3F00 MOVE.W D0,-(A7) 343 344 * Execute all registered atexit procedures 345 346 00000174' 2039 00000000` MOVE.L _AtExitVec,D0 347 0000017A' 6704 BEQ __exit 348 349 0000017C' 2040 MOVE.L D0,A0 350 0000017E' 4E90 JSR (A0) 351 352 353 * Deinitialize file system 354 355 00000180' __exit: 356 00000180' 2039 00000000` MOVE.L _FilSysVec,D0 357 00000186' 6704 BEQ Exit1 358 359 00000188' 2040 MOVE.L D0,A0 360 0000018A' 4E90 JSR (A0) 361 362 363 * Deallocate all heap blocks 364 365 0000018C' Exit1: 366 0000018C' 4EB9 00000000* JSR _FreeAll 367 368 369 * Program termination with return code 370 371 00000192' 3F3C 004C MOVE.W #76,-(A7) 372 00000196' 4E41 TRAP #1 373 00000198' 374 375 376 ******* Module end ***************************************************** 377 378 .END PASM 68040 Macro Assembler Version Jun 21 1993 (C) 91 Pure Software Page 8 Source File: D:\PC\LIB\PCSTART.S Symbols: ======== Name Value Scope Relocation base ACC 00000070 File TEXT APP 00000072 File TEXT BasePageSize 00000100 File OFFSET BssSegSize 0000001C File OFFSET BssSegStart 00000018 File OFFSET CmdLine 00000080 File OFFSET CurDrv 00000037 File OFFSET DataSegSize 00000014 File OFFSET DataSegStart 00000010 File OFFSET DtaPtr 00000020 File OFFSET EmpStr 00000060 File TEXT EnvStrPtr 0000002C File OFFSET Exit1 0000018C File TEXT PntPrcPtr 00000024 File OFFSET Reserved0 00000028 File OFFSET Reserved1 00000030 File OFFSET Reserved2 00000038 File OFFSET Start 00000000 File TEXT Start0 00000062 File TEXT Start1 000000C8 File TEXT Start2 00000110 File TEXT Start3 00000126 File TEXT Start4 00000130 File TEXT Start5 00000146 File TEXT Start6 0000014C File TEXT Start7 00000158 File TEXT Start8 00000160 File TEXT TextSegSize 0000000C File OFFSET TextSegStart 00000008 File OFFSET TpaEnd 00000004 File OFFSET TpaStart 00000000 File OFFSET _AtExitVec 00000002 Global DATA _BasPag 00000000 Global BSS _FilSysVec 00000006 Global DATA _FreeAll ******** External _PgmSize 0000000A Global BSS _RedirTab 0000000E Global BSS _StkLim 00000006 Global BSS _StkSize ******** External __bss 00000000 Global BSS __data 00000000 Global DATA __exit 00000180 Global TEXT __text 00000000 Global TEXT _app 00000004 Global BSS _fpuinit ******** External errno 00000000 Global DATA exit 00000172 Global TEXT getLen 000000F6 File TEXT main ******** External vallidLength 00000100 File TEXT