1 /**************************************************************************************************** 2 * 3 * 4 * arm.h 5 * Interface file for the portable ARM emulator. 6 * 7 * 8 ***************************************************************************************************/ 9 10 #ifndef _ARM_H 11 #define _ARM_H 12 13 #include "driver.h" 14 15 /**************************************************************************************************** 16 * COMPILE-TIME DEFINITIONS 17 ***************************************************************************************************/ 18 19 /**************************************************************************************************** 20 * GLOBAL CONSTANTS 21 ***************************************************************************************************/ 22 23 #define ARM_DATA_OFFSET 0x00000 24 #define ARM_PGM_OFFSET 0x10000 25 #define ARM_SIZE 0x20000 26 27 28 /**************************************************************************************************** 29 * MEMORY MAP MACROS 30 ***************************************************************************************************/ 31 32 #define ADSP_DATA_ADDR_RANGE(start, end) (ARM_DATA_OFFSET + ((start) << 1)), (ARM_DATA_OFFSET + ((end) << 1) + 1) 33 #define ADSP_PGM_ADDR_RANGE(start, end) (ARM_PGM_OFFSET + ((start) << 2)), (ARM_PGM_OFFSET + ((end) << 2) + 3) 34 35 36 /**************************************************************************************************** 37 * REGISTER ENUMERATION 38 ***************************************************************************************************/ 39 40 enum 41 { 42 ARM_OP=1, ARM_Q1, ARM_Q2, ARM_PSW, 43 ARM_R0, ARM_R1, ARM_R2, ARM_R3, ARM_R4, ARM_R5, ARM_R6, ARM_R7, 44 ARM_R8, ARM_R9, ARM_R10, ARM_R11, ARM_R12, ARM_R13, ARM_R14, ARM_R15, 45 ARM_FR8, ARM_FR9, ARM_FR10, ARM_FR11, ARM_FR12, ARM_FR13, ARM_FR14, 46 ARM_IR13, ARM_IR14, ARM_SR13, ARM_SR14 47 }; 48 49 50 /**************************************************************************************************** 51 * INTERRUPT CONSTANTS 52 ***************************************************************************************************/ 53 54 #define ARM_INT_NONE 0 /* No interrupt requested */ 55 #define ARM_FIRQ 1 /* FIRQ */ 56 #define ARM_IRQ 2 /* IRQ */ 57 #define ARM_SVC 3 /* SVC */ 58 59 /**************************************************************************************************** 60 * PUBLIC GLOBALS 61 ***************************************************************************************************/ 62 63 extern int arm_ICount; 64 65 /**************************************************************************************************** 66 * PUBLIC FUNCTIONS 67 ***************************************************************************************************/ 68 69 extern void arm_reset(void *param); 70 extern void arm_exit(void); 71 extern int arm_execute(int cycles); 72 extern unsigned arm_get_context(void *dst); 73 extern void arm_set_context(void *src); 74 extern unsigned arm_get_pc(void); 75 extern void arm_set_pc(unsigned val); 76 extern unsigned arm_get_sp(void); 77 extern void arm_set_sp(unsigned val); 78 extern unsigned arm_get_reg(int regnum); 79 extern void arm_set_reg(int regnum, unsigned val); 80 extern void arm_set_nmi_line(int state); 81 extern void arm_set_irq_line(int irqline, int state); 82 extern void arm_set_irq_callback(int (*callback)(int irqline)); 83 extern const char *arm_info(void *context, int regnum); 84 extern unsigned arm_dasm(char *buffer, unsigned pc); 85 86 #endif /* _ARM_H */ 87 88