|
|
1.1 root 1: /* a9 -- pdp-11 assembler pass 1 */
2: #include "as2.h"
3:
4: /* key to types
5: /*
6: /* T_UNDEF 0 undefined
7: /* T_ABS 1 absolute
8: /* T_TEXT 2 text
9: /* T_DATA 3 data
10: /* T_BSS 4 bss
11: /* T_FLOPD 5 flop freg,dst (movfo, = stcfd)
12: /* T_BRANCH 6 branch
13: /* T_JSR 7 jsr
14: /* T_RTS 010 rts
15: /* T_SYS 011 sys
16: /* T_MOVF 012 movf (=ldf,stf)
17: /* T_DOUBLE 013 double operand (mov)
18: /* T_FLOPF 014 flop fsrc,freg (addf)
19: /* T_SINGLE 015 single operand (clr)
20: /* T_BYTE 016 .byte
21: /* T_STRING 017 string (.ascii, "<")
22: /* T_EVEN 020 .even
23: /* T_IF 021 .if
24: /* T_ENDIF 022 .endif
25: /* T_GLOBL 023 .globl
26: /* T_REG 024 register
27: /* T__TEXT 025 .text
28: /* T__DATA 026 .data
29: /* T__BSS 027 .bss
30: /* T_MUL 030 mul,div, etc
31: /* T_SOB 031 sob
32: /* T_COMM 032 .comm
33: /* T_ESTTXT 033 estimated text
34: /* T_ESTDAT 034 estimated data
35: /* T_JBR 035 jbr
36: /* T_JXX 036 jeq, jne, etc
37: */
38:
39: struct expr symtab[] = {
40:
41: {T_TEXT, 000000}, /* . */
42: {T_ABS, 000000}, /* .. */
43:
44: {T_REG, 000000}, /* r0 */
45: {T_REG, 000001}, /* r1 */
46: {T_REG, 000002}, /* r2 */
47: {T_REG, 000003}, /* r3 */
48: {T_REG, 000004}, /* r4 */
49: {T_REG, 000005}, /* r5 */
50: {T_REG, 000006}, /* sp */
51: {T_REG, 000007}, /* pc */
52:
53: #if eae!=0
54: {T_ABS, 0177570}, /* csw */
55: {T_ABS, 0177300}, /* div */
56: {T_ABS, 0177302}, /* ac */
57: {T_ABS, 0177304}, /* mq */
58: {T_ABS, 0177306}, /* mul */
59: {T_ABS, 0177310}, /* sc */
60: {T_ABS, 0177311}, /* sr */
61: {T_ABS, 0177312}, /* nor */
62: {T_ABS, 0177314}, /* lsh */
63: {T_ABS, 0177316}, /* ash */
64: #endif
65:
66: {T_DOUBLE, 0010000}, /* mov */
67: {T_DOUBLE, 0110000}, /* movb */
68: {T_DOUBLE, 0020000}, /* cmp */
69: {T_DOUBLE, 0120000}, /* cmpb */
70: {T_DOUBLE, 0030000}, /* bit */
71: {T_DOUBLE, 0130000}, /* bitb */
72: {T_DOUBLE, 0040000}, /* bic */
73: {T_DOUBLE, 0140000}, /* bicb */
74: {T_DOUBLE, 0050000}, /* bis */
75: {T_DOUBLE, 0150000}, /* bisb */
76: {T_DOUBLE, 0060000}, /* add */
77: {T_DOUBLE, 0160000}, /* sub */
78:
79: {T_BRANCH, 0000400}, /* br */
80: {T_BRANCH, 0001000}, /* bne */
81: {T_BRANCH, 0001400}, /* beq */
82: {T_BRANCH, 0002000}, /* bge */
83: {T_BRANCH, 0002400}, /* blt */
84: {T_BRANCH, 0003000}, /* bgt */
85: {T_BRANCH, 0003400}, /* ble */
86: {T_BRANCH, 0100000}, /* bpl */
87: {T_BRANCH, 0100400}, /* bmi */
88: {T_BRANCH, 0101000}, /* bhi */
89: {T_BRANCH, 0101400}, /* blos */
90: {T_BRANCH, 0102000}, /* bvc */
91: {T_BRANCH, 0102400}, /* bvs */
92: {T_BRANCH, 0103000}, /* bhis */
93: {T_BRANCH, 0103000}, /* bec */
94: {T_BRANCH, 0103000}, /* bcc */
95: {T_BRANCH, 0103400}, /* blo */
96: {T_BRANCH, 0103400}, /* bcs */
97: {T_BRANCH, 0103400}, /* bes */
98:
99: {T_JBR, 0000400}, /* jbr */
100: {T_JXX, 0001000}, /* jne */
101: {T_JXX, 0001400}, /* jeq */
102: {T_JXX, 0002000}, /* jge */
103: {T_JXX, 0002400}, /* jlt */
104: {T_JXX, 0003000}, /* jgt */
105: {T_JXX, 0003400}, /* jle */
106: {T_JXX, 0100000}, /* jpl */
107: {T_JXX, 0100400}, /* jmi */
108: {T_JXX, 0101000}, /* jhi */
109: {T_JXX, 0101400}, /* jlos */
110: {T_JXX, 0102000}, /* jvc */
111: {T_JXX, 0102400}, /* jvs */
112: {T_JXX, 0103000}, /* jhis */
113: {T_JXX, 0103000}, /* jec */
114: {T_JXX, 0103000}, /* jcc */
115: {T_JXX, 0103400}, /* jlo */
116: {T_JXX, 0103400}, /* jcs */
117: {T_JXX, 0103400}, /* jes */
118:
119: {T_SINGLE, 0005000}, /* clr */
120: {T_SINGLE, 0105000}, /* clrb */
121: {T_SINGLE, 0005100}, /* com */
122: {T_SINGLE, 0105100}, /* comb */
123: {T_SINGLE, 0005200}, /* inc */
124: {T_SINGLE, 0105200}, /* incb */
125: {T_SINGLE, 0005300}, /* dec */
126: {T_SINGLE, 0105300}, /* decb */
127: {T_SINGLE, 0005400}, /* neg */
128: {T_SINGLE, 0105400}, /* negb */
129: {T_SINGLE, 0005500}, /* adc */
130: {T_SINGLE, 0105500}, /* adcb */
131: {T_SINGLE, 0005600}, /* sbc */
132: {T_SINGLE, 0105600}, /* sbcb */
133: {T_SINGLE, 0005700}, /* tst */
134: {T_SINGLE, 0105700}, /* tstb */
135: {T_SINGLE, 0006000}, /* ror */
136: {T_SINGLE, 0106000}, /* rorb */
137: {T_SINGLE, 0006100}, /* rol */
138: {T_SINGLE, 0106100}, /* rolb */
139: {T_SINGLE, 0006200}, /* asr */
140: {T_SINGLE, 0106200}, /* asrb */
141: {T_SINGLE, 0006300}, /* asl */
142: {T_SINGLE, 0106300}, /* aslb */
143: {T_SINGLE, 0000100}, /* jmp */
144: {T_SINGLE, 0000300}, /* swab */
145:
146: {T_JSR, 0004000}, /* jsr */
147:
148: {T_RTS, 000200}, /* rts */
149:
150: {T_SYS, 0104400}, /* sys */
151:
152: {T_ABS, 0000241}, /* clc */
153: {T_ABS, 0000242}, /* clv */
154: {T_ABS, 0000244}, /* clz */
155: {T_ABS, 0000250}, /* cln */
156: {T_ABS, 0000261}, /* sec */
157: {T_ABS, 0000262}, /* sev */
158: {T_ABS, 0000264}, /* sez */
159: {T_ABS, 0000270}, /* sen */
160:
161: {T_ABS, 0170000}, /* cfcc */
162: {T_ABS, 0170001}, /* setf */
163: {T_ABS, 0170011}, /* setd */
164: {T_ABS, 0170002}, /* seti */
165: {T_ABS, 0170012}, /* setl */
166: {T_SINGLE, 0170400}, /* clrf */
167: {T_SINGLE, 0170700}, /* negf */
168: {T_SINGLE, 0170600}, /* absf */
169: {T_SINGLE, 0170500}, /* tstf */
170: {T_MOVF, 0172400}, /* movf */
171: {T_FLOPF, 0177000}, /* movif */
172: {T_FLOPD, 0175400}, /* movfi */
173: {T_FLOPF, 0177400}, /* movof */
174: {T_FLOPD, 0176000}, /* movfo */
175: {T_FLOPF, 0172000}, /* addf */
176: {T_FLOPF, 0173000}, /* subf */
177: {T_FLOPF, 0171000}, /* mulf */
178: {T_FLOPF, 0174400}, /* divf */
179: {T_FLOPF, 0173400}, /* cmpf */
180: {T_FLOPF, 0171400}, /* modf */
181: {T_FLOPF, 0176400}, /* movie */
182: {T_FLOPD, 0175000}, /* movei */
183: {T_SINGLE, 0170100}, /* ldfps */
184: {T_SINGLE, 0170200}, /* stfps */
185: {T_REG, 000000}, /* fr0 */
186: {T_REG, 000001}, /* fr1 */
187: {T_REG, 000002}, /* fr2 */
188: {T_REG, 000003}, /* fr3 */
189: {T_REG, 000004}, /* fr4 */
190: {T_REG, 000005}, /* fr5 */
191:
192: {T_MUL, 072000}, /* als */
193: {T_MUL, 073000}, /* alsc */
194: {T_MUL, 070000}, /* mpy */
195: #if (eae-1)!=0
196: {T_MUL, 070000}, /* mul */
197: {T_MUL, 071000}, /* div */
198: {T_MUL, 072000}, /* ash */
199: {T_MUL, 073000}, /* ashc */
200: #endif
201: {T_MUL, 071000}, /* dvd */
202: {T_JSR, 074000}, /* xor */
203: {T_SINGLE, 006700}, /* sxt */
204: {T_SYS, 006400}, /* mark */
205: {T_SOB, 077000}, /* sob */
206:
207: {T_BYTE, 000000}, /* .byte */
208: {T_EVEN, 000000}, /* .even */
209: {T_IF, 000000}, /* .if */
210: {T_ENDIF, 000000}, /* .endif */
211: {T_GLOBL, 000000}, /* .globl */
212: {T__TEXT, 000000}, /* .text */
213: {T__DATA, 000000}, /* .data */
214: {T__BSS, 000000}, /* .bss */
215: {T_COMM, 000000}, /* .comm */
216:
217: };
218:
219: short *dotrel = &symtab[0].typ;
220: short *dot = &symtab[0].val;
221: short *dotdot = &symtab[1].val;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.