465 lines
21 KiB
Plaintext
465 lines
21 KiB
Plaintext
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
|