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