⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sim-main.h

📁 这个是LINUX下的GDB调度工具的源码
💻 H
📖 第 1 页 / 共 2 页
字号:
                                  SIM_SIGNAL excep,                                  uint16 addr,                                  const char *message);inline address_wordphys_to_virt (sim_cpu *cpu, address_word addr){  if (addr >= cpu->bank_start && addr < cpu->bank_end)    return ((address_word) (addr - cpu->bank_start)            + (((address_word) cpu->cpu_regs.page) << cpu->bank_shift)            + cpu->bank_virtual);  else    return (address_word) (addr);}inline uint8memory_read8 (sim_cpu *cpu, uint16 addr){  uint8 val;  if (sim_core_read_buffer (CPU_STATE (cpu), cpu, 0, &val, addr, 1) != 1)    {      cpu_memory_exception (cpu, SIM_SIGSEGV, addr,                            "Read error");    }  return val;}inline voidmemory_write8 (sim_cpu *cpu, uint16 addr, uint8 val){  if (sim_core_write_buffer (CPU_STATE (cpu), cpu, 0, &val, addr, 1) != 1)    {      cpu_memory_exception (cpu, SIM_SIGSEGV, addr,                            "Write error");    }}inline uint16memory_read16 (sim_cpu *cpu, uint16 addr){  uint8 b[2];  if (sim_core_read_buffer (CPU_STATE (cpu), cpu, 0, b, addr, 2) != 2)    {      cpu_memory_exception (cpu, SIM_SIGSEGV, addr,                            "Read error");    }  return (((uint16) (b[0])) << 8) | ((uint16) b[1]);}inline voidmemory_write16 (sim_cpu *cpu, uint16 addr, uint16 val){  uint8 b[2];  b[0] = val >> 8;  b[1] = val;  if (sim_core_write_buffer (CPU_STATE (cpu), cpu, 0, b, addr, 2) != 2)    {      cpu_memory_exception (cpu, SIM_SIGSEGV, addr,                            "Write error");    }}extern voidcpu_ccr_update_tst8 (sim_cpu *proc, uint8 val);     inline voidcpu_ccr_update_tst16 (sim_cpu *proc, uint16 val){  cpu_set_ccr_V (proc, 0);  cpu_set_ccr_N (proc, val & 0x8000 ? 1 : 0);  cpu_set_ccr_Z (proc, val == 0 ? 1 : 0);}     inline voidcpu_ccr_update_shift8 (sim_cpu *proc, uint8 val){  cpu_set_ccr_N (proc, val & 0x80 ? 1 : 0);  cpu_set_ccr_Z (proc, val == 0 ? 1 : 0);  cpu_set_ccr_V (proc, cpu_get_ccr_N (proc) ^ cpu_get_ccr_C (proc));}     inline voidcpu_ccr_update_shift16 (sim_cpu *proc, uint16 val){  cpu_set_ccr_N (proc, val & 0x8000 ? 1 : 0);  cpu_set_ccr_Z (proc, val == 0 ? 1 : 0);  cpu_set_ccr_V (proc, cpu_get_ccr_N (proc) ^ cpu_get_ccr_C (proc));}inline voidcpu_ccr_update_add8 (sim_cpu *proc, uint8 r, uint8 a, uint8 b){  cpu_set_ccr_C (proc, ((a & b) | (b & ~r) | (a & ~r)) & 0x80 ? 1 : 0);  cpu_set_ccr_V (proc, ((a & b & ~r) | (~a & ~b & r)) & 0x80 ? 1 : 0);  cpu_set_ccr_Z (proc, r == 0);  cpu_set_ccr_N (proc, r & 0x80 ? 1 : 0);}inline voidcpu_ccr_update_sub8 (sim_cpu *proc, uint8 r, uint8 a, uint8 b){  cpu_set_ccr_C (proc, ((~a & b) | (b & r) | (~a & r)) & 0x80 ? 1 : 0);  cpu_set_ccr_V (proc, ((a & ~b & ~r) | (~a & b & r)) & 0x80 ? 1 : 0);  cpu_set_ccr_Z (proc, r == 0);  cpu_set_ccr_N (proc, r & 0x80 ? 1 : 0);}inline voidcpu_ccr_update_add16 (sim_cpu *proc, uint16 r, uint16 a, uint16 b){  cpu_set_ccr_C (proc, ((a & b) | (b & ~r) | (a & ~r)) & 0x8000 ? 1 : 0);  cpu_set_ccr_V (proc, ((a & b & ~r) | (~a & ~b & r)) & 0x8000 ? 1 : 0);  cpu_set_ccr_Z (proc, r == 0);  cpu_set_ccr_N (proc, r & 0x8000 ? 1 : 0);}inline voidcpu_ccr_update_sub16 (sim_cpu *proc, uint16 r, uint16 a, uint16 b){  cpu_set_ccr_C (proc, ((~a & b) | (b & r) | (~a & r)) & 0x8000 ? 1 : 0);  cpu_set_ccr_V (proc, ((a & ~b & ~r) | (~a & b & r)) & 0x8000 ? 1 : 0);  cpu_set_ccr_Z (proc, r == 0);  cpu_set_ccr_N (proc, r & 0x8000 ? 1 : 0);}/* Push and pop instructions for 68HC11 (next-available stack mode).  */inline voidcpu_m68hc11_push_uint8 (sim_cpu *proc, uint8 val){  uint16 addr = proc->cpu_regs.sp;  memory_write8 (proc, addr, val);  proc->cpu_regs.sp = addr - 1;}inline voidcpu_m68hc11_push_uint16 (sim_cpu *proc, uint16 val){  uint16 addr = proc->cpu_regs.sp - 1;  memory_write16 (proc, addr, val);  proc->cpu_regs.sp = addr - 1;}inline uint8cpu_m68hc11_pop_uint8 (sim_cpu *proc){  uint16 addr = proc->cpu_regs.sp;  uint8 val;    val = memory_read8 (proc, addr + 1);  proc->cpu_regs.sp = addr + 1;  return val;}inline uint16cpu_m68hc11_pop_uint16 (sim_cpu *proc){  uint16 addr = proc->cpu_regs.sp;  uint16 val;    val = memory_read16 (proc, addr + 1);  proc->cpu_regs.sp = addr + 2;  return val;}/* Push and pop instructions for 68HC12 (last-used stack mode).  */inline voidcpu_m68hc12_push_uint8 (sim_cpu *proc, uint8 val){  uint16 addr = proc->cpu_regs.sp;  addr --;  memory_write8 (proc, addr, val);  proc->cpu_regs.sp = addr;}inline voidcpu_m68hc12_push_uint16 (sim_cpu *proc, uint16 val){  uint16 addr = proc->cpu_regs.sp;  addr -= 2;  memory_write16 (proc, addr, val);  proc->cpu_regs.sp = addr;}inline uint8cpu_m68hc12_pop_uint8 (sim_cpu *proc){  uint16 addr = proc->cpu_regs.sp;  uint8 val;    val = memory_read8 (proc, addr);  proc->cpu_regs.sp = addr + 1;  return val;}inline uint16cpu_m68hc12_pop_uint16 (sim_cpu *proc){  uint16 addr = proc->cpu_regs.sp;  uint16 val;    val = memory_read16 (proc, addr);  proc->cpu_regs.sp = addr + 2;  return val;}/* Fetch a 8/16 bit value and update the PC.  */inline uint8cpu_fetch8 (sim_cpu *proc){  uint16 addr = proc->cpu_regs.pc;  uint8 val;    val = memory_read8 (proc, addr);  proc->cpu_regs.pc = addr + 1;  return val;}inline uint16cpu_fetch16 (sim_cpu *proc){  uint16 addr = proc->cpu_regs.pc;  uint16 val;    val = memory_read16 (proc, addr);  proc->cpu_regs.pc = addr + 2;  return val;}extern void cpu_call (sim_cpu* proc, uint16 addr);extern void cpu_exg (sim_cpu* proc, uint8 code);extern void cpu_dbcc (sim_cpu* proc);extern void cpu_special (sim_cpu *proc, enum M6811_Special special);extern void cpu_move8 (sim_cpu *proc, uint8 op);extern void cpu_move16 (sim_cpu *proc, uint8 op);extern uint16 cpu_fetch_relbranch (sim_cpu *proc);extern uint16 cpu_fetch_relbranch16 (sim_cpu *proc);extern void cpu_push_all (sim_cpu *proc);extern void cpu_single_step (sim_cpu *proc);extern void cpu_info (SIM_DESC sd, sim_cpu *proc);extern int cpu_initialize (SIM_DESC sd, sim_cpu *cpu);/* Returns the address of a 68HC12 indexed operand.   Pre and post modifications are handled on the source register.  */extern uint16 cpu_get_indexed_operand_addr (sim_cpu* cpu, int restrict);extern void cpu_return (sim_cpu *cpu);extern void cpu_set_sp (sim_cpu *cpu, uint16 val);extern int cpu_reset (sim_cpu *cpu);extern int cpu_restart (sim_cpu *cpu);extern void sim_memory_error (sim_cpu *cpu, SIM_SIGNAL excep,                              uint16 addr, const char *message, ...);extern void emul_os (int op, sim_cpu *cpu);extern void cpu_interp_m6811 (sim_cpu *cpu);extern void cpu_interp_m6812 (sim_cpu *cpu);extern int m68hc11cpu_set_oscillator (SIM_DESC sd, const char *port,				      double ton, double toff,				      signed64 repeat);extern int m68hc11cpu_clear_oscillator (SIM_DESC sd, const char *port);extern void m68hc11cpu_set_port (struct hw *me, sim_cpu *cpu,				 unsigned addr, uint8 val);/* The current state of the processor; registers, memory, etc.  */#define CIA_GET(CPU)      (cpu_get_pc (CPU))#define CIA_SET(CPU,VAL)  (cpu_set_pc ((CPU), (VAL)))#if (WITH_SMP)#define STATE_CPU(sd,n) (&(sd)->cpu[n])#else#define STATE_CPU(sd,n) (&(sd)->cpu[0])#endifstruct sim_state {  sim_cpu        cpu[MAX_NR_PROCESSORS];  device         *devices;  sim_state_base base;};extern void sim_set_profile (int n);extern void sim_set_profile_size (int n);extern void sim_board_reset (SIM_DESC sd);#define PRINT_TIME  0x01#define PRINT_CYCLE 0x02extern const char *cycle_to_string (sim_cpu *cpu, signed64 t, int flags);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -