FINALROM対応

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@509 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yutaka 2008-01-24 01:54:48 +00:00
parent 90d2377e65
commit d8d4cf3fca

View File

@ -23,79 +23,81 @@ extern "C" {
// Define -------------------------------------------------------------------
#define HOTSW_NO_MESSAGE // Printf抑制スイッチ
#define HOTSW_NO_MESSAGE // Printf抑制スイッチ
#ifdef HOTSW_NO_MESSAGE
#define OS_TPrintf( ... ) ((void)0)
#define OS_PutString( ... ) ((void)0)
#ifdef HOTSW_NO_MESSAGE
#ifndef SDK_FINALROM
#define OS_TPrintf( ... ) ((void)0)
#define OS_PutString( ... ) ((void)0)
#endif
#endif
#define KEY_BUF_SIZE 3 // Blowfishキーのバッファサイズ
#define HOTSW_DMA_NO 2 //
#define BOOT_SEGMENT_SIZE 0x1000 // Boot Segment領域のサイズ
#define KEY_BUF_SIZE 3 // Blowfishキーのバッファサイズ
#define HOTSW_DMA_NO 2 //
#define BOOT_SEGMENT_SIZE 0x1000 // Boot Segment領域のサイズ
#define PAGE_SIZE 0x200 // 1ページのサイズ(バイト単位)
#define PAGE_WORD_SIZE 0x80 // 1ページのサイズ(ワード単位)
#define PAGE_SIZE 0x200 // 1ページのサイズ(バイト単位)
#define PAGE_WORD_SIZE 0x80 // 1ページのサイズ(ワード単位)
#define ONE_SEGMENT_SIZE 0x1000 // 1 Segmentのサイズ(バイト単位)
#define ONE_SEGMENT_WORD_SIZE 0x400 // 1 Segmentのサイズ(ワード単位)
#define ONE_SEGMENT_SIZE 0x1000 // 1 Segmentのサイズ(バイト単位)
#define ONE_SEGMENT_WORD_SIZE 0x400 // 1 Segmentのサイズ(ワード単位)
#define SECURE_SEGMENT_SIZE 0x4000 // Secure領域のサイズ
#define SECURE_SEGMENT_SIZE 0x4000 // Secure領域のサイズ
#define ROM_EMULATION_DATA_SIZE 0x20 // ROMエミュレーションデータサイズ
#define ROM_EMULATION_DATA_SIZE 0x20 // ROMエミュレーションデータサイズ
#define PNA_BASE_VALUE 0x60e8 //
#define PNB_L_VALUE 0x879b9b05 //
#define PNB_H_VALUE 0x5c //
#define PNA_BASE_VALUE 0x60e8 //
#define PNB_L_VALUE 0x879b9b05 //
#define PNB_H_VALUE 0x5c //
// コントロールレジスタ1 bit関連
#define START_FLG_MASK 0x80000000
#define READY_FLG_MASK 0x00800000
#define START_FLG_MASK 0x80000000
#define READY_FLG_MASK 0x00800000
#define LATENCY1_SHIFT 0
#define LATENCY1_MASK 0x00001fff
#define LATENCY1_SHIFT 0
#define LATENCY1_MASK 0x00001fff
#define DS_SHIFT 13
#define DS_MASK 0x00002000
#define DS_SHIFT 13
#define DS_MASK 0x00002000
#define SE_SHIFT 14
#define SE_MASK 0x00004000
#define SE_SHIFT 14
#define SE_MASK 0x00004000
#define SCR_SHIFT 15
#define SCR_MASK 0x00008000
#define SCR_SHIFT 15
#define SCR_MASK 0x00008000
#define LATENCY2_SHIFT 16
#define LATENCY2_MASK 0x003f0000
#define LATENCY2_SHIFT 16
#define LATENCY2_MASK 0x003f0000
#define CS_SHIFT 22
#define CS_MASK 0x00400000
#define CS_SHIFT 22
#define CS_MASK 0x00400000
#define RDY_SHIFT 23
#define RDY_MASK 0x00800000
#define RDY_SHIFT 23
#define RDY_MASK 0x00800000
#define PC_SHIFT 24
#define PC_MASK 0x07000000
#define PC_SHIFT 24
#define PC_MASK 0x07000000
#define CT_SHIFT 27
#define CT_MASK 0x08000000
#define CT_SHIFT 27
#define CT_MASK 0x08000000
#define TRM_SHIFT 28
#define TRM_MASK 0x10000000
#define TRM_SHIFT 28
#define TRM_MASK 0x10000000
#define RESB_SHIFT 29
#define RESB_MASK 0x20000000
#define RESB_SHIFT 29
#define RESB_MASK 0x20000000
#define WR_SHIFT 30
#define WR_MASK 0x40000000
#define WR_SHIFT 30
#define WR_MASK 0x40000000
#define START_SHIFT 31
#define START_MASK 0x80000000
#define START_SHIFT 31
#define START_MASK 0x80000000
#define SCRAMBLE_MASK 0x00406000
#define SCRAMBLE_MASK 0x00406000
#define AddLatency2ToLatency1(param)\
( (((param) & LATENCY2_MASK) \
( (((param) & LATENCY2_MASK) \
>> LATENCY2_SHIFT) \
+ ((param) & LATENCY1_MASK) \
)
@ -104,70 +106,70 @@ extern "C" {
#ifdef USE_SLOT_A
// Slot A
#define SLOT_STATUS_MODE_SELECT_MSK 0x0c
#define SLOT_STATUS_CDET_MSK 0x01
#define SLOT_STATUS_MODE_00 0x00
#define SLOT_STATUS_MODE_01 0x04
#define SLOT_STATUS_MODE_10 0x08
#define SLOT_STATUS_MODE_11 0x0c
#define SLOT_STATUS_MODE_SELECT_MSK 0x0c
#define SLOT_STATUS_CDET_MSK 0x01
#define SLOT_STATUS_MODE_00 0x00
#define SLOT_STATUS_MODE_01 0x04
#define SLOT_STATUS_MODE_10 0x08
#define SLOT_STATUS_MODE_11 0x0c
#define reg_HOTSW_MCCMD0 reg_MI_MCCMD0_A
#define reg_HOTSW_MCCMD1 reg_MI_MCCMD1_A
#define reg_HOTSW_MCCMD0 reg_MI_MCCMD0_A
#define reg_HOTSW_MCCMD1 reg_MI_MCCMD1_A
#define reg_HOTSW_MCCNT0 reg_MI_MCCNT0_A
#define reg_HOTSW_MCCNT1 reg_MI_MCCNT1_A
#define reg_HOTSW_MCCNT0 reg_MI_MCCNT0_A
#define reg_HOTSW_MCCNT1 reg_MI_MCCNT1_A
#define HOTSW_MCD1 REG_MCD1_A_ADDR
#define reg_HOTSW_MCD1 reg_MI_MCD1_A
#define HOTSW_MCD1 REG_MCD1_A_ADDR
#define reg_HOTSW_MCD1 reg_MI_MCD1_A
#define reg_HOTSW_MCSCR0 reg_MI_MCSCR0_A
#define reg_HOTSW_MCSCR1 reg_MI_MCSCR1_A
#define reg_HOTSW_MCSCR2 reg_MI_MCSCR2_A
#define reg_HOTSW_MCSCR0 reg_MI_MCSCR0_A
#define reg_HOTSW_MCSCR1 reg_MI_MCSCR1_A
#define reg_HOTSW_MCSCR2 reg_MI_MCSCR2_A
#define HOTSW_IF_CARD_DET OS_IE_CARD_A_DET
#define HOTSW_IF_CARD_DET OS_IE_CARD_A_DET
#else
// Slot B
#define SLOT_STATUS_MODE_SELECT_MSK 0xc0
#define SLOT_STATUS_CDET_MSK 0x10
#define SLOT_STATUS_MODE_00 0x00
#define SLOT_STATUS_MODE_01 0x40
#define SLOT_STATUS_MODE_10 0x80
#define SLOT_STATUS_MODE_11 0xc0
#define SLOT_STATUS_MODE_SELECT_MSK 0xc0
#define SLOT_STATUS_CDET_MSK 0x10
#define SLOT_STATUS_MODE_00 0x00
#define SLOT_STATUS_MODE_01 0x40
#define SLOT_STATUS_MODE_10 0x80
#define SLOT_STATUS_MODE_11 0xc0
#define reg_HOTSW_MCCMD0 reg_MI_MCCMD0_B
#define reg_HOTSW_MCCMD1 reg_MI_MCCMD1_B
#define reg_HOTSW_MCCMD0 reg_MI_MCCMD0_B
#define reg_HOTSW_MCCMD1 reg_MI_MCCMD1_B
#define reg_HOTSW_MCCNT0 reg_MI_MCCNT0_B
#define reg_HOTSW_MCCNT1 reg_MI_MCCNT1_B
#define reg_HOTSW_MCCNT0 reg_MI_MCCNT0_B
#define reg_HOTSW_MCCNT1 reg_MI_MCCNT1_B
#define HOTSW_MCD1 REG_MCD1_B_ADDR
#define reg_HOTSW_MCD1 reg_MI_MCD1_B
#define HOTSW_MCD1 REG_MCD1_B_ADDR
#define reg_HOTSW_MCD1 reg_MI_MCD1_B
#define reg_HOTSW_MCSCR0 reg_MI_MCSCR0_B
#define reg_HOTSW_MCSCR1 reg_MI_MCSCR1_B
#define reg_HOTSW_MCSCR2 reg_MI_MCSCR2_B
#define reg_HOTSW_MCSCR0 reg_MI_MCSCR0_B
#define reg_HOTSW_MCSCR1 reg_MI_MCSCR1_B
#define reg_HOTSW_MCSCR2 reg_MI_MCSCR2_B
#define HOTSW_IF_CARD_DET OS_IE_CARD_B_DET
#define HOTSW_IF_CARD_DET OS_IE_CARD_B_DET
#endif
// Enum ---------------------------------------------------------------------
typedef enum CardTypeEx{
DS_CARD_TYPE_1 = 0,
DS_CARD_TYPE_1 = 0,
DS_CARD_TYPE_2,
TWL_CARD,
ROM_EMULATION
}CardTypeEx;
typedef enum NormalCommandType{
RD_ID = 0,
RD_ID = 0,
RD_BSEG,
CHG_MODE
}NormalCommandType;
typedef enum SecureCommandType{
S_RD_ID = 0,
S_RD_ID = 0,
S_RD_SEG,
S_PNG_ON,
S_PNG_OFF,
@ -175,12 +177,12 @@ typedef enum SecureCommandType{
}SecureCommandType;
typedef enum GameCommandType{
G_RD_ID = 0,
G_RD_ID = 0,
G_RD_PAGE
}GameCommandType;
typedef enum CardType{
CARD_DS_TYPE1 = 0,
CARD_DS_TYPE1 = 0,
CARD_DS_TYPE2,
CARD_TWL
}CardType;
@ -188,77 +190,77 @@ typedef enum CardType{
// union ---------------------------------------------------------------------
typedef union
{
u64 dw;
u8 b[8];
u64 dw;
u8 b[8];
}
GCDCmd64;
// ブートセグメントデータ
typedef union BootSegmentData
{
ROM_Header rh;
u32 word[BOOT_SEGMENT_SIZE / sizeof(u32)];
ROM_Header rh;
u32 word[BOOT_SEGMENT_SIZE / sizeof(u32)];
}
BootSegmentData;
// struct -------------------------------------------------------------------
typedef struct BLOWFISH_CTX{
u32 P[16 + 2];
u32 S[4][256];
u32 P[16 + 2];
u32 S[4][256];
} BLOWFISH_CTX;
// カードブート時に必要な変数一式をまとめた構造体
typedef struct CardBootData{
u16 lockID;
u16 lockID;
u32 vae;
u32 vbi;
u32 vd;
u32 vae;
u32 vbi;
u32 vd;
u32 id_nml;
u32 id_scr;
u32 id_gam;
u32 id_nml;
u32 id_scr;
u32 id_gam;
u32 arm9StcSize;
u32 arm7StcSize;
u32 arm9LtdSize;
u32 arm7LtdSize;
u32 arm9StcSize;
u32 arm7StcSize;
u32 arm9LtdSize;
u32 arm7LtdSize;
u32 arm9Stc;
u32 arm7Stc;
u32 arm9Ltd;
u32 arm7Ltd;
u32 arm9Stc;
u32 arm7Stc;
u32 arm9Ltd;
u32 arm7Ltd;
u32 secureLatency;
BOOL twlFlg;
BOOL debuggerFlg;
u32 romEmuBuf[ROM_EMULATION_DATA_SIZE/sizeof(u32)];
u32 keyBuf[KEY_BUF_SIZE];
u64 secureSegNum;
u32 secureLatency;
CardTypeEx cardType;
BootSegmentData *pBootSegBuf;
u32 *pSecureSegBuf;
BLOWFISH_CTX keyTable;
BOOL twlFlg;
BOOL debuggerFlg;
u32 romEmuBuf[ROM_EMULATION_DATA_SIZE/sizeof(u32)];
u32 keyBuf[KEY_BUF_SIZE];
u64 secureSegNum;
CardTypeEx cardType;
BootSegmentData *pBootSegBuf;
u32 *pSecureSegBuf;
BLOWFISH_CTX keyTable;
}
CardBootData;
// カード起動用関数
typedef struct CardBootFunction {
void (*ReadBootSegment_N)(CardBootData *cbd);
void (*ChangeMode_N)(CardBootData *cbd);
void (*ReadBootSegment_N)(CardBootData *cbd);
void (*ChangeMode_N)(CardBootData *cbd);
void (*ReadID_S)(CardBootData *cbd);
void (*ReadSegment_S)(CardBootData *cbd);
void (*SetPNG_S)(CardBootData *cbd);
void (*ChangeMode_S)(CardBootData *cbd);
void (*ReadID_S)(CardBootData *cbd);
void (*ReadSegment_S)(CardBootData *cbd);
void (*SetPNG_S)(CardBootData *cbd);
void (*ChangeMode_S)(CardBootData *cbd);
void (*ReadID_G)(CardBootData *cbd);
void (*ReadID_G)(CardBootData *cbd);
void (*ReadPage_G)(CardBootData *cbd, u32 addr, void* buf, u32 size);
}
CardBootFunction;