|
|
1.1 root 1: /* (-lgl
2: * COHERENT Version 3.2
3: * Copyright (c) 1982, 1991 by Mark Williams Company.
4: * All rights reserved. May not be copied without permission.
5: -lgl) */
6: /* larges.h */
7: /* Model-dependent definitions for i8086 assembler sources. */
8:
9: #ifndef __LARGES_H__
10: #define __LARGES_H__
11:
12: #if LARGE
13: #define LARGECODE 1
14: #define LARGEDATA 1
15: #endif
16:
17: #if LARGECODE
18: /* LARGE code: calls, jumps and returns are far, code pointer is 4 bytes. */
19: #define Gcall xcall
20: #define Gicall xicall
21: #define Gijmp xijmp
22: #define Gjmp xjmp
23: #define Gptr .dword
24: #define Gret xret
25: #define CPL 4
26: #else
27: /* SMALL code: calls, jumps and returns are near, code pointer is 2 bytes. */
28: #define Gcall call
29: #define Gicall icall
30: #define Gijmp ijmp
31: #define Gjmp jmp
32: #define Gptr .word
33: #define Gret ret
34: #define CPL 2
35: #endif
36:
37: #if LARGEDATA
38: /* LARGE data: segment registers must be loaded to map data, escapes required. */
39: /* Data pointer is 4 bytes. */
40: #define Gdptr .dword
41: #define Lds lds
42: #define Les les
43: #define Map(sreg, temp, val) mov temp, val; mov sreg, temp
44: #define Pes es:
45: #define Pss ss:
46: #define DPL 4
47: #else
48: /* SMALL data: DS==ES==SS, no escapes required. */
49: /* Data pointer is 2 bytes. */
50: #define Gdptr .word
51: #define Lds mov
52: #define Les mov
53: #define Map(sreg, temp, val)
54: #define Pes
55: #define Pss
56: #define DPL 2
57: #endif
58:
59: /* Function entry and exit: preserve C register variables, initialize BP. */
60: /* No automatics allocated. */
61: #define Enter(x) .globl x; x: push si; push di; push bp; mov bp, sp
62: #define Leave pop bp; pop di; pop si; Gret
63: #define LEFTARG CPL+6
64:
65: #define RASIZE CPL
66: #define PTRSIZE DPL
67:
68: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.