|
|
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.