mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-23 06:34:18 -04:00
243 lines
5.1 KiB
C
243 lines
5.1 KiB
C
#ifndef _PPC_REG_H
|
|
#define _PPC_REG_H
|
|
|
|
#include "types.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif // ifdef __cplusplus
|
|
|
|
typedef struct Default_PPC {
|
|
u32 GPR[32];
|
|
u32 PC;
|
|
u32 LR;
|
|
u32 CR;
|
|
u32 CTR;
|
|
u32 XER;
|
|
} Default_PPC;
|
|
|
|
typedef struct Float_PPC {
|
|
u64 FPR[32];
|
|
u64 FPSCR;
|
|
u64 FPECR;
|
|
} Float_PPC;
|
|
|
|
typedef struct Extended1_PPC_6xx_7xx {
|
|
// u8 pad[0x168];
|
|
u32 SR[16];
|
|
u32 TBL;
|
|
u32 TBU;
|
|
u32 HID0_;
|
|
u32 HID1;
|
|
u32 MSR;
|
|
u32 PVR;
|
|
u32 IBAT0U;
|
|
u32 IBAT0L;
|
|
u32 IBAT1U;
|
|
u32 IBAT1L;
|
|
u32 IBAT2U;
|
|
u32 IBAT2L;
|
|
u32 IBAT3U;
|
|
u32 IBAT3L;
|
|
u32 DBAT0U;
|
|
u32 DBAT0L;
|
|
u32 DBAT1U;
|
|
u32 DBAT1L;
|
|
u32 DBAT2U;
|
|
u32 DBAT2L;
|
|
u32 DBAT3U_;
|
|
u32 DBAT3L_;
|
|
u32 DMISS;
|
|
u32 DCMP;
|
|
u32 HASH1;
|
|
u32 HASH2;
|
|
u32 IMISS;
|
|
u32 ICMP;
|
|
u32 RPA;
|
|
u32 SDR1;
|
|
u32 DAR;
|
|
u32 DSISR;
|
|
u32 SPRG0;
|
|
u32 SPRG1;
|
|
u32 SPRG2;
|
|
u32 SPRG3;
|
|
u32 DEC;
|
|
u32 IABR;
|
|
u32 EAR;
|
|
u32 DABR;
|
|
u32 PMC1;
|
|
u32 PMC2;
|
|
u32 PMC3;
|
|
u32 PMC4;
|
|
u32 SIA;
|
|
u32 MMCR0;
|
|
u32 MMCR1;
|
|
u32 THRM1;
|
|
u32 THRM2;
|
|
u32 THRM3;
|
|
u32 ICTC;
|
|
u32 L2CR;
|
|
u32 UMMCR2;
|
|
u32 UBAMR;
|
|
u32 UMMCR0;
|
|
u32 UPMC1;
|
|
u32 UPMC2;
|
|
u32 USIA;
|
|
u32 UMMCR1;
|
|
u32 UPMC3;
|
|
u32 UPMC4;
|
|
u32 USDA;
|
|
u32 MMCR2;
|
|
u32 BAMR;
|
|
u32 SDA;
|
|
u32 MSSCR0;
|
|
u32 MSSCR1;
|
|
u32 PIR;
|
|
u32 exceptionID;
|
|
u32 GQR[8];
|
|
u32 HID_G;
|
|
u32 WPAR;
|
|
u32 DMA_U_;
|
|
u32 DMA_L_;
|
|
} Extended1_PPC_6xx_7xx;
|
|
|
|
typedef struct Extended2_PPC_6xx_7xx {
|
|
u32 PSR[32][2];
|
|
} Extended2_PPC_6xx_7xx;
|
|
|
|
typedef struct ProcessorState_PPC_6xx_7xx {
|
|
Default_PPC Default;
|
|
Float_PPC Float;
|
|
Extended1_PPC_6xx_7xx Extended1;
|
|
Extended2_PPC_6xx_7xx Extended2;
|
|
u32 transport_handler_saved_ra;
|
|
} ProcessorState_PPC_6xx_7xx;
|
|
|
|
typedef ProcessorState_PPC_6xx_7xx ProcessorState_PPC;
|
|
|
|
#define SPR_XER 1
|
|
#define SPR_LR 8
|
|
#define SPR_CTR 9
|
|
#define SPR_DSISR 18
|
|
#define SPR_DAR 19
|
|
#define SPR_DEC 22
|
|
#define SPR_SDR1 25
|
|
#define SPR_SRR0 26
|
|
#define SPR_SRR1 27
|
|
#define SPR_SPRG0 272
|
|
#define SPR_SPRG1 273
|
|
#define SPR_SPRG2 274
|
|
#define SPR_SPRG3 275
|
|
#define SPR_EAR 282
|
|
#define SPR_TBL 284
|
|
#define SPR_TBU 285
|
|
#define SPR_PVR 287
|
|
#define SPR_IBAT0U 528
|
|
#define SPR_IBAT0L 529
|
|
#define SPR_IBAT1U 530
|
|
#define SPR_IBAT1L 531
|
|
#define SPR_IBAT2U 532
|
|
#define SPR_IBAT2L 533
|
|
#define SPR_IBAT3U 534
|
|
#define SPR_IBAT3L 535
|
|
#define SPR_IBAT4U 560
|
|
#define SPR_IBAT4L 561
|
|
#define SPR_IBAT5U 562
|
|
#define SPR_IBAT5L 563
|
|
#define SPR_IBAT6U 564
|
|
#define SPR_IBAT6L 565
|
|
#define SPR_IBAT7U 566
|
|
#define SPR_IBAT7L 567
|
|
#define SPR_DBAT0U 536
|
|
#define SPR_DBAT0L 537
|
|
#define SPR_DBAT1U 538
|
|
#define SPR_DBAT1L 539
|
|
#define SPR_DBAT2U 540
|
|
#define SPR_DBAT2L 541
|
|
#define SPR_DBAT3U 542
|
|
#define SPR_DBAT3L 543
|
|
#define SPR_DBAT4U 568
|
|
#define SPR_DBAT4L 569
|
|
#define SPR_DBAT5U 570
|
|
#define SPR_DBAT5L 571
|
|
#define SPR_DBAT6U 572
|
|
#define SPR_DBAT6L 573
|
|
#define SPR_DBAT7U 574
|
|
#define SPR_DBAT7L 575
|
|
#define SPR_GQR0 912
|
|
#define SPR_GQR1 913
|
|
#define SPR_GQR2 914
|
|
#define SPR_GQR3 915
|
|
#define SPR_GQR4 916
|
|
#define SPR_GQR5 917
|
|
#define SPR_GQR6 918
|
|
#define SPR_GQR7 919
|
|
#define SPR_HID2 920
|
|
#define SPR_WPAR 921
|
|
#define SPR_DMA_U 922
|
|
#define SPR_DMA_L 923
|
|
#define SPR_UMMCR0 936
|
|
#define SPR_UPMC1 937
|
|
#define SPR_UPMC2 938
|
|
#define SPR_USIA 939
|
|
#define SPR_UMMCR1 940
|
|
#define SPR_UPMC3 941
|
|
#define SPR_UPMC4 942
|
|
#define SPR_USDA 943
|
|
#define SPR_MMCR0 952
|
|
#define SPR_PMC1 953
|
|
#define SPR_PMC2 954
|
|
#define SPR_SIA 955
|
|
#define SPR_MMCR1 956
|
|
#define SPR_PMC3 957
|
|
#define SPR_PMC4 958
|
|
#define SPR_SDA 959
|
|
#define SPR_HID0 1008
|
|
#define SPR_HID1 1009
|
|
#define SPR_IABR 1010
|
|
#define SPR_HID4 1011
|
|
#define SPR_DABR 1013
|
|
#define SPR_L2CR 1017
|
|
#define SPR_ICTC 1019
|
|
#define SPR_THRM1 1020
|
|
#define SPR_THRM2 1021
|
|
#define SPR_FPECR 1022
|
|
|
|
// PPC exceptions
|
|
// 0x000 is reserved
|
|
#define PPC_SystemReset 0x100
|
|
#define PPC_MachineCheck 0x200
|
|
#define PPC_DataStorage 0x300
|
|
#define PPC_InstructionStorage 0x400
|
|
#define PPC_ExternalInterrupt 0x500
|
|
#define PPC_Alignment 0x600
|
|
#define PPC_Program 0x700
|
|
#define PPC_FloatingPointUnavaiable 0x800
|
|
#define PPC_Decrementer 0x900
|
|
// 0xA00-0xB00 are reserved
|
|
#define PPC_SystemCall 0xC00
|
|
#define PPC_Trace 0xD00
|
|
#define PPC_FloatingPointAssist 0xE00 // unimplemented in 750CL
|
|
#define PPC_PerformanceMonitor 0xF00 // Dolphin/Broadway specific
|
|
// 0x1000-0x1200 are unimplemented in 750CL
|
|
#define PPC_InstructionAddressBreakpoint 0x1300 // Dolphin/Broadway specific
|
|
// 0x1400-0x2F00 are reserved, but TRK uses some
|
|
#define PPC_SystemManagementInterrupt 0x1400
|
|
// 0x1500-0x1600 are unimplemented in 750CL
|
|
#define PPC_ThermalManagementInterrupt 0x1700
|
|
#define PPC_1800Exception 0x1800
|
|
#define PPC_1900Exception 0x1900
|
|
#define PPC_1A00Exception 0x1A00
|
|
#define PPC_1B00Exception 0x1B00
|
|
#define PPC_1C00Exception 0x1C00 // Data breakpoint?
|
|
#define PPC_1D00Exception 0x1D00 // Instruction breakpoint?
|
|
#define PPC_1E00Exception 0x1E00 // Peripheral breakpoint?
|
|
#define PPC_1F00Exception 0x1F00 // Non maskable development port?
|
|
#define PPC_2000Exception 0x2000
|
|
|
|
#ifdef __cplusplus
|
|
};
|
|
#endif // ifdef __cplusplus
|
|
|
|
#endif
|