summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorProjectRevoTPP <projectrevotpp@hotmail.com>2020-04-12 16:15:06 -0400
committerProjectRevoTPP <projectrevotpp@hotmail.com>2020-04-12 16:15:06 -0400
commit41fa994a86914812d866f4822c0f55a6ed073c39 (patch)
treee4330fbc530a821ab37e7aba10884213b5b2deaf
parent7e14113e47c5c8e2f218c69e11ec947b6a02f66e (diff)
up to date repo
-rw-r--r--.gitignore9
-rw-r--r--Makefile18
-rw-r--r--asm/macros.inc1
-rw-r--r--asm/macros/function.inc29
-rw-r--r--asm/main.s172
-rw-r--r--asm/rom.s2
-rw-r--r--asm/rom2.s5
-rw-r--r--asm/secure.s5
-rw-r--r--ld_script.txt16
-rw-r--r--pokediamond.lcf16
-rw-r--r--pokediamond.us.sha11
-rw-r--r--src/sub_02000DF4.c24
-rw-r--r--undefined_syms.txt1
13 files changed, 273 insertions, 26 deletions
diff --git a/.gitignore b/.gitignore
index 0b00c4b3..f35ecba0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,12 @@
+# Object files
+*.nds
+
+# Compilers
+tools/mwccarm/**
+
+# Build folder
+build/**
+
# CLion folders
.idea/
cmake-build-debug/
diff --git a/Makefile b/Makefile
index 03388c21..738cc646 100644
--- a/Makefile
+++ b/Makefile
@@ -12,7 +12,7 @@ TARGET := pokediamond.us
ROM := $(BUILD_DIR)/$(TARGET).nds
ELF := $(BUILD_DIR)/$(TARGET).elf
-LD_SCRIPT := pokediamond.lcf
+LD_SCRIPT := ld_script.txt
# Directories containing source files
SRC_DIRS := src
@@ -31,20 +31,17 @@ MWCCVERSION := 2.0/base
CROSS := arm-linux-gnueabi-
-# TODO: Replace mwldarm with gnu ld
-
-MWLDARM := ./tools/mwccarm/$(MWCCVERSION)/mwldarm.exe
-MWCCARM := ./tools/mwccarm/$(MWCCVERSION)/mwccarm.exe
+MWCCARM := tools/mwccarm/2.0/base/mwccarm.exe
AS := $(CROSS)as
CC := $(MWCCARM)
CPP := cpp -P
-LD := $(MWLDARM)
+LD := $(CROSS)ld
AR := $(CROSS)ar
OBJDUMP := $(CROSS)objdump
OBJCOPY := $(CROSS)objcopy
-CFLAGS = -c -O4,p -proc arm946e -thumb -fp soft -lang c -Cpp_exceptions off
+CFLAGS = -O4,p -proc arm946e -thumb -fp soft -lang c -Cpp_exceptions off
####################### Other Tools #########################
@@ -62,11 +59,14 @@ clean:
ALL_DIRS := $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) $(ASM_DIRS))
+$(BUILD_DIR)/%.o: %.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
$(BUILD_DIR)/%.o: %.s
$(AS) $(ASFLAGS) -MD $(BUILD_DIR)/$*.d -o $@ $<
-$(ELF): $(O_FILES) $(LD_SCRIPT)
- $(MWLDARM) -LC:/pokediamond/$(BUILD_DIR)/asm/ $(O_FILES) $(LD_SCRIPT) -o $@ -nodead
+$(ELF): $(O_FILES) $(LD_SCRIPT) undefined_syms.txt
+ $(LD) -T undefined_syms.txt -T $(LD_SCRIPT) -o $(ELF)
$(ROM): $(ELF)
$(OBJCOPY) -O binary $< $@
diff --git a/asm/macros.inc b/asm/macros.inc
new file mode 100644
index 00000000..156b2b09
--- /dev/null
+++ b/asm/macros.inc
@@ -0,0 +1 @@
+ .include "asm/macros/function.inc"
diff --git a/asm/macros/function.inc b/asm/macros/function.inc
new file mode 100644
index 00000000..67fb373a
--- /dev/null
+++ b/asm/macros/function.inc
@@ -0,0 +1,29 @@
+ .macro arm_func_start name
+ .align 2, 0
+ .global \name
+ .arm
+ .type \name, function
+ .endm
+
+ .macro arm_func_end name
+ .size \name, .-\name
+ .endm
+
+ .macro thumb_func_start name
+ .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
+ .size \name, .-\name
+ .endm
diff --git a/asm/main.s b/asm/main.s
new file mode 100644
index 00000000..80f388cd
--- /dev/null
+++ b/asm/main.s
@@ -0,0 +1,172 @@
+ .include "asm/macros.inc"
+
+ .text
+
+ arm_func_start Main
+Main: @ 0x02000800
+ mov ip, #0x4000000
+ str ip, [ip, #0x208]
+_02000808:
+ ldrh r0, [ip, #6]
+ cmp r0, #0
+ 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, #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 _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: .4byte 0x027E0000
+_0200091C: .4byte 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 ip, r1, r2
+_02000940:
+ cmp r1, ip
+ stmlt r1!, {r0}
+ blt _02000940
+ bx lr
+_02000950:
+ .byte 0x00, 0x00, 0x50, 0xE3, 0x27, 0x00, 0x00, 0x0A, 0xF0, 0x00, 0x2D, 0xE9, 0x06, 0x00, 0x10, 0xE9
+ .byte 0x02, 0x20, 0x80, 0xE0, 0x21, 0x3C, 0x40, 0xE0, 0xFF, 0x14, 0xC1, 0xE3, 0x01, 0x10, 0x40, 0xE0
+ .byte 0x02, 0x40, 0xA0, 0xE1, 0x01, 0x00, 0x53, 0xE1, 0x15, 0x00, 0x00, 0xDA, 0x01, 0x50, 0x73, 0xE5
+ .byte 0x08, 0x60, 0xA0, 0xE3, 0x01, 0x60, 0x56, 0xE2, 0xF9, 0xFF, 0xFF, 0xBA, 0x80, 0x00, 0x15, 0xE3
+ .byte 0x02, 0x00, 0x00, 0x1A, 0x01, 0x00, 0x73, 0xE5, 0x01, 0x00, 0x62, 0xE5, 0x09, 0x00, 0x00, 0xEA
+ .byte 0x01, 0xC0, 0x73, 0xE5, 0x01, 0x70, 0x73, 0xE5, 0x0C, 0x74, 0x87, 0xE1, 0x0F, 0x7A, 0xC7, 0xE3
+ .byte 0x02, 0x70, 0x87, 0xE2, 0x20, 0xC0, 0x8C, 0xE2, 0x07, 0x00, 0xD2, 0xE7, 0x01, 0x00, 0x62, 0xE5
+ .byte 0x10, 0xC0, 0x5C, 0xE2, 0xFB, 0xFF, 0xFF, 0xAA, 0x01, 0x00, 0x53, 0xE1, 0x85, 0x50, 0xA0, 0xE1
+ .byte 0xEB, 0xFF, 0xFF, 0xCA, 0x00, 0x00, 0xA0, 0xE3, 0x1F, 0x30, 0xC1, 0xE3, 0x9A, 0x0F, 0x07, 0xEE
+ .byte 0x35, 0x3F, 0x07, 0xEE, 0x3E, 0x3F, 0x07, 0xEE, 0x20, 0x30, 0x83, 0xE2, 0x04, 0x00, 0x53, 0xE1
+ .byte 0xF9, 0xFF, 0xFF, 0xBA, 0xF0, 0x00, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 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, #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
+ .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/rom.s b/asm/rom.s
index 618c24a6..0025dec1 100644
--- a/asm/rom.s
+++ b/asm/rom.s
@@ -2,4 +2,4 @@
.section .text
-.incbin "baserom.nds", 0x200, 0x3FFFE00
+.incbin "baserom.nds", 0x4C54, 0x1A0
diff --git a/asm/rom2.s b/asm/rom2.s
new file mode 100644
index 00000000..81eaddea
--- /dev/null
+++ b/asm/rom2.s
@@ -0,0 +1,5 @@
+/* rom.s TODO: Disassemble */
+
+.section .text
+
+.incbin "baserom.nds", 0x4E0C, 0x3FFB1F4
diff --git a/asm/secure.s b/asm/secure.s
new file mode 100644
index 00000000..7f3a678c
--- /dev/null
+++ b/asm/secure.s
@@ -0,0 +1,5 @@
+/* secure.s TODO: Disassemble */
+
+.section .text
+
+.incbin "baserom.nds", 0x4000, 0x800
diff --git a/ld_script.txt b/ld_script.txt
new file mode 100644
index 00000000..e904d75e
--- /dev/null
+++ b/ld_script.txt
@@ -0,0 +1,16 @@
+SECTIONS {
+ header :
+ {
+ build/asm/rom_header.o(.text);
+ }
+
+ . = 0x4000;
+ rom_code :
+ {
+ build/asm/secure.o(.text);
+ build/asm/main.o(.text);
+ build/asm/rom.o(.text);
+ build/src/sub_02000DF4.o(.text);
+ build/asm/rom2.o(.text);
+ }
+}
diff --git a/pokediamond.lcf b/pokediamond.lcf
deleted file mode 100644
index e398b286..00000000
--- a/pokediamond.lcf
+++ /dev/null
@@ -1,16 +0,0 @@
-/* Linker Script for Pokemon Diamond */
-
-MEMORY {
- header (RWX) : ORIGIN=0, LENGTH=0
- rom_main (RWX) : ORIGIN=512, LENGTH=0
-}
-
-SECTIONS {
- .header:{
- rom_header.o (.text)
- } > header
-
- .rom_main:{
- rom.o (.text)
- } > rom_main
-}
diff --git a/pokediamond.us.sha1 b/pokediamond.us.sha1
new file mode 100644
index 00000000..e4d8454c
--- /dev/null
+++ b/pokediamond.us.sha1
@@ -0,0 +1 @@
+a46233d8b79a69ea87aa295a0efad5237d02841e build/pokediamond.us.nds
diff --git a/src/sub_02000DF4.c b/src/sub_02000DF4.c
new file mode 100644
index 00000000..a0c58183
--- /dev/null
+++ b/src/sub_02000DF4.c
@@ -0,0 +1,24 @@
+typedef unsigned char u8;
+typedef unsigned short u16;
+typedef unsigned long u32;
+typedef signed char s8;
+typedef signed short s16;
+typedef signed long s32;
+
+struct Unk2106FA0 {
+ u8 filler0[0x8];
+ s32 unk8;
+ s32 unkC;
+ s32 unk10;
+ s32 unk14;
+};
+
+extern struct Unk2106FA0 gUnknown2106FA0;
+
+void sub_02000DF4(void)
+{
+ gUnknown2106FA0.unk8 = -1;
+ gUnknown2106FA0.unkC = 0;
+ gUnknown2106FA0.unk10 = -1;
+ gUnknown2106FA0.unk14 = 0;
+}
diff --git a/undefined_syms.txt b/undefined_syms.txt
new file mode 100644
index 00000000..3fff5366
--- /dev/null
+++ b/undefined_syms.txt
@@ -0,0 +1 @@
+gUnknown2106FA0 = 0x2106FA0;