#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <stdarg.h>
Classes | |
struct | opcode_struct |
struct | ea_info_struct |
struct | body_struct |
struct | replace_struct |
Macros | |
#define | M68K_MAX_PATH 1024 |
#define | M68K_MAX_DIR 1024 |
#define | MAX_LINE_LENGTH 200 /* length of 1 line */ |
#define | MAX_BODY_LENGTH 300 /* Number of lines in 1 function */ |
#define | MAX_REPLACE_LENGTH 30 /* Max number of replace strings */ |
#define | MAX_INSERT_LENGTH 5000 /* Max size of insert piece */ |
#define | MAX_NAME_LENGTH 30 /* Max length of ophandler name */ |
#define | MAX_SPEC_PROC_LENGTH 4 /* Max length of special processing str */ |
#define | MAX_SPEC_EA_LENGTH 5 /* Max length of specified EA str */ |
#define | EA_ALLOWED_LENGTH 11 /* Max length of ea allowed str */ |
#define | MAX_OPCODE_INPUT_TABLE_LENGTH 1000 /* Max length of opcode handler tbl */ |
#define | MAX_OPCODE_OUTPUT_TABLE_LENGTH 3000 /* Max length of opcode handler tbl */ |
#define | FILENAME_INPUT "m68k_in.c" |
#define | FILENAME_PROTOTYPE "m68kops.h" |
#define | FILENAME_TABLE "m68kops.c" |
#define | ID_INPUT_SEPARATOR "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" |
#define | ID_BASE "M68KMAKE" |
#define | ID_PROTOTYPE_HEADER ID_BASE "_PROTOTYPE_HEADER" |
#define | ID_PROTOTYPE_FOOTER ID_BASE "_PROTOTYPE_FOOTER" |
#define | ID_TABLE_HEADER ID_BASE "_TABLE_HEADER" |
#define | ID_TABLE_FOOTER ID_BASE "_TABLE_FOOTER" |
#define | ID_TABLE_BODY ID_BASE "_TABLE_BODY" |
#define | ID_TABLE_START ID_BASE "_TABLE_START" |
#define | ID_OPHANDLER_HEADER ID_BASE "_OPCODE_HANDLER_HEADER" |
#define | ID_OPHANDLER_FOOTER ID_BASE "_OPCODE_HANDLER_FOOTER" |
#define | ID_OPHANDLER_BODY ID_BASE "_OPCODE_HANDLER_BODY" |
#define | ID_END ID_BASE "_END" |
#define | ID_OPHANDLER_NAME ID_BASE "_OP" |
#define | ID_OPHANDLER_EA_AY_8 ID_BASE "_GET_EA_AY_8" |
#define | ID_OPHANDLER_EA_AY_16 ID_BASE "_GET_EA_AY_16" |
#define | ID_OPHANDLER_EA_AY_32 ID_BASE "_GET_EA_AY_32" |
#define | ID_OPHANDLER_OPER_AY_8 ID_BASE "_GET_OPER_AY_8" |
#define | ID_OPHANDLER_OPER_AY_16 ID_BASE "_GET_OPER_AY_16" |
#define | ID_OPHANDLER_OPER_AY_32 ID_BASE "_GET_OPER_AY_32" |
#define | ID_OPHANDLER_CC ID_BASE "_CC" |
#define | ID_OPHANDLER_NOT_CC ID_BASE "_NOT_CC" |
#define | DECL_SPEC |
#define | UNSPECIFIED "." |
#define | UNSPECIFIED_CH '.' |
#define | HAS_NO_EA_MODE(A) (strcmp(A, "..........") == 0) |
#define | HAS_EA_AI(A) ((A)[0] == 'A') |
#define | HAS_EA_PI(A) ((A)[1] == '+') |
#define | HAS_EA_PD(A) ((A)[2] == '-') |
#define | HAS_EA_DI(A) ((A)[3] == 'D') |
#define | HAS_EA_IX(A) ((A)[4] == 'X') |
#define | HAS_EA_AW(A) ((A)[5] == 'W') |
#define | HAS_EA_AL(A) ((A)[6] == 'L') |
#define | HAS_EA_PCDI(A) ((A)[7] == 'd') |
#define | HAS_EA_PCIX(A) ((A)[8] == 'x') |
#define | HAS_EA_I(A) ((A)[9] == 'I') |
Enumerations | |
enum | { CPU_TYPE_000 = 0, CPU_TYPE_010, CPU_TYPE_020, CPU_TYPE_040, NUM_CPUS } |
enum | { EA_MODE_NONE, EA_MODE_AI, EA_MODE_PI, EA_MODE_PI7, EA_MODE_PD, EA_MODE_PD7, EA_MODE_DI, EA_MODE_IX, EA_MODE_AW, EA_MODE_AL, EA_MODE_PCDI, EA_MODE_PCIX, EA_MODE_I } |
Functions | |
void | error_exit (const char *fmt,...) |
void | perror_exit (const char *fmt,...) |
int | check_strsncpy (char *dst, char *src, int maxlength) |
int | check_atoi (char *str, int *result) |
int | skip_spaces (char *str) |
int | num_bits (int value) |
int | atoh (char *buff) |
int | fgetline (char *buff, int nchars, FILE *file) |
int | get_oper_cycles (opcode_struct *op, int ea_mode, int cpu_type) |
opcode_struct * | find_opcode (char *name, int size, char *spec_proc, char *spec_ea) |
opcode_struct * | find_illegal_opcode (void) |
int | extract_opcode_info (char *src, char *name, int *size, char *spec_proc, char *spec_ea) |
void | add_replace_string (replace_struct *replace, const char *search_str, const char *replace_str) |
void | write_body (FILE *filep, body_struct *body, replace_struct *replace) |
void | get_base_name (char *base_name, opcode_struct *op) |
void | write_prototype (FILE *filep, char *base_name) |
void | write_function_name (FILE *filep, char *base_name) |
void | add_opcode_output_table_entry (opcode_struct *op, char *name) |
static int DECL_SPEC | compare_nof_true_bits (const void *aptr, const void *bptr) |
void | print_opcode_output_table (FILE *filep) |
void | write_table_entry (FILE *filep, opcode_struct *op) |
void | set_opcode_struct (opcode_struct *src, opcode_struct *dst, int ea_mode) |
void | generate_opcode_handler (FILE *filep, body_struct *body, replace_struct *replace, opcode_struct *opinfo, int ea_mode) |
void | generate_opcode_ea_variants (FILE *filep, body_struct *body, replace_struct *replace, opcode_struct *op) |
void | generate_opcode_cc_variants (FILE *filep, body_struct *body, replace_struct *replace, opcode_struct *op_in, int offset) |
void | process_opcode_handlers (FILE *filep) |
void | populate_table (void) |
void | read_insert (char *insert) |
int | check_strcncpy (char *dst, char *src, char delim, int maxlength) |
int | main (int argc, char **argv) |
Variables | |
static const char * | g_version = "3.31" |
char | g_input_filename [M68K_MAX_PATH] = FILENAME_INPUT |
FILE * | g_input_file = NULL |
FILE * | g_prototype_file = NULL |
FILE * | g_table_file = NULL |
int | g_num_functions = 0 |
int | g_num_primitives = 0 |
int | g_line_number = 1 |
opcode_struct | g_opcode_input_table [MAX_OPCODE_INPUT_TABLE_LENGTH] |
opcode_struct | g_opcode_output_table [MAX_OPCODE_OUTPUT_TABLE_LENGTH] |
int | g_opcode_output_table_length = 0 |
ea_info_struct | g_ea_info_table [13] |
const char * | g_cc_table [16][2] |
int | g_size_select_table [33] |
int | g_ea_cycle_table [13][NUM_CPUS][3] |
int | g_jmp_cycle_table [13] |
int | g_jsr_cycle_table [13] |
int | g_lea_cycle_table [13] |
int | g_pea_cycle_table [13] |
int | g_movem_cycle_table [13] |
int | g_moves_cycle_table [13][3] |
int | g_clr_cycle_table [13][3] |
#define DECL_SPEC |
#define FILENAME_INPUT "m68k_in.c" |
#define FILENAME_PROTOTYPE "m68kops.h" |
#define FILENAME_TABLE "m68kops.c" |
#define HAS_EA_AI | ( | A | ) | ((A)[0] == 'A') |
#define HAS_EA_AL | ( | A | ) | ((A)[6] == 'L') |
#define HAS_EA_AW | ( | A | ) | ((A)[5] == 'W') |
#define HAS_EA_DI | ( | A | ) | ((A)[3] == 'D') |
#define HAS_EA_I | ( | A | ) | ((A)[9] == 'I') |
#define HAS_EA_IX | ( | A | ) | ((A)[4] == 'X') |
#define HAS_EA_PCDI | ( | A | ) | ((A)[7] == 'd') |
#define HAS_EA_PCIX | ( | A | ) | ((A)[8] == 'x') |
#define HAS_EA_PD | ( | A | ) | ((A)[2] == '-') |
#define HAS_EA_PI | ( | A | ) | ((A)[1] == '+') |
#define HAS_NO_EA_MODE | ( | A | ) | (strcmp(A, "..........") == 0) |
#define ID_BASE "M68KMAKE" |
#define ID_END ID_BASE "_END" |
#define ID_INPUT_SEPARATOR "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" |
#define ID_OPHANDLER_BODY ID_BASE "_OPCODE_HANDLER_BODY" |
#define ID_OPHANDLER_CC ID_BASE "_CC" |
#define ID_OPHANDLER_EA_AY_16 ID_BASE "_GET_EA_AY_16" |
#define ID_OPHANDLER_EA_AY_32 ID_BASE "_GET_EA_AY_32" |
#define ID_OPHANDLER_EA_AY_8 ID_BASE "_GET_EA_AY_8" |
#define ID_OPHANDLER_FOOTER ID_BASE "_OPCODE_HANDLER_FOOTER" |
#define ID_OPHANDLER_HEADER ID_BASE "_OPCODE_HANDLER_HEADER" |
#define ID_OPHANDLER_NAME ID_BASE "_OP" |
#define ID_OPHANDLER_NOT_CC ID_BASE "_NOT_CC" |
#define ID_OPHANDLER_OPER_AY_16 ID_BASE "_GET_OPER_AY_16" |
#define ID_OPHANDLER_OPER_AY_32 ID_BASE "_GET_OPER_AY_32" |
#define ID_OPHANDLER_OPER_AY_8 ID_BASE "_GET_OPER_AY_8" |
#define ID_PROTOTYPE_FOOTER ID_BASE "_PROTOTYPE_FOOTER" |
#define ID_PROTOTYPE_HEADER ID_BASE "_PROTOTYPE_HEADER" |
#define ID_TABLE_BODY ID_BASE "_TABLE_BODY" |
#define ID_TABLE_FOOTER ID_BASE "_TABLE_FOOTER" |
#define ID_TABLE_HEADER ID_BASE "_TABLE_HEADER" |
#define ID_TABLE_START ID_BASE "_TABLE_START" |
#define M68K_MAX_DIR 1024 |
#define M68K_MAX_PATH 1024 |
#define MAX_BODY_LENGTH 300 /* Number of lines in 1 function */ |
#define MAX_INSERT_LENGTH 5000 /* Max size of insert piece */ |
#define MAX_LINE_LENGTH 200 /* length of 1 line */ |
#define MAX_OPCODE_INPUT_TABLE_LENGTH 1000 /* Max length of opcode handler tbl */ |
#define MAX_OPCODE_OUTPUT_TABLE_LENGTH 3000 /* Max length of opcode handler tbl */ |
#define MAX_REPLACE_LENGTH 30 /* Max number of replace strings */ |
#define MAX_SPEC_EA_LENGTH 5 /* Max length of specified EA str */ |
#define MAX_SPEC_PROC_LENGTH 4 /* Max length of special processing str */ |
#define UNSPECIFIED "." |
#define UNSPECIFIED_CH '.' |
anonymous enum |
void add_opcode_output_table_entry | ( | opcode_struct * | op, |
char * | name | ||
) |
void add_replace_string | ( | replace_struct * | replace, |
const char * | search_str, | ||
const char * | replace_str | ||
) |
int atoh | ( | char * | buff | ) |
int check_atoi | ( | char * | str, |
int * | result | ||
) |
int check_strcncpy | ( | char * | dst, |
char * | src, | ||
char | delim, | ||
int | maxlength | ||
) |
int check_strsncpy | ( | char * | dst, |
char * | src, | ||
int | maxlength | ||
) |
|
static |
void error_exit | ( | const char * | fmt, |
... | |||
) |
int extract_opcode_info | ( | char * | src, |
char * | name, | ||
int * | size, | ||
char * | spec_proc, | ||
char * | spec_ea | ||
) |
int fgetline | ( | char * | buff, |
int | nchars, | ||
FILE * | file | ||
) |
opcode_struct * find_illegal_opcode | ( | void | ) |
opcode_struct * find_opcode | ( | char * | name, |
int | size, | ||
char * | spec_proc, | ||
char * | spec_ea | ||
) |
void generate_opcode_cc_variants | ( | FILE * | filep, |
body_struct * | body, | ||
replace_struct * | replace, | ||
opcode_struct * | op_in, | ||
int | offset | ||
) |
void generate_opcode_ea_variants | ( | FILE * | filep, |
body_struct * | body, | ||
replace_struct * | replace, | ||
opcode_struct * | op | ||
) |
void generate_opcode_handler | ( | FILE * | filep, |
body_struct * | body, | ||
replace_struct * | replace, | ||
opcode_struct * | opinfo, | ||
int | ea_mode | ||
) |
void get_base_name | ( | char * | base_name, |
opcode_struct * | op | ||
) |
int get_oper_cycles | ( | opcode_struct * | op, |
int | ea_mode, | ||
int | cpu_type | ||
) |
int main | ( | int | argc, |
char ** | argv | ||
) |
int num_bits | ( | int | value | ) |
void perror_exit | ( | const char * | fmt, |
... | |||
) |
void populate_table | ( | void | ) |
void print_opcode_output_table | ( | FILE * | filep | ) |
void process_opcode_handlers | ( | FILE * | filep | ) |
void read_insert | ( | char * | insert | ) |
void set_opcode_struct | ( | opcode_struct * | src, |
opcode_struct * | dst, | ||
int | ea_mode | ||
) |
int skip_spaces | ( | char * | str | ) |
void write_body | ( | FILE * | filep, |
body_struct * | body, | ||
replace_struct * | replace | ||
) |
void write_function_name | ( | FILE * | filep, |
char * | base_name | ||
) |
void write_prototype | ( | FILE * | filep, |
char * | base_name | ||
) |
void write_table_entry | ( | FILE * | filep, |
opcode_struct * | op | ||
) |
const char* g_cc_table[16][2] |
int g_clr_cycle_table[13][3] |
int g_ea_cycle_table[13][NUM_CPUS][3] |
ea_info_struct g_ea_info_table[13] |
FILE* g_input_file = NULL |
char g_input_filename[M68K_MAX_PATH] = FILENAME_INPUT |
int g_jmp_cycle_table[13] |
int g_jsr_cycle_table[13] |
int g_lea_cycle_table[13] |
int g_line_number = 1 |
int g_movem_cycle_table[13] |
int g_moves_cycle_table[13][3] |
int g_num_functions = 0 |
int g_num_primitives = 0 |
opcode_struct g_opcode_input_table[MAX_OPCODE_INPUT_TABLE_LENGTH] |
opcode_struct g_opcode_output_table[MAX_OPCODE_OUTPUT_TABLE_LENGTH] |
int g_opcode_output_table_length = 0 |
int g_pea_cycle_table[13] |
FILE* g_prototype_file = NULL |
int g_size_select_table[33] |
FILE* g_table_file = NULL |
|
static |