168 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
|  /*
 | |
|  ** @(#) 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 <sys/types.h>
 | |
| #include <a.out.h>      /* Object file format definitions   */
 | |
| #include <fcntl.h>      /* System file-control definitions  */
 | |
| #include <unistd.h>
 | |
| #include <string.h>
 | |
| #include <stdlib.h>
 | |
| #include <stdio.h>      /* 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 ));
 | 
