1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
|
/*
* Disassembler common routines
* Copyright (C) 1995-2007 by Jeffery L. Post
* j_post <AT> pacbell <DOT> net
*
* common.h - Support routines
*
* Version 3.4.1 - 2007/09/02
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#ifndef _COMMON_H_
#define _COMMON_H_
#ifdef EXTENDED_MEM
#define EXT_PGM_SEGS 8 /* maximum number of extended segments: 8 * 64kb = 512kb */
#endif
// Global variables
extern char licenseText[];
extern char src[FN_LEN], dst[FN_LEN]; // file name buffers
extern char baseFileName[FN_LEN]; // source file name without extension
extern char ctl[FN_LEN]; // control file name
extern char linebuffer[MAX_LINE]; // input line buffer
extern FILE *fp; // dos file struct
extern int hexflag; // append hex flag
extern int fileflag; // file type flag
extern int upperflag; // upper case output flag
extern int baseflag;
extern bool traceflag; // trace and analyze code
extern int kcnt; // output char counter
extern int pc; // current program counter
extern int himark; // highest data adrs
extern int offset; // program counter offset
extern byte *pgmmem; // program data pointer
extern int *pgmflags; // pointer to program flags
#ifdef EXTENDED_MEM
extern byte *epgmmem[EXT_PGM_SEGS]; // extended program memory pointers
extern int *epgmflags[EXT_PGM_SEGS]; // extended program flags pointers
#endif
extern char string[ASCLIMIT]; // ascii data for defb
extern int asc_cnt; // count for string data
extern byte byte_data[BYTELIMIT]; // binary data for defb
extern int byte_cnt; // count for binary data
extern int word_data[WORDLIMIT]; // binary data for defw
extern int word_cnt; // count for word data
extern byte dump; // dump just done flag
extern byte ascii_flag; // use ascii string flag
extern char defbstr[8]; // string for defined bytes
extern char defwstr[8]; // string for defined words
extern char ascistr[8]; // string for defined ascii
extern char orgstr[8]; // org pseudo-op string
extern char equstr[8]; // equ pseudo-op string
extern struct sym *sym_tab; // symbol table pointer
extern struct sym *lab_tab; // label table pointer
extern struct sym *name_tab; // operand names pointer
extern struct sym *sym_tab_last; // last symbol table pointer
extern struct sym *lab_tab_last; // lastlabel table pointer
extern struct sym *name_tab_last; // last name table pointer
extern int symbol_count; // number of symbols
extern int label_count; // number of labels
extern int name_count; // number of operand names
extern SYM_PTR *sym_val_index; // array of pointers
extern SYM_PTR *lab_val_index; // for binary search
extern SYM_PTR *name_val_index;
extern struct sym *tail_ptr, *head_ptr; // sort pointers
extern struct comment *comment_list; // header comment list
extern struct comment *icomment_list; // inline comment list
extern struct comment *patch_list; // patch list
extern int newline; // just output newline flag
extern struct tm *date_time; // disassembly time
extern bool cycleflag; // cycle counting global on/off switch
extern bool cycle_exclude; // cycle counting suspended flag
extern bool cycle_alwaystake; // cycle counting "always take" (worst case) flag
extern CYCLE_RANGE_PTR cycle_r; // cycle counting root range
extern CYCLE_RANGE_PTR cycle_current; // cycle counting current range
//
// Prototypes
//
#if defined __LCC__
extern int strcasecmp(char *s1, char *s2);
extern int strncasecmp(char *s1, char *s2, size_t n);
#endif
extern bool init_memory(void);
#ifdef EXTENDED_MEM
extern byte *get_extended_mem(int width);
#endif
extern char *makeupper(char *str);
extern int parseFileName(char *str, char *ext);
extern int readfile(char *filename);
extern void getCTLoffset(void);
extern void getcode(char *from, byte *loc);
extern char *get_adrs(char *text, int *val);
extern void error(char *str1, char *str2); // fatal error trap
extern struct sym *sort(struct sym *list, SYM_PTR *array, int count);
extern struct sym *sort_by_name(struct sym *list);
extern struct sym *sort_by_value(struct sym *list);
extern struct sym *merge_by_name(struct sym *a, struct sym *b);
extern struct sym *merge_by_value(struct sym *a, struct sym *b);
extern void chk_dup_name(struct sym *list, int count);
extern void chk_dup_op_name(struct sym *list, int count);
extern void chk_dup_value(struct sym *list, int count);
extern void chk_dup_op_value(struct sym *list, int count);
extern char *find_entry(int val, int count, SYM_PTR *table);
extern SYM_PTR find_name(char *name, int count, SYM_PTR *table);
extern struct sym *get_smem(int type, int req_size);
extern struct sym *add_entry(int val, char *symbol, int type);
extern void output_comment(int adrs);
extern void output_icomment(int adrs);
extern void output_patch(int adrs);
extern void add_comment(int adrs, char *str);
extern void add_icomment(int adrs, char *str);
extern void add_patch(int adrs, char *str);
extern void puthex(int j);
extern int ascii(int i);
extern int is_ascii(byte data);
extern int atox(char *str);
extern void splitcheck(int i);
extern void chk_ref(int i);
extern void chk_label(int i);
extern void doopcode(char *mnem);
extern void dump_ascii(int adrs);
extern void dump_bytes(int adrs);
extern void readcyclefile(char *c);
extern void cycle_in(int num, int next_num, int cnt, int cnt2);
extern void cycle_end(int num);
// --- although I know this is not properly declared here,
// I know no better way how to make it usable in common.c ---
// (haven't I told that I am not really into C? :-) ) -- JW
// so it is assumed that all 3 ports (d52, d48, dz80) do have
// these tables implemented (in XXXtables.c)
extern unsigned char cycles[256];
extern unsigned char cycles2[256];
#endif // _COMMON_H_
|