Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
548 serge 1
;*****************************************************************************
2
;*
3
;*                            Open Watcom Project
4
;*
5
;*    Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
6
;*
7
;*  ========================================================================
8
;*
9
;*    This file contains Original Code and/or Modifications of Original
10
;*    Code as defined in and that are subject to the Sybase Open Watcom
11
;*    Public License version 1.0 (the 'License'). You may not use this file
12
;*    except in compliance with the License. BY USING THIS FILE YOU AGREE TO
13
;*    ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
14
;*    provided with the Original Code and Modifications, and is also
15
;*    available at www.sybase.com/developer/opensource.
16
;*
17
;*    The Original Code and all software distributed under the License are
18
;*    distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
19
;*    EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
20
;*    ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
21
;*    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
22
;*    NON-INFRINGEMENT. Please see the License for the specific language
23
;*    governing rights and limitations under the License.
24
;*
25
;*  ========================================================================
26
;*
27
;* Description:  Memory model setup for interfacing with C code.
28
;*
29
;*****************************************************************************
30
 
31
 
32
_SMALL_CODE     =       00h
33
_BIG_CODE       =       01h
34
_SMALL_DATA     =       00h
35
_BIG_DATA       =       02h
36
_HUGE_DATA      =       04h
37
_LONG_INTS      =       08h
38
 
39
_USE_32_SEGS    =       10h
40
_386            =       10h     ; from old clib
41
 
42
_DS_PEGGED      =       20h     ; from old clib (used for Windows)
43
_TINY           =       40h     ; from old clib (formerly 10h)
44
 
45
_FLAT           =       ( _SMALL_CODE or _SMALL_DATA or _USE_32_SEGS )
46
_SMALL          =       ( _SMALL_CODE or _SMALL_DATA )
47
_COMPACT        =       ( _SMALL_CODE or _BIG_DATA )
48
_MEDIUM         =       ( _BIG_CODE   or _SMALL_DATA )
49
_LARGE          =       ( _BIG_CODE   or _BIG_DATA )
50
_HUGE           =       ( _BIG_CODE   or _HUGE_DATA )
51
 
52
_EMULATION      =       00h
53
_8087           =       01h
54
 
55
ifdef __WASM__
56
    ifdef __FLAT__
57
        _MODEL = _FLAT
58
    endif
59
    ifdef __SMALL__
60
        _MODEL = _SMALL
61
    endif
62
    ifdef __COMPACT__
63
        _MODEL = _COMPACT
64
    endif
65
    ifdef __MEDIUM__
66
        _MODEL = _MEDIUM
67
    endif
68
    ifdef __LARGE__
69
        _MODEL = _LARGE
70
    endif
71
    ifdef __HUGE__
72
        _MODEL = _HUGE
73
    endif
74
    ifdef __386__
75
        _MODEL = ( _MODEL or _USE_32_SEGS )
76
    endif
77
    ifdef __WINDOWS__
78
        if _MODEL and (_BIG_DATA or _HUGE_DATA)
79
            _MODEL = ( _MODEL or _DS_PEGGED )
80
        endif
81
    endif
82
    ifdef __FPC__
83
        _MATH = _EMULATION
84
    endif
85
    ifdef __FPI__
86
        _MATH = _8087
87
    endif
88
    ifdef __FPI87__
89
        _MATH = _8087
90
    endif
91
else
92
include         .\model.inc     ; defines _MODEL, _MATH symbols
93
endif
94
 
95
if _MODEL and _BIG_CODE
96
 
97
modstart        macro   modname,alignment
98
ifdef NDEBUG
99
                name    modname
100
endif
101
                ifb 
102
_TEXT           segment word public 'CODE'
103
                else
104
_TEXT           segment alignment public 'CODE'
105
                endif
106
                assume  cs:_TEXT
107
                endm
108
 
109
calli           macro   regname
110
                call    dword ptr [regname]
111
                endm
112
 
113
codeptr         macro   p1,p2
114
                ifb 
115
                extrn p1 : dword
116
                else
117
                extrn "&p1",p2 : dword
118
                endif
119
                endm
120
 
121
docall          macro   dest
122
                call    far ptr dest
123
                endm
124
 
125
dojmp           macro   dest
126
                jmp     far ptr dest
127
                endm
128
 
129
defp            macro   dsym,exp
130
         dsym   proc    far exp
131
                endm
132
 
133
defpe           macro   dsym
134
                ifdef _EXPORT
135
         dsym   proc    far export
136
                else
137
         dsym   proc    far
138
                endif
139
                endm
140
 
141
defn            macro   dsym
142
         dsym   proc    near
143
                endm
144
 
145
endproc         macro   dsym
146
         dsym   endp
147
                endm
148
 
149
epilog          macro
150
                if _MODEL and _USE_32_SEGS
151
                    pop     EBP
152
                    dec     EBP
153
                    mov     ESP,EBP
154
                else
155
                    pop     BP
156
                    dec     BP
157
                endif
158
                endm
159
 
160
prolog          macro
161
                if _MODEL and _USE_32_SEGS
162
                    inc     EBP
163
                    push    EBP
164
                    mov     EBP,ESP
165
                else
166
                    inc     BP
167
                    push    BP
168
                    mov     BP,SP
169
                endif
170
                endm
171
 
172
xdefp           macro   p1,p2
173
                ifb 
174
                public p1
175
                else
176
                public "&p1",p2
177
                endif
178
                endm
179
 
180
xref            macro   p1,p2
181
                ifb 
182
                extrn `p1` : far
183
                else
184
                extrn "&p1",`p2` : far
185
                endif
186
                endm
187
 
188
lcall           macro   dest
189
                push    cs
190
                call    near ptr dest
191
                endm
192
 
193
else
194
 
195
modstart        macro   modname,alignment
196
ifdef NDEBUG
197
                name    modname
198
endif
199
                if _MODEL and _USE_32_SEGS
200
_TEXT               segment use32 alignment public 'CODE'
201
                else
202
_TEXT               segment alignment public 'CODE'
203
                endif
204
                assume  cs:_TEXT
205
                endm
206
 
207
calli           macro   regname
208
                call    regname
209
                endm
210
 
211
codeptr         macro   p1,p2
212
                if _MODEL and _USE_32_SEGS
213
                    ifb 
214
                    extrn p1 : dword
215
                    else
216
                    extrn "&p1",p2 : dword
217
                    endif
218
                else
219
                    ifb 
220
                    extrn p1 : word
221
                    else
222
                    extrn "&p1",p2 : word
223
                    endif
224
                endif
225
                endm
226
 
227
defn            macro   dsym
228
         dsym   proc    near
229
                endm
230
 
231
defp            macro   dsym,exp
232
         dsym   proc    near exp
233
                endm
234
 
235
defpe           macro   dsym
236
                ifdef _EXPORT
237
         dsym       proc    near export
238
                else
239
         dsym       proc    near
240
                endif
241
                endm
242
 
243
docall          macro   dest
244
                call    dest
245
                endm
246
 
247
dojmp           macro   dest
248
                jmp     dest
249
                endm
250
 
251
endproc         macro   dsym
252
         dsym   endp
253
                endm
254
 
255
epilog          macro
256
                if _MODEL and _USE_32_SEGS
257
                    pop     EBP
258
                else
259
                    pop     BP
260
                endif
261
                endm
262
 
263
prolog          macro
264
                if _MODEL and _USE_32_SEGS
265
                    push    EBP
266
                    mov     EBP,ESP
267
                else
268
                    push    BP
269
                    mov     BP,SP
270
                endif
271
                endm
272
 
273
xdefp           macro   p1,p2
274
                ifb 
275
                public p1
276
                else
277
                public "&p1",p2
278
                endif
279
                endm
280
 
281
xref            macro   p1,p2
282
                ifb 
283
                extrn `p1` : near
284
                else
285
                extrn "&p1",`p2` : near
286
                endif
287
                endm
288
 
289
lcall           macro   dest
290
                call    dest
291
                endm
292
 
293
endif
294
 
295
endmod          macro
296
_TEXT           ends
297
                endm
298
 
299
dataseg         macro
300
DGROUP          group _DATA
301
assume          ds:DGROUP,ss:DGROUP
302
                if _MODEL and _USE_32_SEGS
303
_DATA               segment use32 dword public 'DATA'
304
                else
305
_DATA               segment word public 'DATA'
306
                endif
307
                endm
308
datasegment     macro
309
                dataseg ; should be phased out
310
                endm
311
 
312
enddata         macro
313
_DATA   ends
314
                endm
315
 
316
bss_segment     macro
317
                if _MODEL and _USE_32_SEGS
318
_BSS                segment use32 dword public 'BSS'
319
                else
320
_BSS                segment word public 'BSS'
321
                endif
322
DGROUP          group _BSS
323
                assume  ds:DGROUP
324
                endm
325
 
326
endbss          macro
327
_BSS            ends
328
                endm
329
 
330
alias_function  macro   alias, function
331
                ifb 
332
                    xref    "C",_&alias
333
                else
334
                    xref    "C",function
335
                endif
336
                .code
337
                public      "C",`alias`
338
                ifdef _EXPORT
339
         `alias`    proc    export
340
                else
341
         `alias`    proc
342
                endif
343
                ifb 
344
                    jmp     _&alias
345
                else
346
                    jmp     `function`
347
                endif
348
         `alias`    endp
349
                endm
350
 
351
xred            macro   p1,p2,p3
352
                ifb 
353
                extrn p1 : p2
354
                else
355
                extrn "&p1",p2 : p3
356
                endif
357
                endm
358