📄 armdefs.h
字号:
the base register was unchanged for all other instructions. (oldest)Base Restored Abort Model: If a Data Abort occurs in an instruction whichspecifies base register writeback, the value in the base register isunchanged. (strongarm, xscale)Base Updated Abort Model: If a Data Abort occurs in an instruction whichspecifies base register writeback, the base register writeback still occurs.(arm720T)read PART Bchap2 The System Control Coprocessor CP152.4 Register1:control registerL(bit 6): in some ARMv3 and earlier implementations, the abort model of theprocessor could be configured:0=early Abort Model Selected(now obsolete)1=Late Abort Model selceted(same as Base Updated Abort Model)on later processors, this bit reads as 1 and ignores writes.-------------------------------------------------------------So, if lateabtSig=1, then it means Late Abort Model(Base Updated Abort Model) if lateabtSig=0, then it means Base Restored Abort Model*/ unsigned lateabtSig; ARMword Vector; /* synthesize aborts in cycle modes */ ARMword Aborted; /* sticky flag for aborts */ ARMword Reseted; /* sticky flag for Reset */ ARMword Inted, LastInted; /* sticky flags for interrupts */ ARMword Base; /* extra hand for base writeback */ ARMword AbortAddr; /* to keep track of Prefetch aborts */ const struct Dbg_HostosInterface *hostif; int verbose; /* non-zero means print various messages like the banner */ mmu_state_t mmu; mem_state_t mem; /*remove io_state to skyeye_mach_*.c files */ //io_state_t io; /* point to a interrupt pending register. now for skyeye-ne2k.c * later should move somewhere. e.g machine_config_t*/ //chy: 2003-08-11, for different arm core type unsigned is_v4; /* Are we emulating a v4 architecture (or higher) ? */ unsigned is_v5; /* Are we emulating a v5 architecture ? */ unsigned is_v5e; /* Are we emulating a v5e architecture ? */ unsigned is_v6; /* Are we emulating a v6 architecture ? */ unsigned is_XScale; /* Are we emulating an XScale architecture ? */ unsigned is_iWMMXt; /* Are we emulating an iWMMXt co-processor ? */ unsigned is_ep9312; /* Are we emulating a Cirrus Maverick co-processor ? */ //chy 2005-09-19 unsigned is_pxa27x; /* Are we emulating a Intel PXA27x co-processor ? */ //chy: seems only used in xscale's CP14 unsigned int LastTime; /* Value of last call to ARMul_Time() */ ARMword CP14R0_CCD; /* used to count 64 clock cycles with CP14 R0 bit 3 set *///added by ksh:for handle different machs io 2004-3-5 ARMul_io mach_io;/*added by ksh,2004-11-26,some energy profiling*/ ARMul_Energy energy;//teawater add for next_dis 2004.10.27----------------------- int disassemble;//AJ2D------------------------------------------//teawater add for arm2x86 2005.02.15------------------------------------------- uint32_t trap; uint32_t tea_break_addr; uint32_t tea_break_ok; int tea_pc;//AJ2D--------------------------------------------------------------------------//teawater add for arm2x86 2005.07.03------------------------------------------- /* * 2007-01-24 removed the term-io functions by Anthony Lee, * moved to "device/uart/skyeye_uart_stdio.c". *///AJ2D--------------------------------------------------------------------------//teawater add for arm2x86 2005.07.05------------------------------------------- //arm_arm A2-18 int abort_model; //0 Base Restored Abort Model, 1 the Early Abort Model, 2 Base Updated Abort Model //AJ2D--------------------------------------------------------------------------//teawater change for return if running tb dirty 2005.07.09--------------------- void *tb_now;//AJ2D--------------------------------------------------------------------------//teawater add for record reg value to ./reg.txt 2005.07.10--------------------- FILE *tea_reg_fd;//AJ2D--------------------------------------------------------------------------/*added by ksh in 2005-10-1*/ cpu_config_t *cpu; mem_config_t *mem_bank;/* added LPC remap function */ int vector_remap_flag; uint32_t vector_remap_addr; uint32_t vector_remap_size;//teawater add DBCT_TEST_SPEED 2005.10.04---------------------------------------#ifdef DBCT_TEST_SPEED uint64_t instr_count;#endif //DBCT_TEST_SPEED//AJ2D--------------------------------------------------------------------------};#define ResetPin NresetSig#define FIQPin NfiqSig#define IRQPin NirqSig#define AbortPin abortSig#define TransPin NtransSig#define BigEndPin bigendSig#define Prog32Pin prog32Sig#define Data32Pin data32Sig#define LateAbortPin lateabtSig/***************************************************************************\* Types of ARM we know about *\***************************************************************************//* The bitflags */#define ARM_Fix26_Prop 0x01#define ARM_Nexec_Prop 0x02#define ARM_Debug_Prop 0x10#define ARM_Isync_Prop ARM_Debug_Prop#define ARM_Lock_Prop 0x20//chy 2003-08-11 #define ARM_v4_Prop 0x40#define ARM_v5_Prop 0x80#define ARM_v5e_Prop 0x100#define ARM_XScale_Prop 0x200#define ARM_ep9312_Prop 0x400#define ARM_iWMMXt_Prop 0x800//chy 2005-09-19#define ARM_PXA27X_Prop 0x1000/* ARM2 family */#define ARM2 (ARM_Fix26_Prop)#define ARM2as ARM2#define ARM61 ARM2#define ARM3 ARM2#ifdef ARM60 /* previous definition in armopts.h */#undef ARM60#endif/* ARM6 family */#define ARM6 (ARM_Lock_Prop)#define ARM60 ARM6#define ARM600 ARM6#define ARM610 ARM6#define ARM620 ARM6/***************************************************************************\* Macros to extract instruction fields *\***************************************************************************/#define BIT(n) ( (ARMword)(instr>>(n))&1) /* bit n of instruction */#define BITS(m,n) ( (ARMword)(instr<<(31-(n))) >> ((31-(n))+(m)) ) /* bits m to n of instr */#define TOPBITS(n) (instr >> (n)) /* bits 31 to n of instr *//***************************************************************************\* The hardware vector addresses *\***************************************************************************/#define ARMResetV 0L#define ARMUndefinedInstrV 4L#define ARMSWIV 8L#define ARMPrefetchAbortV 12L#define ARMDataAbortV 16L#define ARMAddrExceptnV 20L#define ARMIRQV 24L#define ARMFIQV 28L#define ARMErrorV 32L /* This is an offset, not an address ! */#define ARMul_ResetV ARMResetV#define ARMul_UndefinedInstrV ARMUndefinedInstrV#define ARMul_SWIV ARMSWIV#define ARMul_PrefetchAbortV ARMPrefetchAbortV#define ARMul_DataAbortV ARMDataAbortV#define ARMul_AddrExceptnV ARMAddrExceptnV#define ARMul_IRQV ARMIRQV#define ARMul_FIQV ARMFIQV/***************************************************************************\* Mode and Bank Constants *\***************************************************************************/#define USER26MODE 0L#define FIQ26MODE 1L#define IRQ26MODE 2L#define SVC26MODE 3L#define USER32MODE 16L#define FIQ32MODE 17L#define IRQ32MODE 18L#define SVC32MODE 19L#define ABORT32MODE 23L#define UNDEF32MODE 27L//chy 2006-02-15 add system32 mode#define SYSTEM32MODE 31L#define ARM32BITMODE (state->Mode > 3)#define ARM26BITMODE (state->Mode <= 3)#define ARMMODE (state->Mode)#define ARMul_MODEBITS 0x1fL#define ARMul_MODE32BIT ARM32BITMODE#define ARMul_MODE26BIT ARM26BITMODE#define USERBANK 0#define FIQBANK 1#define IRQBANK 2#define SVCBANK 3#define ABORTBANK 4#define UNDEFBANK 5#define DUMMYBANK 6#define SYSTEMBANK USERBANK#define BANK_CAN_ACCESS_SPSR(bank) \ ((bank) != USERBANK && (bank) != SYSTEMBANK && (bank) != DUMMYBANK)/***************************************************************************\* Definitons of things in the emulator *\***************************************************************************/extern void ARMul_EmulateInit (void);extern ARMul_State *ARMul_NewState (void);extern void ARMul_Reset (ARMul_State * state);extern ARMword ARMul_DoProg (ARMul_State * state);extern ARMword ARMul_DoInstr (ARMul_State * state);/***************************************************************************\* Definitons of things for event handling *\***************************************************************************/extern void ARMul_ScheduleEvent (ARMul_State * state, unsigned int delay, unsigned (*func) ());extern void ARMul_EnvokeEvent (ARMul_State * state);extern unsigned int ARMul_Time (ARMul_State * state);/***************************************************************************\* Useful support routines *\***************************************************************************/extern ARMword ARMul_GetReg (ARMul_State * state, unsigned mode, unsigned reg);extern void ARMul_SetReg (ARMul_State * state, unsigned mode, unsigned reg, ARMword value);extern ARMword ARMul_GetPC (ARMul_State * state);extern ARMword ARMul_GetNextPC (ARMul_State * state);extern void ARMul_SetPC (ARMul_State * state, ARMword value);extern ARMword ARMul_GetR15 (ARMul_State * state);extern void ARMul_SetR15 (ARMul_State * state, ARMword value);extern ARMword ARMul_GetCPSR (ARMul_State * state);extern void ARMul_SetCPSR (ARMul_State * state, ARMword value);extern ARMword ARMul_GetSPSR (ARMul_State * state, ARMword mode);extern void ARMul_SetSPSR (ARMul_State * state, ARMword mode, ARMword value);/***************************************************************************\* Definitons of things to handle aborts *\***************************************************************************/extern void ARMul_Abort (ARMul_State * state, ARMword address);#ifdef MODET#define ARMul_ABORTWORD (state->TFlag ? 0xefffdfff : 0xefffffff) /* SWI -1 */#define ARMul_PREFETCHABORT(address) if (state->AbortAddr == 1) \ state->AbortAddr = (address & (state->TFlag ? ~1L : ~3L))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -