Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ARM9:02004800 ; =============== S U B R O U T I N E =======================================
- ARM9:02004800
- ARM9:02004800
- ARM9:02004800 ; void __fastcall start()
- ARM9:02004800 _start ; DATA XREF: 02FFFE24o
- ARM9:02004800 01 C3 A0 E3 MOV R12, #0x4000000
- ARM9:02004804 08 C2 8C E5 STR R12, [R12,#0x208]
- ARM9:02004808 81 00 00 EB BL INITi_InitCoprocessor
- ARM9:0200480C 00 00 A0 E3 MOV R0, #0 ; data
- ARM9:02004810 94 11 9F E5 LDR R1, =0x2FFFF80 ; destp ; PXI Signal Param for ARM9(start of system-shared area past debug area)
- ARM9:02004814 94 21 9F E5 LDR R2, =0x68 ; size
- ARM9:02004818 78 00 00 EB BL INITi_CpuClear32 ; zero-out 2FFFF80 to 2FFFFE8(Clear out non-debugger portion of system-shared area)
- ARM9:0200481C 00 00 A0 E3 MOV R0, #0 ; data
- ARM9:02004820 8C 11 9F E5 LDR R1, =0x2FFFFF0 ; destp ;Start of initialization lock buffer
- ARM9:02004824 8C 21 9F E5 LDR R2, =0x10 ; size
- ARM9:02004828 74 00 00 EB BL INITi_CpuClear32 ; zero-out 2FFFFF0 to 3000000(set initialization lock buffer to 0)
- ARM9:0200482C 88 11 9F E5 LDR R1, =0x2FFFC40 ; WM boot buffer
- ARM9:02004830 B0 20 D1 E1 LDRH R2, [R1] ; get boot type
- ARM9:02004834 00 00 52 E3 CMP R2, #0 ; is the boot type illegal?
- ARM9:02004838 01 20 A0 03 MOVEQ R2, #1
- ARM9:0200483C B0 20 C1 01 STREQH R2, [R1]
- ARM9:02004840 78 11 9F E5 LDR R1, =microcode_ShakeHand
- ARM9:02004844 78 21 9F E5 LDR R2, =0x1FF8000 ; ITCM
- ARM9:02004848 28 30 82 E2 ADD R3, R2, #0x28
- ARM9:0200484C
- ARM9:0200484C loc_200484C ; CODE XREF: _start+58j
- ARM9:0200484C 04 00 91 E4 LDR R0, [R1],#4
- ARM9:02004850 04 00 82 E4 STR R0, [R2],#4
- ARM9:02004854 03 00 52 E1 CMP R2, R3
- ARM9:02004858 FB FF FF BA BLT loc_200484C
- ARM9:0200485C 64 01 9F E5 LDR R0, =0x2FFFC28
- ARM9:02004860 01 10 A0 E3 MOV R1, #1
- ARM9:02004864 B0 10 C0 E1 STRH R1, [R0]
- ARM9:02004868 5C 01 9F E5 LDR R0, =0x2FFFC24
- ARM9:0200486C 5C 11 9F E5 LDR R1, =0x2FFFC26
- ARM9:02004870 4C 21 9F E5 LDR R2, =0x1FF8000 ; =0x1FF8000, start of ITCM(Instruction Tightly Coupled Memory)
- ARM9:02004874 32 FF 2F E1 BLX R2
- ARM9:02004878 54 11 9F E5 LDR R1, =microcode_WaitAgreement
- ARM9:0200487C 40 21 9F E5 LDR R2, =0x1FF8000
- ARM9:02004880 1C 30 82 E2 ADD R3, R2, #0x1C
- ARM9:02004884
- ARM9:02004884 loc_2004884 ; CODE XREF: _start+90j
- ARM9:02004884 04 00 91 E4 LDR R0, [R1],#4
- ARM9:02004888 04 00 82 E4 STR R0, [R2],#4
- ARM9:0200488C 03 00 52 E1 CMP R2, R3
- ARM9:02004890 FB FF FF BA BLT loc_2004884
- ARM9:02004894 2C 01 9F E5 LDR R0, =0x2FFFC28
- ARM9:02004898 04 10 A0 E3 MOV R1, #4
- ARM9:0200489C 20 21 9F E5 LDR R2, =0x1FF8000 ; ITCM
- ARM9:020048A0 32 FF 2F E1 BLX R2
- ARM9:020048A4 82 01 00 EB BL INITi_IsRunOnTwl
- ARM9:020048A8 0A 00 00 1A BNE loc_20048D8
- ARM9:020048AC 24 11 9F E5 LDR R1, =microcode_SwitchCpuClock
- ARM9:020048B0 0C 21 9F E5 LDR R2, =0x1FF8000 ; ITCM
- ARM9:020048B4 1C 20 82 E2 ADD R2, R2, #0x1C
- ARM9:020048B8 34 30 A0 E3 MOV R3, #0x34 ; '4'
- ARM9:020048BC
- ARM9:020048BC loc_20048BC ; CODE XREF: _start+C8j
- ARM9:020048BC 04 30 53 E2 SUBS R3, R3, #4
- ARM9:020048C0 03 00 91 E7 LDR R0, [R1,R3]
- ARM9:020048C4 03 00 82 E7 STR R0, [R2,R3]
- ARM9:020048C8 FB FF FF CA BGT loc_20048BC
- ARM9:020048CC 01 00 A0 E3 MOV R0, #1
- ARM9:020048D0 08 10 A0 E3 MOV R1, #8
- ARM9:020048D4 32 FF 2F E1 BLX R2
- ARM9:020048D8
- ARM9:020048D8 loc_20048D8 ; CODE XREF: _start+A8j
- ARM9:020048D8 6E 00 00 EB BL INITi_InitRegion
- ARM9:020048DC 13 00 A0 E3 MOV R0, #0x13 ; Stack pointer setup- Supervisor mode (SWI) (0x13)
- ARM9:020048E0 00 F0 21 E1 MSR CPSR_c, R0
- ARM9:020048E4 F0 10 9F E5 LDR R1, =0x2FE0000 ; start of DTCM
- ARM9:020048E8 01 19 81 E2 ADD R1, R1, #0x4000 ; end of DTCM
- ARM9:020048EC 40 D0 41 E2 SUB SP, R1, #0x40 ; start of supervisor mode stack
- ARM9:020048F0 40 10 4D E2 SUB R1, SP, #0x40 ; start of irq mode stack
- ARM9:020048F4 12 00 A0 E3 MOV R0, #0x12 ; Stack pointer setup- IRQ mode (0x12)
- ARM9:020048F8 00 F0 21 E1 MSR CPSR_c, R0
- ARM9:020048FC 04 D0 41 E2 SUB SP, R1, #4
- ARM9:02004900 04 00 1D E3 TST SP, #4
- ARM9:02004904 04 D0 4D 02 SUBEQ SP, SP, #4
- ARM9:02004908 D0 00 9F E5 LDR R0, =0x800 ; size of irq stack
- ARM9:0200490C 00 10 41 E0 SUB R1, R1, R0 ; irq stack start -0x800 = start of main stack
- ARM9:02004910 1F 00 A0 E3 MOV R0, #0x1F ; Stack pointer setup- System (privileged 'User' mode) (0x1F)
- ARM9:02004914 00 F0 2F E1 MSR CPSR_cxsf, R0
- ARM9:02004918 04 D0 41 E2 SUB SP, R1, #4
- ARM9:0200491C 04 00 1D E3 TST SP, #4 ; word-aligned?
- ARM9:02004920 04 D0 4D 12 SUBNE SP, SP, #4
- ARM9:02004924 00 00 A0 E3 MOV R0, #0 ; data
- ARM9:02004928 AC 10 9F E5 LDR R1, =0x2FE0000 ; destp
- ARM9:0200492C 01 29 A0 E3 MOV R2, #0x4000 ; size
- ARM9:02004930 32 00 00 EB BL INITi_CpuClear32
- ARM9:02004934 00 10 A0 E3 MOV R1, #0 ; value
- ARM9:02004938 A4 00 9F E5 LDR R0, =0x5000000 ; dst
- ARM9:0200493C 01 2B A0 E3 MOV R2, #0x400 ; size
- ARM9:02004940 76 01 00 EB BL INITi_Fill32
- ARM9:02004944 9C 00 9F E5 LDR R0, =0x7000000 ; dst
- ARM9:02004948 01 2B A0 E3 MOV R2, #0x400 ; size
- ARM9:0200494C 73 01 00 EB BL INITi_Fill32
- ARM9:02004950 97 00 00 EB BL INITi_DoAutoload
- ARM9:02004954 00 10 A0 E3 MOV R1, #0 ; value
- ARM9:02004958 8C 30 9F E5 LDR R3, =_start_ModuleParams
- ARM9:0200495C 0C 00 93 E5 LDR R0, [R3,#0xC] ; dst
- ARM9:02004960 10 20 93 E5 LDR R2, [R3,#0x10]
- ARM9:02004964 00 20 52 E0 SUBS R2, R2, R0 ; size
- ARM9:02004968 6C 01 00 CB BLGT INITi_Fill32
- ARM9:0200496C 68 10 9F E5 LDR R1, =0x2FE0000 ; Interrupt vector setup
- ARM9:02004970 FF 1D 81 E2 ADD R1, R1, #0x3FC0 ; supervisor mode
- ARM9:02004974 3C 10 81 E2 ADD R1, R1, #0x3C ; location of irq handler static pointer
- ARM9:02004978 70 00 9F E5 LDR R0, =OS_IrqHandler ; OS IRQ Handler @ 0x1FF8C88
- ARM9:0200497C 00 00 81 E5 STR R0, [R1] ; store irq handler location to static pointer
- ARM9:02004980 E0 28 02 EB BL nullsub_10
- ARM9:02004984 48 01 00 EB BL NitroStartUp
- ARM9:02004988 1D 29 02 EB BL __call_static_initializers
- ARM9:0200498C 03 01 00 EB BL INITi_CallStaticInitializers
- ARM9:02004990 5C 10 9F E5 LDR R1, =0x4000006 ; REG_VCOUNT @ #0x4000006
- ARM9:02004994
- ARM9:02004994 loc_2004994 ; CODE XREF: _start+19Cj
- ARM9:02004994 B0 00 D1 E1 LDRH R0, [R1] ; waste cycles until video frame 2
- ARM9:02004998 00 00 50 E3 CMP R0, #0
- ARM9:0200499C FC FF FF 1A BNE loc_2004994
- ARM9:020049A0 50 10 9F E5 LDR R1, =(TwlMain+1)
- ARM9:020049A4 50 E0 9F E5 LDR LR, =0xFFFF0000 ; =0xFFFF0000, BIOS area in RAM map
- ARM9:020049A8 11 FF 2F E1 BX R1 ; TwlMain
- ARM9:020049A8 ; End of function _start
- ARM9:020049A8
- ARM9:020049A8 ; ---------------------------------------------------------------------------
- ARM9:020049AC ; void *destp
- ARM9:020049AC 80 FF FF 02 destp DCD 0x2FFFF80 ; DATA XREF: _start+10r
- ARM9:020049B0 ; u32 dword_20049B0
- ARM9:020049B0 68 00 00 00 dword_20049B0 DCD 0x68 ; DATA XREF: _start+14r
- ARM9:020049B4 ; void *dword_20049B4
- ARM9:020049B4 F0 FF FF 02 dword_20049B4 DCD 0x2FFFFF0 ; DATA XREF: _start+20r
- ARM9:020049B8 ; u32 dword_20049B8
- ARM9:020049B8 10 00 00 00 dword_20049B8 DCD 0x10 ; DATA XREF: _start+24r
- ARM9:020049BC 40 FC FF 02 dword_20049BC DCD 0x2FFFC40 ; DATA XREF: _start+2Cr
- ARM9:020049C0 D4 4F 00 02 off_20049C0 DCD microcode_ShakeHand ; DATA XREF: _start+40r
- ARM9:020049C4 00 80 FF 01 dword_20049C4 DCD 0x1FF8000 ; DATA XREF: _start+44r
- ARM9:020049C4 ; _start+70r
- ARM9:020049C4 ; _start+7Cr
- ARM9:020049C4 ; _start+9Cr
- ARM9:020049C4 ; _start+B0r
- ARM9:020049C8 28 FC FF 02 dword_20049C8 DCD 0x2FFFC28 ; DATA XREF: _start+5Cr
- ARM9:020049C8 ; _start+94r
- ARM9:020049CC 24 FC FF 02 dword_20049CC DCD 0x2FFFC24 ; DATA XREF: _start+68r
- ARM9:020049D0 26 FC FF 02 dword_20049D0 DCD 0x2FFFC26 ; DATA XREF: _start+6Cr
- ARM9:020049D4 94 4F 00 02 off_20049D4 DCD microcode_WaitAgreement
- ARM9:020049D4 ; DATA XREF: _start+78r
- ARM9:020049D8 FC 4F 00 02 off_20049D8 DCD microcode_SwitchCpuClock
- ARM9:020049D8 ; DATA XREF: _start+ACr
- ARM9:020049DC ; void *dword_20049DC
- ARM9:020049DC 00 00 FE 02 dword_20049DC DCD 0x2FE0000 ; DATA XREF: _start+E4r
- ARM9:020049DC ; _start+128r
- ARM9:020049DC ; _start+16Cr
- ARM9:020049E0 00 08 00 00 dword_20049E0 DCD 0x800 ; DATA XREF: _start+108r
- ARM9:020049E4 ; void *dword_20049E4
- ARM9:020049E4 00 00 00 05 dword_20049E4 DCD 0x5000000 ; DATA XREF: _start+138r
- ARM9:020049E8 ; void *dword_20049E8
- ARM9:020049E8 00 00 00 07 dword_20049E8 DCD 0x7000000 ; DATA XREF: _start+144r
- ARM9:020049EC B0 4F 00 02 off_20049EC DCD _start_ModuleParams ; DATA XREF: _start+158r
- ARM9:020049F0 88 8C FF 01 off_20049F0 DCD OS_IrqHandler ; DATA XREF: _start+178r
- ARM9:020049F4 06 00 00 04 dword_20049F4 DCD 0x4000006 ; DATA XREF: _start+190r
- ARM9:020049F8 25 51 00 02 off_20049F8 DCD TwlMain+1 ; DATA XREF: _start+1A0r
- ARM9:020049FC 00 00 FF FF dword_20049FC DCD 0xFFFF0000 ; DATA XREF: _start+1A4r
Advertisement