00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include <sys/types.h>
00028 #include <a.out.h>
00029 #include <fcntl.h>
00030 #include <unistd.h>
00031 #include <string.h>
00032 #include <stdlib.h>
00033 #include <stdio.h>
00034
00035 #define MAXSYM 1500
00036
00037 extern struct nlist
00038 symtab[MAXSYM];
00039
00040 extern struct reloc
00041 relo[MAXSYM];
00042
00043 extern int symptr;
00044 extern int relptr;
00045
00046 struct opcode
00047 {
00048 char *text;
00049 void (*func)();
00050 unsigned min;
00051 unsigned max;
00052 };
00053
00054 extern struct opcode
00055 optab[256];
00056
00057 extern char *REGS[];
00058 extern char *REGS0[];
00059 extern char *REGS1[];
00060
00061 #define AL REGS[0]
00062 #define CL REGS[1]
00063 #define DL REGS[2]
00064 #define BL REGS[3]
00065 #define AH REGS[4]
00066 #define CH REGS[5]
00067 #define DH REGS[6]
00068 #define BH REGS[7]
00069 #define AX REGS[8]
00070 #define CX REGS[9]
00071 #define DX REGS[10]
00072 #define BX REGS[11]
00073 #define SP REGS[12]
00074 #define BP REGS[13]
00075 #define SI REGS[14]
00076 #define DI REGS[15]
00077 #define ES REGS[16]
00078 #define CS REGS[17]
00079 #define SS REGS[18]
00080 #define DS REGS[19]
00081 #define BX_SI REGS0[0]
00082 #define BX_DI REGS0[1]
00083 #define BP_SI REGS0[2]
00084 #define BP_DI REGS0[3]
00085
00086 extern int symrank[6][6];
00087 extern unsigned long PC;
00088 extern int segflg;
00089 extern int objflg;
00090
00091 #define OBJMAX 8
00092
00093 extern unsigned char
00094 objbuf[OBJMAX];
00095
00096 extern int objptr;
00097
00098 extern char ADD[],
00099 OR[],
00100 ADC[],
00101 SBB[],
00102 AND[],
00103 SUB[],
00104 XOR[],
00105 CMP[],
00106 NOT[],
00107 NEG[],
00108 MUL[],
00109 DIV[],
00110 MOV[],
00111 ESC[],
00112 TEST[],
00113 AMBIG[];
00114
00115 extern char *OPFAM[];
00116 extern struct exec HDR;
00117
00118 #define LOOK_ABS 0
00119 #define LOOK_REL 1
00120 #define LOOK_LNG 2
00121
00122 #define TR_STD 0
00123 #define TR_SEG 8
00124
00125
00126 #define FETCH(p) ++PC; p = getchar() & 0xff; objbuf[objptr++] = p
00127
00128
00129
00130 _PROTOTYPE(void eshand, (int j ));
00131 _PROTOTYPE(void fphand, (int j ));
00132 _PROTOTYPE(void inhand, (int j ));
00133
00134
00135 _PROTOTYPE(void objini, (int j ));
00136 _PROTOTYPE(void objout, (void));
00137 _PROTOTYPE(void badseq, (int j, int k ));
00138 _PROTOTYPE(void dfhand, (int j ));
00139 _PROTOTYPE(void sbhand, (int j ));
00140 _PROTOTYPE(void aohand, (int j ));
00141 _PROTOTYPE(void sjhand, (int j ));
00142 _PROTOTYPE(void imhand, (int j ));
00143 _PROTOTYPE(void mvhand, (int j ));
00144 _PROTOTYPE(void mshand, (int j ));
00145 _PROTOTYPE(void pohand, (int j ));
00146 _PROTOTYPE(void cihand, (int j ));
00147 _PROTOTYPE(void mihand, (int j ));
00148 _PROTOTYPE(void mqhand, (int j ));
00149 _PROTOTYPE(void tqhand, (int j ));
00150 _PROTOTYPE(void rehand, (int j ));
00151 _PROTOTYPE(void mmhand, (int j ));
00152 _PROTOTYPE(void srhand, (int j ));
00153 _PROTOTYPE(void aahand, (int j ));
00154 _PROTOTYPE(void iohand, (int j ));
00155 _PROTOTYPE(void ljhand, (int j ));
00156 _PROTOTYPE(void mahand, (int j ));
00157 _PROTOTYPE(void mjhand, (int j ));
00158
00159
00160 _PROTOTYPE(void main, (int argc, char **argv ));
00161
00162
00163 _PROTOTYPE(char *getnam, (int k ));
00164 _PROTOTYPE(int lookext, (long off, long loc, char *buf ));
00165 _PROTOTYPE(char *lookup, (long addr, int type, int kind, long ext ));
00166 _PROTOTYPE(char *mtrans, (int c, int m, int type ));
00167 _PROTOTYPE(void mtrunc, (char *a ));