mirror of
https://github.com/rvtr/ntr_bootrom.git
synced 2025-10-31 07:11:11 -04:00
371 lines
7.8 KiB
ArmAsm
371 lines
7.8 KiB
ArmAsm
;********************************************************************
|
||
; 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
|
||
|
||
|