aboutsummaryrefslogtreecommitdiff
path: root/SrcShared/Hardware/EmCPUARM.h
diff options
context:
space:
mode:
Diffstat (limited to 'SrcShared/Hardware/EmCPUARM.h')
-rw-r--r--SrcShared/Hardware/EmCPUARM.h731
1 files changed, 731 insertions, 0 deletions
diff --git a/SrcShared/Hardware/EmCPUARM.h b/SrcShared/Hardware/EmCPUARM.h
new file mode 100644
index 0000000..73c8304
--- /dev/null
+++ b/SrcShared/Hardware/EmCPUARM.h
@@ -0,0 +1,731 @@
+/* -*- mode: C++; tab-width: 4 -*- */
+/* ===================================================================== *\
+ Copyright (c) 2001 Palm, Inc. or its subsidiaries.
+ All rights reserved.
+
+ This file is part of the Palm OS Emulator.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+\* ===================================================================== */
+
+#ifndef EmCPUARM_h
+#define EmCPUARM_h
+
+#include "EmCPU.h" // EmCPU
+
+/*---------------------------------------------------------------------
+ * ARM Register IDs. All register IDs must be unique even if registers
+ * are in a different group such as FPU registers.
+ *--------------------------------------------------------------------*/
+enum EmCPUARMRegID
+{
+ eARMRegID_Invalid = 0, /* Zero is an invalid register number */
+
+ /*-----------------------------------------------------------
+ // User mode registers
+ //----------------------------------------------------------*/
+ eARMRegID_R0 = 1,
+ eARMRegID_R1,
+ eARMRegID_R2,
+ eARMRegID_R3,
+ eARMRegID_R4,
+ eARMRegID_R5,
+ eARMRegID_R6,
+ eARMRegID_R7,
+ eARMRegID_R8,
+ eARMRegID_R9,
+ eARMRegID_R10,
+ eARMRegID_R11,
+ eARMRegID_R12,
+ eARMRegID_SP, eARMRegID_R13 = eARMRegID_SP,
+ eARMRegID_LR, eARMRegID_R14 = eARMRegID_LR,
+ eARMRegID_PC, eARMRegID_R15 = eARMRegID_PC,
+ eARMRegID_CPSR,
+
+ /*-----------------------------------------------------------
+ // FIQ mode registers
+ //----------------------------------------------------------*/
+ eARMRegID_R8_fiq,
+ eARMRegID_R9_fiq,
+ eARMRegID_R10_fiq,
+ eARMRegID_R11_fiq,
+ eARMRegID_R12_fiq,
+ eARMRegID_R13_fiq,
+ eARMRegID_R14_fiq,
+ eARMRegID_SPSR_fiq,
+
+ /*-----------------------------------------------------------
+ // IRQ mode registers
+ //----------------------------------------------------------*/
+ eARMRegID_R13_irq,
+ eARMRegID_R14_irq,
+ eARMRegID_SPSR_irq,
+
+ /*-----------------------------------------------------------
+ // Supervisor mode registers
+ //----------------------------------------------------------*/
+ eARMRegID_R13_svc,
+ eARMRegID_R14_svc,
+ eARMRegID_SPSR_svc,
+
+ /*-----------------------------------------------------------
+ // Abort mode registers
+ //----------------------------------------------------------*/
+ eARMRegID_R13_abt,
+ eARMRegID_R14_abt,
+ eARMRegID_SPSR_abt,
+
+
+ /*-----------------------------------------------------------
+ // Undefined mode registers
+ //----------------------------------------------------------*/
+ eARMRegID_R13_und,
+ eARMRegID_R14_und,
+ eARMRegID_SPSR_und,
+
+ /*-----------------------------------------------------------
+ // SB register (static base).
+ //
+ // Any references to R9 can be remapped (in debugger plugin
+ // preferences) to access this SB register which can be
+ // described by an expression in the preferences. The
+ // expression should not contain any references to R9 (since
+ // this will create an infinite loop (since R9 has been
+ // remapped to SB)). Any need for the actual value of R9 in
+ // the SB expression should use the "genreg_gp1" (which means
+ // "General Register Global Pointer 1") opcode which
+ // will actually read R9.
+ //----------------------------------------------------------*/
+ eARMRegID_SB,
+
+ /*-----------------------------------------------------------
+ // Coprocessor 0 registers
+ //----------------------------------------------------------*/
+ eARMRegID_CP0_R0,
+ eARMRegID_CP0_R1,
+ eARMRegID_CP0_R2,
+ eARMRegID_CP0_R3,
+ eARMRegID_CP0_R4,
+ eARMRegID_CP0_R5,
+ eARMRegID_CP0_R6,
+ eARMRegID_CP0_R7,
+ eARMRegID_CP0_R8,
+ eARMRegID_CP0_R9,
+ eARMRegID_CP0_R10,
+ eARMRegID_CP0_R11,
+ eARMRegID_CP0_R12,
+ eARMRegID_CP0_R13,
+ eARMRegID_CP0_R14,
+ eARMRegID_CP0_R15,
+ eARMRegID_CP0_R16,
+ eARMRegID_CP0_R17,
+ eARMRegID_CP0_R18,
+ eARMRegID_CP0_R19,
+ eARMRegID_CP0_R20,
+ eARMRegID_CP0_R21,
+ eARMRegID_CP0_R22,
+ eARMRegID_CP0_R23,
+ eARMRegID_CP0_R24,
+ eARMRegID_CP0_R25,
+ eARMRegID_CP0_R26,
+ eARMRegID_CP0_R27,
+ eARMRegID_CP0_R28,
+ eARMRegID_CP0_R29,
+ eARMRegID_CP0_R30,
+ eARMRegID_CP0_R31,
+
+ /*-----------------------------------------------------------
+ // Coprocessor 1 registers
+ //----------------------------------------------------------*/
+ eARMRegID_CP1_R0,
+ eARMRegID_CP1_R1,
+ eARMRegID_CP1_R2,
+ eARMRegID_CP1_R3,
+ eARMRegID_CP1_R4,
+ eARMRegID_CP1_R5,
+ eARMRegID_CP1_R6,
+ eARMRegID_CP1_R7,
+ eARMRegID_CP1_R8,
+ eARMRegID_CP1_R9,
+ eARMRegID_CP1_R10,
+ eARMRegID_CP1_R11,
+ eARMRegID_CP1_R12,
+ eARMRegID_CP1_R13,
+ eARMRegID_CP1_R14,
+ eARMRegID_CP1_R15,
+ eARMRegID_CP1_R16,
+ eARMRegID_CP1_R17,
+ eARMRegID_CP1_R18,
+ eARMRegID_CP1_R19,
+ eARMRegID_CP1_R20,
+ eARMRegID_CP1_R21,
+ eARMRegID_CP1_R22,
+ eARMRegID_CP1_R23,
+ eARMRegID_CP1_R24,
+ eARMRegID_CP1_R25,
+ eARMRegID_CP1_R26,
+ eARMRegID_CP1_R27,
+ eARMRegID_CP1_R28,
+ eARMRegID_CP1_R29,
+ eARMRegID_CP1_R30,
+ eARMRegID_CP1_R31,
+
+ /*-----------------------------------------------------------
+ // Coprocessor 2 registers
+ //----------------------------------------------------------*/
+ eARMRegID_CP2_R0,
+ eARMRegID_CP2_R1,
+ eARMRegID_CP2_R2,
+ eARMRegID_CP2_R3,
+ eARMRegID_CP2_R4,
+ eARMRegID_CP2_R5,
+ eARMRegID_CP2_R6,
+ eARMRegID_CP2_R7,
+ eARMRegID_CP2_R8,
+ eARMRegID_CP2_R9,
+ eARMRegID_CP2_R10,
+ eARMRegID_CP2_R11,
+ eARMRegID_CP2_R12,
+ eARMRegID_CP2_R13,
+ eARMRegID_CP2_R14,
+ eARMRegID_CP2_R15,
+ eARMRegID_CP2_R16,
+ eARMRegID_CP2_R17,
+ eARMRegID_CP2_R18,
+ eARMRegID_CP2_R19,
+ eARMRegID_CP2_R20,
+ eARMRegID_CP2_R21,
+ eARMRegID_CP2_R22,
+ eARMRegID_CP2_R23,
+ eARMRegID_CP2_R24,
+ eARMRegID_CP2_R25,
+ eARMRegID_CP2_R26,
+ eARMRegID_CP2_R27,
+ eARMRegID_CP2_R28,
+ eARMRegID_CP2_R29,
+ eARMRegID_CP2_R30,
+ eARMRegID_CP2_R31,
+
+ /*-----------------------------------------------------------
+ // Coprocessor 3 registers
+ //----------------------------------------------------------*/
+ eARMRegID_CP3_R0,
+ eARMRegID_CP3_R1,
+ eARMRegID_CP3_R2,
+ eARMRegID_CP3_R3,
+ eARMRegID_CP3_R4,
+ eARMRegID_CP3_R5,
+ eARMRegID_CP3_R6,
+ eARMRegID_CP3_R7,
+ eARMRegID_CP3_R8,
+ eARMRegID_CP3_R9,
+ eARMRegID_CP3_R10,
+ eARMRegID_CP3_R11,
+ eARMRegID_CP3_R12,
+ eARMRegID_CP3_R13,
+ eARMRegID_CP3_R14,
+ eARMRegID_CP3_R15,
+ eARMRegID_CP3_R16,
+ eARMRegID_CP3_R17,
+ eARMRegID_CP3_R18,
+ eARMRegID_CP3_R19,
+ eARMRegID_CP3_R20,
+ eARMRegID_CP3_R21,
+ eARMRegID_CP3_R22,
+ eARMRegID_CP3_R23,
+ eARMRegID_CP3_R24,
+ eARMRegID_CP3_R25,
+ eARMRegID_CP3_R26,
+ eARMRegID_CP3_R27,
+ eARMRegID_CP3_R28,
+ eARMRegID_CP3_R29,
+ eARMRegID_CP3_R30,
+ eARMRegID_CP3_R31,
+
+ /*-----------------------------------------------------------
+ // Coprocessor 4 registers
+ //----------------------------------------------------------*/
+ eARMRegID_CP4_R0,
+ eARMRegID_CP4_R1,
+ eARMRegID_CP4_R2,
+ eARMRegID_CP4_R3,
+ eARMRegID_CP4_R4,
+ eARMRegID_CP4_R5,
+ eARMRegID_CP4_R6,
+ eARMRegID_CP4_R7,
+ eARMRegID_CP4_R8,
+ eARMRegID_CP4_R9,
+ eARMRegID_CP4_R10,
+ eARMRegID_CP4_R11,
+ eARMRegID_CP4_R12,
+ eARMRegID_CP4_R13,
+ eARMRegID_CP4_R14,
+ eARMRegID_CP4_R15,
+ eARMRegID_CP4_R16,
+ eARMRegID_CP4_R17,
+ eARMRegID_CP4_R18,
+ eARMRegID_CP4_R19,
+ eARMRegID_CP4_R20,
+ eARMRegID_CP4_R21,
+ eARMRegID_CP4_R22,
+ eARMRegID_CP4_R23,
+ eARMRegID_CP4_R24,
+ eARMRegID_CP4_R25,
+ eARMRegID_CP4_R26,
+ eARMRegID_CP4_R27,
+ eARMRegID_CP4_R28,
+ eARMRegID_CP4_R29,
+ eARMRegID_CP4_R30,
+ eARMRegID_CP4_R31,
+
+ /*-----------------------------------------------------------
+ // Coprocessor 5 registers
+ //----------------------------------------------------------*/
+ eARMRegID_CP5_R0,
+ eARMRegID_CP5_R1,
+ eARMRegID_CP5_R2,
+ eARMRegID_CP5_R3,
+ eARMRegID_CP5_R4,
+ eARMRegID_CP5_R5,
+ eARMRegID_CP5_R6,
+ eARMRegID_CP5_R7,
+ eARMRegID_CP5_R8,
+ eARMRegID_CP5_R9,
+ eARMRegID_CP5_R10,
+ eARMRegID_CP5_R11,
+ eARMRegID_CP5_R12,
+ eARMRegID_CP5_R13,
+ eARMRegID_CP5_R14,
+ eARMRegID_CP5_R15,
+ eARMRegID_CP5_R16,
+ eARMRegID_CP5_R17,
+ eARMRegID_CP5_R18,
+ eARMRegID_CP5_R19,
+ eARMRegID_CP5_R20,
+ eARMRegID_CP5_R21,
+ eARMRegID_CP5_R22,
+ eARMRegID_CP5_R23,
+ eARMRegID_CP5_R24,
+ eARMRegID_CP5_R25,
+ eARMRegID_CP5_R26,
+ eARMRegID_CP5_R27,
+ eARMRegID_CP5_R28,
+ eARMRegID_CP5_R29,
+ eARMRegID_CP5_R30,
+ eARMRegID_CP5_R31,
+
+ /*-----------------------------------------------------------
+ // Coprocessor 6 registers
+ //----------------------------------------------------------*/
+ eARMRegID_CP6_R0,
+ eARMRegID_CP6_R1,
+ eARMRegID_CP6_R2,
+ eARMRegID_CP6_R3,
+ eARMRegID_CP6_R4,
+ eARMRegID_CP6_R5,
+ eARMRegID_CP6_R6,
+ eARMRegID_CP6_R7,
+ eARMRegID_CP6_R8,
+ eARMRegID_CP6_R9,
+ eARMRegID_CP6_R10,
+ eARMRegID_CP6_R11,
+ eARMRegID_CP6_R12,
+ eARMRegID_CP6_R13,
+ eARMRegID_CP6_R14,
+ eARMRegID_CP6_R15,
+ eARMRegID_CP6_R16,
+ eARMRegID_CP6_R17,
+ eARMRegID_CP6_R18,
+ eARMRegID_CP6_R19,
+ eARMRegID_CP6_R20,
+ eARMRegID_CP6_R21,
+ eARMRegID_CP6_R22,
+ eARMRegID_CP6_R23,
+ eARMRegID_CP6_R24,
+ eARMRegID_CP6_R25,
+ eARMRegID_CP6_R26,
+ eARMRegID_CP6_R27,
+ eARMRegID_CP6_R28,
+ eARMRegID_CP6_R29,
+ eARMRegID_CP6_R30,
+ eARMRegID_CP6_R31,
+
+ /*-----------------------------------------------------------
+ // Coprocessor 7 registers
+ //----------------------------------------------------------*/
+ eARMRegID_CP7_R0,
+ eARMRegID_CP7_R1,
+ eARMRegID_CP7_R2,
+ eARMRegID_CP7_R3,
+ eARMRegID_CP7_R4,
+ eARMRegID_CP7_R5,
+ eARMRegID_CP7_R6,
+ eARMRegID_CP7_R7,
+ eARMRegID_CP7_R8,
+ eARMRegID_CP7_R9,
+ eARMRegID_CP7_R10,
+ eARMRegID_CP7_R11,
+ eARMRegID_CP7_R12,
+ eARMRegID_CP7_R13,
+ eARMRegID_CP7_R14,
+ eARMRegID_CP7_R15,
+ eARMRegID_CP7_R16,
+ eARMRegID_CP7_R17,
+ eARMRegID_CP7_R18,
+ eARMRegID_CP7_R19,
+ eARMRegID_CP7_R20,
+ eARMRegID_CP7_R21,
+ eARMRegID_CP7_R22,
+ eARMRegID_CP7_R23,
+ eARMRegID_CP7_R24,
+ eARMRegID_CP7_R25,
+ eARMRegID_CP7_R26,
+ eARMRegID_CP7_R27,
+ eARMRegID_CP7_R28,
+ eARMRegID_CP7_R29,
+ eARMRegID_CP7_R30,
+ eARMRegID_CP7_R31,
+
+ /*-----------------------------------------------------------
+ // Coprocessor 8 registers
+ //----------------------------------------------------------*/
+ eARMRegID_CP8_R0,
+ eARMRegID_CP8_R1,
+ eARMRegID_CP8_R2,
+ eARMRegID_CP8_R3,
+ eARMRegID_CP8_R4,
+ eARMRegID_CP8_R5,
+ eARMRegID_CP8_R6,
+ eARMRegID_CP8_R7,
+ eARMRegID_CP8_R8,
+ eARMRegID_CP8_R9,
+ eARMRegID_CP8_R10,
+ eARMRegID_CP8_R11,
+ eARMRegID_CP8_R12,
+ eARMRegID_CP8_R13,
+ eARMRegID_CP8_R14,
+ eARMRegID_CP8_R15,
+ eARMRegID_CP8_R16,
+ eARMRegID_CP8_R17,
+ eARMRegID_CP8_R18,
+ eARMRegID_CP8_R19,
+ eARMRegID_CP8_R20,
+ eARMRegID_CP8_R21,
+ eARMRegID_CP8_R22,
+ eARMRegID_CP8_R23,
+ eARMRegID_CP8_R24,
+ eARMRegID_CP8_R25,
+ eARMRegID_CP8_R26,
+ eARMRegID_CP8_R27,
+ eARMRegID_CP8_R28,
+ eARMRegID_CP8_R29,
+ eARMRegID_CP8_R30,
+ eARMRegID_CP8_R31,
+
+ /*-----------------------------------------------------------
+ // Coprocessor 9 registers
+ //----------------------------------------------------------*/
+ eARMRegID_CP9_R0,
+ eARMRegID_CP9_R1,
+ eARMRegID_CP9_R2,
+ eARMRegID_CP9_R3,
+ eARMRegID_CP9_R4,
+ eARMRegID_CP9_R5,
+ eARMRegID_CP9_R6,
+ eARMRegID_CP9_R7,
+ eARMRegID_CP9_R8,
+ eARMRegID_CP9_R9,
+ eARMRegID_CP9_R10,
+ eARMRegID_CP9_R11,
+ eARMRegID_CP9_R12,
+ eARMRegID_CP9_R13,
+ eARMRegID_CP9_R14,
+ eARMRegID_CP9_R15,
+ eARMRegID_CP9_R16,
+ eARMRegID_CP9_R17,
+ eARMRegID_CP9_R18,
+ eARMRegID_CP9_R19,
+ eARMRegID_CP9_R20,
+ eARMRegID_CP9_R21,
+ eARMRegID_CP9_R22,
+ eARMRegID_CP9_R23,
+ eARMRegID_CP9_R24,
+ eARMRegID_CP9_R25,
+ eARMRegID_CP9_R26,
+ eARMRegID_CP9_R27,
+ eARMRegID_CP9_R28,
+ eARMRegID_CP9_R29,
+ eARMRegID_CP9_R30,
+ eARMRegID_CP9_R31,
+
+ /*-----------------------------------------------------------
+ // Coprocessor 10 registers
+ //----------------------------------------------------------*/
+ eARMRegID_CP10_R0,
+ eARMRegID_CP10_R1,
+ eARMRegID_CP10_R2,
+ eARMRegID_CP10_R3,
+ eARMRegID_CP10_R4,
+ eARMRegID_CP10_R5,
+ eARMRegID_CP10_R6,
+ eARMRegID_CP10_R7,
+ eARMRegID_CP10_R8,
+ eARMRegID_CP10_R9,
+ eARMRegID_CP10_R10,
+ eARMRegID_CP10_R11,
+ eARMRegID_CP10_R12,
+ eARMRegID_CP10_R13,
+ eARMRegID_CP10_R14,
+ eARMRegID_CP10_R15,
+ eARMRegID_CP10_R16,
+ eARMRegID_CP10_R17,
+ eARMRegID_CP10_R18,
+ eARMRegID_CP10_R19,
+ eARMRegID_CP10_R20,
+ eARMRegID_CP10_R21,
+ eARMRegID_CP10_R22,
+ eARMRegID_CP10_R23,
+ eARMRegID_CP10_R24,
+ eARMRegID_CP10_R25,
+ eARMRegID_CP10_R26,
+ eARMRegID_CP10_R27,
+ eARMRegID_CP10_R28,
+ eARMRegID_CP10_R29,
+ eARMRegID_CP10_R30,
+ eARMRegID_CP10_R31,
+
+ /*-----------------------------------------------------------
+ // Coprocessor 11 registers
+ //----------------------------------------------------------*/
+ eARMRegID_CP11_R0,
+ eARMRegID_CP11_R1,
+ eARMRegID_CP11_R2,
+ eARMRegID_CP11_R3,
+ eARMRegID_CP11_R4,
+ eARMRegID_CP11_R5,
+ eARMRegID_CP11_R6,
+ eARMRegID_CP11_R7,
+ eARMRegID_CP11_R8,
+ eARMRegID_CP11_R9,
+ eARMRegID_CP11_R10,
+ eARMRegID_CP11_R11,
+ eARMRegID_CP11_R12,
+ eARMRegID_CP11_R13,
+ eARMRegID_CP11_R14,
+ eARMRegID_CP11_R15,
+ eARMRegID_CP11_R16,
+ eARMRegID_CP11_R17,
+ eARMRegID_CP11_R18,
+ eARMRegID_CP11_R19,
+ eARMRegID_CP11_R20,
+ eARMRegID_CP11_R21,
+ eARMRegID_CP11_R22,
+ eARMRegID_CP11_R23,
+ eARMRegID_CP11_R24,
+ eARMRegID_CP11_R25,
+ eARMRegID_CP11_R26,
+ eARMRegID_CP11_R27,
+ eARMRegID_CP11_R28,
+ eARMRegID_CP11_R29,
+ eARMRegID_CP11_R30,
+ eARMRegID_CP11_R31,
+
+ /*-----------------------------------------------------------
+ // Coprocessor 12 registers
+ //----------------------------------------------------------*/
+ eARMRegID_CP12_R0,
+ eARMRegID_CP12_R1,
+ eARMRegID_CP12_R2,
+ eARMRegID_CP12_R3,
+ eARMRegID_CP12_R4,
+ eARMRegID_CP12_R5,
+ eARMRegID_CP12_R6,
+ eARMRegID_CP12_R7,
+ eARMRegID_CP12_R8,
+ eARMRegID_CP12_R9,
+ eARMRegID_CP12_R10,
+ eARMRegID_CP12_R11,
+ eARMRegID_CP12_R12,
+ eARMRegID_CP12_R13,
+ eARMRegID_CP12_R14,
+ eARMRegID_CP12_R15,
+ eARMRegID_CP12_R16,
+ eARMRegID_CP12_R17,
+ eARMRegID_CP12_R18,
+ eARMRegID_CP12_R19,
+ eARMRegID_CP12_R20,
+ eARMRegID_CP12_R21,
+ eARMRegID_CP12_R22,
+ eARMRegID_CP12_R23,
+ eARMRegID_CP12_R24,
+ eARMRegID_CP12_R25,
+ eARMRegID_CP12_R26,
+ eARMRegID_CP12_R27,
+ eARMRegID_CP12_R28,
+ eARMRegID_CP12_R29,
+ eARMRegID_CP12_R30,
+ eARMRegID_CP12_R31,
+
+ /*-----------------------------------------------------------
+ // Coprocessor 13 registers
+ //----------------------------------------------------------*/
+ eARMRegID_CP13_R0,
+ eARMRegID_CP13_R1,
+ eARMRegID_CP13_R2,
+ eARMRegID_CP13_R3,
+ eARMRegID_CP13_R4,
+ eARMRegID_CP13_R5,
+ eARMRegID_CP13_R6,
+ eARMRegID_CP13_R7,
+ eARMRegID_CP13_R8,
+ eARMRegID_CP13_R9,
+ eARMRegID_CP13_R10,
+ eARMRegID_CP13_R11,
+ eARMRegID_CP13_R12,
+ eARMRegID_CP13_R13,
+ eARMRegID_CP13_R14,
+ eARMRegID_CP13_R15,
+ eARMRegID_CP13_R16,
+ eARMRegID_CP13_R17,
+ eARMRegID_CP13_R18,
+ eARMRegID_CP13_R19,
+ eARMRegID_CP13_R20,
+ eARMRegID_CP13_R21,
+ eARMRegID_CP13_R22,
+ eARMRegID_CP13_R23,
+ eARMRegID_CP13_R24,
+ eARMRegID_CP13_R25,
+ eARMRegID_CP13_R26,
+ eARMRegID_CP13_R27,
+ eARMRegID_CP13_R28,
+ eARMRegID_CP13_R29,
+ eARMRegID_CP13_R30,
+ eARMRegID_CP13_R31,
+
+ /*-----------------------------------------------------------
+ // Coprocessor 14 registers
+ //----------------------------------------------------------*/
+ eARMRegID_CP14_R0,
+ eARMRegID_CP14_R1,
+ eARMRegID_CP14_R2,
+ eARMRegID_CP14_R3,
+ eARMRegID_CP14_R4,
+ eARMRegID_CP14_R5,
+ eARMRegID_CP14_R6,
+ eARMRegID_CP14_R7,
+ eARMRegID_CP14_R8,
+ eARMRegID_CP14_R9,
+ eARMRegID_CP14_R10,
+ eARMRegID_CP14_R11,
+ eARMRegID_CP14_R12,
+ eARMRegID_CP14_R13,
+ eARMRegID_CP14_R14,
+ eARMRegID_CP14_R15,
+ eARMRegID_CP14_R16,
+ eARMRegID_CP14_R17,
+ eARMRegID_CP14_R18,
+ eARMRegID_CP14_R19,
+ eARMRegID_CP14_R20,
+ eARMRegID_CP14_R21,
+ eARMRegID_CP14_R22,
+ eARMRegID_CP14_R23,
+ eARMRegID_CP14_R24,
+ eARMRegID_CP14_R25,
+ eARMRegID_CP14_R26,
+ eARMRegID_CP14_R27,
+ eARMRegID_CP14_R28,
+ eARMRegID_CP14_R29,
+ eARMRegID_CP14_R30,
+ eARMRegID_CP14_R31,
+
+ /*-----------------------------------------------------------
+ // Coprocessor 15 registers
+ //----------------------------------------------------------*/
+ eARMRegID_CP15_R0,
+ eARMRegID_CP15_R1,
+ eARMRegID_CP15_R2,
+ eARMRegID_CP15_R3,
+ eARMRegID_CP15_R4,
+ eARMRegID_CP15_R5,
+ eARMRegID_CP15_R6,
+ eARMRegID_CP15_R7,
+ eARMRegID_CP15_R8,
+ eARMRegID_CP15_R9,
+ eARMRegID_CP15_R10,
+ eARMRegID_CP15_R11,
+ eARMRegID_CP15_R12,
+ eARMRegID_CP15_R13,
+ eARMRegID_CP15_R14,
+ eARMRegID_CP15_R15,
+ eARMRegID_CP15_R16,
+ eARMRegID_CP15_R17,
+ eARMRegID_CP15_R18,
+ eARMRegID_CP15_R19,
+ eARMRegID_CP15_R20,
+ eARMRegID_CP15_R21,
+ eARMRegID_CP15_R22,
+ eARMRegID_CP15_R23,
+ eARMRegID_CP15_R24,
+ eARMRegID_CP15_R25,
+ eARMRegID_CP15_R26,
+ eARMRegID_CP15_R27,
+ eARMRegID_CP15_R28,
+ eARMRegID_CP15_R29,
+ eARMRegID_CP15_R30,
+ eARMRegID_CP15_R31
+};
+
+
+class EmCPUARM;
+extern EmCPUARM* gCPUARM;
+
+class EmCPUARM : public EmCPU
+{
+ public:
+ // -----------------------------------------------------------------------------
+ // constructor / destructor
+ // -----------------------------------------------------------------------------
+
+ EmCPUARM (EmSession*);
+ virtual ~EmCPUARM (void);
+
+ // -----------------------------------------------------------------------------
+ // public methods
+ // -----------------------------------------------------------------------------
+
+ // Standard sub-system methods:
+ // Reset: Resets the state. Called on hardware resets or on
+ // calls to SysReset. Also called from constructor.
+ // Save: Saves the state to the given file.
+ // Load: Loads the state from the given file. Can assume that
+ // Reset has been called first.
+
+ virtual void Reset (Bool hardwareReset);
+ virtual void Save (SessionFile&);
+ virtual void Load (SessionFile&);
+
+ // Execute the main CPU loop until asked to stop.
+
+ virtual void Execute (void);
+ virtual void CheckAfterCycle (void);
+
+ // Low-level access to CPU state.
+
+ virtual emuptr GetPC (void);
+ virtual emuptr GetSP (void);
+ virtual uint32 GetRegister (int);
+
+ virtual void SetPC (emuptr);
+ virtual void SetSP (emuptr);
+ virtual void SetRegister (int, uint32);
+
+ virtual Bool Stopped (void);
+
+ private:
+ void DoReset (Bool cold);
+};
+
+#endif // EmCPUARM_h