|
|
1.1 ! root 1: /* a9 -- pdp-11 assembler pass 1 */ ! 2: #include "as1.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 symtab symtab[] = { ! 40: ! 41: {".", T_TEXT, 000000}, ! 42: {"..", T_ABS, 000000}, ! 43: ! 44: {"r0", T_REG, 000000}, ! 45: {"r1", T_REG, 000001}, ! 46: {"r2", T_REG, 000002}, ! 47: {"r3", T_REG, 000003}, ! 48: {"r4", T_REG, 000004}, ! 49: {"r5", T_REG, 000005}, ! 50: {"sp", T_REG, 000006}, ! 51: {"pc", T_REG, 000007}, ! 52: ! 53: #if eae!=0 ! 54: {"csw", T_ABS, 0177570}, ! 55: {"div", T_ABS, 0177300}, ! 56: {"ac", T_ABS, 0177302}, ! 57: {"mq", T_ABS, 0177304}, ! 58: {"mul", T_ABS, 0177306}, ! 59: {"sc", T_ABS, 0177310}, ! 60: {"sr", T_ABS, 0177311}, ! 61: {"nor", T_ABS, 0177312}, ! 62: {"lsh", T_ABS, 0177314}, ! 63: {"ash", T_ABS, 0177316}, ! 64: #endif ! 65: ! 66: {"mov", T_DOUBLE, 0010000}, ! 67: {"movb", T_DOUBLE, 0110000}, ! 68: {"cmp", T_DOUBLE, 0020000}, ! 69: {"cmpb", T_DOUBLE, 0120000}, ! 70: {"bit", T_DOUBLE, 0030000}, ! 71: {"bitb", T_DOUBLE, 0130000}, ! 72: {"bic", T_DOUBLE, 0040000}, ! 73: {"bicb", T_DOUBLE, 0140000}, ! 74: {"bis", T_DOUBLE, 0050000}, ! 75: {"bisb", T_DOUBLE, 0150000}, ! 76: {"add", T_DOUBLE, 0060000}, ! 77: {"sub", T_DOUBLE, 0160000}, ! 78: ! 79: {"br", T_BRANCH, 0000400}, ! 80: {"bne", T_BRANCH, 0001000}, ! 81: {"beq", T_BRANCH, 0001400}, ! 82: {"bge", T_BRANCH, 0002000}, ! 83: {"blt", T_BRANCH, 0002400}, ! 84: {"bgt", T_BRANCH, 0003000}, ! 85: {"ble", T_BRANCH, 0003400}, ! 86: {"bpl", T_BRANCH, 0100000}, ! 87: {"bmi", T_BRANCH, 0100400}, ! 88: {"bhi", T_BRANCH, 0101000}, ! 89: {"blos", T_BRANCH, 0101400}, ! 90: {"bvc", T_BRANCH, 0102000}, ! 91: {"bvs", T_BRANCH, 0102400}, ! 92: {"bhis", T_BRANCH, 0103000}, ! 93: {"bec", T_BRANCH, 0103000}, ! 94: {"bcc", T_BRANCH, 0103000}, ! 95: {"blo", T_BRANCH, 0103400}, ! 96: {"bcs", T_BRANCH, 0103400}, ! 97: {"bes", T_BRANCH, 0103400}, ! 98: ! 99: {"jbr", T_JBR, 0000400}, ! 100: {"jne", T_JXX, 0001000}, ! 101: {"jeq", T_JXX, 0001400}, ! 102: {"jge", T_JXX, 0002000}, ! 103: {"jlt", T_JXX, 0002400}, ! 104: {"jgt", T_JXX, 0003000}, ! 105: {"jle", T_JXX, 0003400}, ! 106: {"jpl", T_JXX, 0100000}, ! 107: {"jmi", T_JXX, 0100400}, ! 108: {"jhi", T_JXX, 0101000}, ! 109: {"jlos", T_JXX, 0101400}, ! 110: {"jvc", T_JXX, 0102000}, ! 111: {"jvs", T_JXX, 0102400}, ! 112: {"jhis", T_JXX, 0103000}, ! 113: {"jec", T_JXX, 0103000}, ! 114: {"jcc", T_JXX, 0103000}, ! 115: {"jlo", T_JXX, 0103400}, ! 116: {"jcs", T_JXX, 0103400}, ! 117: {"jes", T_JXX, 0103400}, ! 118: ! 119: {"clr", T_SINGLE, 0005000}, ! 120: {"clrb", T_SINGLE, 0105000}, ! 121: {"com", T_SINGLE, 0005100}, ! 122: {"comb", T_SINGLE, 0105100}, ! 123: {"inc", T_SINGLE, 0005200}, ! 124: {"incb", T_SINGLE, 0105200}, ! 125: {"dec", T_SINGLE, 0005300}, ! 126: {"decb", T_SINGLE, 0105300}, ! 127: {"neg", T_SINGLE, 0005400}, ! 128: {"negb", T_SINGLE, 0105400}, ! 129: {"adc", T_SINGLE, 0005500}, ! 130: {"adcb", T_SINGLE, 0105500}, ! 131: {"sbc", T_SINGLE, 0005600}, ! 132: {"sbcb", T_SINGLE, 0105600}, ! 133: {"tst", T_SINGLE, 0005700}, ! 134: {"tstb", T_SINGLE, 0105700}, ! 135: {"ror", T_SINGLE, 0006000}, ! 136: {"rorb", T_SINGLE, 0106000}, ! 137: {"rol", T_SINGLE, 0006100}, ! 138: {"rolb", T_SINGLE, 0106100}, ! 139: {"asr", T_SINGLE, 0006200}, ! 140: {"asrb", T_SINGLE, 0106200}, ! 141: {"asl", T_SINGLE, 0006300}, ! 142: {"aslb", T_SINGLE, 0106300}, ! 143: {"jmp", T_SINGLE, 0000100}, ! 144: {"swab", T_SINGLE, 0000300}, ! 145: ! 146: {"jsr", T_JSR, 0004000}, ! 147: ! 148: {"rts", T_RTS, 000200}, ! 149: ! 150: {"sys", T_SYS, 0104400}, ! 151: ! 152: {"clc", T_ABS, 0000241}, ! 153: {"clv", T_ABS, 0000242}, ! 154: {"clz", T_ABS, 0000244}, ! 155: {"cln", T_ABS, 0000250}, ! 156: {"sec", T_ABS, 0000261}, ! 157: {"sev", T_ABS, 0000262}, ! 158: {"sez", T_ABS, 0000264}, ! 159: {"sen", T_ABS, 0000270}, ! 160: ! 161: {"cfcc", T_ABS, 0170000}, ! 162: {"setf", T_ABS, 0170001}, ! 163: {"setd", T_ABS, 0170011}, ! 164: {"seti", T_ABS, 0170002}, ! 165: {"setl", T_ABS, 0170012}, ! 166: {"clrf", T_SINGLE, 0170400}, ! 167: {"negf", T_SINGLE, 0170700}, ! 168: {"absf", T_SINGLE, 0170600}, ! 169: {"tstf", T_SINGLE, 0170500}, ! 170: {"movf", T_MOVF, 0172400}, ! 171: {"movif", T_FLOPF, 0177000}, ! 172: {"movfi", T_FLOPD, 0175400}, ! 173: {"movof", T_FLOPF, 0177400}, ! 174: {"movfo", T_FLOPD, 0176000}, ! 175: {"addf", T_FLOPF, 0172000}, ! 176: {"subf", T_FLOPF, 0173000}, ! 177: {"mulf", T_FLOPF, 0171000}, ! 178: {"divf", T_FLOPF, 0174400}, ! 179: {"cmpf", T_FLOPF, 0173400}, ! 180: {"modf", T_FLOPF, 0171400}, ! 181: {"movie", T_FLOPF, 0176400}, ! 182: {"movei", T_FLOPD, 0175000}, ! 183: {"ldfps", T_SINGLE, 0170100}, ! 184: {"stfps", T_SINGLE, 0170200}, ! 185: {"fr0", T_REG, 000000}, ! 186: {"fr1", T_REG, 000001}, ! 187: {"fr2", T_REG, 000002}, ! 188: {"fr3", T_REG, 000003}, ! 189: {"fr4", T_REG, 000004}, ! 190: {"fr5", T_REG, 000005}, ! 191: ! 192: {"als", T_MUL, 072000}, ! 193: {"alsc", T_MUL, 073000}, ! 194: {"mpy", T_MUL, 070000}, ! 195: #if (eae-1)!=0 ! 196: {"mul", T_MUL, 070000}, ! 197: {"div", T_MUL, 071000}, ! 198: {"ash", T_MUL, 072000}, ! 199: {"ashc", T_MUL, 073000}, ! 200: #endif ! 201: {"dvd", T_MUL, 071000}, ! 202: {"xor", T_JSR, 074000}, ! 203: {"sxt", T_SINGLE, 006700}, ! 204: {"mark", T_SYS, 006400}, ! 205: {"sob", T_SOB, 077000}, ! 206: ! 207: {".byte", T_BYTE, 000000}, ! 208: {".even", T_EVEN, 000000}, ! 209: {".if", T_IF, 000000}, ! 210: {".endif", T_ENDIF, 000000}, ! 211: {".globl", T_GLOBL, 000000}, ! 212: {".text", T__TEXT, 000000}, ! 213: {".data", T__DATA, 000000}, ! 214: {".bss", T__BSS, 000000}, ! 215: {".comm", T_COMM, 000000}, ! 216: }; ! 217: ! 218: short *dotrel = &symtab[0].sval.typ; ! 219: short *dot = &symtab[0].sval.val; ! 220: ! 221: setup() ! 222: { ! 223: register int i,h; ! 224: register char *cp; ! 225: register struct symtab *sp, **hp; ! 226: ! 227: for (sp=symtab; sp<&symtab[sizeof(symtab)/sizeof(*sp)]; sp++) { ! 228: h=0; cp= &sp->name[0]; ! 229: for (i=NCPS; --i>=0; ) { ! 230: if (*cp==0) break; ! 231: h+= *cp++; h=((h&0377)<<8)|((h>>8)&0377); ! 232: } ! 233: hp=hshtab+(((long)(unsigned short)h)%HSHSIZ); ! 234: h= ((long)(unsigned short)h)/HSHSIZ; ! 235: for (;;) { ! 236: if ((hp-=h)<=hshtab) hp+=HSHSIZ; ! 237: if (*--hp==0) break; ! 238: } ! 239: *hp=sp; ! 240: } ! 241: symend=usymtab=(struct symtab *)sbrk(0); ! 242: } ! 243: ! 244:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.