/* ** @(#) dis.h, Ver. 2.1 created 00:00:00 87/09/01 */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright (C) 1987 G. M. Harding, all rights reserved * * * * Permission to copy and redistribute is hereby granted, * * provided full source code, with all copyright notices, * * accompanies any redistribution. * * * * This file contains declarations and definitions used by * * the 8088 disassembler program. The program was designed * * for execution on a machine of its own type (i.e., it is * * not designed as a cross-disassembler); consequently, A * * SIXTEEN-BIT INTEGER SIZE HAS BEEN ASSUMED. This assump- * * tion is not particularly important, however, except in * * the machine-specific portions of the code (i.e., the * * handler routines and the optab[] array). It should be * * possible to override this assumption, for execution on * * 32-bit machines, by use of a pre-processor directive * * (see below); however, this has not been tested. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include /* Object file format definitions */ #include /* System file-control definitions */ #include #include #include #include /* System standard I/O definitions */ #define MAXSYM 1500 /* Maximum entries in symbol table */ extern struct nlist /* Array to hold the symbol table */ symtab[MAXSYM]; extern struct reloc /* Array to hold relocation table */ relo[MAXSYM]; extern int symptr; /* Index into the symtab[] array */ extern int relptr; /* Index into the relo[] array */ struct opcode /* Format for opcode data records */ { char *text; /* Pointer to mnemonic text */ void (*func)(); /* Pointer to handler routine */ unsigned min; /* Minimum # of object bytes */ unsigned max; /* Maximum # of object bytes */ }; extern struct opcode /* Array to hold the opcode table */ optab[256]; extern char *REGS[]; /* Table of register names */ extern char *REGS0[]; /* Mode 0 register name table */ extern char *REGS1[]; /* Mode 1 register name table */ #define AL REGS[0] /* CPU register manifests */ #define CL REGS[1] #define DL REGS[2] #define BL REGS[3] #define AH REGS[4] #define CH REGS[5] #define DH REGS[6] #define BH REGS[7] #define AX REGS[8] #define CX REGS[9] #define DX REGS[10] #define BX REGS[11] #define SP REGS[12] #define BP REGS[13] #define SI REGS[14] #define DI REGS[15] #define ES REGS[16] #define CS REGS[17] #define SS REGS[18] #define DS REGS[19] #define BX_SI REGS0[0] #define BX_DI REGS0[1] #define BP_SI REGS0[2] #define BP_DI REGS0[3] extern int symrank[6][6]; /* Symbol type/rank matrix */ extern unsigned long PC; /* Current program counter */ extern int segflg; /* Flag: segment override in effect */ extern int objflg; /* Flag: output object as a comment */ #define OBJMAX 8 /* Size of the object code buffer */ extern unsigned char /* Internal buffer for object code */ objbuf[OBJMAX]; extern int objptr; /* Index into the objbuf[] array */ extern char ADD[], /* Opcode family mnemonic strings */ OR[], ADC[], SBB[], AND[], SUB[], XOR[], CMP[], NOT[], NEG[], MUL[], DIV[], MOV[], ESC[], TEST[], AMBIG[]; extern char *OPFAM[]; /* Indexed mnemonic family table */ extern struct exec HDR; /* Holds the object file's header */ #define LOOK_ABS 0 /* Arguments to lookup() function */ #define LOOK_REL 1 #define LOOK_LNG 2 #define TR_STD 0 /* Arguments to mtrans() function */ #define TR_SEG 8 /* Macro for byte input primitive */ #define FETCH(p) ++PC; p = getchar() & 0xff; objbuf[objptr++] = p /* disfp.c */ _PROTOTYPE(void eshand, (int j )); _PROTOTYPE(void fphand, (int j )); _PROTOTYPE(void inhand, (int j )); /* dishand.c */ _PROTOTYPE(void objini, (int j )); _PROTOTYPE(void objout, (void)); _PROTOTYPE(void badseq, (int j, int k )); _PROTOTYPE(void dfhand, (int j )); _PROTOTYPE(void sbhand, (int j )); _PROTOTYPE(void aohand, (int j )); _PROTOTYPE(void sjhand, (int j )); _PROTOTYPE(void imhand, (int j )); _PROTOTYPE(void mvhand, (int j )); _PROTOTYPE(void mshand, (int j )); _PROTOTYPE(void pohand, (int j )); _PROTOTYPE(void cihand, (int j )); _PROTOTYPE(void mihand, (int j )); _PROTOTYPE(void mqhand, (int j )); _PROTOTYPE(void tqhand, (int j )); _PROTOTYPE(void rehand, (int j )); _PROTOTYPE(void mmhand, (int j )); _PROTOTYPE(void srhand, (int j )); _PROTOTYPE(void aahand, (int j )); _PROTOTYPE(void iohand, (int j )); _PROTOTYPE(void ljhand, (int j )); _PROTOTYPE(void mahand, (int j )); _PROTOTYPE(void mjhand, (int j )); /* dismain.c */ _PROTOTYPE(void main, (int argc, char **argv )); /* distabs.c */ _PROTOTYPE(char *getnam, (int k )); _PROTOTYPE(int lookext, (long off, long loc, char *buf )); _PROTOTYPE(char *lookup, (long addr, int type, int kind, long ext )); _PROTOTYPE(char *mtrans, (int c, int m, int type )); _PROTOTYPE(void mtrunc, (char *a ));