This is mon.h in view mode; [Download] [Up]
/* * mon.h - The VICE built-in monitor. * * Written by * Daniel Sladic (sladic@eecg.toronto.edu) * Ettore Perazzoli (ettore@comm2000.it) * * This file is part of VICE, the Versatile Commodore Emulator. * See README for copyright notice. * * 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 2 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 _MON_H #define _MON_H #include <stdio.h> #include <assert.h> #include "mos6510.h" #include "mem.h" #include "interrupt.h" /* Types */ typedef int bool; struct mon_cmds { const char *str; const char *abbrev; int token; int next_state; const char *param_names; const char *description; }; enum mon_int { MI_NONE = 0, MI_BREAK = 1 << 0, MI_WATCH = 1 << 1, MI_STEP = 1 << 2, }; enum t_reg_id { e_A, e_X, e_Y, e_PC, e_SP }; typedef enum t_reg_id REG_ID; enum t_memory_op { e_load, e_store, e_load_store }; typedef enum t_memory_op MEMORY_OP; enum t_memspace { e_default_space = 0, e_comp_space, e_disk_space, e_invalid_space }; typedef enum t_memspace MEMSPACE; typedef unsigned int MON_ADDR; typedef unsigned int MON_REG; enum t_conditional { e_INV, e_EQU, e_NEQ, e_GT, e_LT, e_GTE, e_LTE, e_AND, e_OR }; typedef enum t_conditional CONDITIONAL; enum t_radixtype { e_default_radix, e_hexadecimal, e_decimal, e_octal, e_binary }; typedef enum t_radixtype RADIXTYPE; enum t_action { e_ON, e_OFF, e_TOGGLE }; typedef enum t_action ACTION; struct t_cond_node { int operation; int value; MON_REG reg_num; bool is_reg; bool is_parenthized; struct t_cond_node *child1; struct t_cond_node *child2; }; typedef struct t_cond_node CONDITIONAL_NODE; struct t_breakpoint { int brknum; MON_ADDR start_addr; MON_ADDR end_addr; bool trace; bool enabled; bool watch_load; bool watch_store; int hit_count; int ignore_count; CONDITIONAL_NODE *condition; char *command; }; typedef struct t_breakpoint breakpoint; struct t_break_list { breakpoint *brkpt; struct t_break_list *next; }; typedef struct t_break_list BREAK_LIST; typedef void monitor_toggle_func_t(int value); /* This is the standard interface through which the monitor accesses a certain CPU. */ struct monitor_interface { /* Pointer to the registers of the CPU. */ mos6510_regs_t *cpu_regs; /* Pointer to the alarm/interrupt status. */ cpu_int_status_t *int_status; /* Pointer to the machine's clock counter. */ CLOCK *clk; /* Pointer to a function that writes to memory. */ read_func_t *read_func; /* Pointer to a function that reads from memory. */ store_func_t *store_func; /* Pointer to a function to disable/enable watchpoint checking. */ monitor_toggle_func_t *toggle_watchpoints_func; }; typedef struct monitor_interface monitor_interface_t; /* Defines */ #ifndef TRUE #define TRUE 1 #endif #ifndef FALSE #define FALSE 0 #endif #define HI16(x) ((x)&0xffff0000) #define LO16(x) ((x)&0xffff) #define LO16_TO_HI16(x) (((x)&0xffff)<<16) #define HI16_TO_LO16(x) (((x)>>16)&0xffff) #define STATE_INITIAL 0 #define STATE_FNAME 1 #define STATE_REG_ASGN 2 #define STATE_ROL 3 #define FIRST_SPACE e_comp_space #define LAST_SPACE e_disk_space #define NUM_MEMSPACES 3 #define DEFAULT_DISASSEMBLY_SIZE 40 #define check_breakpoints(mem, addr) mon_check_checkpoint(mem, addr, breakpoints[mem]) #define any_breakpoints(mem) (breakpoints[(mem)] != NULL) #define any_watchpoints_load(mem) (watchpoints_load[(mem)] != NULL) #define any_watchpoints_store(mem) (watchpoints_store[(mem)] != NULL) #define any_watchpoints(mem) (watchpoints_load[(mem)] || watchpoints_store[(mem)]) #define new_cond ((CONDITIONAL_NODE *)(xmalloc(sizeof(CONDITIONAL_NODE)))) #define addr_memspace(ma) (HI16_TO_LO16(ma)) #define addr_location(ma) (LO16(ma)) #define new_addr(m, l) (LO16_TO_HI16(m) | (l)) #define new_reg(m, r) (LO16_TO_HI16(m) | (r)) #define reg_memspace(mr) (HI16_TO_LO16(mr)) #define reg_regid(mr) (LO16(mr)) /* Global variables */ extern const char *_mon_space_strings[]; extern char *register_string[]; extern struct mon_cmds mon_cmd_array[]; extern char *memspace_string[]; extern FILE *mon_output; extern int sidefx; extern int exit_mon; extern RADIXTYPE default_radix; extern MEMSPACE default_memspace; extern bool asm_mode; extern MEMSPACE caller_space; extern unsigned mon_mask[NUM_MEMSPACES]; extern char *playback_name; extern bool playback; extern BREAK_LIST *breakpoints[NUM_MEMSPACES]; extern BREAK_LIST *watchpoints_load[NUM_MEMSPACES]; extern BREAK_LIST *watchpoints_store[NUM_MEMSPACES]; /* Function declarations */ extern void monitor_init(monitor_interface_t *maincpu_interface, monitor_interface_t *true1541_interface_init); extern bool mon_force_import(MEMSPACE mem); extern void mon_check_icount(ADDRESS a); extern void mon_check_watchpoints(ADDRESS a); extern void mon(ADDRESS a); extern void mon_add_number_to_buffer(int number); extern void mon_add_string_to_buffer(char *str); extern int mon_cmd_lookup_index(char *str); extern int mon_cmd_get_token(int index); extern int mon_cmd_get_next_state(int index); extern void mon_start_assemble_mode(MON_ADDR addr, char *asm_line); extern void mon_disassemble_lines(MON_ADDR start_addr, MON_ADDR end_addr); extern int mon_assemble_instr(char *opcode_name, unsigned operand); extern void mon_display_memory(int radix_type, MON_ADDR start_addr, MON_ADDR end_addr); extern void mon_display_data(MON_ADDR start_addr, MON_ADDR end_addr, int x, int y); extern void mon_move_memory(MON_ADDR start_addr, MON_ADDR end_addr, MON_ADDR dest); extern void mon_compare_memory(MON_ADDR start_addr, MON_ADDR end_addr, MON_ADDR dest); extern void mon_fill_memory(MON_ADDR start_addr, MON_ADDR end_addr, unsigned char *data); extern void mon_hunt_memory(MON_ADDR start_addr, MON_ADDR end_addr, unsigned char *data); extern void mon_load_file(char *filename, MON_ADDR start_addr); extern void mon_save_file(char *filename, MON_ADDR start_addr, MON_ADDR end_addr); extern void mon_verify_file(char *filename, MON_ADDR start_addr); extern void mon_instructions_step(int count); extern void mon_instructions_next(int count); extern void mon_instruction_return(void); extern void mon_stack_up(int count); extern void mon_stack_down(int count); extern void mon_block_cmd(int op, int track, int sector, MON_ADDR addr); extern void mon_print_convert(int val); extern void mon_change_dir(char *path); extern void mon_execute_disk_command(char *cmd); extern void mon_print_help(char *cmd); extern unsigned int mon_get_reg_val(MEMSPACE mem, REG_ID reg_id); extern void mon_set_reg_val(MEMSPACE mem, REG_ID reg_id, WORD val); extern void mon_print_registers(MEMSPACE mem); extern void mon_jump(MON_ADDR addr); extern char *mon_symbol_table_lookup_name(MEMSPACE mem, ADDRESS addr); extern int mon_symbol_table_lookup_addr(MEMSPACE mem, char *name); extern void mon_add_name_to_symbol_table(MON_ADDR addr, char *name); extern void mon_remove_name_from_symbol_table(MEMSPACE mem, char *name); extern void mon_print_symbol_table(MEMSPACE mem); extern void mon_load_symbols(MEMSPACE mem, char *filename); extern void mon_save_symbols(MEMSPACE mem, char *filename); extern void mon_record_commands(char *filename); extern void mon_end_recording(void); extern int mon_check_checkpoint(MEMSPACE mem, ADDRESS addr, BREAK_LIST *list); extern int mon_add_checkpoint(MON_ADDR start_addr, MON_ADDR end_addr, bool is_trace, bool is_load, bool is_store); extern void mon_delete_checkpoint(int brknum); extern void mon_print_checkpoints(void); extern void mon_switch_checkpoint(int op, int breakpt_num); extern void mon_set_ignore_count(int breakpt_num, int count); extern void mon_set_checkpoint_condition(int brk_num, CONDITIONAL_NODE *cnode); extern void mon_set_checkpoint_command(int brk_num, char *cmd); extern void mon_watch_push_load_addr(ADDRESS addr, MEMSPACE mem); extern void mon_watch_push_store_addr(ADDRESS addr, MEMSPACE mem); #endif
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.