The following will leave out all the prototypes of the functions.
Note the following exceptional definitions:
#define _(String) (String) #define uchar unsigned char
int breakpoint_mask; int breakpoint_line[2][4];
No data structures.
No data structures.
#define REFRESH_PERIOD 100 /* the interval between each refresh on the screen i.e. how often the values on board are inspected */ #define POLLING_PERIOD 300 #define MAX_LENGTH 16 /* maximum length of message returned from the board */ /* the following are booleans describing the state of the flags in: */ /* 1) CPSR */ int nflag_current_boolean; int zflag_current_boolean; int cflag_current_boolean; int vflag_current_boolean; /* 2) SPSR */ int nflag_saved_boolean; int zflag_saved_boolean; int cflag_saved_boolean; int vflag_saved_boolean; int compile_communication[2]; FILE *view_console_port;
The only data structure that is used in KMD (in interface.h, in fact) is:
typedef struct DefinitionStackName{
struct DefinitionStackName* next;
char* string;
GList* rules;
} DefinitionStack;
This is irrelevant because it is not used directly in KMD.
typedef enum { /*Board instructions unsigned char*/
BR_NOP = 0x0,
BR_PING = 0x1,
BR_WOT_R_U = 0x2,
BR_RESET = 0x4,
BR_FR_GET = 0x10,
BR_FR_SET = 0x10,
BR_FR_FILE = 0x14,
BR_FR_SEND = 0x15,
BR_WOT_U_DO= 0x20,
BR_STOP = 0x21,
BR_PAUSE = 0x22,
BR_CONTINUE= 0x23,
BR_RTF_SET = 0x24,
BR_RTF_GET = 0x25,
BR_BP_WRITE= 0x30,
BR_BP_READ = 0x31,
BR_BP_SET = 0x32,
BR_BP_GET = 0x33,
BR_WP_WRITE= 0x34,
BR_WP_READ = 0x35,
BR_WP_SET = 0x36,
BR_WP_GET = 0x37,
BR_START = 0x80
} BR_Instruction;
typedef struct {
char cond;
char size;
int addra;
int addrb;
int dataa[2];
int datab[2];
} BreakElement;
BreakElement breakpoints[32];
BreakElement watchpoints[32];
int emul_bp_flag[2];
int emul_wp_flag[2];
uchar registers[REGSIZE];
uchar memory[RAMSIZE];
uchar status;
int paused;
unsigned int steps_togo;
unsigned int steps_reset;
char runflags;
uchar rtf;
This module is used by emulcore and, therefore, does not need a detailed explanation.
#define TABLE 0x00004000
#define MAGIC_NUMBER 0
#define FLAGS 4
#define RAM_START 8
#define RAM_LENGTH 12
#define ROM_START 16
#define ROM_LENGTH 20
#define START_OFFSET 24
#define CPSR 28
#define SPARTAN_START 32
#define SPARTAN_LENGTH 36
#define VIRTEX_START 40
#define VIRTEX_LENGTH 44
#define LCD_LINE1 48
#define LCD_LINE2 64
#define USER_TEXT 80
typedef enum {
SERIAL,
EMULATOR,
FAKE
} target_type;
target_type board_type;
/* the following defines possible instructions that can be sent to the board as 1 byte each */
typedef enum { /*Board instructions unsigned char*/
BR_NOP = 0x0,
BR_PING = 0x1,
BR_WOT_R_U = 0x2,
BR_RESET = 0x4,
BR_COMM_W = 0x6,
BR_COMM_R = 0x7,
BR_FR_GET = 0x10,
BR_FR_SET = 0x11,
BR_FR_WRITE= 0x12,
BR_FR_READ = 0x13,
BR_FR_FILE = 0x14,
BR_FR_SEND = 0x15,
BR_WOT_U_DO= 0x20,
BR_STOP = 0x21,
BR_PAUSE = 0x22,
BR_CONTINUE= 0x23,
BR_RTF_SET = 0x24,
BR_RTF_GET = 0x25,
BR_BP_WRITE= 0x30,
BR_BP_READ = 0x31,
BR_BP_SET = 0x32,
BR_BP_GET = 0x33,
BR_GET_REG = 0x5a,
BR_GET_MEM = 0x48,
BR_SET_REG = 0x52,
BR_SET_MEM = 0x40,
BR_START = 0x80
} BR_Instruction;
typedef struct {/* Regbank struct*/
char *name; /* Name to display in window*/
int offset; /* offset in registers (in bits if flags)*/
unsigned char width; /* width in bytes (0 means 1bit flags)*/
unsigned char number; /* count of registers*/
char **names; /* array of strings for names*/
unsigned char *values; /* array of values (regvalue = values + regnumber * width*/
int pointer; /* does this regbank store memory pointers */
} reg_bank; /* flags use 1 char each*/
typedef struct { /* special_reg struct*/
char *name; /* Name of register*/
unsigned char *value; /* offset of value*/
GdkColor colour;
char** pixmap_data;
GdkPixmap* pixmap;
GdkBitmap* bitmap;
int active; /* if activated or not */
} special_reg; /* flags use 1 char each*/
typedef enum { /* this describes a type of a feature and will be used as member in feature */
XILINX_FPGA,
CONSOLE,
} feature_type;
typedef struct { /* holds data of a xilinx fpga feature */
char* filestring;
} xilinx_fpga_data;
typedef struct { /* holds data about a console */
GtkWidget *text;
} console_data;
typedef struct { /* Feature struct */
unsigned char reference_number;
int sub_reference_number;
char* name; /* it's name as recognised from .komodo file */
feature_type type; /* see above - enumeration with different supported features */
union { /* the data within that feature */
xilinx_fpga_data xilinx_fpga;
console_data console;
} data;
unsigned char dev_number; /* number to communicate by - serial number assigned depending on the order
the board sent it */
} feature;
typedef struct { /* Memory Segments */
unsigned char* start; /* chararr pointer to address of length board_memory_ptr_width*/
unsigned char* length; /* chararr of length board_memory_ptr_width*/
} memory_segment;
typedef struct {
long value;
char *name;
int flags;
} symbol;
typedef enum {
SERIAL,
EMULATOR,
FAKE
} target_type;
uchar board_nulreg[16];
char* rcfile; /* the name of the file to be opened - .komodo*/
char* emulator_prog; /* the name of the program to emulate KMD */
int use_internal; /* boolean */
int VERBOSE; /* boolean - be loud and informative or not */
symbol *symbol_table; /* build a symbol table that is made up of symbols */
int symbol_count; /* number of sybols in symbol table */
GtkStyle* fixed_style;
GdkFont* fixed_font;
int board_there; /* boolean indicating if the board is connected or not */
target_type board_type;/* indicates what board or virtual board we work with now */
int board_version; /* retains the version of the board */
int board_wordaline;
int board_memory_ptr_width;
unsigned char board_cpu_reference_number;
int board_cpu_sub_reference_number;
char *board_cpu_name;
int board_num_regbanks;
int board_main_regbank;
int special_register_count; /* special registers are CPSR et al */
special_reg special_registers[2]; /* we allocate place for 2 special registers */
uchar board_startcommand;
reg_bank *board_reg_banks; /* the list of register banks */
int board_regbanks_gran; /* granularity of the register banks */
int board_num_features; /* number of features found as reported from the board */
feature *board_features; /* a list of those features */
int board_num_mem_segments;
memory_segment *board_mem_segments;
DefinitionStack *board_asm_tables;
int board_emulation_communication_from[2];
int board_emulation_communication_to[2];
There is currently no such file.
This file includes only prototypes.
Many of the variables here are to deal with lower level protocols.
/* the following will define some of the properties to be considered */ #ifdef LINUX #define PORTNAME "/dev/ttyS0" #define PORTSPEED B115200 #endif #ifdef SUNOS #define PORTNAME "/dev/ttya" #define PORTSPEED B115200 #endif #ifndef SUNOS #ifndef LINUX #define PORTNAME "/dev/ttyS0" #define PORTSPEED B115200 #endif #endif #ifdef SERIAL_PORT #define PORTNAME SERIAL_PORT #endif #ifdef SERIAL_SPEED #define PORTNAME BSERIAL_SPEED #endif int serial_FD; int read_pipe; int write_pipe; struct termios serial_originalportsettings; char* portname; GList* serial_list_2_board; GList* serial_list_2_computer;
#define CONSOLE_UPPER_BOUND 20
typedef struct mem_window_name{
GtkWidget* clist_ptr;
GtkWidget* address_entry;
GtkWidget* hex_entry;
GtkWidget* ascii_entry;
GtkWidget* dis_entry;
GtkWidget* scroll;
unsigned char* address;
unsigned char* regoffset;
int count; int width; int gran;
GList* isa;
} mem_window;
typedef struct mem_window_list_name{
mem_window* mem_data_ptr;
struct mem_window_list_name* next;
} mem_window_list;
typedef struct reg_window_name{
GtkWidget* clist_ptr;
GtkWidget* address_entry;
GtkWidget* hex_entry;
int regbank_no;
int wait;
gint timer;
} reg_window;
typedef struct reg_window_list_name{
reg_window* reg_data_ptr;
struct reg_window_list_name* next;
} reg_window_list;
typedef struct dat_window_name{
GtkWidget* clist_ptr;
GtkWidget* address_entry;
GtkWidget* hex_entry;
GtkWidget* ascii_entry;
GtkWidget* dis_entry;
GtkWidget* scroll;
unsigned char* address;
unsigned char* regoffset;
int count;
int width;
int gran; } dat_window;
typedef struct dat_window_list_name{
mem_window* dat_data_ptr;
struct dat_window_list_name* next;
} dat_window_list;
char* view_dis(uchar*, uchar*,int, GList*);
gpointer view_console; /* a pointer to the text in the string console */
gpointer view_comms;
char* view_window_display_list;/* a variable to hold the display list string that was derived
from .komodo */
mem_window_list* view_memwindowlist; /* a group of memory windows/containers that
we have */
reg_window_list* view_regwindowlist; /* as above, for register banks */
dat_window_list* view_datwindowlist; /* a list of memory windows/containers data e.g.
number of lines */
GtkWidget* view_splashwindow; /* global referring to the splash window created */
GtkWidget* view_mainwindow; /* refers to our main GTK window */
GtkWidget* view_maincontainer; /* refers to the actual container within the window */
GtkWidget* view_progressbar; /* the progress bar widget which is used to make other local
progress bar global by assignment */
GtkWidget* view_enqlabel; /* the labels that reports the current state of the board e.g. stopped */
GtkWidget* view_steplabel; /* the labels that reports the current step number */
GtkWidget* view_current_reg_bank; /* will be the label reporting the current mode in the CPSR */
GtkWidget* view_saved_reg_bank; /* will be the label reporting the current mode in the SPSR */
GtkWidget* view_breakwindow[2][4]; GtkWidget* view_fileerror; /* a widget for error messages,
will be assigned to a new gtk dialogue at times */
GtkWidget* view_refreshbutton; /* the widget of the toggle button refresh */
GtkWidget* view_binary_load_address; /* the address of a binary being loaded */
int view_step_number; /* defines the initial number of steps to be taken when step is pressed */
int view_step_freq; /*defines the initial value in the second box next to muti-step */
/* definitions of colours and pixmaps */
GdkColor view_greycolour; /* defines the grey colour used in the application */
/* the pixmaps used: */
GdkPixmap* view_chump_pixmap;
GdkBitmap* view_chump_bitmap;
GdkPixmap* view_tick_pixmap;
GdkBitmap* view_tick_bitmap;
GdkPixmap* view_mulogo_pixmap;
GdkBitmap* view_mulogo_bitmap;
GdkPixmap* view_komodologo_pixmap;
GdkBitmap* view_komodologo_bitmap;
GdkPixmap* view_komodotitle_pixmap;
GdkBitmap* view_komodotitle_bitmap;
GdkPixmap* view_komodoicon_pixmap;
GdkBitmap* view_komodoicon_bitmap;
/* the following are toggle-button widgets to be used for flags */
/* for flags in CPSR */
GtkWidget *nflag_current;
GtkWidget *zflag_current;
GtkWidget *cflag_current;
GtkWidget *vflag_current;
/* for flags in SPSR */
GtkWidget *nflag_saved;
GtkWidget *zflag_saved;
GtkWidget *cflag_saved;
GtkWidget *vflag_saved;
GtkTooltips* view_tooltips; /* one to hold the tooltips of all items in turn */
GtkWidget *console_entry; /* the entry within the console/terminal is now global */
gint view_global_refresh_timer; /* boolean to indicate if the display needs to be refreshed */
GtkWidget *text_in_console[CONSOLE_UPPER_BOUND]; /* caters for up to CONSOLE_UPPER_BOUND features where the highest serial number for a console is 20 */