|
|
1.1 root 1: /* defs.h 1.1 86/07/20 */
2:
3: #include "../tahoe/psl.h"
4:
5: /************************************************/
6: /* Basic 6/32 machine definitions */
7: /************************************************/
8:
9: #define FALSE 0
10: #define TRUE (~FALSE)
11: #define READ 0
12: #define WRITE 1
13:
14: /*
15: * Some floatng point stuff.
16: */
17:
18: #define exp(x) ( (x) & 0x7f800000 )
19: #define reserved(x) ( (x) < 0 && (exp(x) == 0) )
20:
21: /************************************************/
22: /* */
23: /* Opcodes description table stuff */
24: /* */
25: /************************************************/
26:
27: struct operand_des { /* Operand descriptor in great table */
28: int add_modes; /* Allowed addressing modes */
29: int length; /* Length of this data (bytes) */
30: };
31:
32: #define Add 1 /* Any address except PC relative & ablsolute */
33: #define Dir 2 /* Direct register */
34: #define Imm 4 /* Immediate datum */
35: #define Lit 8 /* Short literal */
36: #define Brd 0x10 /* Branch displacement */
37: #define Pcrel 0x20 /* PC relative allowed */
38: #define Abs 0x40 /* Absolute address allowed */
39: #define SPmode 0x80 /* The stack pointer was involved , -(sp) or (sp)+ */
40: #define ADDFIELD 0xff /* Allowed addressing modes */
41:
42: #define W 0x100 /* Access is write */
43: #define R 0x200 /* Access is 'read' */
44: #define Indx 0x400 /* Indexable base address */
45: #define NOVF 0x800 /* Inhibit overflow check when writing byte/word */
46: #define FLP 0x1000 /* Floating point operand */
47:
48: #define M (R|W) /* Access is 'modify' */
49: #define PR (Pcrel|Abs)
50: #define ADDR (PR|Add)
51: #define ADI (ADDR|Dir|Imm|Lit)
52: #define AD (ADDR|Dir)
53: #define MAD (M|ADDR|Dir)
54: #define WAD (W|ADDR|Dir)
55: #define WD (W|Dir)
56: #define NWAD (NOVF|WAD)
57: #define NMAD (NOVF|MAD)
58: #define RADI (R|ADI) /* Readable datum */
59: #define RAD (R|AD) /* Modify type access for destinations */
60: #define RADF (RAD|FLP)
61: #define WADF (WAD|FLP)
62:
63:
64:
65:
66: struct opcode_des { /* One line in the big table */
67: int (*routine) (); /* Handler for this opcode */
68: struct operand_des operand[4]; /* Up to 4 operands */
69: };
70:
71: /************************************************/
72: /* */
73: /* Operand descriptor as returned */
74: /* by the address mode decoder */
75: /* */
76: /************************************************/
77:
78: struct oprnd {
79: long mode; /* Add, Imm, Dir or Brd */
80: long reg_number; /* returned for Dir mode */
81: long address; /* Relevant for Add or Brd */
82: long data;
83: long data2; /* Up to 8 bytes returned */
84: long length; /* Length of data manipulated */
85: };
86:
87: /************************************************/
88: /* */
89: /* Some PSL macros (usefull) */
90: /* */
91: /************************************************/
92: #define carry (psl & PSL_C)
93: #define negative (psl & PSL_N)
94: #define overflow (psl & PSL_V)
95: #define zero (psl & PSL_Z)
96:
97: #define carry_1 psl |= PSL_C
98: #define negative_1 psl |= PSL_N
99: #define overflow_1 psl |= PSL_V
100: #define zero_1 psl |= PSL_Z
101:
102: #define carry_0 psl &= ~PSL_C
103: #define negative_0 psl &= ~PSL_N
104: #define overflow_0 psl &= ~PSL_V
105: #define zero_0 psl &= ~PSL_Z
106:
107:
108: struct oprnd *operand ();
109: struct opcode_des Table[];
110:
111: struct double_length
112: {
113: int low;
114: int high;
115: };
116:
117: typedef struct double_length quadword;
118:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.