#ifndef _ARM7_h_
#define _ARM7_h_
#include "cpuintrf.h"
#define ARM7_DREAMCAST
#ifdef ARM7_DREAMCAST
#ifdef ARM7_THUMB
#warning "Dreamcast ARM7 is a -DI type, it doesn't support Thumb mode."
#endif
#else
#endif
#define ARM7_CPSR_N (1 << 31)
#define ARM7_CPSR_Z (1 << 30)
#define ARM7_CPSR_C (1 << 29)
#define ARM7_CPSR_V (1 << 28)
#define ARM7_CPSR_I (1 << 7)
#define ARM7_CPSR_F (1 << 6)
#define ARM7_CPSR_T (1 << 5)
#define ARM7_CPSR_M(x) ((x) & 0x1f)
#define ARM7_CPSR_MX(sr,x) (((sr) & ~0x1f) | ((x) & 0x1f))
#define ARM7_CPSR_M_usr 0x10
#define ARM7_CPSR_M_fiq 0x11
#define ARM7_CPSR_M_irq 0x12
#define ARM7_CPSR_M_svc 0x13
#define ARM7_CPSR_M_abt 0x17
#define ARM7_CPSR_M_und 0x11
#define ARM7_CPSR_M_sys 0x1f
#define ARM7_FL_FIQ (1 << 0)
#define ARM7_FL_IRQ (1 << 1)
#define ARM7_MODE_usr 0
#define ARM7_MODE_fiq 1
#define ARM7_MODE_irq 2
#define ARM7_MODE_svc 3
#define ARM7_MODE_abt 4
#define ARM7_MODE_und 5
#define ARM7_MODE_sys 0
typedef INT32 ARM7_REG;
enum
{
ARM7_R0 = 0, ARM7_R1, ARM7_R2, ARM7_R3, ARM7_R4, ARM7_R5, ARM7_R6, ARM7_R7,
ARM7_R8, ARM7_R9, ARM7_R10, ARM7_R11, ARM7_R12, ARM7_R13, ARM7_R14, ARM7_R15
};
#define ARM7_SP 13
#define ARM7_LR 14
#define ARM7_PC 15
#define ARM7_CPSR 16
#define ARM7_SPSR 17
struct sARM7
{
ARM7_REG Rx [18];
ARM7_REG Rx_bank [6][10];
int fiq, irq;
int carry;
int overflow;
int flagi;
UINT32 kod;
int cykle;
};
extern struct sARM7 ARM7;
void ARM7_Init (void);
void ARM7_HardReset (void);
void ARM7_SoftReset (void);
void ARM7_SetCPSR (ARM7_REG sr);
void ARM7_SetFIQ (int stan);
void ARM7_SetIRQ (int stan);
void ARM7_CheckIRQ (void);
void ARM7_Step (void);
int ARM7_Execute (int n);
enum
{
ARM7_IRQ_LINE=0, ARM7_FIRQ_LINE,
ARM7_NUM_LINES
};
#ifdef ENABLE_DEBUGGER
extern UINT32 arm7_disasm( char *pBuf, UINT32 pc, UINT32 opcode );
extern UINT32 thumb_disasm( char *pBuf, UINT32 pc, UINT16 opcode );
#endif
#endif