mirror of
https://github.com/pret/pokediamond.git
synced 2025-03-01 10:26:00 +00:00
disassemble the thumb portion of arm9.
This commit is contained in:
parent
47f36847e1
commit
2b7b8d7174
25
Makefile
25
Makefile
@ -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
256758
asm/arm9_thumb.s
Normal file
File diff suppressed because it is too large
Load Diff
218
asm/entry.s
Normal file
218
asm/entry.s
Normal 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]"
|
@ -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
|
||||
|
450
asm/main.s
450
asm/main.s
@ -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
|
||||
|
12
asm/rom2.s
12
asm/rom2.s
@ -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
|
||||
|
@ -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
2207
global.inc
Normal file
File diff suppressed because it is too large
Load Diff
@ -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
7
main.c
@ -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
26
pokediamond.lcf
Normal 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
|
||||
}
|
2962
undefined_syms.txt
2962
undefined_syms.txt
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user