ntr_bootrom/trunk/IrisSubp/IrisSubpMon/crt0Arm.s

371 lines
7.8 KiB
ArmAsm
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;********************************************************************
; 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
;--------------------------------------------------------------------
;
;--------------------------------------------------------------------
GLOBAL Halt
CODE32
Halt mov r2, #0x80
b SetPauseHi
;--------------------------------------------------------------------
;
;--------------------------------------------------------------------
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