static int breakpoint_add_checkpoint(MON_ADDR start_addr, MON_ADDR end_addr, bool is_trace, bool is_load, bool is_store, bool is_temp, bool do_print) { breakpoint_t *new_bp; MEMSPACE mem; long len; len = mon_evaluate_address_range(&start_addr, &end_addr, FALSE, 0); new_bp = (breakpoint_t *)lib_malloc(sizeof(breakpoint_t)); new_bp->brknum = breakpoint_count++; new_bp->start_addr = start_addr; new_bp->end_addr = end_addr; new_bp->trace = is_trace; new_bp->enabled = e_ON; new_bp->hit_count = 0; new_bp->ignore_count = 0; new_bp->condition = NULL; new_bp->command = NULL; new_bp->watch_load = is_load; new_bp->watch_store = is_store; new_bp->temporary = is_temp; mem = addr_memspace(start_addr); if (!is_load && !is_store) { if (!any_breakpoints(mem)) { monitor_mask[mem] |= MI_BREAK; interrupt_monitor_trap_on(mon_interfaces[mem]->int_status); } add_to_checkpoint_list(&(breakpoints[mem]), new_bp); } else { if (!any_watchpoints(mem)) { monitor_mask[mem] |= MI_WATCH; mon_interfaces[mem]->toggle_watchpoints_func(1, mon_interfaces[mem]->context); interrupt_monitor_trap_on(mon_interfaces[mem]->int_status); } if (is_load) add_to_checkpoint_list(&(watchpoints_load[mem]), new_bp); if (is_store) add_to_checkpoint_list(&(watchpoints_store[mem]), new_bp); } if (is_temp) exit_mon = 1; if (do_print) print_checkpoint_info(new_bp); return new_bp->brknum; }
void drivecpu_reset(drive_context_t *drv) { int preserve_monitor; *(drv->clk_ptr) = 0; drivecpu_reset_clk(drv); preserve_monitor = drv->cpu->int_status->global_pending_int & IK_MONITOR; interrupt_cpu_status_reset(drv->cpu->int_status); if (preserve_monitor) { interrupt_monitor_trap_on(drv->cpu->int_status); } /* FIXME -- ugly, should be changed in interrupt.h */ interrupt_trigger_reset(drv->cpu->int_status, *(drv->clk_ptr)); }
static void cpu_reset(drive_context_t *drv) { int preserve_monitor; preserve_monitor = drv->cpu->int_status->global_pending_int & IK_MONITOR; log_message(drv->drive->log, "RESET."); interrupt_cpu_status_reset(drv->cpu->int_status); *(drv->clk_ptr) = 6; rotation_reset(drv->drive); machine_drive_reset(drv); if (preserve_monitor) { interrupt_monitor_trap_on(drv->cpu->int_status); } }
static void cpu_reset(void) { int preserve_monitor; preserve_monitor = maincpu_int_status->global_pending_int & IK_MONITOR; interrupt_cpu_status_reset(maincpu_int_status); if (preserve_monitor) { interrupt_monitor_trap_on(maincpu_int_status); } maincpu_clk = 6; /* # of clock cycles needed for RESET. */ /* CPU specific extra reset routine, currently only used for 8502 fast mode refresh cycle. */ CPU_ADDITIONAL_RESET(); /* Do machine-specific initialization. */ machine_reset(); }
static void update_checkpoint_state(MEMSPACE mem) { if (watchpoints_load[mem] != NULL || watchpoints_store[mem] != NULL) { monitor_mask[mem] |= MI_WATCH; mon_interfaces[mem]->toggle_watchpoints_func( 1, mon_interfaces[mem]->context); } else { monitor_mask[mem] &= ~MI_WATCH; mon_interfaces[mem]->toggle_watchpoints_func( 0, mon_interfaces[mem]->context); } if (breakpoints[mem] != NULL) { monitor_mask[mem] |= MI_BREAK; } else { monitor_mask[mem] &= ~MI_BREAK; } if (monitor_mask[mem]) { interrupt_monitor_trap_on(mon_interfaces[mem]->int_status); } else { interrupt_monitor_trap_off(mon_interfaces[mem]->int_status); } }