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