diff options
-rw-r--r-- | asm/arm7_rom.s | 6 | ||||
-rw-r--r-- | asm/entry.s | 277 | ||||
-rw-r--r-- | asm/filenametable.s | 4 | ||||
-rw-r--r-- | asm/gap1.s | 4 | ||||
-rw-r--r-- | asm/gap2.s | 4 | ||||
-rw-r--r-- | asm/main.s | 280 | ||||
-rw-r--r-- | asm/rom.s | 5 | ||||
-rw-r--r-- | asm/rom3.s | 4 | ||||
-rw-r--r-- | asm/rom_header.s | 151 | ||||
-rw-r--r-- | ld_script.txt | 27 |
10 files changed, 423 insertions, 339 deletions
diff --git a/asm/arm7_rom.s b/asm/arm7_rom.s new file mode 100644 index 00000000..1a02882d --- /dev/null +++ b/asm/arm7_rom.s @@ -0,0 +1,6 @@ +/* arm7_rom.s TODO: Disassemble */ + + .section .text + .global Entry_ARM7 +Entry_ARM7: + .incbin "baserom.nds", 0x30D000, 0x2931C diff --git a/asm/entry.s b/asm/entry.s new file mode 100644 index 00000000..bd6ed223 --- /dev/null +++ b/asm/entry.s @@ -0,0 +1,277 @@ + .include "asm/macros.inc" + + .text + + arm_func_start Entry +Entry: @ 0x02000800 + mov ip, #0x4000000 + str ip, [ip, #0x208] +_02000808: + ldrh r0, [ip, #6] + cmp r0, #0 + bne _02000808 + bl init_cp15 + mov r0, #0x13 + msr cpsr_c, r0 + ldr r0, _02000918 @ =0x027E0000 + add r0, r0, #0x3fc0 + mov sp, r0 + mov r0, #0x12 + msr cpsr_c, r0 + ldr r0, _02000918 @ =0x027E0000 + add r0, r0, #0x3fc0 + sub r0, r0, #0x40 + sub sp, r0, #4 + tst sp, #4 + subeq sp, sp, #4 + ldr r1, _0200091C @ =0x00000400 + sub r1, r0, r1 + mov r0, #0x1f + msr cpsr_fsxc, r0 + sub sp, r1, #4 + mov r0, #0 + ldr r1, _02000918 @ =0x027E0000 + mov r2, #0x4000 + bl INITi_CpuClear32 + mov r0, #0 + ldr r1, _02000920 @ =0x05000000 + mov r2, #1024 + bl INITi_CpuClear32 + mov r0, #512 + ldr r1, _02000924 @ =0x07000000 + mov r2, #1024 + bl INITi_CpuClear32 + ldr r1, _02000928 @ =_02000B68 + ldr r0, [r1, #20] + bl MIi_UncompressBackward + bl do_autoload + ldr r0, _02000928 @ =_02000B68 + ldr r1, [r0, #12] + ldr r2, [r0, #16] + mov r3, r1 + mov r0, #0 +_020008B4: + cmp r1, r2 + strcc r0, [r1], #4 + bcc _020008B4 + bic r1, r3, #31 +_020008C4: + mcr p15, #0, r0, cr7, cr10, 4 + mcr p15, #0, r1, cr7, cr5, 1 + mcr p15, #0, r1, cr7, cr14, 1 + add r1, #32 + cmp r1, r2 + blt _020008C4 + ldr r1, _0200092C @ =0x027FFF9C + str r0, [r1] + ldr r1, _02000918 @ =0x027E0000 + add r1, r1, #16320 + add r1, r1, #60 + ldr r0, _02000930 @ =0x01FF8000 + str r0, [r1] + bl sub_20EC5CC + bl sub_2000B64_dummy + bl sub_20EC694 + ldr r1, _02000934 @ =0x02000C55 + ldr lr, _02000938 @ =0xFFFF0000 + tst sp, #4 + subne sp, sp, #4 + bx r1 +_02000918: .4byte 0x027E0000 +_0200091C: .4byte 0x00000400 +_02000920: .4byte 0x05000000 +_02000924: .4byte 0x07000000 +_02000928: .4byte _02000B68 +_0200092C: .4byte 0x027FFF9C +_02000930: .4byte 0x01FF8000 +_02000934: .4byte NitroMain+1 +_02000938: .4byte 0xFFFF0000 + arm_func_end Entry + + arm_func_start INITi_CpuClear32 +INITi_CpuClear32: + add ip, r1, r2 +_02000940: + cmp r1, ip + stmlt r1!, {r0} + blt _02000940 + bx lr + arm_func_end INITi_CpuClear32 + + arm_func_start MIi_UncompressBackward +MIi_UncompressBackward: + cmp r0, #0 + beq _020009F8 + push {r4, r5, r6, r7} + ldmdb r0, {r1, r2} + add r2, r0, r2 + sub r3, r0, r1, lsr #24 + bic r1, r1, #-16777216 + sub r1, r0, r1 + mov r4, r2 +_02000974: + cmp r3, r1 + ble _020009D4 + ldrb r5, [r3, #-1]! + mov r6, #8 +_02000984: + subs r6, r6, #1 + blt _02000974 + tst r5, #128 + bne _020009A0 + ldrb r0, [r3, #-1]! + strb r0, [r2, #-1]! + b _020009C8 +_020009A0: + ldrb ip, [r3, #-1]! + ldrb r7, [r3, #-1]! + orr r7, r7, ip, lsl #8 + bic r7, r7, #61440 + add r7, r7, #2 + add ip, ip, #32 +_020009B8: + ldrb r0, [r2, r7] + strb r0, [r2, #-1]! + subs ip, ip, #16 + bge _020009B8 +_020009C8: + cmp r3, r1 + lsl r5, r5, #1 + bgt _02000984 +_020009D4: + mov r0, #0 + bic r3, r1, #31 +_020009DC: + mcr p15, #0, r0, cr7, cr10, 4 + mcr p15, #0, r3, cr7, cr5, 1 + mcr p15, #0, r3, cr7, cr14, 1 + add r3, r3, #32 + cmp r3, r4 + blt _020009DC + pop {r4, r5, r6, r7} +_020009F8: + bx lr + arm_func_end MIi_UncompressBackward + + arm_func_start do_autoload +do_autoload: + ldr r0, =_02000B68 + ldr r1, [r0] + ldr r2, [r0, #4] + ldr r3, [r0, #8] +_02000A0C: + cmp r1, r2 + beq _02000A6C + ldr r5, [r1], #4 + ldr r7, [r1], #4 + add r6, r5, r7 + mov r4, r5 +_02000A24: + cmp r4, r6 + ldrmi r7, [r3], #4 + strmi r7, [r4], #4 + bmi _02000A24 + ldr r7, [r1], #4 + add r6, r4, r7 + mov r7, #0 +_02000A40: + cmp r4, r6 + strcc r7, [r4], #4 + bcc _02000A40 + bic r4, r5, #31 +_02000A50: + mcr p15, #0, r7, cr7, cr10, 4 + mcr p15, #0, r4, cr7, cr5, 1 + mcr p15, #0, r4, cr7, cr14, 1 + add r4, r4, #32 + cmp r4, r6 + blt _02000A50 + b _02000A0C +_02000A6C: + b _2000A74 + .pool +_2000A74: + bx lr + arm_func_end do_autoload + + arm_func_start init_cp15 +init_cp15: @ 0x02000A78 + mrc p15, #0, r0, c1, c0, #0 + ldr r1, =0x000F9005 + bic r0, r0, r1 + mcr p15, #0, r0, c1, c0, #0 + mov r0, #0 + mcr p15, #0, r0, c7, c5, #0 + mcr p15, #0, r0, c7, c6, #0 + mcr p15, #0, r0, c7, c10, #4 + ldr r0, =0x04000033 + mcr p15, #0, r0, c6, c0, #0 + ldr r0, =0x0200002D + mcr p15, #0, r0, c6, c1, #0 + ldr r0, =0x027E0021 + mcr p15, #0, r0, c6, c2, #0 + ldr r0, =0x08000035 + mcr p15, #0, r0, c6, c3, #0 + ldr r0, =0x027E0000 + orr r0, r0, #0x1a + orr r0, r0, #1 + mcr p15, #0, r0, c6, c4, #0 + ldr r0, =0x0100002F + mcr p15, #0, r0, c6, c5, #0 + ldr r0, =0xFFFF001D + mcr p15, #0, r0, c6, c6, #0 + ldr r0, =0x027FF017 + mcr p15, #0, r0, c6, c7, #0 + mov r0, #0x20 + mcr p15, #0, r0, c9, c1, #1 + ldr r0, =0x027E0000 + orr r0, r0, #0xa + mcr p15, #0, r0, c9, c1, #0 + mov r0, #0x42 + mcr p15, #0, r0, c2, c0, #1 + mov r0, #0x42 + mcr p15, #0, r0, c2, c0, #0 + mov r0, #2 + mcr p15, #0, r0, c3, c0, #0 + ldr r0, =0x05100011 + mcr p15, #0, r0, c5, c0, #3 + ldr r0, =0x15111011 + mcr p15, #0, r0, c5, c0, #2 + mrc p15, #0, r0, c1, c0, #0 + ldr r1, =0x0005707D + orr r0, r0, r1 + mcr p15, #0, r0, c1, c0, #0 + bx lr + .align 2, 0 + .pool + + arm_func_start sub_2000B60_dummy +sub_2000B60_dummy: @ 0x02000B60 + bx lr + + arm_func_start sub_2000B64_dummy +sub_2000B64_dummy: @ 0x02000B64 + bx lr +_02000B68: + .word 0x02107700 + .word 0x02107724 + .word 0x02106FA0 + .word 0x02106FA0 + .word 0x021D74E0 + .word 0x00000000 + + .byte 0x31, 0x75, 0x02, 0x03, 0x21, 0x06, 0xC0, 0xDE, 0xDE, 0xC0, 0x06, 0x21 + + # strings + .balign 4 + .asciz "[SDK+NINTENDO:DWC1.2.30006.061019.2254_DWC_1_2_PLUS6]" + .balign 4 + .asciz "[SDK+NINTENDO:WiFi1.2.30000.0609050341]" + .balign 4 + .asciz "[SDK+UBIQUITOUS:CPS]" + .balign 4 + .asciz "[SDK+UBIQUITOUS:SSL]" + .balign 4 + .asciz "[SDK+Abiosso:libVCT 1.0.1_ec]" + .balign 4 + .asciz "[SDK+NINTENDO:BACKUP]" diff --git a/asm/filenametable.s b/asm/filenametable.s new file mode 100644 index 00000000..0ebb43f8 --- /dev/null +++ b/asm/filenametable.s @@ -0,0 +1,4 @@ + .text + .global FileNameTable +FileNameTable: + .incbin "baserom.nds", 0x336400, 0x3cc9c00 @0x157F diff --git a/asm/gap1.s b/asm/gap1.s new file mode 100644 index 00000000..b71ccde3 --- /dev/null +++ b/asm/gap1.s @@ -0,0 +1,4 @@ + .section .text + .rept 0x1E0 + .byte 0xFF + .endr diff --git a/asm/gap2.s b/asm/gap2.s new file mode 100644 index 00000000..4af77b6d --- /dev/null +++ b/asm/gap2.s @@ -0,0 +1,4 @@ + .text + .rept 0x336400-0x33631c + .byte 255 + .endr @@ -1,277 +1,9 @@ +/* main.s TODO: Disassemble */ .include "asm/macros.inc" - .text + .section .text - arm_func_start Entry -Entry: @ 0x02000800 - mov ip, #0x4000000 - str ip, [ip, #0x208] -_02000808: - ldrh r0, [ip, #6] - cmp r0, #0 - bne _02000808 - bl init_cp15 - mov r0, #0x13 - msr cpsr_c, r0 - ldr r0, _02000918 @ =0x027E0000 - add r0, r0, #0x3fc0 - mov sp, r0 - mov r0, #0x12 - msr cpsr_c, r0 - ldr r0, _02000918 @ =0x027E0000 - add r0, r0, #0x3fc0 - sub r0, r0, #0x40 - sub sp, r0, #4 - tst sp, #4 - subeq sp, sp, #4 - ldr r1, _0200091C @ =0x00000400 - sub r1, r0, r1 - mov r0, #0x1f - msr cpsr_fsxc, r0 - sub sp, r1, #4 - mov r0, #0 - ldr r1, _02000918 @ =0x027E0000 - mov r2, #0x4000 - bl INITi_CpuClear32 - mov r0, #0 - ldr r1, _02000920 @ =0x05000000 - mov r2, #1024 - bl INITi_CpuClear32 - mov r0, #512 - ldr r1, _02000924 @ =0x07000000 - mov r2, #1024 - bl INITi_CpuClear32 - ldr r1, _02000928 @ = 0x02000B68 - ldr r0, [r1, #20] - bl MIi_UncompressBackward - bl do_autoload - ldr r0, _02000928 @ =0x02000B68 - ldr r1, [r0, #12] - ldr r2, [r0, #16] - mov r3, r1 - mov r0, #0 -_020008B4: - cmp r1, r2 - strcc r0, [r1], #4 - bcc _020008B4 - bic r1, r3, #31 -_020008C4: - mcr p15, #0, r0, cr7, cr10, 4 - mcr p15, #0, r1, cr7, cr5, 1 - mcr p15, #0, r1, cr7, cr14, 1 - add r1, #32 - cmp r1, r2 - blt _020008C4 - ldr r1, _0200092C @ =0x027FFF9C - str r0, [r1] - ldr r1, _02000918 @ =0x027E0000 - add r1, r1, #16320 - add r1, r1, #60 - ldr r0, _02000930 @ =0x01FF8000 - str r0, [r1] - bl sub_20EC5CC - bl sub_2000B64_dummy - bl sub_20EC694 - ldr r1, _02000934 @ =0x02000C55 - ldr lr, _02000938 @ =0xFFFF0000 - tst sp, #4 - subne sp, sp, #4 - bx r1 -_02000918: .4byte 0x027E0000 -_0200091C: .4byte 0x00000400 -_02000920: .4byte 0x05000000 -_02000924: .4byte 0x07000000 -_02000928: .4byte 0x02000B68 -_0200092C: .4byte 0x027FFF9C -_02000930: .4byte 0x01FF8000 -_02000934: .4byte 0x02000C55 @ NdsMain -_02000938: .4byte 0xFFFF0000 - arm_func_end Entry - - arm_func_start INITi_CpuClear32 -INITi_CpuClear32: - add ip, r1, r2 -_02000940: - cmp r1, ip - stmlt r1!, {r0} - blt _02000940 - bx lr - arm_func_end INITi_CpuClear32 - - arm_func_start MIi_UncompressBackward -MIi_UncompressBackward: - cmp r0, #0 - beq _020009F8 - push {r4, r5, r6, r7} - ldmdb r0, {r1, r2} - add r2, r0, r2 - sub r3, r0, r1, lsr #24 - bic r1, r1, #-16777216 - sub r1, r0, r1 - mov r4, r2 -_02000974: - cmp r3, r1 - ble _020009D4 - ldrb r5, [r3, #-1]! - mov r6, #8 -_02000984: - subs r6, r6, #1 - blt _02000974 - tst r5, #128 - bne _020009A0 - ldrb r0, [r3, #-1]! - strb r0, [r2, #-1]! - b _020009C8 -_020009A0: - ldrb ip, [r3, #-1]! - ldrb r7, [r3, #-1]! - orr r7, r7, ip, lsl #8 - bic r7, r7, #61440 - add r7, r7, #2 - add ip, ip, #32 -_020009B8: - ldrb r0, [r2, r7] - strb r0, [r2, #-1]! - subs ip, ip, #16 - bge _020009B8 -_020009C8: - cmp r3, r1 - lsl r5, r5, #1 - bgt _02000984 -_020009D4: - mov r0, #0 - bic r3, r1, #31 -_020009DC: - mcr p15, #0, r0, cr7, cr10, 4 - mcr p15, #0, r3, cr7, cr5, 1 - mcr p15, #0, r3, cr7, cr14, 1 - add r3, r3, #32 - cmp r3, r4 - blt _020009DC - pop {r4, r5, r6, r7} -_020009F8: - bx lr - arm_func_end MIi_UncompressBackward - - arm_func_start do_autoload -do_autoload: - ldr r0, =0x02000B68 - ldr r1, [r0] - ldr r2, [r0, #4] - ldr r3, [r0, #8] -_02000A0C: - cmp r1, r2 - beq _02000A6C - ldr r5, [r1], #4 - ldr r7, [r1], #4 - add r6, r5, r7 - mov r4, r5 -_02000A24: - cmp r4, r6 - ldrmi r7, [r3], #4 - strmi r7, [r4], #4 - bmi _02000A24 - ldr r7, [r1], #4 - add r6, r4, r7 - mov r7, #0 -_02000A40: - cmp r4, r6 - strcc r7, [r4], #4 - bcc _02000A40 - bic r4, r5, #31 -_02000A50: - mcr p15, #0, r7, cr7, cr10, 4 - mcr p15, #0, r4, cr7, cr5, 1 - mcr p15, #0, r4, cr7, cr14, 1 - add r4, r4, #32 - cmp r4, r6 - blt _02000A50 - b _02000A0C -_02000A6C: - b _2000A74 - .pool -_2000A74: - bx lr - arm_func_end do_autoload - - arm_func_start init_cp15 -init_cp15: @ 0x02000A78 - mrc p15, #0, r0, c1, c0, #0 - ldr r1, =0x000F9005 - bic r0, r0, r1 - mcr p15, #0, r0, c1, c0, #0 - mov r0, #0 - mcr p15, #0, r0, c7, c5, #0 - mcr p15, #0, r0, c7, c6, #0 - mcr p15, #0, r0, c7, c10, #4 - ldr r0, =0x04000033 - mcr p15, #0, r0, c6, c0, #0 - ldr r0, =0x0200002D - mcr p15, #0, r0, c6, c1, #0 - ldr r0, =0x027E0021 - mcr p15, #0, r0, c6, c2, #0 - ldr r0, =0x08000035 - mcr p15, #0, r0, c6, c3, #0 - ldr r0, =0x027E0000 - orr r0, r0, #0x1a - orr r0, r0, #1 - mcr p15, #0, r0, c6, c4, #0 - ldr r0, =0x0100002F - mcr p15, #0, r0, c6, c5, #0 - ldr r0, =0xFFFF001D - mcr p15, #0, r0, c6, c6, #0 - ldr r0, =0x027FF017 - mcr p15, #0, r0, c6, c7, #0 - mov r0, #0x20 - mcr p15, #0, r0, c9, c1, #1 - ldr r0, =0x027E0000 - orr r0, r0, #0xa - mcr p15, #0, r0, c9, c1, #0 - mov r0, #0x42 - mcr p15, #0, r0, c2, c0, #1 - mov r0, #0x42 - mcr p15, #0, r0, c2, c0, #0 - mov r0, #2 - mcr p15, #0, r0, c3, c0, #0 - ldr r0, =0x05100011 - mcr p15, #0, r0, c5, c0, #3 - ldr r0, =0x15111011 - mcr p15, #0, r0, c5, c0, #2 - mrc p15, #0, r0, c1, c0, #0 - ldr r1, =0x0005707D - orr r0, r0, r1 - mcr p15, #0, r0, c1, c0, #0 - bx lr - .align 2, 0 - .pool - - arm_func_start sub_2000B60_dummy -sub_2000B60_dummy: @ 0x02000B60 - bx lr - - arm_func_start sub_2000B64_dummy -sub_2000B64_dummy: @ 0x02000B64 - bx lr -_02000B68: - .word 0x02107700 - .word 0x02107724 - .word 0x02106FA0 - .word 0x02106FA0 - .word 0x021D74E0 - .word 0x00000000 - - .byte 0x31, 0x75, 0x02, 0x03, 0x21, 0x06, 0xC0, 0xDE, 0xDE, 0xC0, 0x06, 0x21 - - # strings - .balign 4 - .asciz "[SDK+NINTENDO:DWC1.2.30006.061019.2254_DWC_1_2_PLUS6]" - .balign 4 - .asciz "[SDK+NINTENDO:WiFi1.2.30000.0609050341]" - .balign 4 - .asciz "[SDK+UBIQUITOUS:CPS]" - .balign 4 - .asciz "[SDK+UBIQUITOUS:SSL]" - .balign 4 - .asciz "[SDK+Abiosso:libVCT 1.0.1_ec]" - .balign 4 - .asciz "[SDK+NINTENDO:BACKUP]" + thumb_func_start NitroMain +NitroMain: + .incbin "baserom.nds", 0x4C54, 0x1A0 + thumb_func_end NitroMain diff --git a/asm/rom.s b/asm/rom.s deleted file mode 100644 index 0025dec1..00000000 --- a/asm/rom.s +++ /dev/null @@ -1,5 +0,0 @@ -/* rom.s TODO: Disassemble */ - -.section .text - -.incbin "baserom.nds", 0x4C54, 0x1A0 @@ -1,5 +1,5 @@ /* rom3.s TODO: Disassemble */ -.section .text + .section .text -.incbin "baserom.nds", 0x10B724, 0x3EF48DC + .incbin "baserom.nds", 0x10B724, 0x2016FC diff --git a/asm/rom_header.s b/asm/rom_header.s index 2dc62ad5..9b63d7e5 100644 --- a/asm/rom_header.s +++ b/asm/rom_header.s @@ -1,115 +1,152 @@ /* ROM HEADER for Pokemon Diamond (US) */ -.section .text + .section .text -.balign 4 + .balign 4 + .global GameTitle GameTitle: -.asciz "POKEMON D" + .asciz "POKEMON D" -.balign 4 + .balign 4 + .global GameCode GameCode: -.ascii "ADAE" + .ascii "ADAE" + .global MakerCode MakerCode: -.ascii "01" + .ascii "01" + .global UnitCode UnitCode: -.byte 0 + .byte 0 + .global DeviceType DeviceType: -.byte 0 + .byte 0 + .global DeviceCapacity DeviceCapacity: -.byte 9 + .byte 9 /*reserved*/ -.space 9 + .space 9 + .global RomVersion RomVersion: -.byte 5 + .byte 5 /*reserved*/ -.space 1 + .space 1 + .global ARM9ROMOffset ARM9ROMOffset: -.word _arm9SegmentRomStart + .word _arm9SegmentRomStart + .global ARM9EntryAddress ARM9EntryAddress: -.word Entry + .word Entry + .global ARM9RAMAddress ARM9RAMAddress: -.word _arm9SegmentStart + .word _arm9SegmentStart + .global ARM9CodeSize ARM9CodeSize: -.word _arm9SegmentSize + .word _arm9SegmentSize + .global ARM7ROMOffset ARM7ROMOffset: -.word 0x0030D000 + .word _arm7SegmentRomStart + .global ARM7EntryAddress ARM7EntryAddress: -.word 0x02380000 + .word Entry_ARM7 + .global ARM7RAMAddress ARM7RAMAddress: -.word 0x02380000 + .word _arm7SegmentStart + .global ARM7CodeSize ARM7CodeSize: -.word 0x0002931C + .word _arm7SegmentSize + .global FileNameTableOffset FileNameTableOffset: -.word 0x00336400 + .word _FileNameTableSegmentRomStart + .global FileNameTableSize FileNameTableSize: -.word 0x0000157F + .word 0x0000157F + .global FATOffset FATOffset: -.word 0x00337A00 + .word 0x00337A00 + .global FATSize FATSize: -.word 0x00000B20 + .word 0x00000B20 + .global ARM9OverlayOffset ARM9OverlayOffset: -.word 0x0010B800 + .word 0x0010B800 + .global ARM9OverlaySize ARM9OverlaySize: -.word 0x00000AE0 + .word 0x00000AE0 + .global ARM7OverlayOffset ARM7OverlayOffset: -.word 0x00000000 + .word 0x00000000 + .global ARM7OverlaySize ARM7OverlaySize: -.word 0x00000000 + .word 0x00000000 + .global ROMControlInfo1 ROMControlInfo1: -.word 0x00416657 + .word 0x00416657 + .global ROMControlInfo2 ROMControlInfo2: -.word 0x081808F8 + .word 0x081808F8 + .global IconTitleOffset IconTitleOffset: -.word 0x00338600 + .word 0x00338600 + .global SecureAreaCC SecureAreaCC: -.short 0x5931 + .short 0x5931 + .global ROMControlInfo3 ROMControlInfo3: -.short 0x0D7E + .short 0x0D7E + .global ARM9AutoLoadHook ARM9AutoLoadHook: -.word 0x02000A74 + .word 0x02000A74 + .global ARM7AutoLoadHook ARM7AutoLoadHook: -.word 0x02380158 + .word 0x02380158 + .global SecureAreaDisable SecureAreaDisable: -.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .global ApplicationEndOffset ApplicationEndOffset: -.word 0x03A55EC0 + .word 0x03A55EC0 + .global ROMHeaderSize ROMHeaderSize: -.word 0x00004000 + .word 0x00004000 /* should be 36 bytes here but again theres stuff here. TODO: Identify */ -.byte 0x68, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -.byte 0x00, 0x00, 0x00, 0x00 + .byte 0x68, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + .global PassMeAutobootDetect PassMeAutobootDetect: -.word 0x00000000 + .word 0x00000000 /* reserved */ -.space 16 + .space 16 + .global NintendoLogo NintendoLogo: -.byte 0x24, 0xFF, 0xAE, 0x51, 0x69, 0x9A, 0xA2, 0x21, 0x3D, 0x84, 0x82, 0x0A, 0x84, 0xE4, 0x09, 0xAD -.byte 0x11, 0x24, 0x8B, 0x98, 0xC0, 0x81, 0x7F, 0x21, 0xA3, 0x52, 0xBE, 0x19, 0x93, 0x09, 0xCE, 0x20 -.byte 0x10, 0x46, 0x4A, 0x4A, 0xF8, 0x27, 0x31, 0xEC, 0x58, 0xC7, 0xE8, 0x33, 0x82, 0xE3, 0xCE, 0xBF -.byte 0x85, 0xF4, 0xDF, 0x94, 0xCE, 0x4B, 0x09, 0xC1, 0x94, 0x56, 0x8A, 0xC0, 0x13, 0x72, 0xA7, 0xFC -.byte 0x9F, 0x84, 0x4D, 0x73, 0xA3, 0xCA, 0x9A, 0x61, 0x58, 0x97, 0xA3, 0x27, 0xFC, 0x03, 0x98, 0x76 -.byte 0x23, 0x1D, 0xC7, 0x61, 0x03, 0x04, 0xAE, 0x56, 0xBF, 0x38, 0x84, 0x00, 0x40, 0xA7, 0x0E, 0xFD -.byte 0xFF, 0x52, 0xFE, 0x03, 0x6F, 0x95, 0x30, 0xF1, 0x97, 0xFB, 0xC0, 0x85, 0x60, 0xD6, 0x80, 0x25 -.byte 0xA9, 0x63, 0xBE, 0x03, 0x01, 0x4E, 0x38, 0xE2, 0xF9, 0xA2, 0x34, 0xFF, 0xBB, 0x3E, 0x03, 0x44 -.byte 0x78, 0x00, 0x90, 0xCB, 0x88, 0x11, 0x3A, 0x94, 0x65, 0xC0, 0x7C, 0x63, 0x87, 0xF0, 0x3C, 0xAF -.byte 0xD6, 0x25, 0xE4, 0x8B, 0x38, 0x0A, 0xAC, 0x72, 0x21, 0xD4, 0xF8, 0x07 + .byte 0x24, 0xFF, 0xAE, 0x51, 0x69, 0x9A, 0xA2, 0x21, 0x3D, 0x84, 0x82, 0x0A, 0x84, 0xE4, 0x09, 0xAD + .byte 0x11, 0x24, 0x8B, 0x98, 0xC0, 0x81, 0x7F, 0x21, 0xA3, 0x52, 0xBE, 0x19, 0x93, 0x09, 0xCE, 0x20 + .byte 0x10, 0x46, 0x4A, 0x4A, 0xF8, 0x27, 0x31, 0xEC, 0x58, 0xC7, 0xE8, 0x33, 0x82, 0xE3, 0xCE, 0xBF + .byte 0x85, 0xF4, 0xDF, 0x94, 0xCE, 0x4B, 0x09, 0xC1, 0x94, 0x56, 0x8A, 0xC0, 0x13, 0x72, 0xA7, 0xFC + .byte 0x9F, 0x84, 0x4D, 0x73, 0xA3, 0xCA, 0x9A, 0x61, 0x58, 0x97, 0xA3, 0x27, 0xFC, 0x03, 0x98, 0x76 + .byte 0x23, 0x1D, 0xC7, 0x61, 0x03, 0x04, 0xAE, 0x56, 0xBF, 0x38, 0x84, 0x00, 0x40, 0xA7, 0x0E, 0xFD + .byte 0xFF, 0x52, 0xFE, 0x03, 0x6F, 0x95, 0x30, 0xF1, 0x97, 0xFB, 0xC0, 0x85, 0x60, 0xD6, 0x80, 0x25 + .byte 0xA9, 0x63, 0xBE, 0x03, 0x01, 0x4E, 0x38, 0xE2, 0xF9, 0xA2, 0x34, 0xFF, 0xBB, 0x3E, 0x03, 0x44 + .byte 0x78, 0x00, 0x90, 0xCB, 0x88, 0x11, 0x3A, 0x94, 0x65, 0xC0, 0x7C, 0x63, 0x87, 0xF0, 0x3C, 0xAF + .byte 0xD6, 0x25, 0xE4, 0x8B, 0x38, 0x0A, 0xAC, 0x72, 0x21, 0xD4, 0xF8, 0x07 + .global LogoCRC LogoCRC: -.short 0xCF56 + .short 0xCF56 + .global HeaderCRC HeaderCRC: -.short 0xCA37 + .short 0xCA37 /* reserved */ -.global __startup + .global __startup __startup: -.space 160 /* hack so it builds */ + .space 160 /* hack so it builds */ diff --git a/ld_script.txt b/ld_script.txt index 33584719..4d20c18e 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -24,8 +24,8 @@ SECTIONS { BEGIN_SEG(arm9, 0x2000000) { build/asm/secure.o(.text); + build/asm/entry.o(.text); build/asm/main.o(.text); - build/asm/rom.o(.text); build/src/sub_02000DF4.o(.text); build/asm/rom2.o(.text); } @@ -36,4 +36,29 @@ SECTIONS { build/asm/rom3.o(.text); } END_SEG(rom3) + + BEGIN_SEG(gap1, 0x2000000 + SIZEOF(rom3) + SIZEOF(arm9)) + { + build/asm/gap1.o(.text); + } + END_SEG(gap1) + + BEGIN_SEG(arm7, 0x02380000) + { + build/asm/arm7_rom.o(.text); + } + END_SEG(arm7) + + BEGIN_SEG(gap2, 0x02380000 + SIZEOF(arm7)) + { + build/asm/gap2.o(.text) + } + END_SEG(gap2) + + . = 0x336400; + BEGIN_SEG(FileNameTable, 0x02400000) + { + build/asm/filenametable.o(.text); + } + END_SEG(FileNameTable) } |