disassemble the thumb portion of arm9.

This commit is contained in:
ProjectRevoTPP 2020-04-15 10:56:57 -04:00
parent 47f36847e1
commit 2b7b8d7174
12 changed files with 262367 additions and 316 deletions

View File

@ -12,7 +12,7 @@ TARGET := pokediamond.us
ROM := $(BUILD_DIR)/$(TARGET).nds
ELF := $(BUILD_DIR)/$(TARGET).elf
LD_SCRIPT := ld_script.txt
LD_SCRIPT := pokediamond.lcf
# Directories containing source files
SRC_DIRS := src
@ -31,17 +31,26 @@ MWCCVERSION := 2.0/base
CROSS := arm-linux-gnueabi-
MWCCARM := tools/mwccarm/$(MWCCVERSION)/mwccarm.exe
MWCCARM := tools/mwccarm/$(MWCCVERSION)/mwccarm.exe
# Argh... due to EABI version shenanigans, we can't use GNU LD to link together
# MWCC built objects and GNU built ones. mwldarm, however, doesn't care, so we
# have to use mwldarm for now.
# TODO: Is there a hack workaround to let us go back to GNU LD? Ideally, the
# only dependency should be MWCCARM.
MWLDARM := tools/mwccarm/$(MWCCVERSION)/mwldarm.exe
MWASMARM := tools/mwccarm/$(MWCCVERSION)/mwasmarm.exe
AS := $(CROSS)as
AS := $(MWASMARM)
CC := $(MWCCARM)
CPP := cpp -P
LD := $(CROSS)ld
LD := $(MWLDARM)
AR := $(CROSS)ar
OBJDUMP := $(CROSS)objdump
OBJCOPY := $(CROSS)objcopy
CFLAGS = -O4,p -proc arm946e -thumb -fp soft -lang c -Cpp_exceptions off
# ./tools/mwccarm/2.0/base/mwasmarm.exe -proc arm5te asm/arm9_thumb.s -o arm9.o
ASFLAGS = -proc arm5te
CFLAGS = -O4,p -proc v5te -thumb -fp soft -lang c -Cpp_exceptions off -interworking
####################### Other Tools #########################
@ -63,13 +72,13 @@ $(BUILD_DIR)/%.o: %.c
$(CC) -c $(CFLAGS) -o $@ $<
$(BUILD_DIR)/%.o: %.s
$(AS) $(ASFLAGS) -MD $(BUILD_DIR)/$*.d -o $@ $<
$(AS) $(ASFLAGS) $< -o $@
$(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT)
$(CPP) $(VERSION_CFLAGS) -MMD -MP -MT $@ -MF $@.d -I include/ -I . -DBUILD_DIR=$(BUILD_DIR) -o $@ $<
$(ELF): $(O_FILES) $(BUILD_DIR)/$(LD_SCRIPT) undefined_syms.txt
$(LD) -T undefined_syms.txt -T $(BUILD_DIR)/$(LD_SCRIPT) -o $(ELF) -Map $(BUILD_DIR)/$(TARGET).map
$(ELF): $(O_FILES) $(BUILD_DIR)/$(LD_SCRIPT)
$(LD) $(BUILD_DIR)/$(LD_SCRIPT) -o $(ELF) $(O_FILES) -nodead
$(ROM): $(ELF)
$(OBJCOPY) -O binary $< $@

256758
asm/arm9_thumb.s Normal file

File diff suppressed because it is too large Load Diff

218
asm/entry.s Normal file
View File

@ -0,0 +1,218 @@
.include "asm/macros.inc"
.include "global.inc"
.text
arm_func_start Main
Main: ; 0x02000800
mov r12, #0x4000000
str r12, [r12, #0x208]
_02000808:
ldrh r0, [r12, #0x6]
cmp r0, #0x0
bne _02000808
bl sub_02000A78
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, #0x4
tst sp, #0x4
subeq sp, sp, #0x4
ldr r1, _0200091C ; =0x00000400
sub r1, r0, r1
mov r0, #0x1f
msr cpsr_fsxc, r0
sub sp, r1, #0x4
mov r0, #0x0
ldr r1, _02000918 ; =0x027E0000
mov r2, #0x4000
bl _0200093C
_02000870:
.byte 0x00, 0x00, 0xA0, 0xE3, 0xA4, 0x10, 0x9F, 0xE5, 0x01, 0x2B, 0xA0, 0xE3, 0x2E, 0x00, 0x00, 0xEB
.byte 0x02, 0x0C, 0xA0, 0xE3, 0x98, 0x10, 0x9F, 0xE5, 0x01, 0x2B, 0xA0, 0xE3, 0x2A, 0x00, 0x00, 0xEB
.byte 0x90, 0x10, 0x9F, 0xE5, 0x14, 0x00, 0x91, 0xE5, 0x2C, 0x00, 0x00, 0xEB, 0x56, 0x00, 0x00, 0xEB
.byte 0x80, 0x00, 0x9F, 0xE5, 0x0C, 0x10, 0x90, 0xE5, 0x10, 0x20, 0x90, 0xE5, 0x01, 0x30, 0xA0, 0xE1
.byte 0x00, 0x00, 0xA0, 0xE3, 0x02, 0x00, 0x51, 0xE1, 0x04, 0x00, 0x81, 0x34, 0xFC, 0xFF, 0xFF, 0x3A
.byte 0x1F, 0x10, 0xC3, 0xE3, 0x9A, 0x0F, 0x07, 0xEE, 0x35, 0x1F, 0x07, 0xEE, 0x3E, 0x1F, 0x07, 0xEE
.byte 0x20, 0x10, 0x81, 0xE2, 0x02, 0x00, 0x51, 0xE1, 0xF9, 0xFF, 0xFF, 0xBA, 0x48, 0x10, 0x9F, 0xE5
.byte 0x00, 0x00, 0x81, 0xE5, 0x2C, 0x10, 0x9F, 0xE5, 0xFF, 0x1D, 0x81, 0xE2, 0x3C, 0x10, 0x81, 0xE2
.byte 0x38, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x81, 0xE5, 0x33, 0xAF, 0x03, 0xEB, 0x98, 0x00, 0x00, 0xEB
.byte 0x63, 0xAF, 0x03, 0xEB, 0x28, 0x10, 0x9F, 0xE5, 0x28, 0xE0, 0x9F, 0xE5, 0x04, 0x00, 0x1D, 0xE3
.byte 0x04, 0xD0, 0x4D, 0x12, 0x11, 0xFF, 0x2F, 0xE1
_02000918: .word 0x027E0000
_0200091C: .word 0x00000400
_02000920:
.byte 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x68, 0x0B, 0x00, 0x02, 0x9C, 0xFF, 0x7F, 0x02
.byte 0x00, 0x80, 0xFF, 0x01, 0x55, 0x0C, 0x00, 0x02, 0x00, 0x00, 0xFF, 0xFF
_0200093C:
add r12, r1, r2
_02000940:
cmp r1, r12
stmltia r1!, {r0}
blt _02000940
bx lr
arm_func_start sub_02000950
sub_02000950: ; 0x02000950
cmp r0, #0x0
beq _020009F8
stmdb sp!, {r4-r7}
ldmdb r0, {r1-r2}
add r2, r0, r2
sub r3, r0, r1, lsr #0x18
bic r1, r1, #0xff000000
sub r1, r0, r1
mov r4, r2
_02000974:
cmp r3, r1
ble _020009D4
ldrb r5, [r3, #-0x1]!
mov r6, #0x8
_02000984:
subs r6, r6, #0x1
blt _02000974
tst r5, #0x80
bne _020009A0
ldrb r0, [r3, #-0x1]!
strb r0, [r2, #-0x1]!
b _020009C8
_020009A0:
ldrb r12, [r3, #-0x1]!
ldrb r7, [r3, #-0x1]!
orr r7, r7, r12, lsl #0x8
bic r7, r7, #0xf000
add r7, r7, #0x2
add r12, r12, #0x20
_020009B8:
ldrb r0, [r2, r7]
strb r0, [r2, #-0x1]!
subs r12, r12, #0x10
bge _020009B8
_020009C8:
cmp r3, r1
mov r5, r5, lsl #0x1
bgt _02000984
_020009D4:
mov r0, #0x0
bic r3, r1, #0x1f
_020009DC:
mcr p15, 0x0, r0, c7, c10, 0x4
mcr p15, 0x0, r3, c7, c5, 0x1
mcr p15, 0x0, r3, c7, c14, 0x1
add r3, r3, #0x20
cmp r3, r4
blt _020009DC
ldmia sp!, {r4-r7}
_020009F8:
bx lr
_020009FC:
.byte 0x6C, 0x00, 0x9F, 0xE5
.byte 0x00, 0x10, 0x90, 0xE5, 0x04, 0x20, 0x90, 0xE5, 0x08, 0x30, 0x90, 0xE5, 0x02, 0x00, 0x51, 0xE1
.byte 0x15, 0x00, 0x00, 0x0A, 0x04, 0x50, 0x91, 0xE4, 0x04, 0x70, 0x91, 0xE4, 0x07, 0x60, 0x85, 0xE0
.byte 0x05, 0x40, 0xA0, 0xE1, 0x06, 0x00, 0x54, 0xE1, 0x04, 0x70, 0x93, 0x44, 0x04, 0x70, 0x84, 0x44
.byte 0xFB, 0xFF, 0xFF, 0x4A, 0x04, 0x70, 0x91, 0xE4, 0x07, 0x60, 0x84, 0xE0, 0x00, 0x70, 0xA0, 0xE3
.byte 0x06, 0x00, 0x54, 0xE1, 0x04, 0x70, 0x84, 0x34, 0xFC, 0xFF, 0xFF, 0x3A, 0x1F, 0x40, 0xC5, 0xE3
.byte 0x9A, 0x7F, 0x07, 0xEE, 0x35, 0x4F, 0x07, 0xEE, 0x3E, 0x4F, 0x07, 0xEE, 0x20, 0x40, 0x84, 0xE2
.byte 0x06, 0x00, 0x54, 0xE1, 0xF9, 0xFF, 0xFF, 0xBA, 0xE7, 0xFF, 0xFF, 0xEA, 0x00, 0x00, 0x00, 0xEA
.byte 0x68, 0x0B, 0x00, 0x02, 0x1E, 0xFF, 0x2F, 0xE1
arm_func_start sub_02000A78
sub_02000A78: ; 0x02000A78
mrc p15, 0x0, r0, c1, c0, 0x0
ldr r1, _02000B30 ; =0x000F9005
bic r0, r0, r1
mcr p15, 0x0, r0, c1, c0, 0x0
mov r0, #0x0
mcr p15, 0x0, r0, c7, c5, 0x0
mcr p15, 0x0, r0, c7, c6, 0x0
mcr p15, 0x0, r0, c7, c10, 0x4
ldr r0, _02000B34 ; =0x04000033
mcr p15, 0x0, r0, c6, c0, 0x0
ldr r0, _02000B38 ; =0x0200002D
mcr p15, 0x0, r0, c6, c1, 0x0
ldr r0, _02000B3C ; =0x027E0021
mcr p15, 0x0, r0, c6, c2, 0x0
ldr r0, _02000B40 ; =0x08000035
mcr p15, 0x0, r0, c6, c3, 0x0
ldr r0, _02000B44 ; =0x027E0000
orr r0, r0, #0x1a
orr r0, r0, #0x1
mcr p15, 0x0, r0, c6, c4, 0x0
ldr r0, _02000B48 ; =0x0100002F
mcr p15, 0x0, r0, c6, c5, 0x0
ldr r0, _02000B4C ; =0xFFFF001D
mcr p15, 0x0, r0, c6, c6, 0x0
ldr r0, _02000B50 ; =0x027FF017
mcr p15, 0x0, r0, c6, c7, 0x0
mov r0, #0x20
mcr p15, 0x0, r0, c9, c1, 0x1
ldr r0, _02000B44 ; =0x027E0000
orr r0, r0, #0xa
mcr p15, 0x0, r0, c9, c1, 0x0
mov r0, #0x42
mcr p15, 0x0, r0, c2, c0, 0x1
mov r0, #0x42
mcr p15, 0x0, r0, c2, c0, 0x0
mov r0, #0x2
mcr p15, 0x0, r0, c3, c0, 0x0
ldr r0, _02000B54 ; =0x05100011
mcr p15, 0x0, r0, c5, c0, 0x3
ldr r0, _02000B58 ; =0x15111011
mcr p15, 0x0, r0, c5, c0, 0x2
mrc p15, 0x0, r0, c1, c0, 0x0
ldr r1, _02000B5C ; =0x0005707D
orr r0, r0, r1
mcr p15, 0x0, r0, c1, c0, 0x0
bx lr
.align 2, 0
_02000B30: .word 0x000F9005
_02000B34: .word 0x04000033
_02000B38: .word 0x0200002D
_02000B3C: .word 0x027E0021
_02000B40: .word 0x08000035
_02000B44: .word 0x027E0000
_02000B48: .word 0x0100002F
_02000B4C: .word 0xFFFF001D
_02000B50: .word 0x027FF017
_02000B54: .word 0x05100011
_02000B58: .word 0x15111011
_02000B5C: .word 0x0005707D
arm_func_start sub_02000B60_dummy
sub_02000B60_dummy:
bx lr
arm_func_start sub_02000B64_dummy
sub_02000B64_dummy:
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]"

View File

@ -2,7 +2,6 @@
.align 2, 0
.global \name
.arm
.type \name, function
.endm
.macro arm_func_end name
@ -13,15 +12,11 @@
.align 2, 0
.global \name
.thumb
.thumb_func
.type \name, function
.endm
.macro non_word_aligned_thumb_func_start name
.global \name
.thumb
.thumb_func
.type \name, function
.endm
.macro thumb_func_end name

View File

@ -1,288 +1,172 @@
.include "asm/macros.inc"
.include "global.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 sub_2000A78
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 sub_200093C
mov r0, #0
ldr r1, _02000920 @ =0x05000000
mov r2, #1024
bl sub_200093C
mov r0, #512
ldr r1, _02000924 @ =0x07000000
mov r2, #1024
bl sub_200093C
ldr r1, _02000928 @ = 0x02000B68
ldr r0, [r1, #20]
bl sub_2000950
bl sub_20009FC
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 sub_200093C
sub_200093C:
add ip, r1, r2
_02000940:
cmp r1, ip
stmlt r1!, {r0}
blt _02000940
bx lr
arm_func_end sub_200093C
arm_func_start sub_2000950
sub_2000950:
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 sub_2000950
arm_func_start sub_20009FC
sub_20009FC:
ldr r0, _02000A70 @ =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
_02000A70: .4byte 0x02000B68
_2000A74:
bx lr
arm_func_end sub_20009FC
arm_func_start sub_2000A78
sub_2000A78: @ 0x02000A78
mrc p15, #0, r0, c1, c0, #0
ldr r1, _02000B30 @ =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, _02000B34 @ =0x04000033
mcr p15, #0, r0, c6, c0, #0
ldr r0, _02000B38 @ =0x0200002D
mcr p15, #0, r0, c6, c1, #0
ldr r0, _02000B3C @ =0x027E0021
mcr p15, #0, r0, c6, c2, #0
ldr r0, _02000B40 @ =0x08000035
mcr p15, #0, r0, c6, c3, #0
ldr r0, _02000B44 @ =0x027E0000
orr r0, r0, #0x1a
orr r0, r0, #1
mcr p15, #0, r0, c6, c4, #0
ldr r0, _02000B48 @ =0x0100002F
mcr p15, #0, r0, c6, c5, #0
ldr r0, _02000B4C @ =0xFFFF001D
mcr p15, #0, r0, c6, c6, #0
ldr r0, _02000B50 @ =0x027FF017
mcr p15, #0, r0, c6, c7, #0
mov r0, #0x20
mcr p15, #0, r0, c9, c1, #1
ldr r0, _02000B44 @ =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, _02000B54 @ =0x05100011
mcr p15, #0, r0, c5, c0, #3
ldr r0, _02000B58 @ =0x15111011
mcr p15, #0, r0, c5, c0, #2
mrc p15, #0, r0, c1, c0, #0
ldr r1, _02000B5C @ =0x0005707D
orr r0, r0, r1
mcr p15, #0, r0, c1, c0, #0
bx lr
.align 2, 0
_02000B30: .4byte 0x000F9005
_02000B34: .4byte 0x04000033
_02000B38: .4byte 0x0200002D
_02000B3C: .4byte 0x027E0021
_02000B40: .4byte 0x08000035
_02000B44: .4byte 0x027E0000
_02000B48: .4byte 0x0100002F
_02000B4C: .4byte 0xFFFF001D
_02000B50: .4byte 0x027FF017
_02000B54: .4byte 0x05100011
_02000B58: .4byte 0x15111011
_02000B5C: .4byte 0x0005707D
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
thumb_func_start NitroMain
NitroMain: ; 0x02000C54
push {r3-r7, lr}
bl sub_02016014
bl sub_02016148
bl sub_020163BC
mov r0, #0x0
bl sub_02016438
ldr r0, _02000DD0 ; =0x02106FA0
mov r1, #0x0
blx sub_020D50D8
bl sub_02022294
bl sub_0201259C
bl sub_02000DF4
bl sub_02002C14
mov r0, #0x0
mov r1, #0x3
bl sub_02002C50
mov r0, #0x1
mov r1, #0x3
bl sub_02002C50
mov r0, #0x3
add r1, r0, #0x0
bl sub_02002C50
mov r1, #0x0
ldr r0, _02000DD4 ; =0x02106FA0
mvn r1, r1
str r1, [r0, #0x18]
bl sub_0202254C
ldr r1, _02000DD4 ; =0x02106FA0
str r0, [r1, #0x20]
bl sub_02029EF8
add r4, r0, #0x0
ldr r0, _02000DD4 ; =0x02106FA0
ldr r0, [r0, #0x20]
bl sub_02023900
add r1, r0, #0x0
add r0, r4, #0x0
bl sub_02003B98
bl sub_02020AFC
mov r0, #0x3
bl sub_020337E8
cmp r0, #0x3
bne _02000CD4
mov r0, #0x3
mov r1, #0x0
bl sub_02034188
_02000CD4:
ldr r0, _02000DD4 ; =0x02106FA0
ldr r0, [r0, #0x20]
bl sub_020227FC
cmp r0, #0x0
bne _02000CE8
mov r0, #0x0
bl sub_02089D90
b _02000D1A
_02000CE8:
ldr r0, _02000DD8 ; =0x027FFC20
ldr r0, [r0, #0x0]
cmp r0, #0x0
beq _02000CF6
cmp r0, #0x1
beq _02000D06
b _02000D16
_02000CF6:
ldr r0, _02000DD4 ; =0x02106FA0
mov r1, #0x0
str r1, [r0, #0x1c]
ldr r0, _02000DDC ; =0x0000003F
ldr r1, _02000DE0 ; =0x021DBE18
bl sub_02000E7C
b _02000D1A
_02000D06:
ldr r0, _02000DD4 ; =0x02106FA0
mov r1, #0x1
str r1, [r0, #0x1c]
ldr r0, _02000DE4 ; =0x00000034
ldr r1, _02000DE8 ; =0x021D76C8
bl sub_02000E7C
b _02000D1A
_02000D16:
bl sub_02020C2C
_02000D1A:
ldr r0, _02000DEC ; =0x021C48B8
mov r1, #0x1
str r1, [r0, #0x6c]
mov r1, #0x0
str r1, [r0, #0x30]
bl sub_02000FA4
bl sub_0200A2AC
bl sub_02015E30
mov r1, #0x0
ldr r0, _02000DD4 ; =0x02106FA0
mov r7, #0xc3
ldr r6, _02000DF0 ; =0x021C4918
ldr r4, _02000DEC ; =0x021C48B8
str r1, [r0, #0x4]
add r5, r1, #0x0
lsl r7, r7, #0x2
_02000D40:
bl sub_02000EE8
bl sub_02000FE8
bl sub_02016464
mov r0, #0xc3
ldr r1, [r4, #0x38]
lsl r0, r0, #0x2
and r0, r1
cmp r0, r7
bne _02000D64
ldrb r0, [r6, #0x8]
cmp r0, #0x0
bne _02000D64
mov r0, #0x0
bl sub_02000F18
_02000D64:
bl sub_0202FB80
cmp r0, #0x0
beq _02000D90
bl sub_02000E0C
ldr r0, [r4, #0x18]
bl sub_0201B5CC
ldr r0, [r4, #0x24]
bl sub_0201B5CC
ldr r0, [r4, #0x30]
cmp r0, #0x0
bne _02000D90
mov r0, #0x1
add r1, r0, #0x0
blx sub_020C9C0C
ldr r0, [r4, #0x2c]
add r0, r0, #0x1
str r0, [r4, #0x2c]
_02000D90:
bl sub_020125D4
bl sub_02015E60
bl sub_020222C4
ldr r0, [r4, #0x24]
bl sub_0201B5CC
mov r0, #0x1
add r1, r0, #0x0
blx sub_020C9C0C
ldr r0, [r4, #0x2c]
add r0, r0, #0x1
str r0, [r4, #0x2c]
str r5, [r4, #0x30]
bl sub_0200A318
bl sub_0200E2D8
ldr r1, [r4, #0x0]
cmp r1, #0x0
beq _02000DC4
ldr r0, [r4, #0x4]
blx r1
_02000DC4:
bl sub_02003C10
ldr r0, [r4, #0x20]
bl sub_0201B5CC
b _02000D40
.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]"
_02000DD0: .word 0x02106FA0
_02000DD4: .word 0x02106FA0
_02000DD8: .word 0x027FFC20
_02000DDC: .word 0x0000003F
_02000DE0: .word 0x021DBE18
_02000DE4: .word 0x00000034
_02000DE8: .word 0x021D76C8
_02000DEC: .word 0x021C48B8
_02000DF0: .word 0x021C4918

View File

@ -1,13 +1,13 @@
/* rom.s TODO: Disassemble */
/* rom2.s TODO: Disassemble */
.section .text
.incbin "baserom.nds", 0x4E0C, 0xEB7C0
.incbin "baserom.nds", 0x8EC14, 0x619B8
.global sub_20EC5CC
sub_20EC5CC:
.global sub_020EC5CC
sub_020EC5CC:
.incbin "baserom.nds", 0xF05CC, 0xC8
.global sub_20EC694
sub_20EC694:
.global sub_020EC694
sub_020EC694:
.incbin "baserom.nds", 0xF0694, 0x1b090

View File

@ -29,13 +29,13 @@ RomVersion:
.space 1
ARM9ROMOffset:
.word _arm9SegmentRomStart
.word 0x00004000
ARM9EntryAddress:
.word Entry
.word 0x02000800
ARM9RAMAddress:
.word _arm9SegmentStart
.word 0x02000000
ARM9CodeSize:
.word _arm9SegmentSize
.word 0x00107724
ARM7ROMOffset:
.word 0x0030D000
ARM7EntryAddress:
@ -110,6 +110,4 @@ HeaderCRC:
.short 0xCA37
/* reserved */
.global __startup
__startup:
.space 160 /* hack so it builds */

2207
global.inc Normal file

File diff suppressed because it is too large Load Diff

View File

@ -24,9 +24,10 @@ 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/arm9_thumb.o(.text);
build/asm/rom2.o(.text);
}
END_SEG(arm9)

7
main.c
View File

@ -1,7 +0,0 @@
// Just includes for now so CLion sees the files
#include "structs/structs.h"
#include "nitro/nitro.h"
void main() {
int x = NULL;
}

26
pokediamond.lcf Normal file
View File

@ -0,0 +1,26 @@
/* TEST */
MEMORY {
header (RWX) : ORIGIN=0, LENGTH=0
arm9 (RWX) : ORIGIN=0x2000000, LENGTH=0
rom3 (RWX) : ORIGIN=0, LENGTH=0
}
SECTIONS {
#include "undefined_syms.txt"
__startup = 0;
.header: {
rom_header.o (.text)
} > header
.arm9 : AT (0x4000) {
secure.o (.text)
entry.o (.text)
main.o (.text)
sub_02000DF4.o (.text)
arm9_thumb.o (.text)
rom2.o (.text)
} > arm9
.rom3 : AT (0x10B724) {
rom3.o (.text)
} > rom3
}

File diff suppressed because it is too large Load Diff