;******************************************************************** ; IRIS-SUBPモニタプログラム スタートアップルーチン ;******************************************************************** AREA Init, CODE, READONLY INCLUDE IrisSubpDefineArm.s INCLUDE IrisSubpMemoryMapArm.s INCLUDE IrisSubpMonDefineArm.s INCLUDE IrisSubpMonMemoryMapArm.s ENTRY ;==================================================================== ; 割り込み領域 ;==================================================================== EXTERN start_handler EXTERN swi_handler EXTERN irq_handler EXTERN fiq_handler CODE32 start_v b start_m ; NULLポインタ位置のコードを不変にするため undef_v b fiq_handler swi_v b swi_handler code_abort_v b fiq_handler data_abort_v b fiq_handler reserve_v b fiq_handler irq_v b irq_handler fiq_v b fiq_handler start_m b start_handler IF :DEF: DISABLE_SECURE_CODE ELSE ; PNデータ GLOBAL default_pnB_l GLOBAL default_pnB_h GLOBAL default_pnA_l_0_table GLOBAL default_pnA_l_1 default_pnB_l DCD 0x879b9b05 default_pnB_h DCB 0x5c default_pnA_l_1 DCB 0x60 default_pnA_l_0_table DCB 0xe8, 0x4d, 0x5a, 0xb1, 0x17, 0x8f ; Blowfishデータ IF :DEF: ENABLE_TEST_BLOWFISH INCLUDE BlowfishTestTable.s ELSE INCLUDE BlowfishInitTable.s ENDIF ; ENABLE_TEST_BLOWFISH GLOBAL segmentIndexTable4Secure segmentIndexTable4Secure DCB 4_0132, 4_0213, 4_0231, 4_0312 ; - 4_0123, 4_0321 DCB 4_1023, 4_1203, 4_1302, 4_1320 ; - 4_1032, 4_1230 DCB 4_2103, 4_2130, 4_2301, 4_2310 ; - 4_2013, 4_2031 DCB 4_3012, 4_3021, 4_3120, 4_3201 ; - 4_3102, 4_3210 GLOBAL normal_mode_key normal_mode_key DCB "NmMdOnly" GLOBAL png_off_key png_off_key DCB "enPngOFF" GLOBAL encrypt_object_key encrypt_object_key DCB "encryObj" ; SIOハンドシェイクデータ ALIGN GLOBAL sio_send_code GLOBAL sio_recv_code GLOBAL sio_add_code sio_send_code DCW 0x4e54 sio_recv_code DCW 0x4944 sio_add_code DCW 0x524f ENDIF ; DISABLE_SECURE_CODE ;-------------------------------------------------------------------- ; 暗号キー変換(r0=暗号キー) ;-------------------------------------------------------------------- IF :DEF: DISABLE_SECURE_CODE ELSE GLOBAL ChangeEncryptKey1 GLOBAL ChangeEncryptKey2 GLOBAL ChangeEncryptKey3 GLOBAL ChangeEncryptKey4 ALIGN CODE32 ChangeEncryptKey1 mov r0, r0, lsr #1 b CheckLR2Return ChangeEncryptKey2 mov r0, r0, lsl #1 b CheckLR2Return ChangeEncryptKey3 mov r0, r0, lsl #1 b CheckLR2Return ChangeEncryptKey4 mov r0, r0, lsr #1 b CheckLR2Return CheckLR2Return tst lr, #0xff000000 movne r0, #0 movne lr, #4 bx lr ENDIF ; DISABLE_SECURE_CODE ;-------------------------------------------------------------------- ; 暗号処理フック関数群 ;-------------------------------------------------------------------- IF :DEF: DISABLE_SECURE_CODE ELSE EXTERN InitSecureParam EXTERN MakeBlowfishTable EXTERN InitBlowfishKeyAnaTable EXTERN InitBlowfish EXTERN EncryptByBlowfish EXTERN DecryptByBlowfish EXTERN DecryptObjectFile EXTERN ChangeObjectTable EXTERN CopyBiosArea EXTERN CpuSetFast32 GLOBAL InitSecureParamFook GLOBAL MakeBlowfishCardTable GLOBAL MakeBlowfishFlashTable GLOBAL InitBlowfishKeyAnaTableFook GLOBAL InitBlowfishFook GLOBAL EncryptByBlowfishFook0 GLOBAL EncryptByBlowfishFook1 GLOBAL EncryptByBlowfishFook2 GLOBAL DecryptByBlowfishFook GLOBAL DecryptObjectFileFook GLOBAL ChangeObjectTableFook GLOBAL CopyBiosAreaFook GLOBAL CpuSetFast32Fook ALIGN CODE32 InitSecureParamFook ldr r12, =InitSecureParam b CheckLR2CallR12 MakeBlowfishCardTable mov r3, #8 ldr r12, =MakeBlowfishTable b CheckLR2CallR12 MakeBlowfishFlashTable mov r3, #12 ldr r12, =MakeBlowfishTable b CheckLR2CallR12 InitBlowfishKeyAnaTableFook ldr r12, =InitBlowfishKeyAnaTable b CheckLR2CallR12 InitBlowfishFook ldr r12, =InitBlowfish b CheckLR2CallR12 EncryptByBlowfishFook0 ldr r12, =EncryptByBlowfish b CheckLR2CallR12 EncryptByBlowfishFook1 mov r2, r1 add r1, r1, #4 ldr r12, =EncryptByBlowfish b CheckLR2CallR12 EncryptByBlowfishFook2 add r2, r1, #4 add r1, r1, #8 ldr r12, =EncryptByBlowfish b CheckLR2CallR12 DecryptByBlowfishFook mov r2, r1 add r1, r1, #4 ldr r12, =DecryptByBlowfish b CheckLR2CallR12 DecryptObjectFileFook ldr r12, =DecryptObjectFile b CheckLR2CallR12 ChangeObjectTableFook mov r0, #8 ldr r12, =ChangeObjectTable b CheckLR2CallR12 CopyBiosAreaFook ldr r12, =CopyBiosArea b CheckLR2CallR12 CpuSetFast32Fook ldr r12, =CpuSetFast32 b CheckLR2CallR12 CheckLR2CallR12 tst lr, #0xff000000 bxeq r12 mov r12,#0 mov r3, #0 mov r2, #0 mov r1, #0 mov r0, #0 mov lr, #4 bx lr ENDIF ; DISABLE_SECURE_CODE ;-------------------------------------------------------------------- ; IPL2呼び出し関数ポインタ獲得 ;-------------------------------------------------------------------- EXTERN CalledFormIPL2 EXTERN CardIntr GLOBAL GetFuncp4IPL2 CODE16 GetFuncp4IPL2 ldr r2, eor_code ldr r0, =CalledFormIPL2 ldr r1, =CardIntr ldr r3, =SetPause2Agb eor r3, r3, r0 eor r0, r0, r1 eor r1, r1, r2 bx lr ALIGN eor_code DCB "I2\0\0" ; EORコード ;-------------------------------------------------------------------- ; チェックフラグ セット ;-------------------------------------------------------------------- GLOBAL SetPauseCheckFlag CODE16 SetPauseCheckFlag mov r1, #1 ldr r2, =REG_PAUSE strb r1, [r2, #0] bx lr ;-------------------------------------------------------------------- ; AGBモード遷移 ;-------------------------------------------------------------------- GLOBAL SetPause2Agb ALIGN CODE32 SetPause2Agb mov r2, #0x40 b SetPauseHi ;-------------------------------------------------------------------- ; HALT ;-------------------------------------------------------------------- GLOBAL Halt CODE32 Halt mov r2, #0x80 b SetPauseHi ;-------------------------------------------------------------------- ; STOP ;-------------------------------------------------------------------- GLOBAL Stop GLOBAL SetPauseHi CODE32 Stop mov r2, #0xc0 SetPauseHi mov r12, #REG_BASE strb r2, [r12, #OFFSET_REG_PAUSE + 1] nop nop bx lr LTORG ; 上記のリテラルプールを隠す GLOBAL SecureAreaEndp SecureAreaEndp IF :DEF: ENABLE_WRITE_FLASH GLOBAL flashTestHeader flashTestHeader DCD 0 ; MACアドレス Low DCW 0 ; High DCW 0xc401 ; CRC16bit DCB "MACP" ; Blowfishキーデータ DCW 0x100/8 ; ARM9-FLASHオフセット DCW 0x20000/8 ; ARM9-RAM負オフセット DCW 0x10000/8 ; ARM7-FLASHオフセット DCW 0x8000/8 ; ARM7-RAM負オフセット DCW 8_01111 ; 境界2bit x 4 & ARM7-ARM配置フラグ & 予約7bit DCW 0 ; 予約2Byte DCD 0 ; 0x9e0d35bd ; スクランブル解除キー(8バイト) DCD 0 ; 0x2560ac91 GLOBAL arm9ipl2 GLOBAL arm9ipl2_end ALIGN arm9ipl2 IF :DEF: DISABLE_SECURE_CODE INCBIN ipl2_test.lz ELSE INCBIN ipl2_test.ipl2 ENDIF ; DISABLE_SECURE_CODE arm9ipl2_end GLOBAL arm7ipl2 GLOBAL arm7ipl2_end ALIGN arm7ipl2 IF :DEF: DISABLE_SECURE_CODE INCBIN subp_ipl2_test.lz ELSE INCBIN subp_ipl2_test.ipl2 ENDIF ; DISABLE_SECURE_CODE arm7ipl2_end ENDIF ; ENABLE_WRITE_FLASH END