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