Files
SyncHome/trunk/workspace/Atari/PURE_C/LIB/PCSTART.LST
2023-03-13 08:36:51 +00:00

465 lines
21 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 * <D0.W> = Command line argument count (argc)
322 * <A0.L> = Pointer to command line argument pointer array (argv)
323 * <A1.L> = 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 * <D0.W> = 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