summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/calcrom/.gitignore (renamed from .travis/calcrom/.gitignore)0
-rw-r--r--.github/calcrom/Makefile (renamed from .travis/calcrom/Makefile)0
-rw-r--r--.github/calcrom/calcrom.cpp (renamed from .travis/calcrom/calcrom.cpp)0
-rw-r--r--[-rwxr-xr-x].github/calcrom/webhook.sh (renamed from .travis/calcrom/webhook.sh)9
-rw-r--r--.github/workflows/build.yml52
-rw-r--r--.travis.yml41
-rw-r--r--CMakeLists.txt4
-rw-r--r--INSTALL.md45
-rw-r--r--Makefile6
-rw-r--r--README.md3
-rw-r--r--arm7/Makefile7
-rw-r--r--arm9/Makefile19
-rw-r--r--arm9/arm9.lsf20
-rw-r--r--arm9/asm/CTRDG.s670
-rw-r--r--arm9/asm/CTRDG_backup.s306
-rw-r--r--arm9/asm/CTRDG_flash_AT29LV512_asm.s (renamed from arm9/asm/CTRDG_flash_AT29LV512.s)195
-rw-r--r--arm9/asm/CTRDG_flash_LE26FV10N1TS-10.s29
-rw-r--r--arm9/asm/CTRDG_flash_LE39FW512.s113
-rw-r--r--arm9/asm/CTRDG_flash_MX29L010.s107
-rw-r--r--arm9/asm/CTRDG_flash_MX29L512.s39
-rw-r--r--arm9/asm/CTRDG_flash_common.s90
-rw-r--r--arm9/asm/CTRDG_proc.s14
-rw-r--r--arm9/asm/PXI_fifo.s269
-rw-r--r--arm9/asm/options.s239
-rw-r--r--arm9/asm/scrcmd.s2
-rw-r--r--arm9/asm/scrcmd_7.s6
-rw-r--r--arm9/asm/unk_02001B80.s14
-rw-r--r--arm9/asm/unk_020377F0.s2
-rw-r--r--arm9/asm/unk_02038C78.s36
-rw-r--r--arm9/asm/unk_020476CC.s10
-rw-r--r--arm9/asm/unk_02048904.s4
-rw-r--r--arm9/asm/unk_02054590.s8
-rw-r--r--arm9/asm/unk_0205C598.s2
-rw-r--r--arm9/asm/unk_020625EC.s6
-rw-r--r--arm9/asm/unk_020653EC.s6
-rw-r--r--arm9/asm/unk_0206C700.s8
-rw-r--r--arm9/asm/unk_0206F3FC.s2
-rw-r--r--arm9/asm/unk_02072548.s4
-rw-r--r--arm9/asm/unk_020772F0.s2
-rw-r--r--arm9/asm/unk_02079C70.s4
-rw-r--r--arm9/asm/unk_02085338.s2
-rw-r--r--arm9/asm/unk_020859C0.s2
-rw-r--r--arm9/asm/unk_02086084.s4
-rw-r--r--arm9/asm/unk_02087A6C.s2
-rw-r--r--arm9/asm/unk_02087D00.s4
-rw-r--r--arm9/asm/unk_02089498.s4
-rw-r--r--arm9/global.inc59
-rw-r--r--arm9/lib/include/CARD_common.h2
-rw-r--r--arm9/lib/include/CTRDG_backup.h45
-rw-r--r--arm9/lib/include/CTRDG_common.h137
-rw-r--r--arm9/lib/include/CTRDG_flash.h27
-rw-r--r--arm9/lib/include/CTRDG_flash_AT29LV512.h10
-rw-r--r--arm9/lib/include/CTRDG_task.h25
-rw-r--r--arm9/lib/include/MI_dma.h3
-rw-r--r--arm9/lib/include/MI_exMemory.h58
-rw-r--r--arm9/lib/include/MI_memory.h5
-rw-r--r--arm9/lib/include/OS_interrupt.h8
-rw-r--r--arm9/lib/include/OS_protectionRegion.h4
-rw-r--r--arm9/lib/include/OS_spinLock.h6
-rw-r--r--arm9/lib/include/PXI_fifo.h20
-rw-r--r--arm9/lib/include/consts.h16
-rw-r--r--arm9/lib/include/mmap.h3
-rw-r--r--arm9/lib/include/registers.h1
-rw-r--r--arm9/lib/include/syscall.h13
-rw-r--r--arm9/lib/src/CARD_common.c2
-rw-r--r--arm9/lib/src/CARD_pullOut.c3
-rw-r--r--arm9/lib/src/CARD_request.c2
-rw-r--r--arm9/lib/src/CARD_spi.c1
-rw-r--r--arm9/lib/src/CTRDG_backup.c94
-rw-r--r--arm9/lib/src/CTRDG_common.c349
-rw-r--r--arm9/lib/src/CTRDG_flash_AT29LV512.c143
-rw-r--r--arm9/lib/src/OS_reset.c5
-rw-r--r--arm9/lib/src/PXI_fifo.c185
-rw-r--r--arm9/lib/src/PXI_init.c3
-rw-r--r--arm9/lib/src/SND_command.c17
-rw-r--r--arm9/modules/05/asm/mod05_021E1374.s2
-rw-r--r--arm9/modules/05/asm/mod05_021E2B80.s62
-rw-r--r--arm9/modules/05/asm/mod05_021E7504.s316
-rw-r--r--arm9/modules/05/asm/mod05_021E779C.s621
-rw-r--r--arm9/modules/05/asm/mod05_021E7C00.s708
-rw-r--r--arm9/modules/05/asm/mod05_021E80F8.s303
-rw-r--r--arm9/modules/05/asm/mod05_021E8310.s409
-rw-r--r--arm9/modules/05/asm/module_05.s2607
-rw-r--r--arm9/modules/05/include/mod05_021E72FC.h23
-rw-r--r--arm9/modules/05/src/mod05_021E72FC.c160
-rw-r--r--arm9/modules/06/asm/module_06.s20
-rw-r--r--arm9/modules/11/asm/module_11_thumb2.s14
-rw-r--r--arm9/modules/12/asm/module_12.s16
-rw-r--r--arm9/modules/14/asm/module_14.s4
-rw-r--r--arm9/modules/17/asm/module_17.s10
-rw-r--r--arm9/modules/18/asm/module_18.s30
-rw-r--r--arm9/modules/21/asm/module_21.s733
-rw-r--r--arm9/modules/21/include/mod21_02254854.h36
-rw-r--r--arm9/modules/21/include/mod21_02254A6C.h38
-rw-r--r--arm9/modules/21/src/mod21_02254854.c199
-rw-r--r--arm9/modules/21/src/mod21_02254A6C.c187
-rw-r--r--arm9/modules/21/src/module_21_sinit.c13
-rw-r--r--arm9/modules/52/asm/module_52.s2
-rw-r--r--arm9/modules/53/asm/module_53.s2
-rw-r--r--arm9/modules/54/asm/module_54.s8
-rw-r--r--arm9/modules/55/asm/module_55.s8
-rw-r--r--arm9/modules/56/asm/module_56.s28
-rw-r--r--arm9/modules/58/asm/module_58.s4
-rw-r--r--arm9/modules/59/asm/mod59_021D74E0_asm.s (renamed from arm9/modules/59/asm/module_59.s)729
-rw-r--r--arm9/modules/59/asm/mod59_021D9868.s666
-rw-r--r--arm9/modules/59/include/mod59_021D74E0.h32
-rw-r--r--arm9/modules/59/src/mod59_021D74E0_src.c29
-rw-r--r--arm9/modules/60/asm/module_60.s28
-rw-r--r--arm9/modules/61/asm/module_61.s6
-rw-r--r--arm9/modules/64/asm/module_64.s6
-rw-r--r--arm9/modules/65/asm/module_65.s6
-rw-r--r--arm9/modules/71/asm/module_71.s6
-rw-r--r--arm9/modules/73/asm/module_73.s4
-rw-r--r--arm9/modules/75/asm/module_75.s6
-rw-r--r--arm9/modules/76/asm/module_76.s6
-rw-r--r--arm9/modules/77/asm/module_77.s8
-rw-r--r--arm9/modules/80/asm/module_80.s22
-rw-r--r--arm9/modules/81/asm/module_81.s4
-rw-r--r--arm9/modules/82/asm/module_82.s4
-rw-r--r--arm9/modules/83/asm/module_83.s8
-rw-r--r--arm9/src/options.c110
-rw-r--r--arm9/src/overlay_manager.c (renamed from arm9/src/unk_02006234.c)9
-rw-r--r--arm9/src/sound.c2
-rw-r--r--arm9/src/unk_0200CA44.c20
-rw-r--r--arm9/src/unk_0202C144.c30
-rw-r--r--contrib/docker/Dockerfile.ubuntu13
-rwxr-xr-xcontrib/docker/build_docker.sh30
-rw-r--r--files/poketool/icongra/poke_icon/.gitignore4
-rw-r--r--files/poketool/icongra/poke_icon/narc_0013.NCGRbin1072 -> 0 bytes
-rw-r--r--files/poketool/icongra/poke_icon/narc_0013.pngbin0 -> 462 bytes
-rw-r--r--files/poketool/icongra/poke_icon/narc_0014.NCGRbin1072 -> 0 bytes
-rw-r--r--files/poketool/icongra/poke_icon/narc_0014.pngbin0 -> 344 bytes
-rw-r--r--files/poketool/icongra/poke_icon/narc_0015.NCGRbin1072 -> 0 bytes
-rw-r--r--files/poketool/icongra/poke_icon/narc_0015.pngbin0 -> 371 bytes
-rw-r--r--files/poketool/icongra/poke_icon/narc_0016.NCGRbin1072 -> 0 bytes
-rw-r--r--files/poketool/icongra/poke_icon/narc_0016.pngbin0 -> 397 bytes
-rw-r--r--files/poketool/pokegra/pokegra/.gitignore24
-rw-r--r--files/poketool/pokegra/pokegra/narc_0036.NCGRbin6448 -> 0 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0036.pngbin0 -> 1031 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0036.png.key1
-rw-r--r--files/poketool/pokegra/pokegra/narc_0037.NCGRbin6448 -> 0 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0037.pngbin0 -> 1031 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0037.png.key1
-rw-r--r--files/poketool/pokegra/pokegra/narc_0038.NCGRbin6448 -> 0 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0038.pngbin0 -> 2048 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0038.png.key1
-rw-r--r--files/poketool/pokegra/pokegra/narc_0039.NCGRbin6448 -> 0 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0039.pngbin0 -> 2048 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0039.png.key1
-rw-r--r--files/poketool/pokegra/pokegra/narc_0040.NCLRbin72 -> 0 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0040.pal19
-rw-r--r--files/poketool/pokegra/pokegra/narc_0041.NCLRbin72 -> 0 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0041.pal19
-rw-r--r--files/poketool/pokegra/pokegra/narc_0042.NCGRbin6448 -> 0 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0042.pngbin0 -> 734 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0042.png.key1
-rw-r--r--files/poketool/pokegra/pokegra/narc_0043.NCGRbin6448 -> 0 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0043.pngbin0 -> 734 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0043.png.key1
-rw-r--r--files/poketool/pokegra/pokegra/narc_0044.NCGRbin6448 -> 0 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0044.pngbin0 -> 910 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0044.png.key1
-rw-r--r--files/poketool/pokegra/pokegra/narc_0045.NCGRbin6448 -> 0 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0045.pngbin0 -> 910 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0045.png.key1
-rw-r--r--files/poketool/pokegra/pokegra/narc_0046.NCLRbin72 -> 0 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0046.pal19
-rw-r--r--files/poketool/pokegra/pokegra/narc_0047.NCLRbin72 -> 0 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0047.pal19
-rw-r--r--files/poketool/pokegra/pokegra/narc_0048.NCGRbin6448 -> 0 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0048.pngbin0 -> 982 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0048.png.key1
-rw-r--r--files/poketool/pokegra/pokegra/narc_0049.NCGRbin6448 -> 0 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0049.pngbin0 -> 982 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0049.png.key1
-rw-r--r--files/poketool/pokegra/pokegra/narc_0050.NCGRbin6448 -> 0 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0050.pngbin0 -> 1531 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0050.png.key1
-rw-r--r--files/poketool/pokegra/pokegra/narc_0051.NCGRbin6448 -> 0 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0051.pngbin0 -> 1531 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0051.png.key1
-rw-r--r--files/poketool/pokegra/pokegra/narc_0052.NCLRbin72 -> 0 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0052.pal19
-rw-r--r--files/poketool/pokegra/pokegra/narc_0053.NCLRbin72 -> 0 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0053.pal19
-rw-r--r--files/poketool/pokegra/pokegra/narc_0054.NCGRbin6448 -> 0 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0054.pngbin0 -> 1022 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0054.png.key1
-rw-r--r--files/poketool/pokegra/pokegra/narc_0055.NCGRbin6448 -> 0 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0055.pngbin0 -> 1022 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0055.png.key1
-rw-r--r--files/poketool/pokegra/pokegra/narc_0056.NCGRbin6448 -> 0 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0056.pngbin0 -> 1988 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0056.png.key1
-rw-r--r--files/poketool/pokegra/pokegra/narc_0057.NCGRbin6448 -> 0 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0057.pngbin0 -> 1988 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0057.png.key1
-rw-r--r--files/poketool/pokegra/pokegra/narc_0058.NCLRbin72 -> 0 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0058.pal19
-rw-r--r--files/poketool/pokegra/pokegra/narc_0059.NCLRbin72 -> 0 bytes
-rw-r--r--files/poketool/pokegra/pokegra/narc_0059.pal19
-rw-r--r--files/poketool/trgra/trfgra/narc_0000.pngbin760 -> 773 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0002.pngbin817 -> 830 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0004.pngbin662 -> 675 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0006.pngbin728 -> 741 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0008.pngbin677 -> 690 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0010.pngbin621 -> 634 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0012.pngbin922 -> 935 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0014.pngbin790 -> 803 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0016.pngbin869 -> 882 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0018.pngbin1120 -> 1133 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0020.pngbin776 -> 789 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0022.pngbin1147 -> 1160 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0024.pngbin1021 -> 1034 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0026.pngbin1062 -> 1075 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0028.pngbin1015 -> 1028 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0030.pngbin953 -> 966 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0032.pngbin866 -> 879 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0034.pngbin760 -> 773 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0036.pngbin848 -> 861 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0038.pngbin754 -> 767 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0040.pngbin842 -> 855 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0042.pngbin881 -> 894 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0044.pngbin641 -> 654 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0046.pngbin1063 -> 1076 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0048.pngbin723 -> 736 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0050.pngbin752 -> 765 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0052.pngbin802 -> 815 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0054.pngbin818 -> 831 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0056.pngbin652 -> 665 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0058.pngbin808 -> 821 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0060.pngbin872 -> 885 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0062.pngbin1239 -> 1252 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0064.pngbin641 -> 654 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0066.pngbin898 -> 911 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0068.pngbin1039 -> 1052 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0070.pngbin684 -> 697 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0072.pngbin879 -> 892 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0074.pngbin916 -> 929 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0076.pngbin754 -> 767 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0078.pngbin772 -> 785 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0080.pngbin788 -> 801 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0082.pngbin898 -> 911 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0084.pngbin670 -> 683 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0086.pngbin719 -> 732 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0088.pngbin602 -> 615 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0090.pngbin614 -> 627 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0092.pngbin771 -> 784 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0094.pngbin1079 -> 1092 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0096.pngbin957 -> 970 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0098.pngbin922 -> 935 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0100.pngbin916 -> 929 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0102.pngbin796 -> 809 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0104.pngbin1041 -> 1054 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0106.pngbin816 -> 829 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0108.pngbin855 -> 868 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0110.pngbin934 -> 947 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0112.pngbin956 -> 969 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0114.pngbin1052 -> 1065 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0116.pngbin995 -> 1008 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0118.pngbin790 -> 803 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0120.pngbin611 -> 624 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0122.pngbin594 -> 607 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0124.pngbin920 -> 933 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0126.pngbin822 -> 835 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0128.pngbin916 -> 929 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0130.pngbin757 -> 770 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0132.pngbin676 -> 689 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0134.pngbin822 -> 835 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0136.pngbin598 -> 611 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0138.pngbin810 -> 823 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0140.pngbin1399 -> 1412 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0142.pngbin904 -> 917 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0144.pngbin739 -> 752 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0146.pngbin799 -> 812 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0148.pngbin863 -> 876 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0150.pngbin1142 -> 1155 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0152.pngbin776 -> 789 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0154.pngbin1017 -> 1030 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0156.pngbin990 -> 1003 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0158.pngbin751 -> 764 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0160.pngbin834 -> 847 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0162.pngbin750 -> 763 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0164.pngbin1390 -> 1403 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0166.pngbin908 -> 921 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0168.pngbin707 -> 720 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0170.pngbin831 -> 844 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0172.pngbin891 -> 904 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0174.pngbin762 -> 775 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0176.pngbin802 -> 815 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0178.pngbin835 -> 848 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0180.pngbin779 -> 792 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0182.pngbin642 -> 655 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0184.pngbin634 -> 647 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0186.pngbin656 -> 669 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0188.pngbin628 -> 641 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0190.pngbin760 -> 773 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0192.pngbin817 -> 830 bytes
-rw-r--r--files/poketool/trgra/trfgra/narc_0194.pngbin1000 -> 1013 bytes
-rw-r--r--filesystem.mk28
-rw-r--r--graphics_rules.mk56
-rw-r--r--include/macros.inc5
-rw-r--r--include/main.h2
-rw-r--r--include/nitro/PXI_fifo_shared.h6
-rw-r--r--include/options.h30
-rw-r--r--include/overlay_manager.h16
-rw-r--r--include/unk_0200CA44.h8
-rw-r--r--include/unk_02029FB0.h9
-rw-r--r--include/unk_0202C144.h3
-rw-r--r--tools/asm_processor/asm_processor.py1261
-rw-r--r--tools/asm_processor/compile.sh19
-rw-r--r--tools/knarc/Makefile2
-rw-r--r--tools/mwasmarm_patcher/Makefile5
313 files changed, 7386 insertions, 6264 deletions
diff --git a/.travis/calcrom/.gitignore b/.github/calcrom/.gitignore
index e4016dbe..e4016dbe 100644
--- a/.travis/calcrom/.gitignore
+++ b/.github/calcrom/.gitignore
diff --git a/.travis/calcrom/Makefile b/.github/calcrom/Makefile
index e3b6ff50..e3b6ff50 100644
--- a/.travis/calcrom/Makefile
+++ b/.github/calcrom/Makefile
diff --git a/.travis/calcrom/calcrom.cpp b/.github/calcrom/calcrom.cpp
index 2947f5e7..2947f5e7 100644
--- a/.travis/calcrom/calcrom.cpp
+++ b/.github/calcrom/calcrom.cpp
diff --git a/.travis/calcrom/webhook.sh b/.github/calcrom/webhook.sh
index 66f141b6..279f795d 100755..100644
--- a/.travis/calcrom/webhook.sh
+++ b/.github/calcrom/webhook.sh
@@ -1,18 +1,19 @@
#!/bin/bash -ex
# Only run this script if it's the master branch build.
-if [[ "$TRAVIS_BRANCH" != "master" || "$TRAVIS_PULL_REQUEST" != "false" ]]; then
+if [[ "$GITHUB_REF" != "refs/heads/master" || "$GITHUB_EVENT_NAME" != "push" ]]; then
exit 0
fi
build_name=$1
+url=$2
map_file=$(dirname "$0")/../../arm9/build/diamond.us/arm9.elf.xMAP
if [ ! -f $map_file ]; then
echo "$map_file does not exist!"
exit 1
fi
-make -C ${TRAVIS_BUILD_DIR}/.travis/calcrom
-output=$(${TRAVIS_BUILD_DIR}/.travis/calcrom/calcrom ${TRAVIS_BUILD_DIR} | sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g')
-curl -d "{\"username\": \"$CALCROM_DISCORD_WEBHOOK_USERNAME\", \"avatar_url\": \"$CALCROM_DISCORD_WEBHOOK_AVATAR_URL\", \"content\":\"\`\`\`$build_name progress:\\n$output\`\`\`\"}" -H "Content-Type: application/json" -X POST $CALCROM_DISCORD_WEBHOOK_URL
+make -C ${GITHUB_WORKSPACE}/.github/calcrom
+output=$(${GITHUB_WORKSPACE}/.github/calcrom/calcrom ${GITHUB_WORKSPACE} | sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g')
+curl -d "{\"username\": \"$CALCROM_DISCORD_WEBHOOK_USERNAME\", \"avatar_url\": \"$CALCROM_DISCORD_WEBHOOK_AVATAR_URL\", \"content\":\"\`\`\`$build_name progress:\\n$output\`\`\`\"}" -H "Content-Type: application/json" -X POST $url
popd
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 00000000..22fd0531
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,52 @@
+name: build
+
+on: [push, pull_request]
+
+env:
+ LM_LICENSE_FILE: "$GITHUB_WORKSPACE/tools/mwccarm/license.dat"
+ CC: gcc-8
+ CXX: g++-8
+ CALCROM_DISCORD_WEBHOOK_AVATAR_URL: "https://i.imgur.com/38BQHdd.png"
+ CALCROM_DISCORD_WEBHOOK_USERNAME: OK
+ CALCROM_WEBHOOK_URL: ${{ secrets.WEBHOOKURL }}
+
+
+jobs:
+ build:
+ runs-on: ubuntu-18.04
+
+ steps:
+ - name: Update and Install Software
+ run: |
+ sudo apt update
+ sudo apt -y --fix-missing upgrade
+ sudo apt -y install g++-8-multilib linux-libc-dev binutils-arm-none-eabi
+ sudo dpkg --add-architecture i386
+ wget -qO - https://dl.winehq.org/wine-builds/winehq.key | sudo apt-key add -
+ sudo add-apt-repository ppa:cybermax-dexter/sdl2-backport
+ sudo apt-add-repository "deb https://dl.winehq.org/wine-builds/ubuntu $(lsb_release -cs) main"
+ sudo apt install --install-recommends winehq-stable
+ - name: Checkout Repo
+ uses: actions/checkout@v2
+ - name: Setup Repo
+ run: |
+ mkdir -p ~/download
+ cd ~/download
+ wget http://private.martmists.com/mwccarm.zip
+ wget http://private.martmists.com/nitro.tar.gz
+ unzip mwccarm.zip
+ mv mwccarm $GITHUB_WORKSPACE/tools
+ tar xzf nitro.tar.gz
+ mv tools/bin $GITHUB_WORKSPACE/tools
+ mv include/nitro/specfiles/ARM7-TS.lcf.template $GITHUB_WORKSPACE/arm7
+ mv include/nitro/specfiles/ARM9-TS.lcf.template $GITHUB_WORKSPACE/arm9
+ working-directory: ~
+ - name: Build Diamond
+ run: make diamond
+ - name: Build Pearl
+ run: make pearl
+ - name: Webhook
+ run: |
+ sudo chmod 755 $GITHUB_WORKSPACE/.github/calcrom/webhook.sh
+ $GITHUB_WORKSPACE/.github/calcrom/webhook.sh pokediamond "$CALCROM_WEBHOOK_URL"
+ continue-on-error: true
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index ac700082..00000000
--- a/.travis.yml
+++ /dev/null
@@ -1,41 +0,0 @@
-dist: bionic
-os: linux
-language: c
-env:
- global:
- - LM_LICENSE_FILE="$TRAVIS_BUILD_DIR/tools/mwccarm/license.dat"
- - CC=gcc-8
- - CXX=g++-8
-addons:
- apt:
- packages:
- - g++-8-multilib
- - linux-libc-dev
- - binutils-arm-none-eabi
- - wine32
- - wine-stable
-cache:
- apt: true
-install:
- # These files are only accessible from Travis CI IP Addresses to prevent piracy.
- - mkdir -p $HOME/download
- - pushd $HOME/download
- - wget http://private.martmists.com/mwccarm.zip
- - wget http://private.martmists.com/nitro.tar.gz
- - unzip mwccarm.zip
- - mv mwccarm $TRAVIS_BUILD_DIR/tools
- - tar xzf nitro.tar.gz
- - mv tools/bin $TRAVIS_BUILD_DIR/tools
- - mv include/nitro/specfiles/ARM7-TS.lcf.template $TRAVIS_BUILD_DIR/arm7
- - mv include/nitro/specfiles/ARM9-TS.lcf.template $TRAVIS_BUILD_DIR/arm9
- - popd
-
-script:
- - travis_retry make
- - travis_retry make pearl
-
-notifications:
- email: false
-
-after_success:
- - .travis/calcrom/webhook.sh pokediamond
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 29df7380..e21a731a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -16,9 +16,9 @@ add_compile_options(-fms-extensions)
file(GLOB_RECURSE SOURCES RELATIVE ${CMAKE_SOURCE_DIR} "*.c" "*.cpp")
add_executable(PokeDiamond ${SOURCES})
-target_include_directories(PokeDiamond PRIVATE include include-mw arm9/lib/include arm7/lib/include arm9/modules/63/include)
+target_include_directories(PokeDiamond PRIVATE include include-mw arm9/lib/include arm7/lib/include arm9/modules/05/include arm9/modules/21/include arm9/modules/59/include arm9/modules/63/include)
-add_executable(calcrom .travis/calcrom/calcrom.cpp)
+add_executable(calcrom .github/calcrom/calcrom.cpp)
target_include_directories(calcrom PRIVATE /usr/local/include)
add_executable(knarc tools/knarc/Source.cpp tools/knarc/Narc.cpp tools/knarc/fnmatch.c)
diff --git a/INSTALL.md b/INSTALL.md
index 35eb054d..f6826063 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -48,12 +48,55 @@ Install them using either the Cygwin package manager or using pacman on Msys2.
**NOTE FOR MSYS2:** You will need to compile and install [libpng](https://www.libpng.org/pub/png/libpng.html) from source.
+#### macOS
+
+**macOS 10.14 Mojave or older is required**. macOS 10.15 Catalina is not supported due to missing support for 32-bit binaries (thus making wine emulation unfeasible). You will also require the following packages:
+
+* GNU make
+* LLVM 8 clang compiler
+* gcc@5 (for mwasmarm_patcher)
+* arm-gcc-bin
+* git
+* libpng
+* wine-stable and xquartz dependency
+
+They can be installed with the following commands:
+
+```console
+$ brew tap osx-cross/homebrew-arm
+$ brew tap homebrew/cask-versions
+$ brew install make llvm@8 gcc@5 arm-gcc-bin libpng git
+$ brew install --cask xquartz
+$ brew install --cask --no-quarantine wine-stable
+```
+
### 4. Build ROM
Run `make` to build the ROM. The ROM will be output as `build/diamond.us/pokediamond.us.nds`
To build Pokemon Pearl, run `make pearl`. You do not need to clean your working tree in between compiling. Pokemon Pearl will be built as `build/pearl.us/pokepearl.us.nds`.
-Windows Users:
+#### Windows
If you get an error in saving configuration settings when specifying the license file, you need to add a system environment variable called LM_LICENSE_FILE and point it to the license.dat file. Alternatively, run mwccarm.exe from an Administrator command prompt, PowerShell, or WSL session.
+
+#### Docker
+
+If you find issues building the ROMs with the above methods, you can try the Docker-specific build script. It will build an Alpine-based Docker image with the system requirements above, and run the `make` scripts (any specified parameter will be passed to the `make` command):
+
+```console
+$ make clean
+$ ./contrib/docker/build_docker.sh # build pokediamond
+$ ./contrib/docker/build_docker.sh pearl # build pokepearl
+```
+
+Note: Docker may not run at a full performance if its underlying Linux kernel is being virtualized (mainly Windows and macOS hosts).
+
+#### macOS
+
+To avoid issues run the build as shown below. This avoids issues with missing features (i.e. "introduced in macOS 10.15" errors) and Apple's make not following standards.
+
+```console
+$ export PATH=/usr/local/opt/llvm@8/bin:$PATH CC=clang CXX=clang++
+$ gmake
+```
diff --git a/Makefile b/Makefile
index 881aa3a1..4467d8ac 100644
--- a/Makefile
+++ b/Makefile
@@ -109,7 +109,11 @@ LDFLAGS = -map -nodead -w off -proc v5te -interworking -map -symtab -m _start
# DS TOOLS
TOOLS_DIR = tools
+ifeq ($(UNAME_S),Darwin)
+SHA1SUM = shasum
+else
SHA1SUM = sha1sum
+endif
CSV2BIN = $(TOOLS_DIR)/csv2bin/csv2bin$(EXE)
JSONPROC = $(TOOLS_DIR)/jsonproc/jsonproc$(EXE)
O2NARC = $(TOOLS_DIR)/o2narc/o2narc$(EXE)
@@ -120,7 +124,7 @@ MAKEROM = $(WINE) $(TOOLS_DIR)/bin/makerom.exe
FIXROM = $(TOOLS_DIR)/fixrom/fixrom$(EXE)
NTRCOMP = $(WINE) $(TOOLS_DIR)/bin/ntrcomp.exe
-TOOLDIRS = $(filter-out $(TOOLS_DIR)/mwccarm $(TOOLS_DIR)/bin,$(wildcard $(TOOLS_DIR)/*))
+TOOLDIRS = $(filter-out $(TOOLS_DIR)/asm_processor $(TOOLS_DIR)/mwccarm $(TOOLS_DIR)/bin,$(wildcard $(TOOLS_DIR)/*))
TOOLBASE = $(TOOLDIRS:$(TOOLS_DIR)/%=%)
TOOLS = $(foreach tool,$(TOOLBASE),$(TOOLS_DIR)/$(tool)/$(tool)$(EXE))
diff --git a/README.md b/README.md
index 8f47902c..2f6255c0 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,6 @@
# Pokémon Diamond
-[![Build Status](https://travis-ci.org/pret/pokediamond.svg?branch=master)](https://travis-ci.org/pret/pokediamond)
-![Docker Image CI](https://github.com/pret/pokediamond/workflows/Docker%20Image%20CI/badge.svg)
+[![Build Status](https://travis-ci.com/pret/pokediamond.svg?branch=master)](https://travis-ci.com/pret/pokediamond)
This is a decompilation of Pokémon Diamond.
diff --git a/arm7/Makefile b/arm7/Makefile
index 88f796a0..d142c079 100644
--- a/arm7/Makefile
+++ b/arm7/Makefile
@@ -96,13 +96,18 @@ LDFLAGS = -map -nodead -w off -proc v4t -interworking -map -symtab -m _start
####################### Other Tools #########################
# DS TOOLS
+UNAME_S := $(shell uname -s)
+ifeq ($(UNAME_S),Darwin)
+SHA1SUM = shasum
+else
SHA1SUM = sha1sum
+endif
JSONPROC = $(TOOLS_DIR)/jsonproc/jsonproc
GFX = $(TOOLS_DIR)/nitrogfx/nitrogfx
SCANINC = $(TOOLS_DIR)/scaninc/scaninc$(EXE)
MWASMARM_PATCHER = $(TOOLS_DIR)/mwasmarm_patcher/mwasmarm_patcher$(EXE) -q
-TOOLDIRS = $(filter-out $(TOOLS_DIR)/mwccarm $(TOOLS_DIR)/bin,$(wildcard $(TOOLS_DIR)/*))
+TOOLDIRS = $(filter-out $(TOOLS_DIR)/asm_processor $(TOOLS_DIR)/mwccarm $(TOOLS_DIR)/bin,$(wildcard $(TOOLS_DIR)/*))
TOOLBASE = $(TOOLDIRS:$(TOOLS_DIR)/%=%)
TOOLS = $(foreach tool,$(TOOLBASE),$(TOOLS_DIR)/$(tool)/$(tool)$(EXE))
diff --git a/arm9/Makefile b/arm9/Makefile
index d537fbd7..8b84a135 100644
--- a/arm9/Makefile
+++ b/arm9/Makefile
@@ -69,6 +69,9 @@ LIBS_OBJS = $(LIBS_FILES:%.s=$(BUILD_DIR)/%.o)
# Object files
O_FILES := $(C_OBJS) $(CXX_OBJS) $(S_OBJS)
+GLOBAL_ASM_C_FILES != grep -rl 'GLOBAL_ASM(' $(C_FILES)
+GLOBAL_ASM_O_FILES = $(addprefix $(BUILD_DIR)/,$(GLOBAL_ASM_C_FILES:.c=.o))
+
# Overlay modules
OVERLAYS := $(shell grep -oE "Overlay \w+" $(LD_SPEC) | cut -d' ' -f2)
@@ -102,6 +105,9 @@ AR := $(CROSS)ar
OBJDUMP := $(CROSS)objdump
OBJCOPY := $(CROSS)objcopy
+ASM_PROCESSOR_DIR := ../tools/asm_processor
+ASM_PROCESSOR := $(ASM_PROCESSOR_DIR)/compile.sh
+
# ./tools/mwccarm/2.0/base/mwasmarm.exe -proc arm5te asm/arm9_thumb.s -o arm9.o
ASFLAGS = -proc arm5te -i ../include -i .. -D$(GAME_VERSION) -D$(GAME_LANGUAGE)
CFLAGS = -O4,p -gccext,on -proc arm946e -fp soft -lang c99 -Cpp_exceptions off $(foreach dir,$(INCLUDE_DIRS),-i $(dir)) $(foreach dir,$(INCLUDE_RECURSIVE_DIRS),-ir $(dir)) -interworking -DFS_IMPLEMENT -enum int -W all -D$(GAME_VERSION) -D$(GAME_LANGUAGE)
@@ -114,17 +120,22 @@ STATIC_LIBS := $(addprefix $(BUILD_DIR)/lib/,libsyscall.a)
####################### Other Tools #########################
# DS TOOLS
+UNAME_S := $(shell uname -s)
+ifeq ($(UNAME_S),Darwin)
+SHA1SUM = shasum
+else
ifndef BUSYBOX
SHA1SUM = sha1sum --quiet
else
SHA1SUM = sha1sum
endif
+endif
JSONPROC = $(TOOLS_DIR)/jsonproc/jsonproc$(EXE)
GFX = $(TOOLS_DIR)/nitrogfx/nitrogfx$(EXE)
SCANINC = $(TOOLS_DIR)/scaninc/scaninc$(EXE)
MWASMARM_PATCHER = $(TOOLS_DIR)/mwasmarm_patcher/mwasmarm_patcher$(EXE) -q
-TOOLDIRS = $(filter-out $(TOOLS_DIR)/mwccarm $(TOOLS_DIR)/bin,$(wildcard $(TOOLS_DIR)/*))
+TOOLDIRS = $(filter-out $(TOOLS_DIR)/asm_processor $(TOOLS_DIR)/mwccarm $(TOOLS_DIR)/bin,$(wildcard $(TOOLS_DIR)/*))
TOOLBASE = $(TOOLDIRS:$(TOOLS_DIR)/%=%)
TOOLS = $(foreach tool,$(TOOLBASE),$(TOOLS_DIR)/$(tool)/$(tool)$(EXE))
@@ -190,8 +201,12 @@ else
$(BUILD_DIR)/%.o: dep :=
endif
+# Cpp asm processor is not supported at this time.
+$(GLOBAL_ASM_O_FILES): BUILD_C := $(ASM_PROCESSOR) "$(CC) $(CFLAGS)" "$(AS) $(ASFLAGS)"
+BUILD_C ?= $(CC) -c $(CFLAGS) -o
+
$(C_OBJS): $(BUILD_DIR)/%.o: %.c $$(dep)
- $(CC) -c $(CFLAGS) -o $@ $<
+ $(BUILD_C) $@ $<
$(CXX_OBJS): $(BUILD_DIR)/%.o: %.cpp $$(dep)
$(CXX) -c $(CXXFLAGS) -o $@ $<
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf
index 57fbde66..6bbff67c 100644
--- a/arm9/arm9.lsf
+++ b/arm9/arm9.lsf
@@ -19,7 +19,7 @@ Static arm9
Object unk_02005CFC.o
Object poke_overlay.o
Object unk_020061E8.o
- Object unk_02006234.o
+ Object overlay_manager.o
Object filesystem.o
Object unk_02006864.o
Object unk_02006D98.o
@@ -452,11 +452,13 @@ Static arm9
Object WM_ds.o
Object WM_ks.o
Object WM_etc.o
- Object CTRDG.o
+ Object CTRDG_common.o
Object CTRDG_proc.o
Object CTRDG_backup.o
Object CTRDG_flash_common.o
+ Object CTRDG_flash_AT29LV512_asm.o
Object CTRDG_flash_AT29LV512.o
+ Object CTRDG_flash_LE26FV10N1TS-10.o
Object CTRDG_flash_LE39FW512.o
Object CTRDG_flash_MX29L010.o
Object CTRDG_flash_MX29L512.o
@@ -554,6 +556,12 @@ Overlay MODULE_05
Object mod05_021E5C8C.o
Object mod05_021E5E10.o
Object mod05_021E5FD8.o
+ Object mod05_021E72FC.o
+ Object mod05_021E7504.o
+ Object mod05_021E779C.o
+ Object mod05_021E7C00.o
+ Object mod05_021E80F8.o
+ Object mod05_021E8310.o
Object module_05.o
}
@@ -661,8 +669,8 @@ Overlay MODULE_21
{
##Pokétch Clock##
After MODULE_20
- Object module_21_sinit.o
- Object module_21.o
+ Object mod21_02254854.o
+ Object mod21_02254A6C.o
}
Overlay MODULE_22
@@ -937,7 +945,9 @@ Overlay MODULE_59
{
##Rowan's intro##
After arm9
- Object module_59.o
+ Object mod59_021D74E0_src.o
+ Object mod59_021D74E0_asm.o
+ Object mod59_021D9868.o
}
Overlay MODULE_60
diff --git a/arm9/asm/CTRDG.s b/arm9/asm/CTRDG.s
deleted file mode 100644
index dc60582b..00000000
--- a/arm9/asm/CTRDG.s
+++ /dev/null
@@ -1,670 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .section .bss
-
- .global UNK_021D6940
-UNK_021D6940: ; 0x021D6940
- .space 0x4
-
- .global UNK_021D6944
-UNK_021D6944: ; 0x021D6944
- .space 0x4
-
- .text
-
- arm_func_start CTRDG_CheckEnabled
-CTRDG_CheckEnabled:
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- bl CTRDG_IsOptionCartridge
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {lr}
- bxne lr
- bl CTRDG_IsEnabled
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {lr}
- bxne lr
- bl OS_Terminate
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start CTRDG_Enable
-CTRDG_Enable: ; 0x020DB15C
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- bl OS_DisableInterrupts
- ldr r1, _020DB1AC ; =UNK_021D6940
- mov r4, r0
- str r5, [r1, #0x0]
- bl CTRDG_IsOptionCartridge
- cmp r0, #0x0
- bne _020DB198
- cmp r5, #0x0
- movne r1, #0x1000
- moveq r1, #0x5000
- mov r0, #0xf000
- bl OS_SetDPermissionsForProtectionRegion
-_020DB198:
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020DB1AC: .word UNK_021D6940
-
- arm_func_start CTRDG_IsEnabled
-CTRDG_IsEnabled:
- ldr r0, _020DB1BC ; =UNK_021D6940
- ldr r0, [r0, #0x0]
- bx lr
- .balign 4
-_020DB1BC: .word UNK_021D6940
-
- arm_func_start CTRDGi_AccessCommon
-CTRDGi_AccessCommon: ; 0x020DB1C0
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- mov r6, r1
- mov r5, r2
- mov r4, r3
- bl CTRDG_IsExisting
- cmp r0, #0x0
- addeq sp, sp, #0x4
- moveq r0, #0x0
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- bl CTRDG_CheckEnabled
- ldr r0, _020DB2BC ; =UNK_021D6944
- ldrh r0, [r0, #0x2]
- bl OS_LockCartridge
- cmp r4, #0x21
- bhi _020DB240
- cmp r4, #0x21
- bhs _020DB270
- cmp r4, #0x11
- bhi _020DB234
- cmp r4, #0x10
- blo _020DB294
- cmp r4, #0x10
- beq _020DB290
- cmp r4, #0x11
- beq _020DB260
- b _020DB294
-_020DB234:
- cmp r4, #0x20
- streqh r6, [r7, #0x0]
- b _020DB294
-_020DB240:
- cmp r4, #0x40
- bhi _020DB254
- cmp r4, #0x40
- streq r6, [r7, #0x0]
- b _020DB294
-_020DB254:
- cmp r4, #0x41
- beq _020DB280
- b _020DB294
-_020DB260:
- cmp r5, #0x0
- ldrneb r0, [r7, #0x0]
- strneb r0, [r5, #0x0]
- b _020DB294
-_020DB270:
- cmp r5, #0x0
- ldrneh r0, [r7, #0x0]
- strneh r0, [r5, #0x0]
- b _020DB294
-_020DB280:
- cmp r5, #0x0
- ldrne r0, [r7, #0x0]
- strne r0, [r5, #0x0]
- b _020DB294
-_020DB290:
- strb r6, [r7, #0x0]
-_020DB294:
- ldr r0, _020DB2BC ; =UNK_021D6944
- ldrh r0, [r0, #0x2]
- bl OS_UnLockCartridge
- bl CTRDG_IsExisting
- cmp r0, #0x0
- movne r0, #0x1
- moveq r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_020DB2BC: .word UNK_021D6944
-
- arm_func_start CTRDG_Read32
-CTRDG_Read32: ; 0x020DB2C0
- ldr ip, _020DB2D4 ; =CTRDGi_AccessCommon
- mov r2, r1
- mov r1, #0x0
- mov r3, #0x41
- bx r12
- .balign 4
-_020DB2D4: .word CTRDGi_AccessCommon
-
- arm_func_start CTRDGi_CopyCommon
-CTRDGi_CopyCommon: ; 0x020DB2D8
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- mov r6, r1
- mov r5, r2
- mov r4, r3
- bl CTRDG_IsExisting
- cmp r0, #0x0
- addeq sp, sp, #0x4
- moveq r0, #0x0
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- bl CTRDG_CheckEnabled
- ldr r0, _020DB42C ; =UNK_021D6944
- ldrh r0, [r0, #0x2]
- bl OS_LockCartridge
- ldr r0, [sp, #0x18]
- ands r0, r0, #0x1
- bne _020DB338
- mov r0, r7
- bl MI_StopDma
- mov r0, r5
- mov r1, r4
- bl DC_FlushRange
-_020DB338:
- ldr r0, [sp, #0x18]
- cmp r0, #0x11
- bhi _020DB36C
- cmp r0, #0x10
- blo _020DB360
- cmp r0, #0x10
- beq _020DB38C
- cmp r0, #0x11
- beq _020DB3BC
- b _020DB404
-_020DB360:
- cmp r0, #0x1
- beq _020DB3E4
- b _020DB404
-_020DB36C:
- cmp r0, #0x20
- bhi _020DB380
- cmp r0, #0x20
- beq _020DB3A4
- b _020DB404
-_020DB380:
- cmp r0, #0x21
- beq _020DB3D0
- b _020DB404
-_020DB38C:
- mov r0, r7
- mov r1, r6
- mov r2, r5
- mov r3, r4
- bl MI_DmaCopy16
- b _020DB404
-_020DB3A4:
- mov r0, r7
- mov r1, r6
- mov r2, r5
- mov r3, r4
- bl MI_DmaCopy32
- b _020DB404
-_020DB3BC:
- mov r0, r6
- mov r1, r5
- mov r2, r4
- bl MIi_CpuCopy16
- b _020DB404
-_020DB3D0:
- mov r0, r6
- mov r1, r5
- mov r2, r4
- bl MIi_CpuCopy32
- b _020DB404
-_020DB3E4:
- cmp r4, #0x0
- mov r1, #0x0
- bls _020DB404
-_020DB3F0:
- ldrb r0, [r6], #0x1
- add r1, r1, #0x1
- cmp r1, r4
- strb r0, [r5], #0x1
- blo _020DB3F0
-_020DB404:
- ldr r0, _020DB42C ; =UNK_021D6944
- ldrh r0, [r0, #0x2]
- bl OS_UnLockCartridge
- bl CTRDG_IsExisting
- cmp r0, #0x0
- movne r0, #0x1
- moveq r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_020DB42C: .word UNK_021D6944
-
- arm_func_start CTRDG_CpuCopy32
-CTRDG_CpuCopy32: ; 0x020DB430
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov lr, r1
- mov r3, r2
- mov r12, #0x21
- mov r1, r0
- mov r2, lr
- mov r0, #0x0
- str r12, [sp, #0x0]
- bl CTRDGi_CopyCommon
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start CTRDG_CpuCopy16
-CTRDG_CpuCopy16: ; 0x020DB464
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov lr, r1
- mov r3, r2
- mov r12, #0x11
- mov r1, r0
- mov r2, lr
- mov r0, #0x0
- str r12, [sp, #0x0]
- bl CTRDGi_CopyCommon
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start CTRDG_CpuCopy8
-CTRDG_CpuCopy8: ; 0x020DB498
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov lr, r1
- mov r3, r2
- cmp lr, #0x8000000
- blo _020DB4DC
- ldr r2, _020DB500 ; =0x0A010000
- cmp lr, r2
- bhs _020DB4DC
- mov r12, #0x1
- mov r2, r0
- mov r0, #0x0
- str r12, [sp, #0x0]
- bl CTRDGi_CopyCommon
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-_020DB4DC:
- mov r12, #0x1
- mov r1, r0
- mov r2, lr
- mov r0, #0x0
- str r12, [sp, #0x0]
- bl CTRDGi_CopyCommon
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DB500: .word 0x0A010000
-
- arm_func_start CTRDGi_SendtoPxi
-CTRDGi_SendtoPxi: ; 0x020DB504
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- mov r1, r7
- mov r0, #0xd
- mov r2, #0x0
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- mov r6, #0x1
- mov r5, #0xd
- mov r4, #0x0
-_020DB53C:
- mov r0, r6
- bl SVC_WaitByLoop
- mov r0, r5
- mov r1, r7
- mov r2, r4
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- bne _020DB53C
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-
- arm_func_start CTRDGi_UnlockByProcessor
-CTRDGi_UnlockByProcessor: ; 0x020DB568
- stmdb sp!, {r4,lr}
- mov r4, r1
- ldr r1, [r4, #0x0]
- cmp r1, #0x0
- bne _020DB580
- bl OS_UnLockCartridge
-_020DB580:
- ldr r0, [r4, #0x4]
- bl OS_RestoreInterrupts
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start CTRDGi_LockByProcessor
-CTRDGi_LockByProcessor: ; 0x020DB590
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- mov r6, r1
- ldr r5, _020DB60C ; =0x027FFFE8
- mov r4, #0x1
-_020DB5A8:
- bl OS_DisableInterrupts
- str r0, [r6, #0x4]
- mov r0, r5
- bl OS_ReadOwnerOfLockWord
- and r0, r0, #0x40
- str r0, [r6, #0x0]
- ldr r0, [r6, #0x0]
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r7,lr}
- bxne lr
- mov r0, r7
- bl OS_TryLockCartridge
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- ldr r0, [r6, #0x4]
- bl OS_RestoreInterrupts
- mov r0, r4
- bl SVC_WaitByLoop
- b _020DB5A8
-_020DB600: ; 0x020DB600
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_020DB60C: .word 0x027FFFE8
-
- arm_func_start CTRDGi_RestoreAccessCycle
-CTRDGi_RestoreAccessCycle: ; 0x020DB610
- ldr r3, _020DB640 ; =0x04000204
- ldr r2, [r0, #0x0]
- ldrh r1, [r3, #0x0]
- bic r1, r1, #0xc
- orr r1, r1, r2, lsl #0x2
- strh r1, [r3, #0x0]
- ldrh r1, [r3, #0x0]
- ldr r2, [r0, #0x4]
- bic r0, r1, #0x10
- orr r0, r0, r2, lsl #0x4
- strh r0, [r3, #0x0]
- bx lr
- .balign 4
-_020DB640: .word 0x04000204
-
- arm_func_start CTRDGi_ChangeLatestAccessCycle
-CTRDGi_ChangeLatestAccessCycle: ; 0x020DB644
- ldr r2, _020DB688 ; =0x04000204
- ldrh r1, [r2, #0x0]
- and r1, r1, #0xc
- mov r1, r1, asr #0x2
- str r1, [r0, #0x0]
- ldrh r1, [r2, #0x0]
- and r1, r1, #0x10
- mov r1, r1, asr #0x4
- str r1, [r0, #0x4]
- ldrh r0, [r2, #0x0]
- bic r0, r0, #0xc
- orr r0, r0, #0xc
- strh r0, [r2, #0x0]
- ldrh r0, [r2, #0x0]
- bic r0, r0, #0x10
- strh r0, [r2, #0x0]
- bx lr
- .balign 4
-_020DB688: .word 0x04000204
-
- arm_func_start CTRDG_IsExisting
-CTRDG_IsExisting:
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x10
- ldr r2, _020DB798 ; =0x027FFC30
- ldr r0, _020DB79C ; =0x0000FFFF
- ldrh r1, [r2, #0x0]
- mov r4, #0x1
- cmp r1, r0
- addeq sp, sp, #0x10
- moveq r0, #0x0
- ldmeqia sp!, {r4,lr}
- bxeq lr
- ldrb r0, [r2, #0x5]
- mov r0, r0, lsl #0x1e
- mov r0, r0, lsr #0x1f
- cmp r0, #0x1
- addeq sp, sp, #0x10
- moveq r0, #0x0
- ldmeqia sp!, {r4,lr}
- bxeq lr
- ldr r0, _020DB7A0 ; =UNK_021D6944
- add r1, sp, #0x0
- ldrh r0, [r0, #0x2]
- bl CTRDGi_LockByProcessor
- add r0, sp, #0x8
- bl CTRDGi_ChangeLatestAccessCycle
- mov r0, #0x8000000
- ldrb r2, [r0, #0xb2]
- cmp r2, #0x96
- bne _020DB714
- ldr r1, _020DB798 ; =0x027FFC30
- ldrh r0, [r0, #0xbe]
- ldrh r1, [r1, #0x0]
- cmp r1, r0
- bne _020DB75C
-_020DB714:
- cmp r2, #0x96
- beq _020DB734
- ldr r1, _020DB798 ; =0x027FFC30
- ldr r0, _020DB7A4 ; =0x0801FFFE
- ldrh r1, [r1, #0x0]
- ldrh r0, [r0, #0x0]
- cmp r1, r0
- bne _020DB75C
-_020DB734:
- ldr r2, _020DB798 ; =0x027FFC30
- mov r0, #0x8000000
- ldr r1, [r2, #0x8]
- ldr r0, [r0, #0xac]
- cmp r1, r0
- beq _020DB770
- ldrb r0, [r2, #0x5]
- mov r0, r0, lsl #0x1f
- movs r0, r0, lsr #0x1f
- beq _020DB770
-_020DB75C:
- ldr r1, _020DB798 ; =0x027FFC30
- mov r4, #0x0
- ldrb r0, [r1, #0x5]
- orr r0, r0, #0x2
- strb r0, [r1, #0x5]
-_020DB770:
- add r0, sp, #0x8
- bl CTRDGi_RestoreAccessCycle
- ldr r0, _020DB7A0 ; =UNK_021D6944
- add r1, sp, #0x0
- ldrh r0, [r0, #0x2]
- bl CTRDGi_UnlockByProcessor
- mov r0, r4
- add sp, sp, #0x10
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020DB798: .word 0x027FFC30
-_020DB79C: .word 0x0000FFFF
-_020DB7A0: .word UNK_021D6944
-_020DB7A4: .word 0x0801FFFE
-
- arm_func_start CTRDG_IsPulledOut
-CTRDG_IsPulledOut: ; 0x020DB7A8
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r2, _020DB800 ; =0x027FFC30
- ldr r0, _020DB804 ; =0x0000FFFF
- ldrh r1, [r2, #0x0]
- cmp r1, r0
- addeq sp, sp, #0x4
- moveq r0, #0x0
- ldmeqia sp!, {lr}
- bxeq lr
- ldrb r0, [r2, #0x5]
- mov r0, r0, lsl #0x1e
- movs r0, r0, lsr #0x1f
- bne _020DB7E4
- bl CTRDG_IsExisting
-_020DB7E4:
- ldr r0, _020DB800 ; =0x027FFC30
- ldrb r0, [r0, #0x5]
- mov r0, r0, lsl #0x1e
- mov r0, r0, lsr #0x1f
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DB800: .word 0x027FFC30
-_020DB804: .word 0x0000FFFF
-
- arm_func_start CTRDGi_GetAgbMakerCodeAtInit
-CTRDGi_GetAgbMakerCodeAtInit: ; 0x020DB808
- stmdb sp!, {r4,lr}
- mov r4, #0x0
- bl CTRDGi_IsAgbCartridgeAtInit
- cmp r0, #0x0
- ldrne r0, _020DB82C ; =0x027FFC30
- ldrneh r4, [r0, #0x6]
- mov r0, r4
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020DB82C: .word 0x027FFC30
-
- arm_func_start CTRDG_GetAgbMakerCode
-CTRDG_GetAgbMakerCode: ; 0x020DB830
- stmdb sp!, {r4,lr}
- mov r4, #0x0
- bl CTRDG_IsExisting
- cmp r0, #0x0
- beq _020DB84C
- bl CTRDGi_GetAgbMakerCodeAtInit
- mov r4, r0
-_020DB84C:
- mov r0, r4
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start CTRDGi_GetAgbGameCodeAtInit
-CTRDGi_GetAgbGameCodeAtInit: ; 0x020DB858
- stmdb sp!, {r4,lr}
- mov r4, #0x0
- bl CTRDGi_IsAgbCartridgeAtInit
- cmp r0, #0x0
- ldrne r0, _020DB87C ; =0x027FFC30
- ldrne r4, [r0, #0x8]
- mov r0, r4
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020DB87C: .word 0x027FFC30
-
- arm_func_start CTRDG_GetAgbGameCode
-CTRDG_GetAgbGameCode: ; 0x020DB880
- stmdb sp!, {r4,lr}
- mov r4, #0x0
- bl CTRDG_IsExisting
- cmp r0, #0x0
- beq _020DB89C
- bl CTRDGi_GetAgbGameCodeAtInit
- mov r4, r0
-_020DB89C:
- mov r0, r4
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start CTRDGi_IsAgbCartridgeAtInit
-CTRDGi_IsAgbCartridgeAtInit:
- ldr r0, _020DB8BC ; =0x027FFC30
- ldrb r0, [r0, #0x5]
- mov r0, r0, lsl #0x1f
- mov r0, r0, lsr #0x1f
- bx lr
- .balign 4
-_020DB8BC: .word 0x027FFC30
-
- arm_func_start CTRDG_IsOptionCartridge
-CTRDG_IsOptionCartridge:
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- bl CTRDG_IsExisting
- cmp r0, #0x0
- beq _020DB8EC
- bl CTRDGi_IsAgbCartridgeAtInit
- cmp r0, #0x0
- addeq sp, sp, #0x4
- moveq r0, #0x1
- ldmeqia sp!, {lr}
- bxeq lr
-_020DB8EC:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start CTRDG_IsAgbCartridge
-CTRDG_IsAgbCartridge: ; 0x020DB8FC
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- bl CTRDG_IsExisting
- cmp r0, #0x0
- beq _020DB928
- bl CTRDGi_IsAgbCartridgeAtInit
- cmp r0, #0x0
- addne sp, sp, #0x4
- movne r0, #0x1
- ldmneia sp!, {lr}
- bxne lr
-_020DB928:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start CTRDGi_InitCommon
-CTRDGi_InitCommon: ; 0x020DB938
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _020DB970 ; =UNK_021D6944
- mov r3, #0x0
- ldr r2, _020DB974 ; =0x05000001
- add r0, sp, #0x0
- str r3, [sp, #0x0]
- bl SVC_CpuSet
- bl OS_GetLockID
- ldr r1, _020DB970 ; =UNK_021D6944
- strh r0, [r1, #0x2]
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020DB970: .word UNK_021D6944
-_020DB974: .word 0x05000001
diff --git a/arm9/asm/CTRDG_backup.s b/arm9/asm/CTRDG_backup.s
deleted file mode 100644
index e04344b4..00000000
--- a/arm9/asm/CTRDG_backup.s
+++ /dev/null
@@ -1,306 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .extern CTRDGi_EraseFlash4KBAT
- .extern CTRDGi_EraseFlash4KBAsyncAT
- .extern CTRDGi_EraseFlashChipAT
- .extern CTRDGi_EraseFlashChipAsyncAT
- .extern CTRDGi_EraseFlashChipAsyncLE
- .extern CTRDGi_EraseFlashChipAsyncMX
- .extern CTRDGi_EraseFlashChipLE
- .extern CTRDGi_EraseFlashChipMX
- .extern CTRDGi_EraseFlashSectorAT
- .extern CTRDGi_EraseFlashSectorAsyncAT
- .extern CTRDGi_EraseFlashSectorAsyncLE
- .extern CTRDGi_EraseFlashSectorAsyncMX
- .extern CTRDGi_EraseFlashSectorMX
- .extern CTRDGi_PollingSR1MCOMMON
- .extern CTRDGi_PollingSR512kCOMMON
- .extern CTRDGi_WriteFlash4KBAT
- .extern CTRDGi_WriteFlash4KBAsyncAT
- .extern CTRDGi_WriteFlashSectorAT
- .extern CTRDGi_WriteFlashSectorAsyncAT
- .extern CTRDGi_WriteFlashSectorAsyncLE
- .extern CTRDGi_WriteFlashSectorAsyncMX
- .extern CTRDGi_WriteFlashSectorLE
- .extern CTRDGi_WriteFlashSectorMX
- .extern CTRDGi_WriteFlashSectorAsyncMX5
- .extern CTRDGi_WriteFlashSectorMX5
- .extern UNK_021D6B14
- .extern UNK_021D6B30
- .extern UNK_021D6B28
- .extern UNK_021D6B1C
- .extern UNK_021D6B24
- .extern UNK_021D6B20
- .extern UNK_021D6B0C
- .extern UNK_021D6B34
- .extern UNK_021D6B2C
- .extern UNK_021D6B4C
- .extern UNK_021D6B18
-
- .section .rodata
-
- .global UNK_02103FE4
-UNK_02103FE4: ; 0x02103FE4
- .byte 0x14, 0x00, 0x00, 0x00
-
- .global UNK_02103FE8
-UNK_02103FE8: ; 0x02103FE8
- .word UNK_02104150
- .word UNK_0210408C
- .word UNK_0210418C
-
- .global UNK_02103FF4
-UNK_02103FF4: ; 0x02103FF4
- .word UNK_0210410C
- .word UNK_0210400C
- .word UNK_021041D0
- .word UNK_021040D0
-
- .global UNK_02104004
-UNK_02104004: ; 0x02104004
- .byte 0x0A, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00
-
- .global UNK_0210400C
-UNK_0210400C: ; 0x0210400C
- .word CTRDGi_WriteFlash4KBAT
- .word CTRDGi_EraseFlashChipAT
- .word CTRDGi_EraseFlash4KBAT
- .word CTRDGi_WriteFlash4KBAsyncAT
- .word CTRDGi_EraseFlashChipAsyncAT
- .word CTRDGi_EraseFlash4KBAsyncAT
- .word CTRDGi_PollingSR512kCOMMON
- .word UNK_02104004
- .byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x3D, 0x00
-
- .global UNK_02104048
-UNK_02104048: ; 0x02104048
- .word CTRDGi_WriteFlashSectorAT
- .word CTRDGi_EraseFlashChipAT
- .word CTRDGi_EraseFlashSectorAT
- .word CTRDGi_WriteFlashSectorAsyncAT
- .word CTRDGi_EraseFlashChipAsyncAT
- .word CTRDGi_EraseFlashSectorAsyncAT
- .word CTRDGi_PollingSR512kCOMMON
- .word UNK_02104004
- .byte 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00
- .byte 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x3D, 0x00
-
- .global UNK_02104084
-UNK_02104084: ; 0x02104084
- .byte 0x0A, 0x00, 0x0A, 0x00, 0xD0, 0x07, 0x88, 0x13
-
- .global UNK_0210408C
-UNK_0210408C: ; 0x0210408C
- .word CTRDGi_WriteFlashSectorMX
- .word CTRDGi_EraseFlashChipMX
- .word CTRDGi_EraseFlashSectorMX
- .word CTRDGi_WriteFlashSectorAsyncMX
- .word CTRDGi_EraseFlashChipAsyncMX
- .word CTRDGi_EraseFlashSectorAsyncMX
- .word CTRDGi_PollingSR1MCOMMON
- .word UNK_02104084
- .byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x00, 0x13, 0x00
-
- .global UNK_021040C8
-UNK_021040C8: ; 0x021040C8
- .byte 0x0A, 0x00, 0x0A, 0x00, 0x28, 0x00, 0xC8, 0x00
-
- .global UNK_021040D0
-UNK_021040D0: ; 0x021040D0
- .word CTRDGi_WriteFlashSectorLE
- .word CTRDGi_EraseFlashChipLE
- .word CTRDGi_EraseFlashSectorLE
- .word CTRDGi_WriteFlashSectorAsyncLE
- .word CTRDGi_EraseFlashChipAsyncLE
- .word CTRDGi_EraseFlashSectorAsyncLE
- .word CTRDGi_PollingSR512kCOMMON
- .word UNK_021040C8
- .byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_0210410C
-UNK_0210410C: ; 0x0210410C
- .word CTRDGi_WriteFlashSectorLE
- .word CTRDGi_EraseFlashChipLE
- .word CTRDGi_EraseFlashSectorLE
- .word CTRDGi_WriteFlashSectorAsyncLE
- .word CTRDGi_EraseFlashChipAsyncLE
- .word CTRDGi_EraseFlashSectorAsyncLE
- .word CTRDGi_PollingSR512kCOMMON
- .word UNK_021040C8
- .byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xBF, 0x00, 0xD4, 0x00
-
- .global UNK_02104148
-UNK_02104148: ; 0x02104148
- .byte 0x0A, 0x00, 0x0A, 0x00, 0xD0, 0x07, 0xD0, 0x07
-
- .global UNK_02104150
-UNK_02104150: ; 0x02104150
- .word CTRDGi_WriteFlashSectorMX
- .word CTRDGi_EraseFlashChipMX
- .word CTRDGi_EraseFlashSectorMX
- .word CTRDGi_WriteFlashSectorAsyncMX
- .word CTRDGi_EraseFlashChipAsyncMX
- .word CTRDGi_EraseFlashSectorAsyncMX
- .word CTRDGi_PollingSR1MCOMMON
- .word UNK_02104148
- .byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xC2, 0x00, 0x09, 0x00
-
- .global UNK_0210418C
-UNK_0210418C: ; 0x0210418C
- .word CTRDGi_WriteFlashSectorMX
- .word CTRDGi_EraseFlashChipMX
- .word CTRDGi_EraseFlashSectorMX
- .word CTRDGi_WriteFlashSectorAsyncMX
- .word CTRDGi_EraseFlashChipAsyncMX
- .word CTRDGi_EraseFlashSectorAsyncMX
- .word CTRDGi_PollingSR1MCOMMON
- .word UNK_02104148
- .byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_021041C8
-UNK_021041C8: ; 0x021041C8
- .byte 0x0A, 0x00, 0x0A, 0x00, 0xF4, 0x01, 0xF4, 0x01
-
- .global UNK_021041D0
-UNK_021041D0: ; 0x021041D0
- .word CTRDGi_WriteFlashSectorMX5
- .word CTRDGi_EraseFlashChipLE
- .word CTRDGi_EraseFlashSectorLE
- .word CTRDGi_WriteFlashSectorAsyncMX5
- .word CTRDGi_EraseFlashChipAsyncLE
- .word CTRDGi_EraseFlashSectorAsyncLE
- .word CTRDGi_PollingSR512kCOMMON
- .word UNK_021041C8
- .byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x32, 0x00, 0x1B, 0x00
-
- .section .bss
-
- .text
-
- arm_func_start CTRDG_IdentifyAgbBackup
-CTRDG_IdentifyAgbBackup: ; 0x020DBD50
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- cmp r7, #0x1
- mov r0, #0x1
- bhi _020DBEAC
- bl OS_GetLockID
- ldr r1, _020DBED8 ; =UNK_021D6B0C
- strh r0, [r1, #0x0]
- ldrh r0, [r1, #0x0]
- bl OS_LockCartridge
- ldr r6, _020DBEDC ; =0x04000204
- ldr r1, _020DBEE0 ; =UNK_02103FE4
- ldrh r3, [r6, #0x0]
- ldrh r2, [r6, #0x0]
- ldr r0, _020DBEE4 ; =UNK_021D6B28
- and r4, r3, #0x3
- bic r2, r2, #0x3
- orr r2, r2, #0x3
- strh r2, [r6, #0x0]
- str r1, [r0, #0x0]
- bl CTRDGi_ReadFlashID
- ldr r2, _020DBEDC ; =0x04000204
- mov r6, r0
- ldrh r1, [r2, #0x0]
- cmp r7, #0x0
- ldreq r5, _020DBEE8 ; =UNK_02103FF4
- bic r1, r1, #0x3
- orr r1, r1, r4
- cmp r7, #0x1
- ldr r0, _020DBED8 ; =UNK_021D6B0C
- strh r1, [r2, #0x0]
- ldrh r0, [r0, #0x0]
- ldreq r5, _020DBEEC ; =UNK_02103FE8
- bl OS_UnlockCartridge
- ldr r2, [r5, #0x0]
- mov r0, #0x1
- ldrh r1, [r2, #0x38]
- cmp r1, #0x0
- beq _020DBE14
- and r3, r6, #0xff
-_020DBDF4:
- ldrh r1, [r2, #0x38]
- cmp r3, r1
- moveq r0, #0x0
- beq _020DBE14
- ldr r2, [r5, #0x4]!
- ldrh r1, [r2, #0x38]
- cmp r1, #0x0
- bne _020DBDF4
-_020DBE14:
- ldr r2, [r2, #0x0]
- ldr r1, _020DBEF0 ; =UNK_021D6B14
- ldr r3, _020DBEF4 ; =UNK_021D6B34
- str r2, [r1, #0x0]
- ldr r1, [r5, #0x0]
- ldr r2, _020DBEF8 ; =UNK_021D6B2C
- ldr r4, [r1, #0x4]
- ldr r1, _020DBEFC ; =UNK_021D6B18
- str r4, [r3, #0x0]
- ldr r3, [r5, #0x0]
- ldr r6, _020DBF00 ; =UNK_021D6B1C
- ldr r3, [r3, #0x8]
- ldr r4, _020DBF04 ; =UNK_021D6B30
- str r3, [r2, #0x0]
- ldr r2, [r5, #0x0]
- ldr r3, _020DBF08 ; =UNK_021D6B24
- ldr r7, [r2, #0xc]
- ldr r2, _020DBEE4 ; =UNK_021D6B28
- str r7, [r1, #0x0]
- ldr r7, [r5, #0x0]
- ldr r1, _020DBF0C ; =UNK_021D6B20
- ldr r7, [r7, #0x10]
- add sp, sp, #0x4
- str r7, [r6, #0x0]
- ldr r6, [r5, #0x0]
- ldr r6, [r6, #0x14]
- str r6, [r4, #0x0]
- ldr r4, [r5, #0x0]
- ldr r4, [r4, #0x18]
- str r4, [r3, #0x0]
- ldr r3, [r5, #0x0]
- ldr r3, [r3, #0x1c]
- str r3, [r2, #0x0]
- ldr r2, [r5, #0x0]
- add r2, r2, #0x20
- str r2, [r1, #0x0]
- ldmia sp!, {r4-r7,lr}
- bx lr
-_020DBEAC:
- cmp r7, #0x2
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r7,lr}
- bxne lr
- bl OS_GetLockID
- ldr r1, _020DBF10 ; =UNK_021D6B4C
- strh r0, [r1, #0x0]
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_020DBED8: .word UNK_021D6B0C
-_020DBEDC: .word 0x04000204
-_020DBEE0: .word UNK_02103FE4
-_020DBEE4: .word UNK_021D6B28
-_020DBEE8: .word UNK_02103FF4
-_020DBEEC: .word UNK_02103FE8
-_020DBEF0: .word UNK_021D6B14
-_020DBEF4: .word UNK_021D6B34
-_020DBEF8: .word UNK_021D6B2C
-_020DBEFC: .word UNK_021D6B18
-_020DBF00: .word UNK_021D6B1C
-_020DBF04: .word UNK_021D6B30
-_020DBF08: .word UNK_021D6B24
-_020DBF0C: .word UNK_021D6B20
-_020DBF10: .word UNK_021D6B4C
diff --git a/arm9/asm/CTRDG_flash_AT29LV512.s b/arm9/asm/CTRDG_flash_AT29LV512_asm.s
index 33298e6c..7cfa90af 100644
--- a/arm9/asm/CTRDG_flash_AT29LV512.s
+++ b/arm9/asm/CTRDG_flash_AT29LV512_asm.s
@@ -1,13 +1,15 @@
.include "asm/macros.inc"
.include "global.inc"
- .extern UNK_0210400C
- .extern UNK_021D6B20
- .extern UNK_021D6B24
- .extern UNK_021D6B0C
- .extern UNK_021D6B38
- .extern UNK_02104048
+ .extern CTRDGi_PollingSR512kCOMMON
+ .extern AgbFlash
+ .extern CTRDGi_PollingSR
+ .extern ctrdgi_flash_lock_id
.extern UNK_021D6B08
+ .extern CTRDGi_EraseFlashChipCoreAT
+ .extern CTRDGi_EraseFlashSectorCoreAT
+ .extern AT29LV512_org
+ .extern AT29LV512_lib
.text
@@ -170,7 +172,7 @@ CTRDGi_WriteFlash4KBCoreAT: ; 0x020DC780
ldrhs r0, _020DC85C ; =0x000080FF
ldmcsia sp!, {r4-r9,lr}
bxcs lr
- ldr r1, _020DC860 ; =UNK_0210400C
+ ldr r1, _020DC860 ; =AT29LV512_lib
mov r0, r0, lsl #0x15
ldr r1, [r1, #0x24]
ldr r4, _020DC864 ; =UNK_021D6B08
@@ -179,7 +181,7 @@ CTRDGi_WriteFlash4KBCoreAT: ; 0x020DC780
ldrh r0, [r4, #0x0]
cmp r0, #0x0
beq _020DC84C
- ldr r0, _020DC868 ; =UNK_02104048
+ ldr r0, _020DC868 ; =AT29LV512_org
ldr r6, [r0, #0x24]
mov r5, #0x2
_020DC7F4:
@@ -214,9 +216,9 @@ _020DC84C:
bx lr
.balign 4
_020DC85C: .word 0x000080FF
-_020DC860: .word UNK_0210400C
+_020DC860: .word AT29LV512_lib
_020DC864: .word UNK_021D6B08
-_020DC868: .word UNK_02104048
+_020DC868: .word AT29LV512_org
arm_func_start CTRDGi_WriteFlashSectorCoreAT
CTRDGi_WriteFlashSectorCoreAT: ; 0x020DC86C
@@ -228,19 +230,19 @@ CTRDGi_WriteFlashSectorCoreAT: ; 0x020DC86C
stmia r4!, {r0-r3}
ldmia r5!, {r0-r3}
stmia r4!, {r0-r3}
- ldr r0, _020DC984 ; =UNK_021D6B0C
+ ldr r0, _020DC984 ; =ctrdgi_flash_lock_id
ldr r1, [r5, #0x0]
ldrh r0, [r0, #0x0]
str r1, [r4, #0x0]
ldr r4, [sp, #0xc]
bl OS_LockCartridge
ldr r5, _020DC988 ; =0x04000204
- ldr r1, _020DC98C ; =UNK_021D6B20
+ ldr r1, _020DC98C ; =AgbFlash
ldrh r0, [r5, #0x0]
ldr r1, [r1, #0x0]
ldrh r2, [r5, #0x0]
ldr r3, [r1, #0x10]
- ldr r1, _020DC990 ; =UNK_02104048
+ ldr r1, _020DC990 ; =AT29LV512_org
bic r2, r2, #0x3
orr r2, r2, r3
strh r2, [r5, #0x0]
@@ -271,7 +273,7 @@ _020DC91C:
bne _020DC91C
_020DC92C:
ldr ip, _020DC994 ; =0x04000208
- ldr r3, _020DC9A0 ; =UNK_021D6B24
+ ldr r3, _020DC9A0 ; =CTRDGi_PollingSR
ldrh r0, [r12, #0x0]
sub r1, r1, #0x1
mov r0, #0x1
@@ -280,7 +282,7 @@ _020DC92C:
ldr r3, [r3, #0x0]
blx r3
ldr r3, _020DC988 ; =0x04000204
- ldr r1, _020DC984 ; =UNK_021D6B0C
+ ldr r1, _020DC984 ; =ctrdgi_flash_lock_id
ldrh r2, [r3, #0x0]
mov r4, r0
bic r0, r2, #0x3
@@ -293,14 +295,14 @@ _020DC92C:
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
-_020DC984: .word UNK_021D6B0C
+_020DC984: .word ctrdgi_flash_lock_id
_020DC988: .word 0x04000204
-_020DC98C: .word UNK_021D6B20
-_020DC990: .word UNK_02104048
+_020DC98C: .word AgbFlash
+_020DC990: .word AT29LV512_org
_020DC994: .word 0x04000208
_020DC998: .word 0x0A005555
_020DC99C: .word 0x0A002AAA
-_020DC9A0: .word UNK_021D6B24
+_020DC9A0: .word CTRDGi_PollingSR
arm_func_start CTRDGi_EraseFlash4KBCoreAT
CTRDGi_EraseFlash4KBCoreAT: ; 0x020DC9A4
@@ -354,158 +356,3 @@ _020DCA18:
bx lr
.balign 4
_020DCA54: .word 0x000080FF
-
- arm_func_start CTRDGi_EraseFlashSectorCoreAT
-CTRDGi_EraseFlashSectorCoreAT: ; 0x020DCA58
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x24
- mov r5, r0
- ldmia r5!, {r0-r3}
- add r4, sp, #0x0
- stmia r4!, {r0-r3}
- ldmia r5!, {r0-r3}
- stmia r4!, {r0-r3}
- ldr r0, [r5, #0x0]
- ldr r1, _020DCB80 ; =UNK_02104048
- str r0, [r4, #0x0]
- ldr r0, _020DCB84 ; =UNK_021D6B0C
- ldrh r2, [sp, #0x20]
- ldrh r1, [r1, #0x28]
- ldrh r0, [r0, #0x0]
- mov r1, r2, lsl r1
- add r5, r1, #0xa000000
- bl OS_LockCartridge
- ldr r4, _020DCB88 ; =0x04000204
- ldr r1, _020DCB8C ; =UNK_021D6B20
- ldrh r0, [r4, #0x0]
- ldr r2, [r1, #0x0]
- ldrh r1, [r4, #0x0]
- ldr r2, [r2, #0x10]
- ldr r3, _020DCB90 ; =0x04000208
- bic r1, r1, #0x3
- orr r1, r1, r2
- strh r1, [r4, #0x0]
- ldrh r2, [r3, #0x0]
- mov r1, #0x0
- ldr r4, _020DCB94 ; =0x0A005555
- strh r1, [r3, #0x0]
- mov r3, #0xaa
- strb r3, [r4, #0x0]
- ldr r1, _020DCB98 ; =0x0A002AAA
- mov r3, #0x55
- strb r3, [r1, #0x0]
- mov r3, #0xa0
- strb r3, [r4, #0x0]
- ldr r1, _020DCB80 ; =UNK_02104048
- and r4, r0, #0x3
- ldr r1, [r1, #0x24]
- cmp r1, #0x0
- beq _020DCB18
- mov r0, #0xff
-_020DCB0C:
- strb r0, [r5], #0x1
- subs r1, r1, #0x1
- bne _020DCB0C
-_020DCB18:
- ldr ip, _020DCB90 ; =0x04000208
- ldr r3, _020DCB9C ; =UNK_021D6B24
- ldrh r0, [r12, #0x0]
- sub r1, r5, #0x1
- strh r2, [r12, #0x0]
- ldr r3, [r3, #0x0]
- mov r0, #0x1
- mov r2, #0xff
- blx r3
- ldr r2, _020DCB88 ; =0x04000204
- movs r5, r0
- ldrh r1, [r2, #0x0]
- andne r0, r5, #0xff00
- orrne r0, r0, #0x2
- movne r0, r0, lsl #0x10
- bic r1, r1, #0x3
- movne r5, r0, lsr #0x10
- orr r1, r1, r4
- ldr r0, _020DCB84 ; =UNK_021D6B0C
- strh r1, [r2, #0x0]
- ldrh r0, [r0, #0x0]
- bl OS_UnlockCartridge
- mov r0, r5
- add sp, sp, #0x24
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020DCB80: .word UNK_02104048
-_020DCB84: .word UNK_021D6B0C
-_020DCB88: .word 0x04000204
-_020DCB8C: .word UNK_021D6B20
-_020DCB90: .word 0x04000208
-_020DCB94: .word 0x0A005555
-_020DCB98: .word 0x0A002AAA
-_020DCB9C: .word UNK_021D6B24
-
- arm_func_start CTRDGi_EraseFlashChipCoreAT
-CTRDGi_EraseFlashChipCoreAT: ; 0x020DCBA0
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r0, _020DCC7C ; =UNK_021D6B0C
- ldrh r0, [r0, #0x0]
- bl OS_LockCartridge
- ldr r4, _020DCC80 ; =0x04000204
- ldr r0, _020DCC84 ; =UNK_021D6B20
- ldrh r3, [r4, #0x0]
- ldr r0, [r0, #0x0]
- ldrh r1, [r4, #0x0]
- ldr r2, [r0, #0x10]
- ldr r0, _020DCC88 ; =0x04000208
- bic r1, r1, #0x3
- orr r1, r1, r2
- strh r1, [r4, #0x0]
- ldrh r4, [r0, #0x0]
- mov r2, #0x0
- ldr r1, _020DCC8C ; =UNK_021D6B38
- strh r2, [r0, #0x0]
- ldr lr, _020DCC90 ; =0x0A005555
- str r4, [r1, #0x0]
- mov r5, #0xaa
- ldr r4, _020DCC94 ; =0x0A002AAA
- strb r5, [lr, #0x0]
- mov r12, #0x55
- strb r12, [r4, #0x0]
- mov r2, #0x80
- strb r2, [lr, #0x0]
- strb r5, [lr, #0x0]
- strb r12, [r4, #0x0]
- mov r2, #0x10
- strb r2, [lr, #0x0]
- ldrh r2, [r0, #0x0]
- ldr r2, [r1, #0x0]
- ldr r1, _020DCC98 ; =UNK_021D6B24
- strh r2, [r0, #0x0]
- ldr r4, [r1, #0x0]
- mov r0, #0x3
- mov r1, #0xa000000
- mov r2, #0xff
- and r5, r3, #0x3
- blx r4
- ldr r3, _020DCC80 ; =0x04000204
- ldr r1, _020DCC7C ; =UNK_021D6B0C
- ldrh r2, [r3, #0x0]
- mov r4, r0
- bic r0, r2, #0x3
- orr r0, r0, r5
- strh r0, [r3, #0x0]
- ldrh r0, [r1, #0x0]
- bl OS_UnlockCartridge
- mov r0, r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020DCC7C: .word UNK_021D6B0C
-_020DCC80: .word 0x04000204
-_020DCC84: .word UNK_021D6B20
-_020DCC88: .word 0x04000208
-_020DCC8C: .word UNK_021D6B38
-_020DCC90: .word 0x0A005555
-_020DCC94: .word 0x0A002AAA
-_020DCC98: .word UNK_021D6B24
diff --git a/arm9/asm/CTRDG_flash_LE26FV10N1TS-10.s b/arm9/asm/CTRDG_flash_LE26FV10N1TS-10.s
new file mode 100644
index 00000000..518ac3d7
--- /dev/null
+++ b/arm9/asm/CTRDG_flash_LE26FV10N1TS-10.s
@@ -0,0 +1,29 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .extern CTRDGi_EraseFlashChipAsyncMX
+ .extern CTRDGi_EraseFlashChipMX
+ .extern CTRDGi_EraseFlashSectorAsyncMX
+ .extern CTRDGi_EraseFlashSectorMX
+ .extern CTRDGi_PollingSR1MCOMMON
+ .extern CTRDGi_WriteFlashSectorAsyncMX
+ .extern CTRDGi_WriteFlashSectorMX
+
+ .section .rodata
+
+ .global LeMaxTime
+LeMaxTime: ; 0x02104084
+ .short 10, 10, 2000, 5000
+
+ .global LE26FV10N1TS_10
+LE26FV10N1TS_10: ; 0x0210408C
+ .word CTRDGi_WriteFlashSectorMX
+ .word CTRDGi_EraseFlashChipMX
+ .word CTRDGi_EraseFlashSectorMX
+ .word CTRDGi_WriteFlashSectorAsyncMX
+ .word CTRDGi_EraseFlashChipAsyncMX
+ .word CTRDGi_EraseFlashSectorAsyncMX
+ .word CTRDGi_PollingSR1MCOMMON
+ .word LeMaxTime
+ .byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x00, 0x13, 0x00
diff --git a/arm9/asm/CTRDG_flash_LE39FW512.s b/arm9/asm/CTRDG_flash_LE39FW512.s
index 77071a6d..26e714c0 100644
--- a/arm9/asm/CTRDG_flash_LE39FW512.s
+++ b/arm9/asm/CTRDG_flash_LE39FW512.s
@@ -1,12 +1,45 @@
.include "asm/macros.inc"
.include "global.inc"
- .extern UNK_021D6B20
- .extern UNK_021D6B24
- .extern UNK_021D6B0C
- .extern UNK_021D6B38
+ .extern CTRDGi_PollingSR512kCOMMON
+ .extern AgbFlash
+ .extern CTRDGi_PollingSR
+ .extern ctrdgi_flash_lock_id
+ .extern ctrdgi_backup_irq
.extern UNK_021D6B08
+ .section .rodata
+
+ .global leMaxTime
+leMaxTime: ; 0x021040C8
+ .byte 0x0A, 0x00, 0x0A, 0x00, 0x28, 0x00, 0xC8, 0x00
+
+ .global defaultFlash512
+defaultFlash512: ; 0x021040D0
+ .word CTRDGi_WriteFlashSectorLE
+ .word CTRDGi_EraseFlashChipLE
+ .word CTRDGi_EraseFlashSectorLE
+ .word CTRDGi_WriteFlashSectorAsyncLE
+ .word CTRDGi_EraseFlashChipAsyncLE
+ .word CTRDGi_EraseFlashSectorAsyncLE
+ .word CTRDGi_PollingSR512kCOMMON
+ .word leMaxTime
+ .byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ .global LE39FW512
+LE39FW512: ; 0x0210410C
+ .word CTRDGi_WriteFlashSectorLE
+ .word CTRDGi_EraseFlashChipLE
+ .word CTRDGi_EraseFlashSectorLE
+ .word CTRDGi_WriteFlashSectorAsyncLE
+ .word CTRDGi_EraseFlashChipAsyncLE
+ .word CTRDGi_EraseFlashSectorAsyncLE
+ .word CTRDGi_PollingSR512kCOMMON
+ .word leMaxTime
+ .byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xBF, 0x00, 0xD4, 0x00
+
.text
arm_func_start CTRDGi_WriteFlashSectorAsyncLE
@@ -95,13 +128,13 @@ CTRDGi_EraseFlashChipLE: ; 0x020DCD70
arm_func_start CTRDGi_VerifyFlashErase
CTRDGi_VerifyFlashErase: ; 0x020DCD94
stmdb sp!, {r4-r6,lr}
- ldr r2, _020DCE14 ; =UNK_021D6B0C
+ ldr r2, _020DCE14 ; =ctrdgi_flash_lock_id
mov r4, r0
ldrh r0, [r2, #0x0]
mov r5, r1
bl OS_LockCartridge
ldr ip, _020DCE18 ; =0x04000204
- ldr r0, _020DCE1C ; =UNK_021D6B20
+ ldr r0, _020DCE1C ; =AgbFlash
ldrh r3, [r12, #0x0]
ldr r0, [r0, #0x0]
ldrh r1, [r12, #0x0]
@@ -115,7 +148,7 @@ CTRDGi_VerifyFlashErase: ; 0x020DCD94
blx r5
cmp r0, #0x0
ldr r2, _020DCE18 ; =0x04000204
- ldr r0, _020DCE14 ; =UNK_021D6B0C
+ ldr r0, _020DCE14 ; =ctrdgi_flash_lock_id
ldrh r1, [r2, #0x0]
ldrne r4, _020DCE20 ; =0x00008004
bic r1, r1, #0x3
@@ -127,14 +160,14 @@ CTRDGi_VerifyFlashErase: ; 0x020DCD94
ldmia sp!, {r4-r6,lr}
bx lr
.balign 4
-_020DCE14: .word UNK_021D6B0C
+_020DCE14: .word ctrdgi_flash_lock_id
_020DCE18: .word 0x04000204
-_020DCE1C: .word UNK_021D6B20
+_020DCE1C: .word AgbFlash
_020DCE20: .word 0x00008004
arm_func_start CTRDGi_VerifyFlashCoreFF
CTRDGi_VerifyFlashCoreFF: ; 0x020DCE24
- ldr r1, _020DCE54 ; =UNK_021D6B20
+ ldr r1, _020DCE54 ; =AgbFlash
ldr r1, [r1, #0x0]
ldr r2, [r1, #0x4]
cmp r2, #0x0
@@ -149,7 +182,7 @@ _020DCE4C:
mov r0, r2
bx lr
.balign 4
-_020DCE54: .word UNK_021D6B20
+_020DCE54: .word AgbFlash
arm_func_start CTRDGi_WriteFlashSectorCoreLE
CTRDGi_WriteFlashSectorCoreLE: ; 0x020DCE58
@@ -170,7 +203,7 @@ CTRDGi_WriteFlashSectorCoreLE: ; 0x020DCE58
ldrhs r0, _020DD018 ; =0x000080FF
ldmcsia sp!, {r4-r9,lr}
bxcs lr
- ldr r0, _020DD01C ; =UNK_021D6B20
+ ldr r0, _020DD01C ; =AgbFlash
mov r9, #0x0
ldr r0, [r0, #0x0]
ldrh r0, [r0, #0x8]
@@ -214,11 +247,11 @@ _020DCF1C:
cmp r9, r5
bls _020DCF1C
_020DCF38:
- ldr r0, _020DD024 ; =UNK_021D6B0C
+ ldr r0, _020DD024 ; =ctrdgi_flash_lock_id
ldrh r0, [r0, #0x0]
bl OS_LockCartridge
ldr r5, _020DD028 ; =0x04000204
- ldr r1, _020DD01C ; =UNK_021D6B20
+ ldr r1, _020DD01C ; =AgbFlash
ldrh r0, [r5, #0x0]
ldr r3, [r1, #0x0]
ldrh r2, [r5, #0x0]
@@ -233,7 +266,7 @@ _020DCF38:
mov r2, #0x0
strh r1, [r7, #0x0]
ldrh r3, [r9, #0x0]
- ldr r1, _020DD034 ; =UNK_021D6B38
+ ldr r1, _020DD034 ; =ctrdgi_backup_irq
and r5, r0, #0x3
strh r2, [r9, #0x0]
ldrh r0, [r7, #0x0]
@@ -256,13 +289,13 @@ _020DCFA0:
bne _020DCFA0
_020DCFD4:
ldr r3, _020DD030 ; =0x04000208
- ldr r0, _020DD034 ; =UNK_021D6B38
+ ldr r0, _020DD034 ; =ctrdgi_backup_irq
ldrh r1, [r3, #0x0]
ldr r0, [r0, #0x0]
ldr r2, _020DD028 ; =0x04000204
strh r0, [r3, #0x0]
ldrh r1, [r2, #0x0]
- ldr r0, _020DD024 ; =UNK_021D6B0C
+ ldr r0, _020DD024 ; =ctrdgi_flash_lock_id
bic r1, r1, #0x3
orr r1, r1, r5
strh r1, [r2, #0x0]
@@ -274,13 +307,13 @@ _020DCFD4:
bx lr
.balign 4
_020DD018: .word 0x000080FF
-_020DD01C: .word UNK_021D6B20
+_020DD01C: .word AgbFlash
_020DD020: .word CTRDGi_VerifyFlashCoreFF
-_020DD024: .word UNK_021D6B0C
+_020DD024: .word ctrdgi_flash_lock_id
_020DD028: .word 0x04000204
_020DD02C: .word UNK_021D6B08
_020DD030: .word 0x04000208
-_020DD034: .word UNK_021D6B38
+_020DD034: .word ctrdgi_backup_irq
arm_func_start CTRDGi_ProgramFlashByteLE
CTRDGi_ProgramFlashByteLE: ; 0x020DD038
@@ -296,7 +329,7 @@ CTRDGi_ProgramFlashByteLE: ; 0x020DD038
mov r0, #0xa0
strb r0, [r12, #0x0]
ldrb r2, [lr, #0x0]
- ldr r3, _020DD094 ; =UNK_021D6B24
+ ldr r3, _020DD094 ; =CTRDGi_PollingSR
mov r0, #0x1
strb r2, [r1, #0x0]
ldrb r2, [lr, #0x0]
@@ -308,7 +341,7 @@ CTRDGi_ProgramFlashByteLE: ; 0x020DD038
.balign 4
_020DD08C: .word 0x0A005555
_020DD090: .word 0x0A002AAA
-_020DD094: .word UNK_021D6B24
+_020DD094: .word CTRDGi_PollingSR
arm_func_start CTRDGi_EraseFlashSectorCoreLE
CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098
@@ -328,11 +361,11 @@ CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098
ldrhs r0, _020DD1B8 ; =0x000080FF
ldmcsia sp!, {r4-r6,lr}
bxcs lr
- ldr r0, _020DD1BC ; =UNK_021D6B0C
+ ldr r0, _020DD1BC ; =ctrdgi_flash_lock_id
ldrh r0, [r0, #0x0]
bl OS_LockCartridge
ldr r6, _020DD1C0 ; =0x04000204
- ldr r1, _020DD1C4 ; =UNK_021D6B20
+ ldr r1, _020DD1C4 ; =AgbFlash
ldrh r3, [r6, #0x0]
ldr r0, [r1, #0x0]
ldrh r2, [r6, #0x0]
@@ -345,7 +378,7 @@ CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098
ldrh r5, [r0, #0x0]
ldrh r12, [r1, #0x8]
mov r1, #0x0
- ldr r2, _020DD1CC ; =UNK_021D6B38
+ ldr r2, _020DD1CC ; =ctrdgi_backup_irq
strh r1, [r0, #0x0]
mov r6, r4, lsl r12
ldr lr, _020DD1D0 ; =0x0A005555
@@ -364,7 +397,7 @@ CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098
strb r4, [r1, #0x0]
ldrh r4, [r0, #0x0]
ldr r4, [r2, #0x0]
- ldr r2, _020DD1D8 ; =UNK_021D6B24
+ ldr r2, _020DD1D8 ; =CTRDGi_PollingSR
strh r4, [r0, #0x0]
ldr r4, [r2, #0x0]
mov r0, #0x2
@@ -372,7 +405,7 @@ CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098
and r5, r3, #0x3
blx r4
ldr r3, _020DD1C0 ; =0x04000204
- ldr r1, _020DD1BC ; =UNK_021D6B0C
+ ldr r1, _020DD1BC ; =ctrdgi_flash_lock_id
ldrh r2, [r3, #0x0]
mov r4, r0
bic r0, r2, #0x3
@@ -386,24 +419,24 @@ CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098
bx lr
.balign 4
_020DD1B8: .word 0x000080FF
-_020DD1BC: .word UNK_021D6B0C
+_020DD1BC: .word ctrdgi_flash_lock_id
_020DD1C0: .word 0x04000204
-_020DD1C4: .word UNK_021D6B20
+_020DD1C4: .word AgbFlash
_020DD1C8: .word 0x04000208
-_020DD1CC: .word UNK_021D6B38
+_020DD1CC: .word ctrdgi_backup_irq
_020DD1D0: .word 0x0A005555
_020DD1D4: .word 0x0A002AAA
-_020DD1D8: .word UNK_021D6B24
+_020DD1D8: .word CTRDGi_PollingSR
arm_func_start CTRDGi_EraseFlashChipCoreLE
CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
- ldr r0, _020DD2B8 ; =UNK_021D6B0C
+ ldr r0, _020DD2B8 ; =ctrdgi_flash_lock_id
ldrh r0, [r0, #0x0]
bl OS_LockCartridge
ldr r4, _020DD2BC ; =0x04000204
- ldr r0, _020DD2C0 ; =UNK_021D6B20
+ ldr r0, _020DD2C0 ; =AgbFlash
ldrh r3, [r4, #0x0]
ldr r0, [r0, #0x0]
ldrh r1, [r4, #0x0]
@@ -414,7 +447,7 @@ CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC
strh r1, [r4, #0x0]
ldrh r4, [r0, #0x0]
mov r2, #0x0
- ldr r1, _020DD2C8 ; =UNK_021D6B38
+ ldr r1, _020DD2C8 ; =ctrdgi_backup_irq
strh r2, [r0, #0x0]
ldr lr, _020DD2CC ; =0x0A005555
str r4, [r1, #0x0]
@@ -431,7 +464,7 @@ CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC
strb r2, [lr, #0x0]
ldrh r2, [r0, #0x0]
ldr r2, [r1, #0x0]
- ldr r1, _020DD2D4 ; =UNK_021D6B24
+ ldr r1, _020DD2D4 ; =CTRDGi_PollingSR
strh r2, [r0, #0x0]
ldr r4, [r1, #0x0]
mov r0, #0x3
@@ -440,7 +473,7 @@ CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC
and r5, r3, #0x3
blx r4
ldr r3, _020DD2BC ; =0x04000204
- ldr r1, _020DD2B8 ; =UNK_021D6B0C
+ ldr r1, _020DD2B8 ; =ctrdgi_flash_lock_id
ldrh r2, [r3, #0x0]
mov r4, r0
bic r0, r2, #0x3
@@ -453,11 +486,11 @@ CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
-_020DD2B8: .word UNK_021D6B0C
+_020DD2B8: .word ctrdgi_flash_lock_id
_020DD2BC: .word 0x04000204
-_020DD2C0: .word UNK_021D6B20
+_020DD2C0: .word AgbFlash
_020DD2C4: .word 0x04000208
-_020DD2C8: .word UNK_021D6B38
+_020DD2C8: .word ctrdgi_backup_irq
_020DD2CC: .word 0x0A005555
_020DD2D0: .word 0x0A002AAA
-_020DD2D4: .word UNK_021D6B24
+_020DD2D4: .word CTRDGi_PollingSR
diff --git a/arm9/asm/CTRDG_flash_MX29L010.s b/arm9/asm/CTRDG_flash_MX29L010.s
index 646121f3..13de7bd7 100644
--- a/arm9/asm/CTRDG_flash_MX29L010.s
+++ b/arm9/asm/CTRDG_flash_MX29L010.s
@@ -1,12 +1,45 @@
.include "asm/macros.inc"
.include "global.inc"
- .extern UNK_021D6B20
- .extern UNK_021D6B24
- .extern UNK_021D6B0C
- .extern UNK_021D6B38
+ .extern CTRDGi_PollingSR1MCOMMON
+ .extern AgbFlash
+ .extern CTRDGi_PollingSR
+ .extern ctrdgi_flash_lock_id
+ .extern ctrdgi_backup_irq
.extern UNK_021D6B08
+ .section .rodata
+
+ .global MxMaxTime
+MxMaxTime: ; 0x02104148
+ .short 10, 10, 2000, 2000
+
+ .global MX29L010
+MX29L010: ; 0x02104150
+ .word CTRDGi_WriteFlashSectorMX
+ .word CTRDGi_EraseFlashChipMX
+ .word CTRDGi_EraseFlashSectorMX
+ .word CTRDGi_WriteFlashSectorAsyncMX
+ .word CTRDGi_EraseFlashChipAsyncMX
+ .word CTRDGi_EraseFlashSectorAsyncMX
+ .word CTRDGi_PollingSR1MCOMMON
+ .word MxMaxTime
+ .byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xC2, 0x00, 0x09, 0x00
+
+ .global defaultFlash1M
+defaultFlash1M: ; 0x0210418C
+ .word CTRDGi_WriteFlashSectorMX
+ .word CTRDGi_EraseFlashChipMX
+ .word CTRDGi_EraseFlashSectorMX
+ .word CTRDGi_WriteFlashSectorAsyncMX
+ .word CTRDGi_EraseFlashChipAsyncMX
+ .word CTRDGi_EraseFlashSectorAsyncMX
+ .word CTRDGi_PollingSR1MCOMMON
+ .word MxMaxTime
+ .byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
.text
arm_func_start CTRDGi_WriteFlashSectorAsyncMX
@@ -102,7 +135,7 @@ CTRDGi_WriteFlashSectorCoreMX: ; 0x020DD3D0
stmia r4!, {r0-r3}
ldmia r5!, {r0-r3}
stmia r4!, {r0-r3}
- ldr r0, _020DD540 ; =UNK_021D6B20
+ ldr r0, _020DD540 ; =AgbFlash
ldr r1, [r5, #0x0]
ldr r0, [r0, #0x0]
str r1, [r4, #0x0]
@@ -120,11 +153,11 @@ CTRDGi_WriteFlashSectorCoreMX: ; 0x020DD3D0
addne sp, sp, #0x28
ldmneia sp!, {r4-r8,lr}
bxne lr
- ldr r0, _020DD548 ; =UNK_021D6B0C
+ ldr r0, _020DD548 ; =ctrdgi_flash_lock_id
ldrh r0, [r0, #0x0]
bl OS_LockCartridge
ldr r7, _020DD54C ; =0x04000204
- ldr r0, _020DD540 ; =UNK_021D6B20
+ ldr r0, _020DD540 ; =AgbFlash
ldrh r3, [r7, #0x0]
ldr r2, [r0, #0x0]
ldrh r1, [r7, #0x0]
@@ -136,7 +169,7 @@ CTRDGi_WriteFlashSectorCoreMX: ; 0x020DD3D0
strh r1, [r7, #0x0]
and r7, r3, #0x3
bl CTRDGi_SetFlashBankMx
- ldr r0, _020DD540 ; =UNK_021D6B20
+ ldr r0, _020DD540 ; =AgbFlash
and r1, r5, #0xf
ldr r3, [r0, #0x0]
mov r0, r1, lsl #0x10
@@ -151,7 +184,7 @@ CTRDGi_WriteFlashSectorCoreMX: ; 0x020DD3D0
mov r3, r5, lsl r3
strh r0, [r1, #0x0]
ldrh r1, [r8, #0x0]
- ldr r0, _020DD558 ; =UNK_021D6B38
+ ldr r0, _020DD558 ; =ctrdgi_backup_irq
add r5, r3, #0xa000000
str r2, [r0, #0x0]
cmp r1, #0x0
@@ -172,13 +205,13 @@ _020DD4C8:
bne _020DD4C8
_020DD4FC:
ldr r3, _020DD554 ; =0x04000208
- ldr r0, _020DD558 ; =UNK_021D6B38
+ ldr r0, _020DD558 ; =ctrdgi_backup_irq
ldrh r1, [r3, #0x0]
ldr r0, [r0, #0x0]
ldr r2, _020DD54C ; =0x04000204
strh r0, [r3, #0x0]
ldrh r1, [r2, #0x0]
- ldr r0, _020DD548 ; =UNK_021D6B0C
+ ldr r0, _020DD548 ; =ctrdgi_flash_lock_id
bic r1, r1, #0x3
orr r1, r1, r7
strh r1, [r2, #0x0]
@@ -189,13 +222,13 @@ _020DD4FC:
ldmia sp!, {r4-r8,lr}
bx lr
.balign 4
-_020DD540: .word UNK_021D6B20
+_020DD540: .word AgbFlash
_020DD544: .word 0x000080FF
-_020DD548: .word UNK_021D6B0C
+_020DD548: .word ctrdgi_flash_lock_id
_020DD54C: .word 0x04000204
_020DD550: .word UNK_021D6B08
_020DD554: .word 0x04000208
-_020DD558: .word UNK_021D6B38
+_020DD558: .word ctrdgi_backup_irq
arm_func_start CTRDGi_ProgramFlashByteMX
CTRDGi_ProgramFlashByteMX: ; 0x020DD55C
@@ -211,7 +244,7 @@ CTRDGi_ProgramFlashByteMX: ; 0x020DD55C
mov r0, #0xa0
strb r0, [r12, #0x0]
ldrb r2, [lr, #0x0]
- ldr r3, _020DD5B8 ; =UNK_021D6B24
+ ldr r3, _020DD5B8 ; =CTRDGi_PollingSR
mov r0, #0x1
strb r2, [r1, #0x0]
ldrb r2, [lr, #0x0]
@@ -223,7 +256,7 @@ CTRDGi_ProgramFlashByteMX: ; 0x020DD55C
.balign 4
_020DD5B0: .word 0x0A005555
_020DD5B4: .word 0x0A002AAA
-_020DD5B8: .word UNK_021D6B24
+_020DD5B8: .word CTRDGi_PollingSR
arm_func_start CTRDGi_EraseFlashSectorCoreMX
CTRDGi_EraseFlashSectorCoreMX: ; 0x020DD5BC
@@ -235,7 +268,7 @@ CTRDGi_EraseFlashSectorCoreMX: ; 0x020DD5BC
stmia r4!, {r0-r3}
ldmia r5!, {r0-r3}
stmia r4!, {r0-r3}
- ldr r0, _020DD748 ; =UNK_021D6B20
+ ldr r0, _020DD748 ; =AgbFlash
ldr r1, [r5, #0x0]
ldr r0, [r0, #0x0]
str r1, [r4, #0x0]
@@ -246,11 +279,11 @@ CTRDGi_EraseFlashSectorCoreMX: ; 0x020DD5BC
ldrhs r0, _020DD74C ; =0x000080FF
ldmcsia sp!, {r4-r11,lr}
bxcs lr
- ldr r0, _020DD750 ; =UNK_021D6B0C
+ ldr r0, _020DD750 ; =ctrdgi_flash_lock_id
ldrh r0, [r0, #0x0]
bl OS_LockCartridge
ldr r5, _020DD754 ; =0x04000204
- ldr r0, _020DD748 ; =UNK_021D6B20
+ ldr r0, _020DD748 ; =AgbFlash
ldrh r3, [r5, #0x0]
ldr r2, [r0, #0x0]
ldrh r1, [r5, #0x0]
@@ -278,10 +311,10 @@ CTRDGi_EraseFlashSectorCoreMX: ; 0x020DD5BC
mov r4, #0x30
str r0, [sp, #0xc]
_020DD684:
- ldr r0, _020DD748 ; =UNK_021D6B20
+ ldr r0, _020DD748 ; =AgbFlash
ldrh r12, [r8, #0x0]
ldr r0, [r0, #0x0]
- ldr r3, _020DD75C ; =UNK_021D6B38
+ ldr r3, _020DD75C ; =ctrdgi_backup_irq
ldrh r1, [r0, #0x8]
ldr r0, [sp, #0x8]
ldr r2, [sp, #0xc]
@@ -300,10 +333,10 @@ _020DD684:
strb r6, [r3, #0x0]
strb r4, [r1, #0x0]
ldrh r3, [r8, #0x0]
- ldr r3, _020DD75C ; =UNK_021D6B38
+ ldr r3, _020DD75C ; =ctrdgi_backup_irq
ldr r3, [r3, #0x0]
strh r3, [r8, #0x0]
- ldr r3, _020DD768 ; =UNK_021D6B24
+ ldr r3, _020DD768 ; =CTRDGi_PollingSR
ldr r3, [r3, #0x0]
blx r3
str r0, [sp, #0x4]
@@ -316,7 +349,7 @@ _020DD684:
beq _020DD684
_020DD714:
ldr r2, _020DD754 ; =0x04000204
- ldr r1, _020DD750 ; =UNK_021D6B0C
+ ldr r1, _020DD750 ; =ctrdgi_flash_lock_id
ldrh r0, [r2, #0x0]
bic r3, r0, #0x3
ldr r0, [sp, #0x0]
@@ -329,25 +362,25 @@ _020DD714:
ldmia sp!, {r4-r11,lr}
bx lr
.balign 4
-_020DD748: .word UNK_021D6B20
+_020DD748: .word AgbFlash
_020DD74C: .word 0x000080FF
-_020DD750: .word UNK_021D6B0C
+_020DD750: .word ctrdgi_flash_lock_id
_020DD754: .word 0x04000204
_020DD758: .word 0x04000208
-_020DD75C: .word UNK_021D6B38
+_020DD75C: .word ctrdgi_backup_irq
_020DD760: .word 0x0A005555
_020DD764: .word 0x0A002AAA
-_020DD768: .word UNK_021D6B24
+_020DD768: .word CTRDGi_PollingSR
arm_func_start CTRDGi_EraseFlashChipCoreMX
CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
- ldr r0, _020DD848 ; =UNK_021D6B0C
+ ldr r0, _020DD848 ; =ctrdgi_flash_lock_id
ldrh r0, [r0, #0x0]
bl OS_LockCartridge
ldr r4, _020DD84C ; =0x04000204
- ldr r0, _020DD850 ; =UNK_021D6B20
+ ldr r0, _020DD850 ; =AgbFlash
ldrh r3, [r4, #0x0]
ldr r0, [r0, #0x0]
ldrh r1, [r4, #0x0]
@@ -358,7 +391,7 @@ CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C
strh r1, [r4, #0x0]
ldrh r4, [r0, #0x0]
mov r2, #0x0
- ldr r1, _020DD858 ; =UNK_021D6B38
+ ldr r1, _020DD858 ; =ctrdgi_backup_irq
strh r2, [r0, #0x0]
ldr lr, _020DD85C ; =0x0A005555
str r4, [r1, #0x0]
@@ -375,7 +408,7 @@ CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C
strb r2, [lr, #0x0]
ldrh r2, [r0, #0x0]
ldr r2, [r1, #0x0]
- ldr r1, _020DD864 ; =UNK_021D6B24
+ ldr r1, _020DD864 ; =CTRDGi_PollingSR
strh r2, [r0, #0x0]
ldr r4, [r1, #0x0]
mov r0, #0x3
@@ -384,7 +417,7 @@ CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C
and r5, r3, #0x3
blx r4
ldr r3, _020DD84C ; =0x04000204
- ldr r1, _020DD848 ; =UNK_021D6B0C
+ ldr r1, _020DD848 ; =ctrdgi_flash_lock_id
ldrh r2, [r3, #0x0]
mov r4, r0
bic r0, r2, #0x3
@@ -397,11 +430,11 @@ CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
-_020DD848: .word UNK_021D6B0C
+_020DD848: .word ctrdgi_flash_lock_id
_020DD84C: .word 0x04000204
-_020DD850: .word UNK_021D6B20
+_020DD850: .word AgbFlash
_020DD854: .word 0x04000208
-_020DD858: .word UNK_021D6B38
+_020DD858: .word ctrdgi_backup_irq
_020DD85C: .word 0x0A005555
_020DD860: .word 0x0A002AAA
-_020DD864: .word UNK_021D6B24
+_020DD864: .word CTRDGi_PollingSR
diff --git a/arm9/asm/CTRDG_flash_MX29L512.s b/arm9/asm/CTRDG_flash_MX29L512.s
index f075c9f0..eac57f63 100644
--- a/arm9/asm/CTRDG_flash_MX29L512.s
+++ b/arm9/asm/CTRDG_flash_MX29L512.s
@@ -1,9 +1,32 @@
.include "asm/macros.inc"
.include "global.inc"
+ .extern CTRDGi_EraseFlashChipAsyncLE
+ .extern CTRDGi_EraseFlashChipLE
+ .extern CTRDGi_EraseFlashSectorAsyncLE
+ .extern CTRDGi_PollingSR512kCOMMON
.extern UNK_021D6B08
- .extern UNK_021D6B20
- .extern UNK_021D6B0C
+ .extern AgbFlash
+ .extern ctrdgi_flash_lock_id
+
+ .section .rodata
+
+ .global PaMaxTime
+PaMaxTime: ; 0x021041C8
+ .byte 0x0A, 0x00, 0x0A, 0x00, 0xF4, 0x01, 0xF4, 0x01
+
+ .global MN63F805MNP
+MN63F805MNP: ; 0x021041D0
+ .word CTRDGi_WriteFlashSectorMX5
+ .word CTRDGi_EraseFlashChipLE
+ .word CTRDGi_EraseFlashSectorLE
+ .word CTRDGi_WriteFlashSectorAsyncMX5
+ .word CTRDGi_EraseFlashChipAsyncLE
+ .word CTRDGi_EraseFlashSectorAsyncLE
+ .word CTRDGi_PollingSR512kCOMMON
+ .word PaMaxTime
+ .byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x32, 0x00, 0x1B, 0x00
.text
@@ -46,7 +69,7 @@ CTRDGi_WriteFlashSectorCoreMX5: ; 0x020DD8C0
stmia r4!, {r0-r3}
ldmia r5!, {r0-r3}
stmia r4!, {r0-r3}
- ldr r0, _020DD9E8 ; =UNK_021D6B20
+ ldr r0, _020DD9E8 ; =AgbFlash
ldr r1, [r5, #0x0]
ldr r0, [r0, #0x0]
str r1, [r4, #0x0]
@@ -64,11 +87,11 @@ CTRDGi_WriteFlashSectorCoreMX5: ; 0x020DD8C0
addne sp, sp, #0x28
ldmneia sp!, {r4-r8,lr}
bxne lr
- ldr r0, _020DD9F0 ; =UNK_021D6B0C
+ ldr r0, _020DD9F0 ; =ctrdgi_flash_lock_id
ldrh r0, [r0, #0x0]
bl OS_LockCartridge
ldr r7, _020DD9F4 ; =0x04000204
- ldr r0, _020DD9E8 ; =UNK_021D6B20
+ ldr r0, _020DD9E8 ; =AgbFlash
ldrh r3, [r7, #0x0]
ldr r2, [r0, #0x0]
ldrh r1, [r7, #0x0]
@@ -103,7 +126,7 @@ _020DD984:
bne _020DD984
_020DD9B8:
ldr r2, _020DD9F4 ; =0x04000204
- ldr r0, _020DD9F0 ; =UNK_021D6B0C
+ ldr r0, _020DD9F0 ; =ctrdgi_flash_lock_id
ldrh r1, [r2, #0x0]
bic r1, r1, #0x3
orr r1, r1, r7
@@ -115,8 +138,8 @@ _020DD9B8:
ldmia sp!, {r4-r8,lr}
bx lr
.balign 4
-_020DD9E8: .word UNK_021D6B20
+_020DD9E8: .word AgbFlash
_020DD9EC: .word 0x000080FF
-_020DD9F0: .word UNK_021D6B0C
+_020DD9F0: .word ctrdgi_flash_lock_id
_020DD9F4: .word 0x04000204
_020DD9F8: .word UNK_021D6B08
diff --git a/arm9/asm/CTRDG_flash_common.s b/arm9/asm/CTRDG_flash_common.s
index aaef15fb..ed1dd88e 100644
--- a/arm9/asm/CTRDG_flash_common.s
+++ b/arm9/asm/CTRDG_flash_common.s
@@ -7,52 +7,52 @@
UNK_021D6B08: ; 0x021D6B08
.space 0x4
- .global UNK_021D6B0C
-UNK_021D6B0C: ; 0x021D6B0C
+ .global ctrdgi_flash_lock_id
+ctrdgi_flash_lock_id: ; 0x021D6B0C
.space 0x4
.global UNK_021D6B10
UNK_021D6B10: ; 0x021D6B10
.space 0x4
- .global UNK_021D6B14
-UNK_021D6B14: ; 0x021D6B14
+ .global CTRDGi_WriteAgbFlashSector
+CTRDGi_WriteAgbFlashSector: ; 0x021D6B14
.space 0x4
- .global UNK_021D6B18
-UNK_021D6B18: ; 0x021D6B18
+ .global CTRDGi_WriteAgbFlashSectorAsync
+CTRDGi_WriteAgbFlashSectorAsync: ; 0x021D6B18
.space 0x4
- .global UNK_021D6B1C
-UNK_021D6B1C: ; 0x021D6B1C
+ .global CTRDGi_EraseAgbFlashChipAsync
+CTRDGi_EraseAgbFlashChipAsync: ; 0x021D6B1C
.space 0x4
- .global UNK_021D6B20
-UNK_021D6B20: ; 0x021D6B20
+ .global AgbFlash
+AgbFlash: ; 0x021D6B20
.space 0x4
- .global UNK_021D6B24
-UNK_021D6B24: ; 0x021D6B24
+ .global CTRDGi_PollingSR
+CTRDGi_PollingSR: ; 0x021D6B24
.space 0x4
- .global UNK_021D6B28
-UNK_021D6B28: ; 0x021D6B28
+ .global ctrdgi_fl_maxtime
+ctrdgi_fl_maxtime: ; 0x021D6B28
.space 0x4
- .global UNK_021D6B2C
-UNK_021D6B2C: ; 0x021D6B2C
+ .global CTRDGi_EraseAgbFlashSector
+CTRDGi_EraseAgbFlashSector: ; 0x021D6B2C
.space 0x4
- .global UNK_021D6B30
-UNK_021D6B30: ; 0x021D6B30
+ .global CTRDGi_EraseAgbFlashSectorAsync
+CTRDGi_EraseAgbFlashSectorAsync: ; 0x021D6B30
.space 0x4
- .global UNK_021D6B34
-UNK_021D6B34: ; 0x021D6B34
+ .global CTRDGi_EraseAgbFlashChip
+CTRDGi_EraseAgbFlashChip: ; 0x021D6B34
.space 0x4
- .global UNK_021D6B38
-UNK_021D6B38: ; 0x021D6B38
+ .global ctrdgi_backup_irq
+ctrdgi_backup_irq: ; 0x021D6B38
.space 0x4
.global UNK_021D6B3C
@@ -63,8 +63,8 @@ UNK_021D6B3C: ; 0x021D6B3C
UNK_021D6B44: ; 0x021D6B44
.space 0x8
- .global UNK_021D6B4C
-UNK_021D6B4C: ; 0x021D6B4C
+ .global ctrdgi_sram_lock_id
+ctrdgi_sram_lock_id: ; 0x021D6B4C
.space 0x4
.text
@@ -103,14 +103,14 @@ CTRDG_VerifyAgbFlash:
CTRDG_WriteAgbFlashSector:
stmdb sp!, {lr}
sub sp, sp, #0x4
- ldr r2, _020DBF90 ; =UNK_021D6B14
+ ldr r2, _020DBF90 ; =CTRDGi_WriteAgbFlashSector
ldr r2, [r2, #0x0]
blx r2
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
-_020DBF90: .word UNK_021D6B14
+_020DBF90: .word CTRDGi_WriteAgbFlashSector
arm_func_start CTRDG_ReadAgbFlash
CTRDG_ReadAgbFlash: ; 0x020DBF94
@@ -178,7 +178,7 @@ CTRDGi_VerifyAgbFlashCore: ; 0x020DC04C
stmia r4!, {r0-r3}
ldmia r5!, {r0-r3}
stmia r4!, {r0-r3}
- ldr r0, _020DC128 ; =UNK_021D6B0C
+ ldr r0, _020DC128 ; =ctrdgi_flash_lock_id
ldr r1, [r5, #0x0]
ldrh r0, [r0, #0x0]
str r1, [r4, #0x0]
@@ -187,7 +187,7 @@ CTRDGi_VerifyAgbFlashCore: ; 0x020DC04C
ldr r4, [sp, #0x18]
bl OS_LockCartridge
ldr r3, _020DC12C ; =0x04000204
- ldr r0, _020DC130 ; =UNK_021D6B20
+ ldr r0, _020DC130 ; =AgbFlash
ldrh r2, [r3, #0x0]
ldrh r1, [r3, #0x0]
and r7, r2, #0x3
@@ -205,7 +205,7 @@ CTRDGi_VerifyAgbFlashCore: ; 0x020DC04C
mov r0, r0, lsl #0x10
mov r6, r0, lsr #0x10
_020DC0D4:
- ldr r1, _020DC130 ; =UNK_021D6B20
+ ldr r1, _020DC130 ; =AgbFlash
mov r0, r5
ldr r1, [r1, #0x0]
mov r2, r4
@@ -214,7 +214,7 @@ _020DC0D4:
add r1, r1, #0xa000000
bl CTRDGi_VerifyFlashSectorCore
ldr r3, _020DC12C ; =0x04000204
- ldr r1, _020DC128 ; =UNK_021D6B0C
+ ldr r1, _020DC128 ; =ctrdgi_flash_lock_id
ldrh r2, [r3, #0x0]
mov r4, r0
bic r0, r2, #0x3
@@ -227,9 +227,9 @@ _020DC0D4:
ldmia sp!, {r4-r7,lr}
bx lr
.balign 4
-_020DC128: .word UNK_021D6B0C
+_020DC128: .word ctrdgi_flash_lock_id
_020DC12C: .word 0x04000204
-_020DC130: .word UNK_021D6B20
+_020DC130: .word AgbFlash
arm_func_start CTRDGi_VerifyFlashSectorCore
CTRDGi_VerifyFlashSectorCore: ; 0x020DC134
@@ -259,7 +259,7 @@ CTRDGi_ReadAgbFlashCore: ; 0x020DC168
stmia r4!, {r0-r3}
ldmia r5!, {r0-r3}
stmia r4!, {r0-r3}
- ldr r0, _020DC25C ; =UNK_021D6B0C
+ ldr r0, _020DC25C ; =ctrdgi_flash_lock_id
ldr r1, [r5, #0x0]
ldrh r0, [r0, #0x0]
str r1, [r4, #0x0]
@@ -269,7 +269,7 @@ CTRDGi_ReadAgbFlashCore: ; 0x020DC168
ldr r4, [sp, #0x18]
bl OS_LockCartridge
ldr r3, _020DC260 ; =0x04000204
- ldr r0, _020DC264 ; =UNK_021D6B20
+ ldr r0, _020DC264 ; =AgbFlash
ldrh r2, [r3, #0x0]
ldrh r1, [r3, #0x0]
and r8, r2, #0x3
@@ -287,7 +287,7 @@ CTRDGi_ReadAgbFlashCore: ; 0x020DC168
mov r0, r0, lsl #0x10
mov r7, r0, lsr #0x10
_020DC1F4:
- ldr r0, _020DC264 ; =UNK_021D6B20
+ ldr r0, _020DC264 ; =AgbFlash
cmp r4, #0x0
ldr r0, [r0, #0x0]
sub r4, r4, #0x1
@@ -304,7 +304,7 @@ _020DC218:
bne _020DC218
_020DC22C:
ldr r2, _020DC260 ; =0x04000204
- ldr r0, _020DC25C ; =UNK_021D6B0C
+ ldr r0, _020DC25C ; =ctrdgi_flash_lock_id
ldrh r1, [r2, #0x0]
bic r1, r1, #0x3
orr r1, r1, r8
@@ -316,9 +316,9 @@ _020DC22C:
ldmia sp!, {r4-r8,lr}
bx lr
.balign 4
-_020DC25C: .word UNK_021D6B0C
+_020DC25C: .word ctrdgi_flash_lock_id
_020DC260: .word 0x04000204
-_020DC264: .word UNK_021D6B20
+_020DC264: .word AgbFlash
arm_func_start CTRDGi_PollingSR1MCOMMON
CTRDGi_PollingSR1MCOMMON: ; 0x020DC268
@@ -398,7 +398,7 @@ _020DC33C:
_020DC360: ; 0x020DC360
cmp r7, r0
beq _020DC390
- ldr r0, _020DC3AC ; =UNK_021D6B20
+ ldr r0, _020DC3AC ; =AgbFlash
ldr r0, [r0, #0x0]
ldrh r0, [r0, #0x18]
cmp r0, #0xc2
@@ -418,7 +418,7 @@ _020DC394: ; 0x020DC394
bx lr
.balign 4
_020DC3A8: .word UNK_021D6B10
-_020DC3AC: .word UNK_021D6B20
+_020DC3AC: .word AgbFlash
_020DC3B0: .word 0x0A005555
arm_func_start CTRDGi_ReadSrFunc
@@ -463,7 +463,7 @@ _020DC42C: .word UNK_021D6B10
StartFlashTimer: ; 0x020DC430
stmdb sp!, {lr}
sub sp, sp, #0x4
- ldr r1, _020DC47C ; =UNK_021D6B28
+ ldr r1, _020DC47C ; =ctrdgi_fl_maxtime
ldr r2, _020DC480 ; =UNK_021D6B10
mov r3, #0x0
ldr r1, [r1, #0x0]
@@ -481,7 +481,7 @@ StartFlashTimer: ; 0x020DC430
ldmia sp!, {lr}
bx lr
.balign 4
-_020DC47C: .word UNK_021D6B28
+_020DC47C: .word ctrdgi_fl_maxtime
_020DC480: .word UNK_021D6B10
_020DC484: .word UNK_021D6B3C
_020DC488: .word UNK_021D6B44
@@ -493,7 +493,7 @@ CTRDGi_ReadFlashID: ; 0x020DC48C
ldr r5, _020DC590 ; =0x04000208
mov r0, #0x0
ldrh r2, [r5, #0x0]
- ldr r1, _020DC594 ; =UNK_021D6B38
+ ldr r1, _020DC594 ; =ctrdgi_backup_irq
ldr r4, _020DC598 ; =0x0A005555
strh r0, [r5, #0x0]
str r2, [r1, #0x0]
@@ -527,7 +527,7 @@ _020DC4FC:
orr r4, r0, r4, lsr #0x10
ldrh r2, [r12, #0x0]
mov r0, #0x0
- ldr r1, _020DC594 ; =UNK_021D6B38
+ ldr r1, _020DC594 ; =ctrdgi_backup_irq
strh r0, [r12, #0x0]
ldr r5, _020DC598 ; =0x0A005555
str r2, [r1, #0x0]
@@ -559,7 +559,7 @@ _020DC580:
bx lr
.balign 4
_020DC590: .word 0x04000208
-_020DC594: .word UNK_021D6B38
+_020DC594: .word ctrdgi_backup_irq
_020DC598: .word 0x0A005555
_020DC59C: .word 0x0A002AAA
_020DC5A0: .word UNK_021D6B10
diff --git a/arm9/asm/CTRDG_proc.s b/arm9/asm/CTRDG_proc.s
index 3351aa2b..f9e981d0 100644
--- a/arm9/asm/CTRDG_proc.s
+++ b/arm9/asm/CTRDG_proc.s
@@ -1,7 +1,7 @@
.include "asm/macros.inc"
.include "global.inc"
- .extern UNK_021D6944
+ .extern CTRDGi_Work
.section .bss
@@ -104,7 +104,7 @@ CTRDGi_CallbackForInitModuleInfo: ; 0x020DBA2C
sub sp, sp, #0x4
and r0, r1, #0x3f
cmp r0, #0x1
- ldreq r0, _020DBA64 ; =UNK_021D6944
+ ldreq r0, _020DBA64 ; =CTRDGi_Work
moveq r1, #0x1
streqh r1, [r0, #0x0]
addeq sp, sp, #0x4
@@ -115,7 +115,7 @@ CTRDGi_CallbackForInitModuleInfo: ; 0x020DBA2C
ldmia sp!, {lr}
bx lr
.balign 4
-_020DBA64: .word UNK_021D6944
+_020DBA64: .word CTRDGi_Work
arm_func_start CTRDGi_InitModuleInfo
CTRDGi_InitModuleInfo: ; 0x020DBA68
@@ -140,7 +140,7 @@ CTRDGi_InitModuleInfo: ; 0x020DBA68
ldr r3, _020DBC58 ; =0x04000208
mov r2, #0x1
ldrh r4, [r3, #0x0]
- ldr r1, _020DBC5C ; =UNK_021D6944
+ ldr r1, _020DBC5C ; =CTRDGi_Work
mov r6, r0
strh r2, [r3, #0x0]
ldrh r0, [r1, #0x2]
@@ -173,7 +173,7 @@ CTRDGi_InitModuleInfo: ; 0x020DBA68
orr r1, r1, r5, lsl #0xf
strh r1, [r2, #0x0]
bl CTRDGi_RestoreAccessCycle
- ldr r0, _020DBC5C ; =UNK_021D6944
+ ldr r0, _020DBC5C ; =CTRDGi_Work
add r1, sp, #0x0
ldrh r0, [r0, #0x2]
bl CTRDGi_UnlockByProcessor
@@ -227,7 +227,7 @@ _020DBBDC:
mov r0, r0, lsl #0x6
orr r0, r0, #0x1
bl CTRDGi_SendtoPxi
- ldr r5, _020DBC5C ; =UNK_021D6944
+ ldr r5, _020DBC5C ; =CTRDGi_Work
ldrh r0, [r5, #0x0]
cmp r0, #0x1
beq _020DBC30
@@ -251,7 +251,7 @@ _020DBC30:
_020DBC50: .word UNK_021D6948
_020DBC54: .word 0x04000300
_020DBC58: .word 0x04000208
-_020DBC5C: .word UNK_021D6944
+_020DBC5C: .word CTRDGi_Work
_020DBC60: .word 0x04000204
_020DBC64: .word UNK_021D6960
_020DBC68: .word 0x08000080
diff --git a/arm9/asm/PXI_fifo.s b/arm9/asm/PXI_fifo.s
deleted file mode 100644
index c1980dea..00000000
--- a/arm9/asm/PXI_fifo.s
+++ /dev/null
@@ -1,269 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
- .section .bss
-
- .global UNK_021D5364
-UNK_021D5364: ; 0x021D5364
- .space 0x4
-
- .global UNK_021D5368
-UNK_021D5368: ; 0x021D5368
- .space 0x80
-
- .text
-
- arm_func_start PXIi_HandlerRecvFifoNotEmpty
-PXIi_HandlerRecvFifoNotEmpty: ; 0x020CFBBC
- stmdb sp!, {r4-r10,lr}
- sub sp, sp, #0x8
- ldr sl, _020CFCD4 ; =0x04000184
- ldr r5, _020CFCD8 ; =UNK_021D5368
- ldr r4, _020CFCDC ; =0x04000188
- mov r7, #0x4100000
- mov r6, #0x0
- mvn r8, #0x3
- mvn r9, #0x2
-_020CFBE0:
- ldrh r0, [r10, #0x0]
- ands r0, r0, #0x4000
- ldrneh r0, [r10, #0x0]
- movne r1, r9
- orrne r0, r0, #0xc000
- strneh r0, [r10, #0x0]
- bne _020CFC28
- bl OS_DisableInterrupts
- ldrh r1, [r10, #0x0]
- ands r1, r1, #0x100
- beq _020CFC18
- bl OS_RestoreInterrupts
- mov r1, r8
- b _020CFC28
-_020CFC18:
- ldr r1, [r7, #0x0]
- str r1, [sp, #0x0]
- bl OS_RestoreInterrupts
- mov r1, r6
-_020CFC28:
- cmp r1, r8
- addeq sp, sp, #0x8
- ldmeqia sp!, {r4-r10,lr}
- bxeq lr
- mvn r0, #0x2
- cmp r1, r0
- beq _020CFBE0
- ldr r1, [sp, #0x0]
- mov r0, r1, lsl #0x1b
- movs r0, r0, lsr #0x1b
- beq _020CFBE0
- ldr r3, [r5, r0, lsl #0x2]
- cmp r3, #0x0
- beq _020CFC74
- mov r2, r1, lsl #0x1a
- mov r1, r1, lsr #0x6
- mov r2, r2, lsr #0x1f
- blx r3
- b _020CFBE0
-_020CFC74:
- mov r0, r1, lsl #0x1a
- movs r0, r0, lsr #0x1f
- bne _020CFBE0
- orr r0, r1, #0x20
- str r0, [sp, #0x0]
- ldrh r0, [r10, #0x0]
- ands r0, r0, #0x4000
- ldrneh r0, [r10, #0x0]
- orrne r0, r0, #0xc000
- strneh r0, [r10, #0x0]
- bne _020CFBE0
- bl OS_DisableInterrupts
- ldrh r1, [r10, #0x0]
- ands r1, r1, #0x2
- beq _020CFCB8
- bl OS_RestoreInterrupts
- b _020CFBE0
-_020CFCB8:
- ldr r1, [sp, #0x0]
- str r1, [r4, #0x0]
- bl OS_RestoreInterrupts
- b _020CFBE0
-_020CFCC8:
- add sp, sp, #0x8
- ldmia sp!, {r4-r10, lr}
- bx lr
-_020CFCD4: .word 0x04000184
-_020CFCD8: .word UNK_021D5368
-_020CFCDC: .word 0x04000188
-
- arm_func_start PXI_SendWordByFifo
-PXI_SendWordByFifo:
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r3, [sp, #0x0]
- and r0, r0, #0x1f
- bic r3, r3, #0x1f
- orr r12, r3, r0
- bic r3, r12, #0x20
- and r0, r2, #0x1
- orr r3, r3, r0, lsl #0x5
- str r12, [sp, #0x0]
- and r2, r3, #0x3f
- bic r0, r1, #0xfc000000
- orr r0, r2, r0, lsl #0x6
- str r3, [sp, #0x0]
- ldr r2, _020CFD8C ; =0x04000184
- str r0, [sp, #0x0]
- ldrh r0, [r2, #0x0]
- ands r0, r0, #0x4000
- ldrneh r1, [r2, #0x0]
- addne sp, sp, #0x4
- mvnne r0, #0x0
- orrne r1, r1, #0xc000
- strneh r1, [r2, #0x0]
- ldmneia sp!, {lr}
- bxne lr
- bl OS_DisableInterrupts
- ldr r1, _020CFD8C ; =0x04000184
- ldrh r1, [r1, #0x0]
- ands r1, r1, #0x2
- beq _020CFD6C
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- mvn r0, #0x1
- ldmia sp!, {lr}
- bx lr
-_020CFD6C:
- ldr r2, [sp, #0x0]
- ldr r1, _020CFD90 ; =0x04000188
- str r2, [r1, #0x0]
- bl OS_RestoreInterrupts
-_020CFD7C:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmfd sp!, {lr}
- bx lr
-_020CFD8C: .word 0x04000184
-_020CFD90: .word 0x04000188
-
- arm_func_start PXI_IsCallbackReady
-PXI_IsCallbackReady:
- ldr r2, _020CFDB8 ; =0x027FFC00
- mov r3, #0x1
- add r1, r2, r1, lsl #0x2
- mov r2, r3, lsl r0
- ldr r0, [r1, #0x388]
- ands r0, r2, r0
- moveq r3, #0x0
- mov r0, r3
- bx lr
- .balign 4
-_020CFDB8: .word 0x027FFC00
-
- arm_func_start PXI_SetFifoRecvCallback
-PXI_SetFifoRecvCallback: ; 0x020CFDBC
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r4, r0
- mov r5, r1
- bl OS_DisableInterrupts
- ldr r1, _020CFE20 ; =UNK_021D5368
- cmp r5, #0x0
- str r5, [r1, r4, lsl #0x2]
- beq _020CFDF8
- ldr r3, _020CFE24 ; =0x027FFC00
- mov r1, #0x1
- ldr r2, [r3, #0x388]
- orr r1, r2, r1, lsl r4
- str r1, [r3, #0x388]
- b _020CFE10
-_020CFDF8:
- ldr r3, _020CFE24 ; =0x027FFC00
- mov r1, #0x1
- mvn r1, r1, lsl r4
- ldr r2, [r3, #0x388]
- and r1, r2, r1
- str r1, [r3, #0x388]
-_020CFE10:
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020CFE20: .word UNK_021D5368
-_020CFE24: .word 0x027FFC00
-
- arm_func_start PXI_InitFifo
-PXI_InitFifo: ; 0x020CFE28
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- bl OS_DisableInterrupts
- ldr r1, _020CFF18 ; =UNK_021D5364
- mov r4, r0
- ldrh r0, [r1, #0x0]
- cmp r0, #0x0
- bne _020CFF04
- mov r2, #0x1
- ldr r0, _020CFF1C ; =0x027FFC00
- strh r2, [r1, #0x0]
- mov r2, #0x0
- str r2, [r0, #0x388]
- ldr r0, _020CFF20 ; =UNK_021D5368
- mov r1, r2
-_020CFE64:
- str r1, [r0, r2, lsl #0x2]
- add r2, r2, #0x1
- cmp r2, #0x20
- blt _020CFE64
- ldr r2, _020CFF24 ; =0x0000C408
- ldr r1, _020CFF28 ; =0x04000184
- mov r0, #0x40000
- strh r2, [r1, #0x0]
- bl OS_ResetRequestIrqMask
- ldr r1, _020CFF2C ; =PXIi_HandlerRecvFifoNotEmpty
- mov r0, #0x40000
- bl OS_SetIrqFunction
- mov r0, #0x40000
- bl OS_EnableIrqMask
- mov r12, #0x0
- ldr r3, _020CFF30 ; =0x04000180
- mov r1, r12
- mov r2, #0x3e8
-_020CFEAC:
- ldrh r0, [r3, #0x0]
- ands lr, r0, #0xf
- mov r0, lr, lsl #0x8
- strh r0, [r3, #0x0]
- bne _020CFEC8
- cmp r12, #0x4
- bgt _020CFF04
-_020CFEC8:
- ldrh r0, [r3, #0x0]
- mov r5, r2
- and r0, r0, #0xf
- cmp r0, lr
- bne _020CFEFC
-_020CFEDC:
- cmp r5, #0x0
- movle r12, r1
- ble _020CFEFC
- ldrh r0, [r3, #0x0]
- sub r5, r5, #0x1
- and r0, r0, #0xf
- cmp r0, lr
- beq _020CFEDC
-_020CFEFC:
- add r12, r12, #0x1
- b _020CFEAC
-_020CFF04:
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020CFF18: .word UNK_021D5364
-_020CFF1C: .word 0x027FFC00
-_020CFF20: .word UNK_021D5368
-_020CFF24: .word 0x0000C408
-_020CFF28: .word 0x04000184
-_020CFF2C: .word PXIi_HandlerRecvFifoNotEmpty
-_020CFF30: .word 0x04000180
diff --git a/arm9/asm/options.s b/arm9/asm/options.s
deleted file mode 100644
index 14d2a449..00000000
--- a/arm9/asm/options.s
+++ /dev/null
@@ -1,239 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .extern gMain
-
- .text
-
- thumb_func_start FUN_02024F30
-FUN_02024F30: ; 0x02024F30
- push {r4, lr}
- mov r1, #0x2
- bl AllocFromHeap
- add r4, r0, #0x0
- bl Options_init
- add r0, r4, #0x0
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02024F44
-FUN_02024F44: ; 0x02024F44
- ldr r3, _02024F4C ; =MI_CpuCopy8
- mov r2, #0x2
- bx r3
- nop
-_02024F4C: .word MI_CpuCopy8
-
- thumb_func_start Options_init
-Options_init: ; 0x02024F50
- push {r4, lr}
- add r4, r0, #0x0
- mov r1, #0x0
- mov r2, #0x2
- bl MI_CpuFill8
- ldrh r1, [r4, #0x0]
- mov r0, #0xf
- bic r1, r0
- mov r0, #0x1
- orr r0, r1
- strh r0, [r4, #0x0]
- ldrh r1, [r4, #0x0]
- mov r0, #0x30
- bic r1, r0
- strh r1, [r4, #0x0]
- ldrh r1, [r4, #0x0]
- mov r0, #0x40
- bic r1, r0
- strh r1, [r4, #0x0]
- ldrh r1, [r4, #0x0]
- mov r0, #0x80
- bic r1, r0
- strh r1, [r4, #0x0]
- ldrh r1, [r4, #0x0]
- ldr r0, _02024F94 ; =0xFFFFFCFF
- and r0, r1
- strh r0, [r4, #0x0]
- ldrh r1, [r4, #0x0]
- ldr r0, _02024F98 ; =0xFFFF83FF
- and r0, r1
- strh r0, [r4, #0x0]
- pop {r4, pc}
- nop
-_02024F94: .word 0xFFFFFCFF
-_02024F98: .word 0xFFFF83FF
-
- thumb_func_start FUN_02024F9C
-FUN_02024F9C: ; 0x02024F9C
- push {r3, lr}
- cmp r0, #0x0
- beq _02024FAC
- bl Sav2_PlayerData_GetOptionsAddr
- bl FUN_02025064
- add r1, r0, #0x0
-_02024FAC:
- cmp r1, #0x0
- beq _02024FCA
- cmp r1, #0x1
- beq _02024FBA
- cmp r1, #0x2
- beq _02024FC2
- b _02024FCA
-_02024FBA:
- ldr r0, _02024FD4 ; =gMain
- mov r1, #0x1
- str r1, [r0, #0x34]
- pop {r3, pc}
-_02024FC2:
- ldr r0, _02024FD4 ; =gMain
- mov r1, #0x3
- str r1, [r0, #0x34]
- pop {r3, pc}
-_02024FCA:
- ldr r0, _02024FD4 ; =gMain
- mov r1, #0x0
- str r1, [r0, #0x34]
- pop {r3, pc}
- nop
-_02024FD4: .word gMain
-
- thumb_func_start FUN_02024FD8
-FUN_02024FD8: ; 0x02024FD8
- ldrh r0, [r0, #0x0]
- lsl r0, r0, #0x1c
- lsr r0, r0, #0x1c
- bx lr
-
- thumb_func_start FUN_02024FE0
-FUN_02024FE0: ; 0x02024FE0
- ldrh r3, [r0, #0x0]
- mov r2, #0xf
- lsl r1, r1, #0x10
- bic r3, r2
- lsr r2, r1, #0x10
- mov r1, #0xf
- and r1, r2
- orr r1, r3
- strh r1, [r0, #0x0]
- bx lr
-
- thumb_func_start FUN_02024FF4
-FUN_02024FF4: ; 0x02024FF4
- push {r3, lr}
- bl FUN_02024FD8
- cmp r0, #0x0
- bne _02025002
- mov r0, #0x8
- pop {r3, pc}
-_02025002:
- cmp r0, #0x1
- bne _0202500A
- mov r0, #0x4
- pop {r3, pc}
-_0202500A:
- mov r0, #0x1
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_02025010
-FUN_02025010: ; 0x02025010
- ldrh r0, [r0, #0x0]
- lsl r0, r0, #0x1a
- lsr r0, r0, #0x1e
- bx lr
-
- thumb_func_start FUN_02025018
-FUN_02025018: ; 0x02025018
- lsl r1, r1, #0x10
- lsr r1, r1, #0x10
- lsl r1, r1, #0x1e
- ldrh r3, [r0, #0x0]
- mov r2, #0x30
- lsr r1, r1, #0x1a
- bic r3, r2
- orr r1, r3
- strh r1, [r0, #0x0]
- bx lr
-
- thumb_func_start FUN_0202502C
-FUN_0202502C: ; 0x0202502C
- ldrh r0, [r0, #0x0]
- lsl r0, r0, #0x18
- lsr r0, r0, #0x1f
- bx lr
-
- thumb_func_start FUN_02025034
-FUN_02025034: ; 0x02025034
- lsl r1, r1, #0x10
- lsr r1, r1, #0x10
- lsl r1, r1, #0x1f
- ldrh r3, [r0, #0x0]
- mov r2, #0x80
- lsr r1, r1, #0x18
- bic r3, r2
- orr r1, r3
- strh r1, [r0, #0x0]
- bx lr
-
- thumb_func_start FUN_02025048
-FUN_02025048: ; 0x02025048
- ldrh r0, [r0, #0x0]
- lsl r0, r0, #0x19
- lsr r0, r0, #0x1f
- bx lr
-
- thumb_func_start FUN_02025050
-FUN_02025050: ; 0x02025050
- lsl r1, r1, #0x10
- lsr r1, r1, #0x10
- lsl r1, r1, #0x1f
- ldrh r3, [r0, #0x0]
- mov r2, #0x40
- lsr r1, r1, #0x19
- bic r3, r2
- orr r1, r3
- strh r1, [r0, #0x0]
- bx lr
-
- thumb_func_start FUN_02025064
-FUN_02025064: ; 0x02025064
- ldrh r0, [r0, #0x0]
- lsl r0, r0, #0x16
- lsr r0, r0, #0x1e
- bx lr
-
- thumb_func_start FUN_0202506C
-FUN_0202506C: ; 0x0202506C
- lsl r1, r1, #0x10
- lsr r1, r1, #0x10
- lsl r1, r1, #0x1e
- ldrh r3, [r0, #0x0]
- ldr r2, _02025080 ; =0xFFFFFCFF
- lsr r1, r1, #0x16
- and r2, r3
- orr r1, r2
- strh r1, [r0, #0x0]
- bx lr
- .balign 4
-_02025080: .word 0xFFFFFCFF
-
- thumb_func_start FUN_02025084
-FUN_02025084: ; 0x02025084
- ldrh r0, [r0, #0x0]
- lsl r0, r0, #0x11
- lsr r0, r0, #0x1b
- bx lr
-
- thumb_func_start FUN_0202508C
-FUN_0202508C: ; 0x0202508C
- lsl r1, r1, #0x10
- lsr r1, r1, #0x10
- lsl r1, r1, #0x1b
- ldrh r3, [r0, #0x0]
- ldr r2, _020250A0 ; =0xFFFF83FF
- lsr r1, r1, #0x11
- and r2, r3
- orr r1, r2
- strh r1, [r0, #0x0]
- bx lr
- .balign 4
-_020250A0: .word 0xFFFF83FF
diff --git a/arm9/asm/scrcmd.s b/arm9/asm/scrcmd.s
index 2f0cb3ef..c5ae760b 100644
--- a/arm9/asm/scrcmd.s
+++ b/arm9/asm/scrcmd.s
@@ -2248,7 +2248,7 @@ FUN_0203AAA0: ; 0x0203AAA0
ldr r1, _0203AAF8 ; =UNK_020F34E0
ldr r2, _0203AAF4 ; =0x000003D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r6, #0x0]
ldr r1, _0203AAFC ; =FUN_0203AB00
add r0, r5, #0x0
diff --git a/arm9/asm/scrcmd_7.s b/arm9/asm/scrcmd_7.s
index 7ae38f49..01c0425f 100644
--- a/arm9/asm/scrcmd_7.s
+++ b/arm9/asm/scrcmd_7.s
@@ -366,7 +366,7 @@ FUN_02041970: ; 0x02041970
add r5, r0, #0x0
ldrh r0, [r4, #0x0]
bl FUN_020395F4
- bl FUN_0203962C
+ bl Field_TrainerIsDoubleBattle
lsl r0, r0, #0x10
lsr r0, r0, #0x10
bne _020419D2
@@ -430,7 +430,7 @@ FUN_020419F8: ; 0x020419F8
add r5, r0, #0x0
ldrh r0, [r4, #0x0]
bl FUN_020395F4
- bl FUN_0203962C
+ bl Field_TrainerIsDoubleBattle
lsl r0, r0, #0x10
lsr r0, r0, #0x10
bne _02041A5A
@@ -478,7 +478,7 @@ FUN_02041A80: ; 0x02041A80
add r5, r0, #0x0
ldrh r0, [r4, #0x0]
bl FUN_020395F4
- bl FUN_0203962C
+ bl Field_TrainerIsDoubleBattle
strh r0, [r5, #0x0]
mov r0, #0x0
pop {r3-r5, pc}
diff --git a/arm9/asm/unk_02001B80.s b/arm9/asm/unk_02001B80.s
index ff804a2f..3ad4b3b7 100644
--- a/arm9/asm/unk_02001B80.s
+++ b/arm9/asm/unk_02001B80.s
@@ -755,8 +755,8 @@ FUN_020020B0: ; 0x020020B0
pop {r3-r7, pc}
.balign 4
- thumb_func_start FUN_020020EC
-FUN_020020EC: ; 0x020020EC
+ thumb_func_start CreateYesNoMenu
+CreateYesNoMenu: ; 0x020020EC
push {r3-r7, lr}
sub sp, #0x20
ldr r5, [sp, #0x3c]
@@ -777,13 +777,13 @@ FUN_020020EC: ; 0x020020EC
mov r2, #0x29
mov r3, #0x0
add r6, r0, #0x0
- bl ListMenu_ItemFromMsgData
+ bl ListMenu_ItemFromMsgData ; YES
mov r3, #0x2a
add r2, r3, #0x0
add r0, r6, #0x0
add r1, r4, #0x0
sub r3, #0x2c
- bl ListMenu_ItemFromMsgData
+ bl ListMenu_ItemFromMsgData ; NO
add r0, r4, #0x0
bl DestroyMsgData
add r0, r5, #0x0
@@ -834,15 +834,15 @@ FUN_020020EC: ; 0x020020EC
nop
_02002194: .word 0x00000141
- thumb_func_start FUN_02002198
-FUN_02002198: ; 0x02002198
+ thumb_func_start Std_CreateYesNoMenu
+Std_CreateYesNoMenu: ; 0x02002198
push {r4, lr}
sub sp, #0x8
mov r4, #0x0
str r4, [sp, #0x0]
ldr r4, [sp, #0x10]
str r4, [sp, #0x4]
- bl FUN_020020EC
+ bl CreateYesNoMenu
add sp, #0x8
pop {r4, pc}
diff --git a/arm9/asm/unk_020377F0.s b/arm9/asm/unk_020377F0.s
index e7d630f6..9d5e2f32 100644
--- a/arm9/asm/unk_020377F0.s
+++ b/arm9/asm/unk_020377F0.s
@@ -2478,7 +2478,7 @@ FUN_020389CC: ; 0x020389CC
mov r0, #0x0
str r0, [r4, #0x18]
ldr r0, [sp, #0x0]
- bl FUN_02025084
+ bl Options_GetFrame
str r0, [r4, #0x1c]
lsl r1, r6, #0x18
ldr r0, [r5, #0xc]
diff --git a/arm9/asm/unk_02038C78.s b/arm9/asm/unk_02038C78.s
index d16d93f2..f35fd58e 100644
--- a/arm9/asm/unk_02038C78.s
+++ b/arm9/asm/unk_02038C78.s
@@ -879,7 +879,7 @@ FUN_02038C78: ; 0x02038C78
add r5, r0, #0x0
add r6, r1, #0x0
add r7, r2, #0x0
- bl FUN_02038E20
+ bl CreateFieldContext
add r4, r0, #0x0
mov r0, #0x0
str r0, [sp, #0x0]
@@ -932,7 +932,7 @@ FUN_02038CD8: ; 0x02038CD8
add r5, r3, #0x0
bl FUN_02046528
str r0, [sp, #0x8]
- bl FUN_02038E20
+ bl CreateFieldContext
add r4, r0, #0x0
ldr r0, [sp, #0x8]
ldr r3, [sp, #0x4]
@@ -958,7 +958,7 @@ FUN_02038D10: ; 0x02038D10
add r7, r2, #0x0
bl FUN_02046528
str r0, [sp, #0x4]
- bl FUN_02038E20
+ bl CreateFieldContext
add r4, r0, #0x0
mov r0, #0x0
str r0, [sp, #0x0]
@@ -1031,7 +1031,7 @@ _02038DA8:
cmp r0, #0x0
bne _02038DD2
add r0, r6, #0x0
- bl FUN_02038E48
+ bl DeleteScriptContext
ldrb r0, [r4, #0x9]
cmp r0, #0x0
bne _02038DC8
@@ -1081,8 +1081,8 @@ _02038E1A:
add sp, #0x8
pop {r3-r7, pc}
- thumb_func_start FUN_02038E20
-FUN_02038E20: ; 0x02038E20
+ thumb_func_start CreateFieldContext
+CreateFieldContext: ; 0x02038E20
push {r4, lr}
mov r0, #0xb
mov r1, #0xdc
@@ -1102,8 +1102,8 @@ _02038E32:
.balign 4
_02038E44: .word 0x0003643F
- thumb_func_start FUN_02038E48
-FUN_02038E48: ; 0x02038E48
+ thumb_func_start DeleteScriptContext
+DeleteScriptContext: ; 0x02038E48
push {r4, lr}
add r4, r0, #0x0
ldr r0, [r4, #0x78]
@@ -2139,8 +2139,8 @@ _02039622:
nop
_02039628: .word 0x00001388
- thumb_func_start FUN_0203962C
-FUN_0203962C: ; 0x0203962C
+ thumb_func_start Field_TrainerIsDoubleBattle
+Field_TrainerIsDoubleBattle: ; 0x0203962C
push {r3, lr}
mov r1, #0x9
bl TrainerData_GetAttr
@@ -2443,17 +2443,17 @@ _02039856:
nop
_02039870: .word 0x0000FFFF
- thumb_func_start FUN_02039874
-FUN_02039874: ; 0x02039874
- ldr r3, _0203987C ; =FUN_02039880
+ thumb_func_start RunPokemonCenterScriptsInNewContext
+RunPokemonCenterScriptsInNewContext: ; 0x02039874
+ ldr r3, _0203987C ; =RunScriptInNewContext
mov r1, #0x96
lsl r1, r1, #0x6
bx r3
.balign 4
-_0203987C: .word FUN_02039880
+_0203987C: .word RunScriptInNewContext
- thumb_func_start FUN_02039880
-FUN_02039880: ; 0x02039880
+ thumb_func_start RunScriptInNewContext
+RunScriptInNewContext: ; 0x02039880
push {r4, lr}
bl CreateScriptContext
add r4, r0, #0x0
@@ -2463,7 +2463,7 @@ _02039888:
cmp r0, #0x1
beq _02039888
add r0, r4, #0x0
- bl FUN_02038E48
+ bl DeleteScriptContext
pop {r4, pc}
.balign 4
@@ -2503,7 +2503,7 @@ _020398CE:
b _020398E2
_020398DC:
add r0, r5, #0x0
- bl FUN_02039880
+ bl RunScriptInNewContext
_020398E2:
mov r0, #0x1
pop {r3-r5, pc}
diff --git a/arm9/asm/unk_020476CC.s b/arm9/asm/unk_020476CC.s
index 568c4b5d..8eac1942 100644
--- a/arm9/asm/unk_020476CC.s
+++ b/arm9/asm/unk_020476CC.s
@@ -116,7 +116,7 @@ _02047774:
lsl r1, r1, #0x4
str r0, [r7, r1]
add r0, r5, #0x0
- bl FUN_02024F30
+ bl Options_new
mov r1, #0x13
lsl r1, r1, #0x4
str r0, [r7, r1]
@@ -237,7 +237,7 @@ FUN_02047814: ; 0x02047814
lsl r1, r1, #0x4
ldr r0, [sp, #0x14]
ldr r1, [r4, r1]
- bl FUN_02024F44
+ bl Options_copy
add r0, r5, #0x0
bl Script_GetTimeOfDay
mov r1, #0x16
@@ -513,7 +513,7 @@ FUN_02047A78: ; 0x02047A78
lsl r1, r1, #0x4
ldr r0, [sp, #0xc]
ldr r1, [r5, r1]
- bl FUN_02024F44
+ bl Options_copy
ldr r1, [sp, #0x8]
add r0, r5, #0x0
mov r2, #0x0
@@ -712,7 +712,7 @@ _02047C98:
lsl r1, r1, #0x4
ldr r0, [sp, #0x4]
ldr r1, [r6, r1]
- bl FUN_02024F44
+ bl Options_copy
ldr r1, [sp, #0x8]
add r0, r6, #0x0
mov r2, #0x0
@@ -896,7 +896,7 @@ _02047E2C:
lsl r1, r1, #0x4
ldr r0, [sp, #0x10]
ldr r1, [r5, r1]
- bl FUN_02024F44
+ bl Options_copy
ldr r1, [sp, #0x14]
add r0, r5, #0x0
mov r2, #0x0
diff --git a/arm9/asm/unk_02048904.s b/arm9/asm/unk_02048904.s
index 4ca21350..d9259556 100644
--- a/arm9/asm/unk_02048904.s
+++ b/arm9/asm/unk_02048904.s
@@ -599,7 +599,7 @@ FUN_02048D90: ; 0x02048D90
add r4, r0, #0x0
mov r1, #0x0
str r1, [r4, #0x6c]
- bl FUN_02039874
+ bl RunPokemonCenterScriptsInNewContext
ldr r1, _02048DA8 ; =FUN_02048D34
add r0, r4, #0x0
mov r2, #0x0
@@ -2040,7 +2040,7 @@ _020498DC:
ldr r0, [r5, #0x8]
ldr r1, _02049ABC ; =UNK_020F46D8
ldr r2, _02049AB8 ; =0x000003D9
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #0x3c]
mov r0, #0x2
str r0, [r4, #0x0]
diff --git a/arm9/asm/unk_02054590.s b/arm9/asm/unk_02054590.s
index 772871af..6f52c967 100644
--- a/arm9/asm/unk_02054590.s
+++ b/arm9/asm/unk_02054590.s
@@ -74,7 +74,7 @@ FUN_02054608: ; 0x02054608
bl FUN_0201AB08
add r6, r0, #0x0
add r0, r4, #0x0
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp, #0x0]
@@ -119,7 +119,7 @@ FUN_02054658: ; 0x02054658
mov r0, #0x0
bl FUN_02002BB8
add r0, r6, #0x0
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
mov r3, #0x0
str r3, [sp, #0x0]
str r0, [sp, #0x4]
@@ -131,8 +131,8 @@ FUN_02054658: ; 0x02054658
add sp, #0xc
pop {r3-r6, pc}
- thumb_func_start FUN_02054690
-FUN_02054690: ; 0x02054690
+ thumb_func_start DrawFieldMessage
+DrawFieldMessage: ; 0x02054690
push {r4-r7, lr}
sub sp, #0xc
add r5, r0, #0x0
diff --git a/arm9/asm/unk_0205C598.s b/arm9/asm/unk_0205C598.s
index 8429979f..ac7a6808 100644
--- a/arm9/asm/unk_0205C598.s
+++ b/arm9/asm/unk_0205C598.s
@@ -241,7 +241,7 @@ FUN_0205C73C: ; 0x0205C73C
str r0, [r5, #0xc]
lsl r0, r0, #0x10
lsr r0, r0, #0x10
- bl FUN_0203962C
+ bl Field_TrainerIsDoubleBattle
str r0, [r5, #0x10]
str r4, [r5, #0x14]
pop {r3-r5, pc}
diff --git a/arm9/asm/unk_020625EC.s b/arm9/asm/unk_020625EC.s
index 9809241c..8383e9bb 100644
--- a/arm9/asm/unk_020625EC.s
+++ b/arm9/asm/unk_020625EC.s
@@ -101,11 +101,11 @@ FUN_020625EC: ; 0x020625EC
str r0, [r4, r1]
add r0, r6, #0x0
bl Sav2_PlayerData_GetOptionsAddr
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
strh r0, [r4, #0x1a]
add r0, r6, #0x0
bl Sav2_PlayerData_GetOptionsAddr
- bl FUN_02025084
+ bl Options_GetFrame
strh r0, [r4, #0x1c]
str r4, [r7, #0x8]
mov r0, #0x1
@@ -430,7 +430,7 @@ FUN_020628BC: ; 0x020628BC
ldr r0, [r0, #0x0]
ldr r2, _020628E4 ; =0x000003D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
add r4, #0xc8
str r0, [r4, #0x0]
add sp, #0x4
diff --git a/arm9/asm/unk_020653EC.s b/arm9/asm/unk_020653EC.s
index 1cf56132..45f5de1d 100644
--- a/arm9/asm/unk_020653EC.s
+++ b/arm9/asm/unk_020653EC.s
@@ -67,11 +67,11 @@ FUN_020653EC: ; 0x020653EC
add r6, r0, #0x0
strb r1, [r4, #0x1a]
bl Sav2_PlayerData_GetOptionsAddr
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
strb r0, [r4, #0x16]
add r0, r6, #0x0
bl Sav2_PlayerData_GetOptionsAddr
- bl FUN_02025084
+ bl Options_GetFrame
strh r0, [r4, #0x14]
add r0, r4, #0x0
ldr r2, [r4, #0x0]
@@ -2192,7 +2192,7 @@ FUN_02066520: ; 0x02066520
ldr r0, [r4, r0]
ldr r2, _02066548 ; =0x000003D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
mov r1, #0x5a
lsl r1, r1, #0x2
str r0, [r4, r1]
diff --git a/arm9/asm/unk_0206C700.s b/arm9/asm/unk_0206C700.s
index f5a0873e..8e89581c 100644
--- a/arm9/asm/unk_0206C700.s
+++ b/arm9/asm/unk_0206C700.s
@@ -1314,7 +1314,7 @@ _0206D1F0:
ldr r0, [r4, #0x0]
mov r2, #0x1
mov r3, #0x8
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #0x40]
add r0, r4, #0x0
add r0, #0x64
@@ -1537,7 +1537,7 @@ _0206D3CC:
ldr r0, [r4, #0x0]
mov r2, #0x1
mov r3, #0x8
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #0x40]
add r0, r4, #0x0
add r0, #0x64
@@ -2343,7 +2343,7 @@ _0206DA26:
mov r1, #0x4
bl FUN_02018744
ldr r0, [r5, #0x2c]
- bl FUN_02025084
+ bl Options_GetFrame
add r6, r0, #0x0
lsl r0, r6, #0x18
lsr r0, r0, #0x18
@@ -2675,7 +2675,7 @@ FUN_0206DD6C: ; 0x0206DD6C
mov r1, #0xff
bl FUN_02019620
ldr r0, [r4, #0x2c]
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
mov r3, #0x0
str r3, [sp, #0x0]
str r0, [sp, #0x4]
diff --git a/arm9/asm/unk_0206F3FC.s b/arm9/asm/unk_0206F3FC.s
index 8d7d828a..e09b1ec4 100644
--- a/arm9/asm/unk_0206F3FC.s
+++ b/arm9/asm/unk_0206F3FC.s
@@ -1310,7 +1310,7 @@ FUN_0206FD24: ; 0x0206FD24
ldr r0, _0206FE70 ; =0x000005A4
ldr r0, [r5, r0]
ldr r0, [r0, #0xc]
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp, #0x0]
diff --git a/arm9/asm/unk_02072548.s b/arm9/asm/unk_02072548.s
index f6f09ad1..5b3ed0a3 100644
--- a/arm9/asm/unk_02072548.s
+++ b/arm9/asm/unk_02072548.s
@@ -1664,7 +1664,7 @@ FUN_0207322C: ; 0x0207322C
ldr r0, _0207326C ; =0x000005A4
ldr r0, [r4, r0]
ldr r0, [r0, #0xc]
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
mov r3, #0x0
str r3, [sp, #0x0]
str r0, [sp, #0x4]
@@ -1741,7 +1741,7 @@ FUN_020732CC: ; 0x020732CC
ldr r1, _020732EC ; =UNK_020F96EC
mov r2, #0x1
mov r3, #0xe
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
ldr r1, _020732F0 ; =0x000006FC
str r0, [r4, r1]
add sp, #0x4
diff --git a/arm9/asm/unk_020772F0.s b/arm9/asm/unk_020772F0.s
index 7a24d756..eba7f739 100644
--- a/arm9/asm/unk_020772F0.s
+++ b/arm9/asm/unk_020772F0.s
@@ -2355,7 +2355,7 @@ FUN_02077FE8: ; 0x02077FE8
mov r2, #0x12
bl FUN_02002EEC
ldr r0, [r5, #0x18]
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp, #0x0]
diff --git a/arm9/asm/unk_02079C70.s b/arm9/asm/unk_02079C70.s
index 8bace89f..3562d2e7 100644
--- a/arm9/asm/unk_02079C70.s
+++ b/arm9/asm/unk_02079C70.s
@@ -1660,7 +1660,7 @@ _0207A99E:
lsl r0, r0, #0x2
ldr r0, [r5, r0]
ldr r0, [r0, #0x4]
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp, #0x0]
@@ -4738,7 +4738,7 @@ FUN_0207C23C: ; 0x0207C23C
lsl r0, r0, #0x2
ldr r0, [r4, r0]
ldr r0, [r0, #0x4]
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp, #0x0]
diff --git a/arm9/asm/unk_02085338.s b/arm9/asm/unk_02085338.s
index 45fcb995..08f7d90c 100644
--- a/arm9/asm/unk_02085338.s
+++ b/arm9/asm/unk_02085338.s
@@ -32,7 +32,7 @@ FUN_02085338: ; 0x02085338
add r0, r6, #0x0
strb r1, [r4, #0x3]
bl Sav2_PlayerData_GetOptionsAddr
- bl FUN_02025084
+ bl Options_GetFrame
str r0, [r4, #0x8]
cmp r5, #0x2
bne _02085390
diff --git a/arm9/asm/unk_020859C0.s b/arm9/asm/unk_020859C0.s
index 846e5336..a299f623 100644
--- a/arm9/asm/unk_020859C0.s
+++ b/arm9/asm/unk_020859C0.s
@@ -348,7 +348,7 @@ _02085A9A:
str r0, [r4, r1]
ldr r0, [r4, #0x0]
ldr r0, [r0, #0x24]
- bl FUN_02025084
+ bl Options_GetFrame
add r5, r0, #0x0
add r0, r4, #0x0
add r1, r4, #0x0
diff --git a/arm9/asm/unk_02086084.s b/arm9/asm/unk_02086084.s
index 6ef3d150..4d8fa9a4 100644
--- a/arm9/asm/unk_02086084.s
+++ b/arm9/asm/unk_02086084.s
@@ -36,11 +36,11 @@ FUN_02086084: ; 0x02086084
bl OverlayManager_GetField18
str r0, [r4, #0x0]
ldr r0, [r0, #0x10]
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
str r0, [r4, #0x10]
ldr r0, [r4, #0x0]
ldr r0, [r0, #0x10]
- bl FUN_02025084
+ bl Options_GetFrame
str r0, [r4, #0x14]
bl FUN_02086468
str r0, [r4, #0x38]
diff --git a/arm9/asm/unk_02087A6C.s b/arm9/asm/unk_02087A6C.s
index d51eab43..b343ac2c 100644
--- a/arm9/asm/unk_02087A6C.s
+++ b/arm9/asm/unk_02087A6C.s
@@ -5,7 +5,7 @@
.global UNK_020FD144
UNK_020FD144: ; 0x020FD144
- .word MOD59_021D74E0, MOD59_021D7564, MOD59_021D76C0, SDK_OVERLAY_MODULE_59_ID
+ .word MOD59_Init, MOD59_021D7564, MOD59_021D76C0, SDK_OVERLAY_MODULE_59_ID
.text
diff --git a/arm9/asm/unk_02087D00.s b/arm9/asm/unk_02087D00.s
index 49d4676c..65d4db3d 100644
--- a/arm9/asm/unk_02087D00.s
+++ b/arm9/asm/unk_02087D00.s
@@ -544,11 +544,11 @@ FUN_020880A0: ; 0x020880A0
str r0, [r4, #0x0]
ldr r0, [r5, #0xc]
ldr r0, [r0, #0x18]
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
strb r0, [r4, #0xa]
ldr r0, [r5, #0xc]
ldr r0, [r0, #0x18]
- bl FUN_02025084
+ bl Options_GetFrame
strb r0, [r4, #0xb]
ldr r0, _02088108 ; =UNK_020FD16C
ldr r2, [r5, #0x0]
diff --git a/arm9/asm/unk_02089498.s b/arm9/asm/unk_02089498.s
index 82d06472..e4ce48cf 100644
--- a/arm9/asm/unk_02089498.s
+++ b/arm9/asm/unk_02089498.s
@@ -415,7 +415,7 @@ _020897B8:
ldr r0, [r4, #0x14]
ldr r2, _02089894 ; =0x000001D9
mov r3, #0x3
- bl FUN_020020EC
+ bl CreateYesNoMenu
str r0, [r4, #0x2c]
mov r0, #0x1
str r0, [r4, #0x4]
@@ -453,7 +453,7 @@ _02089802:
ldr r0, [r4, #0x14]
ldr r2, _02089894 ; =0x000001D9
mov r3, #0x3
- bl FUN_020020EC
+ bl CreateYesNoMenu
str r0, [r4, #0x2c]
mov r0, #0x3
str r0, [r4, #0x4]
diff --git a/arm9/global.inc b/arm9/global.inc
index 0af44f98..d703c8eb 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -212,8 +212,8 @@
.extern FUN_02001DDC
.extern FUN_02001E5C
.extern FUN_02001E60
-.extern FUN_020020EC
-.extern FUN_02002198
+.extern CreateYesNoMenu
+.extern Std_CreateYesNoMenu
.extern FUN_020021AC
.extern FUN_020021CC
.extern FUN_020021EC
@@ -1586,23 +1586,23 @@
.extern FUN_02024EF4
.extern FUN_02024F0C
.extern FUN_02024F18
-.extern FUN_02024F30
-.extern FUN_02024F44
+.extern Options_new
+.extern Options_copy
.extern Options_init
-.extern FUN_02024F9C
-.extern FUN_02024FD8
-.extern FUN_02024FE0
-.extern FUN_02024FF4
-.extern FUN_02025010
-.extern FUN_02025018
-.extern FUN_0202502C
-.extern FUN_02025034
-.extern FUN_02025048
-.extern FUN_02025050
-.extern FUN_02025064
-.extern FUN_0202506C
-.extern FUN_02025084
-.extern FUN_0202508C
+.extern Options_SetButtonModeOnMain
+.extern Options_GetTextSpeed
+.extern Options_SetTextSpeed
+.extern Options_GetTextFrameDelay
+.extern Options_GetSoundMethod
+.extern Options_SetSoundMethod
+.extern Options_GetBattleScene
+.extern Options_SetBattleScene
+.extern Options_GetBattleStyle
+.extern Options_SetBattleStyle
+.extern Options_GetButtonMode
+.extern Options_SetButtonMode
+.extern Options_GetFrame
+.extern Options_SetFrame
.extern FUN_020250A4
.extern FUN_020250C4
.extern FUN_02025128
@@ -2691,13 +2691,13 @@
.extern FUN_020395BC
.extern FUN_020395F4
.extern FUN_02039618
-.extern FUN_0203962C
+.extern Field_TrainerIsDoubleBattle
.extern TrainerFlagCheck
.extern TrainerFlagSet
.extern TrainerFlagClear
.extern FUN_02039694
.extern FUN_02039754
-.extern FUN_02039874
+.extern RunPokemonCenterScriptsInNewContext
.extern FUN_0203989C
.extern ScrCmd_nop
.extern ScrCmd_nop2
@@ -3804,7 +3804,7 @@
.extern FUN_02054608
.extern FUN_0205464C
.extern FUN_02054658
-.extern FUN_02054690
+.extern DrawFieldMessage
.extern FUN_020546C8
.extern FUN_020546E0
.extern FUN_02054744
@@ -6509,13 +6509,18 @@
.extern MOD05_021E7184
.extern MOD05_021E71E8
.extern MOD05_021E72FC
+.extern MOD05_021E7358
.extern MOD05_021E7750
+.extern MOD05_021E779C
+.extern MOD05_021E77B0
.extern MOD05_021E799C
.extern MOD05_021E7AC0
.extern MOD05_021E7C00
.extern MOD05_021E7C14
.extern MOD05_021E7C1C
.extern MOD05_021E7C80
+.extern MOD05_021E7CD8
+.extern MOD05_021E7DD8
.extern MOD05_021E7E9C
.extern MOD05_021E7EA0
.extern MOD05_021E7EB0
@@ -6676,8 +6681,10 @@
.extern MOD05_021F4BF8
.extern MOD05_021F4C74
.extern MOD05_021F4C88
+.extern MOD05_021F4C9C
.extern MOD05_021F4CBC
.extern MOD05_021F4CD4
+.extern MOD05_021F4CE4
.extern MOD05_021F4CF8
.extern MOD05_021F4D1C
.extern MOD05_021F4D2C
@@ -7434,6 +7441,11 @@
.extern MOD20_02254420
.extern MOD20_02254460
.extern MOD20_02254488
+.extern MOD21_02254A6C
+.extern MOD21_02254B04
+.extern MOD21_02254B10
+.extern MOD21_02254B34
+.extern MOD21_02254B40
.extern MOD51_02254A68
.extern MOD51_02254AB8
.extern MOD52_021D76C8
@@ -7466,9 +7478,12 @@
.extern MOD58_021D9A20
.extern MOD58_021D9B8C
.extern MOD58_021D9BF0
-.extern MOD59_021D74E0
+.extern MOD59_Init
.extern MOD59_021D7564
.extern MOD59_021D76C0
+.extern MOD59_021D9868
+.extern MOD59_021D9898
+.extern MOD59_021D99F8
.extern MOD60_021D74E0
.extern MOD60_021D76B8
.extern MOD60_021D75B0
diff --git a/arm9/lib/include/CARD_common.h b/arm9/lib/include/CARD_common.h
index c8a247ee..1ae31b7a 100644
--- a/arm9/lib/include/CARD_common.h
+++ b/arm9/lib/include/CARD_common.h
@@ -224,8 +224,6 @@ void CARD_UnlockBackup(u16 lock_id);
#define CARD_RETRY_COUNT_MAX 10
-extern BOOL PXI_SendWordByFifo(u32 param1, u32 data, u32 param2);
-
static inline void CARDi_SendPxi(u32 data)
{
while (PXI_SendWordByFifo(PXI_FIFO_TAG_FS, data, TRUE) < 0)
diff --git a/arm9/lib/include/CTRDG_backup.h b/arm9/lib/include/CTRDG_backup.h
new file mode 100644
index 00000000..272744ad
--- /dev/null
+++ b/arm9/lib/include/CTRDG_backup.h
@@ -0,0 +1,45 @@
+#ifndef POKEDIAMOND_CTRDG_BACKUP_H
+#define POKEDIAMOND_CTRDG_BACKUP_H
+
+#include "nitro/types.h"
+#include "CTRDG_flash.h"
+#include "CTRDG_task.h"
+
+#define CTRDG_BACKUP_PHASE_PROGRAM 0x0001
+#define CTRDG_BACKUP_PHASE_SECTOR_ERASE 0x0002
+#define CTRDG_BACKUP_PHASE_CHIP_ERASE 0x0003
+
+typedef struct CTRDGiFlashTypePlusTag
+{
+ u16 (*CTRDGi_WriteAgbFlashSector)(u16 secNo, u8 *src);
+ u16 (*CTRDGi_EraseAgbFlashChip)(void);
+ u16 (*CTRDGi_EraseAgbFlashSector)(u16 secNo);
+ void (*CTRDGi_WriteAgbFlashSectorAsync)(u16 secNo, u8 *src, CTRDG_TASK_FUNC callback);
+ void (*CTRDGi_EraseAgbFlashChipAsync)(CTRDG_TASK_FUNC callback);
+ void (*CTRDGi_EraseAgbFlashSectorAsync)(u16 secNo, CTRDG_TASK_FUNC callback);
+ u16 (*CTRDGi_PollingSR)(u16 phase, u8 *adr, u16 lastData);
+ const u16 (*maxtime);
+ CTRDGFlashType type;
+} CTRDGiFlashTypePlus;
+
+typedef enum
+{
+ CTRDG_BACKUP_TYPE_FLASH_512K,
+ CTRDG_BACKUP_TYPE_FLASH_1M,
+ CTRDG_BACKUP_TYPE_SRAM
+} CTRDGBackupType;
+
+extern const u16 (*ctrdgi_fl_maxtime);
+
+extern u16 (*CTRDGi_PollingSR)(u16 phase, u8 *adr, u16 lastData);
+extern const CTRDGFlashType *AgbFlash;
+extern u16 (*CTRDGi_WriteAgbFlashSector)(u16 secNo, u8 *src);
+extern u16 (*CTRDGi_EraseAgbFlashChip)(void);
+extern u16 (*CTRDGi_EraseAgbFlashSector)(u16 secNo);
+extern void (*CTRDGi_WriteAgbFlashSectorAsync)(u16 secNo, u8 *src, CTRDG_TASK_FUNC callback);
+extern void (*CTRDGi_EraseAgbFlashChipAsync)(CTRDG_TASK_FUNC callback);
+extern void (*CTRDGi_EraseAgbFlashSectorAsync)(u16 secNo, CTRDG_TASK_FUNC callback);
+
+u16 CTRDG_IdentifyAgbBackup(CTRDGBackupType type);
+
+#endif //POKEDIAMOND_CTRDG_BACKUP_H
diff --git a/arm9/lib/include/CTRDG_common.h b/arm9/lib/include/CTRDG_common.h
index 32049f3c..2d37c6f8 100644
--- a/arm9/lib/include/CTRDG_common.h
+++ b/arm9/lib/include/CTRDG_common.h
@@ -1,8 +1,137 @@
-#ifndef NITRO_CTRDG_COMMON_H_
-#define NITRO_CTRDG_COMMON_H_
+#ifndef POKEDIAMOND_CTRDG_COMMON_H
+#define POKEDIAMOND_CTRDG_COMMON_H
-#include "nitro/types.h"
+#include "consts.h"
+#include "OS_spinLock.h"
+#include "OS_system.h"
+#include "MI_exMemory.h"
+typedef struct CTRDGWork
+{
+ vu16 subpInitialized;
+ u16 lockID;
+
+} CTRDGWork;
+
+typedef struct CTRDGModuleID
+{
+ union
+ {
+ struct
+ {
+ u8 bitID;
+ u8 numberID:5;
+ u8 :2;
+ u8 disableExLsiID:1;
+ };
+ u16 raw;
+ };
+} CTRDGModuleID;
+
+typedef struct CTRDGModuleInfo
+{
+ CTRDGModuleID moduleID;
+ u8 exLsiID[3];
+ u8 isAgbCartridge:1;
+ u8 detectPullOut:1;
+ u8 :0; //??
+ u16 makerCode;
+ u32 gameCode;
+} CTRDGModuleInfo;
+
+typedef struct CTRDGLockByProc
+{
+ BOOL locked;
+ OSIntrMode irq;
+} CTRDGLockByProc;
+
+typedef struct CTRDGHeader
+{
+ u32 startAddress;
+ u8 nintendoLogo[0x9c];
+
+ u8 titleName[12];
+ u32 gameCode;
+ u16 makerCode;
+
+ u8 isRomCode;
+
+ u8 machineCode;
+ u8 deviceType;
+
+ u8 exLsiID[3];
+
+ u8 reserved[4];
+ u8 softVersion;
+ u8 complement;
+
+ u16 moduleID;
+} CTRDGHeader;
+
+typedef struct CTRDGRomCycle
+{
+ MICartridgeRomCycle1st c1;
+ MICartridgeRomCycle2nd c2;
+} CTRDGRomCycle;
+
+#define CTRDGi_GetModuleInfoAddr() ((CTRDGModuleInfo *)HW_CTRDG_MODULE_INFO_BUF)
+#define CTRDGi_GetHeaderAddr() ((CTRDGHeader *)HW_CTRDG_ROM)
+#define CTRDGi_GetModuleIDImageAddr() ((u16 *)(HW_CTRDG_ROM + 0x0001fffe))
+
+#define CTRDG_IS_ROM_CODE 0x96
+#define CTRDG_LOCKED_BY_MYPROC_FLAG OS_MAINP_LOCKED_FLAG
+
+#define CTRDGi_FORWARD_TYPE_DMA 0x00000000
+#define CTRDGi_FORWARD_TYPE_CPU 0x00000001
+#define CTRDGi_FORWARD_TYPE_MASK 0x00000001
+
+#define CTRDGi_FORWARD_WIDTH_8 0x00000000
+#define CTRDGi_FORWARD_WIDTH_16 0x00000010
+#define CTRDGi_FORWARD_WIDTH_32 0x00000020
+
+#define CTRDGi_FORWARD_DMA16 (CTRDGi_FORWARD_TYPE_DMA | CTRDGi_FORWARD_WIDTH_16)
+#define CTRDGi_FORWARD_DMA32 (CTRDGi_FORWARD_TYPE_DMA | CTRDGi_FORWARD_WIDTH_32)
+#define CTRDGi_FORWARD_CPU8 (CTRDGi_FORWARD_TYPE_CPU | CTRDGi_FORWARD_WIDTH_8)
+#define CTRDGi_FORWARD_CPU16 (CTRDGi_FORWARD_TYPE_CPU | CTRDGi_FORWARD_WIDTH_16)
+#define CTRDGi_FORWARD_CPU32 (CTRDGi_FORWARD_TYPE_CPU | CTRDGi_FORWARD_WIDTH_32)
+
+#define CTRDGi_ACCESS_DIR_WRITE 0x00000000
+#define CTRDGi_ACCESS_DIR_READ 0x00000001
+
+#define CTRDGi_ACCESS_WIDTH_8 0x00000010
+#define CTRDGi_ACCESS_WIDTH_16 0x00000020
+#define CTRDGi_ACCESS_WIDTH_32 0x00000040
+
+#define CTRDGi_ACCESS_WRITE8 (CTRDGi_ACCESS_DIR_WRITE | CTRDGi_ACCESS_WIDTH_8)
+#define CTRDGi_ACCESS_WRITE16 (CTRDGi_ACCESS_DIR_WRITE | CTRDGi_ACCESS_WIDTH_16)
+#define CTRDGi_ACCESS_WRITE32 (CTRDGi_ACCESS_DIR_WRITE | CTRDGi_ACCESS_WIDTH_32)
+#define CTRDGi_ACCESS_READ8 (CTRDGi_ACCESS_DIR_READ | CTRDGi_ACCESS_WIDTH_8)
+#define CTRDGi_ACCESS_READ16 (CTRDGi_ACCESS_DIR_READ | CTRDGi_ACCESS_WIDTH_16)
+#define CTRDGi_ACCESS_READ32 (CTRDGi_ACCESS_DIR_READ | CTRDGi_ACCESS_WIDTH_32)
+
+void CTRDGi_InitCommon(void);
+BOOL CTRDG_IsAgbCartridge(void);
+BOOL CTRDG_IsOptionCartridge(void);
+BOOL CTRDGi_IsAgbCartridgeAtInit(void);
+u32 CTRDG_GetAgbGameCode(void);
+u32 CTRDGi_GetAgbGameCodeAtInit(void);
+u16 CTRDG_GetAgbMakerCode(void);
+u16 CTRDGi_GetAgbMakerCodeAtInit(void);
BOOL CTRDG_IsPulledOut(void);
+BOOL CTRDG_IsExisting(void);
+void CTRDGi_ChangeLatestAccessCycle(CTRDGRomCycle *r);
+void CTRDGi_RestoreAccessCycle(CTRDGRomCycle *r);
+void CTRDGi_LockByProcessor(u16 lockID, CTRDGLockByProc *info);
+void CTRDGi_UnlockByProcessor(u16 lockID, CTRDGLockByProc *info);
+void CTRDGi_SendtoPxi(u32 data);
+BOOL CTRDG_CpuCopy8(const void *src, void *dest, u32 size);
+BOOL CTRDG_CpuCopy16(const void *src, void *dest, u32 size);
+BOOL CTRDG_CpuCopy32(const void *src, void *dest, u32 size);
+BOOL CTRDGi_CopyCommon(u32 dmaNo, const void *src, void *dest, u32 size, u32 forwardType);
+BOOL CTRDG_Read32(const u32 *address, u32 *rdata);
+BOOL CTRDGi_AccessCommon(void *address, u32 data, void *rdata, u32 accessType);
+BOOL CTRDG_IsEnabled(void);
+void CTRDG_Enable(BOOL enable);
+void CTRDG_CheckEnabled(void);
-#endif //NITRO_CTRDG_COMMON_H_
+#endif //POKEDIAMOND_CTRDG_COMMON_H
diff --git a/arm9/lib/include/CTRDG_flash.h b/arm9/lib/include/CTRDG_flash.h
new file mode 100644
index 00000000..aa02d951
--- /dev/null
+++ b/arm9/lib/include/CTRDG_flash.h
@@ -0,0 +1,27 @@
+#ifndef POKEDIAMOND_CTRDG_FLASH_H
+#define POKEDIAMOND_CTRDG_FLASH_H
+
+#include "nitro/types.h"
+#include "MI_exMemory.h"
+
+#define CTRDG_AGB_FLASH_ADR 0x0A000000
+
+typedef struct CTRDGiFlashSectorTag
+{
+ u32 size;
+ u16 shift;
+ u16 count;
+ u16 top;
+ u8 reserved[2];
+} CTRDGiFlashSector;
+
+typedef struct CTRDGFlashTypeTag
+{
+ u32 romSize;
+ CTRDGiFlashSector sector;
+ MICartridgeRamCycle agbWait[2];
+ u16 makerID;
+ u16 deviceID;
+} CTRDGFlashType;
+
+#endif //POKEDIAMOND_CTRDG_FLASH_H
diff --git a/arm9/lib/include/CTRDG_flash_AT29LV512.h b/arm9/lib/include/CTRDG_flash_AT29LV512.h
new file mode 100644
index 00000000..908dd6cf
--- /dev/null
+++ b/arm9/lib/include/CTRDG_flash_AT29LV512.h
@@ -0,0 +1,10 @@
+#ifndef POKEDIAMOND_CTRDG_FLASH_AT29LV512_H
+#define POKEDIAMOND_CTRDG_FLASH_AT29LV512_H
+
+#include "nitro/types.h"
+#include "CTRDG_task.h"
+
+u32 CTRDGi_EraseFlashChipCoreAT(CTRDGTaskInfo *arg);
+u32 CTRDGi_EraseFlashSectorCoreAT(CTRDGTaskInfo *arg);
+
+#endif //POKEDIAMOND_CTRDG_FLASH_AT29LV512_H
diff --git a/arm9/lib/include/CTRDG_task.h b/arm9/lib/include/CTRDG_task.h
new file mode 100644
index 00000000..2cf7a233
--- /dev/null
+++ b/arm9/lib/include/CTRDG_task.h
@@ -0,0 +1,25 @@
+#ifndef POKEDIAMOND_CTRDG_TASK_H
+#define POKEDIAMOND_CTRDG_TASK_H
+
+#include "nitro/types.h"
+
+struct CTRDGTaskInfo_tag;
+
+typedef u32 (*CTRDG_TASK_FUNC) (struct CTRDGTaskInfo_tag *);
+
+typedef struct CTRDGTaskInfo_tag
+{
+ CTRDG_TASK_FUNC task;
+ CTRDG_TASK_FUNC callback;
+ u32 result;
+ u8 *data;
+ u8 *adr;
+ u32 offset;
+ u32 size;
+ u8 *dst;
+ u16 sec_num;
+ u8 busy;
+ u8 param[1];
+} CTRDGTaskInfo;
+
+#endif //POKEDIAMOND_CTRDG_TASK_H
diff --git a/arm9/lib/include/MI_dma.h b/arm9/lib/include/MI_dma.h
index 8ce3f417..99d1cb84 100644
--- a/arm9/lib/include/MI_dma.h
+++ b/arm9/lib/include/MI_dma.h
@@ -21,6 +21,9 @@ typedef void (*MIDmaCallback)(void *);
#define MI_DMA_SRC_FIX (2UL << 23)
#define MI_DMA_SRC_INC (0UL << 23)
+#define MI_DMA_16BIT_BUS (0UL << 26)
+#define MI_DMA_32BIT_BUS (1UL << 26)
+
#define MIi_DMA_TIMING_ANY (u32)(~0)
#define MI_DMA_TIMING_H_BLANK (2UL << 27)
diff --git a/arm9/lib/include/MI_exMemory.h b/arm9/lib/include/MI_exMemory.h
index 8bd355ac..aa90a73c 100644
--- a/arm9/lib/include/MI_exMemory.h
+++ b/arm9/lib/include/MI_exMemory.h
@@ -1,5 +1,5 @@
-#ifndef NITRO_MI_EXMEMORY_H_
-#define NITRO_MI_EXMEMORY_H_
+#ifndef POKEDIAMOND_MI_EXMEMORY_H
+#define POKEDIAMOND_MI_EXMEMORY_H
#include "consts.h"
@@ -8,6 +8,28 @@ typedef enum {
MI_PROCESSOR_ARM7 = 1
} MIProcessor;
+typedef enum
+{
+ MI_CTRDG_ROMCYCLE1_10 = 0,
+ MI_CTRDG_ROMCYCLE1_8 = 1,
+ MI_CTRDG_ROMCYCLE1_6 = 2,
+ MI_CTRDG_ROMCYCLE1_18 = 3
+} MICartridgeRomCycle1st;
+
+typedef enum
+{
+ MI_CTRDG_ROMCYCLE2_6 = 0,
+ MI_CTRDG_ROMCYCLE2_4 = 1
+} MICartridgeRomCycle2nd;
+
+typedef enum
+{
+ MI_CTRDG_RAMCYCLE_10 = 0,
+ MI_CTRDG_RAMCYCLE_8 = 1,
+ MI_CTRDG_RAMCYCLE_6 = 2,
+ MI_CTRDG_RAMCYCLE_18 = 3
+} MICartridgeRamCycle;
+
static inline void MIi_SetCardProcessor(MIProcessor proc)
{
reg_MI_EXMEMCNT =
@@ -20,4 +42,34 @@ static inline void MIi_SetCartridgeProcessor(MIProcessor proc)
(u16)((reg_MI_EXMEMCNT & ~0x0080) | (proc << 7));
}
-#endif //NITRO_MI_EXMEMORY_H_
+static inline MICartridgeRomCycle1st MI_GetCartridgeRomCycle1st(void)
+{
+ return (MICartridgeRomCycle1st)((reg_MI_EXMEMCNT & 0xc) >> 2);
+}
+
+static inline MICartridgeRomCycle2nd MI_GetCartridgeRomCycle2nd(void)
+{
+ return (MICartridgeRomCycle2nd)((reg_MI_EXMEMCNT & 0x10) >> 4);
+}
+
+static inline void MI_SetCartridgeRomCycle1st(MICartridgeRomCycle1st c1)
+{
+ reg_MI_EXMEMCNT = (u16)((reg_MI_EXMEMCNT & ~0xc) | (c1 << 2));
+}
+
+static inline void MI_SetCartridgeRomCycle2nd(MICartridgeRomCycle2nd c2)
+{
+ reg_MI_EXMEMCNT = (u16)((reg_MI_EXMEMCNT & ~0x10) | (c2 << 4));
+}
+
+static inline void MI_SetCartridgeRamCycle(MICartridgeRamCycle c)
+{
+ reg_MI_EXMEMCNT = (u16)((reg_MI_EXMEMCNT & ~3) | (c << 0));
+}
+
+static inline MICartridgeRamCycle MI_GetCartridgeRamCycle(void)
+{
+ return (MICartridgeRamCycle)((reg_MI_EXMEMCNT & 3) >> 0);
+}
+
+#endif //POKEDIAMOND_MI_EXMEMORY_H
diff --git a/arm9/lib/include/MI_memory.h b/arm9/lib/include/MI_memory.h
index 450e5e58..339ff9b8 100644
--- a/arm9/lib/include/MI_memory.h
+++ b/arm9/lib/include/MI_memory.h
@@ -45,6 +45,11 @@ static inline void MI_CpuCopy16(const void *src, void *dest, u32 size)
MIi_CpuCopy16(src, dest, size);
}
+static inline void MI_CpuCopy32(const void *src, void *dest, u32 size)
+{
+ MIi_CpuCopy32(src, dest, size);
+}
+
static inline void MI_CpuFillFast(void *dest, u32 data, u32 size)
{
MIi_CpuClearFast(data, dest, size);
diff --git a/arm9/lib/include/OS_interrupt.h b/arm9/lib/include/OS_interrupt.h
index 3d139079..d063b817 100644
--- a/arm9/lib/include/OS_interrupt.h
+++ b/arm9/lib/include/OS_interrupt.h
@@ -12,6 +12,7 @@
#define OS_IE_V_COUNT (1UL << REG_OS_IE_VE_SHIFT)
#define OS_IE_TIMER0 (1UL << REG_OS_IE_T0_SHIFT)
#define OS_IE_TIMER1 (1UL << REG_OS_IE_T1_SHIFT)
+#define OS_IE_SPFIFO_RECV (1UL << REG_OS_IE_IFN_SHIFT)
#define OS_IE_CARD_DATA (1UL << REG_OS_IE_MC_SHIFT)
extern OSIrqFunction OS_IRQTable[];
@@ -42,6 +43,13 @@ static inline BOOL OS_EnableIrq(void)
return (BOOL)prep;
}
+static inline BOOL OS_RestoreIrq(BOOL enable)
+{
+ u16 prep = reg_OS_IME;
+ reg_OS_IME = (u16)enable;
+ return (BOOL)prep;
+}
+
static inline OSIrqMask OS_GetIrqMask(void)
{
return reg_OS_IE;
diff --git a/arm9/lib/include/OS_protectionRegion.h b/arm9/lib/include/OS_protectionRegion.h
index 9b65258d..00b7ae63 100644
--- a/arm9/lib/include/OS_protectionRegion.h
+++ b/arm9/lib/include/OS_protectionRegion.h
@@ -41,4 +41,8 @@ static inline u32 OSi_CalcPRParam(u32 address, u32 size, OSiProtectionRegionBase
OS_SetProtectionRegion##regionNo(OSi_CalcPRParam(address, HW_C6_PR_##sizeStr, OSi_PR_BASE_MASK_##sizeStr) \
| 1)
+#define OS_PR3_ACCESS_MASK (HW_C5_PERMIT_MASK << HW_C5_PR3_SFT)
+#define OS_PR3_ACCESS_RW (HW_C5_PERMIT_RW << HW_C5_PR3_SFT)
+#define OS_PR3_ACCESS_RO (HW_C5_PERMIT_RO << HW_C5_PR3_SFT)
+
#endif //POKEDIAMOND_OS_PROTECTIONREGION_H
diff --git a/arm9/lib/include/OS_spinLock.h b/arm9/lib/include/OS_spinLock.h
index c26e3b9f..09c2cf2c 100644
--- a/arm9/lib/include/OS_spinLock.h
+++ b/arm9/lib/include/OS_spinLock.h
@@ -5,7 +5,11 @@
#include "nitro/OS_spinLock_shared.h"
#include "syscall.h"
-#define OS_LOCK_ID_ERROR (-3)
+#define OS_ReadOwnerOfLockCartridge() OS_ReadOwnerOfLockWord( (OSLockWord *)HW_CTRDG_LOCK_BUF )
+#define OS_MAINP_LOCKED_FLAG 0x40
+#define OS_LOCK_SUCCESS 0
+
+#define OS_LOCK_ID_ERROR (-3)
static inline void OSi_WaitByLoop(void)
{
diff --git a/arm9/lib/include/PXI_fifo.h b/arm9/lib/include/PXI_fifo.h
index becba32e..b1ca33f3 100644
--- a/arm9/lib/include/PXI_fifo.h
+++ b/arm9/lib/include/PXI_fifo.h
@@ -2,6 +2,7 @@
#define POKEDIAMOND_ARM9_PXI_FIFO_H
#include "nitro/PXI_fifo_shared.h"
+#include "nitro/types.h"
typedef enum
{
@@ -13,4 +14,23 @@ typedef enum
PXI_FIFO_NO_CALLBACK_ENTRY = -5
} PXIFifoStatus;
+typedef void (*PXIFifoCallback) (PXIFifoTag tag, u32 data, BOOL err);
+
+typedef union
+{
+ struct
+ {
+ u32 tag:5;
+ u32 err:1;
+ u32 data:26;
+ } e;
+ u32 raw;
+} PXIFifoMessage;
+
+void PXI_InitFifo(void);
+void PXI_SetFifoRecvCallback(s32 fifotag, PXIFifoCallback callback);
+BOOL PXI_IsCallbackReady(s32 fifotag, PXIProc proc);
+s32 PXI_SendWordByFifo(s32 fifotag, u32 data, BOOL err);
+void PXIi_HandlerRecvFifoNotEmpty(void);
+
#endif //POKEDIAMOND_ARM9_PXI_FIFO_H
diff --git a/arm9/lib/include/consts.h b/arm9/lib/include/consts.h
index 7c56a9a3..a41f22ae 100644
--- a/arm9/lib/include/consts.h
+++ b/arm9/lib/include/consts.h
@@ -6,6 +6,13 @@
#include "registers.h"
#include "systemWork.h"
+#define HW_C5_PERMIT_MASK 0xf
+
+#define HW_C5_PERMIT_RO 5
+#define HW_C5_PERMIT_RW 1
+
+#define HW_C5_PR3_SFT 12
+
#define HW_C6_PR_4KB 0x16
#define HW_C6_PR_8KB 0x18
#define HW_C6_PR_16KB 0x1a
@@ -35,8 +42,6 @@
#define HW_CACHE_LINE_SIZE 32
-#define PXI_PROC_ARM7 0x01
-
#define OSi_CONSOLE_NOT_DETECT 0xffffffff
#define OS_CONSOLE_NITRO 0x80000000
@@ -50,4 +55,11 @@
#define HW_CPU_CLOCK_ARM9 67027964
+#define REG_PXI_SUBP_FIFO_CNT_E_MASK 0x8000
+#define REG_PXI_SUBP_FIFO_CNT_ERR_MASK 0x4000
+#define REG_PXI_SUBP_FIFO_CNT_RECV_RI_MASK 0x0400
+#define REG_PXI_SUBP_FIFO_CNT_RECV_EMP_MASK 0x0100
+#define REG_PXI_SUBP_FIFO_CNT_SEND_CL_MASK 0x0008
+#define REG_PXI_SUBP_FIFO_CNT_SEND_FULL_MASK 0x0002
+
#endif //POKEDIAMOND_ARM9_CONSTS_H
diff --git a/arm9/lib/include/mmap.h b/arm9/lib/include/mmap.h
index de5a8057..69e9c696 100644
--- a/arm9/lib/include/mmap.h
+++ b/arm9/lib/include/mmap.h
@@ -34,6 +34,7 @@ extern u32 SDK_AUTOLOAD_DTCM_START[];
#define HW_BOOT_CHECK_INFO_BUF (HW_MAIN_MEM + 0x007ffc00)
#define HW_RESET_PARAMETER_BUF (HW_MAIN_MEM + 0x007ffc20)
#define HW_ROM_BASE_OFFSET_BUF (HW_MAIN_MEM + 0x007ffc2c)
+#define HW_CTRDG_MODULE_INFO_BUF (HW_MAIN_MEM + 0x007ffc30)
#define HW_ROM_HEADER_BUF (HW_MAIN_MEM + 0x007ffe00) // ROM registration area data buffer
#define HW_RED_RESERVED (HW_MAIN_MEM + 0x007ff800) // Some kind of reserved data for shared memory
#define HW_MAIN_MEM_EX_END (HW_MAIN_MEM + HW_MAIN_MEM_EX_SIZE)
@@ -93,6 +94,8 @@ extern u32 SDK_AUTOLOAD_DTCM_START[];
#define HW_DB_OAM_END 0x07000800
#define HW_DB_OAM_SIZE (HW_DB_OAM_END-HW_DB_OAM)
+#define HW_CTRDG_RAM_END 0x0a010000
+
#define HW_DTCM_SYSRV_OFS_INTR_VECTOR 0x3c
#define HW_RESET_VECTOR 0xffff0000
diff --git a/arm9/lib/include/registers.h b/arm9/lib/include/registers.h
index 44a21bf0..d55347d5 100644
--- a/arm9/lib/include/registers.h
+++ b/arm9/lib/include/registers.h
@@ -350,6 +350,7 @@
#define REG_OS_IE_VE_SHIFT 2
#define REG_OS_IE_T0_SHIFT 3
#define REG_OS_IE_T1_SHIFT 4
+#define REG_OS_IE_IFN_SHIFT 18
#define REG_OS_IE_MC_SHIFT 19
#define REG_OS_TM0CNT_H_I_MASK 0x0040
diff --git a/arm9/lib/include/syscall.h b/arm9/lib/include/syscall.h
index 427134a7..8e7962df 100644
--- a/arm9/lib/include/syscall.h
+++ b/arm9/lib/include/syscall.h
@@ -1,6 +1,19 @@
#ifndef POKEDIAMOND_ARM9_SYSCALL_H
#define POKEDIAMOND_ARM9_SYSCALL_H
+#include "consts.h"
+#include "MI_dma.h"
+
+void SVC_CpuSet(const void *srcp, void *destp, u32 dmaCntData);
+
+#define SVC_CpuClear( data, destp, size, bit ) \
+do{ \
+ vu##bit tmp = (vu##bit )(data); \
+ SVC_CpuSet((u8 *)&(tmp), (u8 *)(destp), ( \
+ MI_DMA_SRC_FIX | \
+ MI_DMA_##bit##BIT_BUS | ((size)/((bit)/8) & 0x1fffff))); \
+} while(0)
+
void SVC_WaitByLoop(u32 ct);
#endif //POKEDIAMOND_ARM9_SYSCALL_H
diff --git a/arm9/lib/src/CARD_common.c b/arm9/lib/src/CARD_common.c
index 65d92377..f820027e 100644
--- a/arm9/lib/src/CARD_common.c
+++ b/arm9/lib/src/CARD_common.c
@@ -14,8 +14,6 @@ static CARDiCommandArg cardi_arg ALIGN(32);
u8 cardi_thread_stack[0x400] ALIGN(4);
-extern void PXI_SetFifoRecvCallback(u32 param1, void* callback);
-
static void CARDi_LockResource(CARDiOwner owner, CARDTargetMode target);
static void CARDi_UnlockResource(CARDiOwner owner, CARDTargetMode target);
diff --git a/arm9/lib/src/CARD_pullOut.c b/arm9/lib/src/CARD_pullOut.c
index 27293d60..3456df48 100644
--- a/arm9/lib/src/CARD_pullOut.c
+++ b/arm9/lib/src/CARD_pullOut.c
@@ -12,9 +12,6 @@
static CARDPulledOutCallback CARD_UserCallback;
static BOOL CARDi_IsPulledOutFlag = FALSE;
-extern void PXI_SetFifoRecvCallback(u32 param1, void* callback);
-extern BOOL PXI_SendWordByFifo(u32 param1, u32 data, u32 param2);
-
static void CARDi_PulledOutCallback(PXIFifoTag tag, u32 data, BOOL err);
static void CARDi_SendtoPxi(u32 data, u32 wait);
diff --git a/arm9/lib/src/CARD_request.c b/arm9/lib/src/CARD_request.c
index 2d728d14..098fe7a5 100644
--- a/arm9/lib/src/CARD_request.c
+++ b/arm9/lib/src/CARD_request.c
@@ -6,8 +6,6 @@
extern CARDiCommon cardi_common;
-extern u32 PXI_IsCallbackReady(u32 param1, u32 param2);
-
ARM_FUNC void CARDi_OnFifoRecv(PXIFifoTag tag, u32 data, BOOL err)
{
#pragma unused (data)
diff --git a/arm9/lib/src/CARD_spi.c b/arm9/lib/src/CARD_spi.c
index 3a911333..5f02b276 100644
--- a/arm9/lib/src/CARD_spi.c
+++ b/arm9/lib/src/CARD_spi.c
@@ -1,6 +1,7 @@
#include "function_target.h"
#include "nitro/types.h"
#include "CARD_common.h"
+#include "CARD_spi.h"
#include "MI_memory.h"
extern CARDiCommon cardi_common;
diff --git a/arm9/lib/src/CTRDG_backup.c b/arm9/lib/src/CTRDG_backup.c
new file mode 100644
index 00000000..dc1a3f4b
--- /dev/null
+++ b/arm9/lib/src/CTRDG_backup.c
@@ -0,0 +1,94 @@
+#include "CTRDG_backup.h"
+#include "function_target.h"
+#include "OS_spinLock.h"
+
+extern u16 ctrdgi_flash_lock_id;
+extern u16 ctrdgi_sram_lock_id;
+
+extern u16 CTRDGi_ReadFlashID(void);
+
+extern const CTRDGiFlashTypePlus defaultFlash1M;
+extern const CTRDGiFlashTypePlus MX29L010;
+extern const CTRDGiFlashTypePlus LE26FV10N1TS_10;
+
+extern const CTRDGiFlashTypePlus defaultFlash512;
+extern const CTRDGiFlashTypePlus LE39FW512;
+extern const CTRDGiFlashTypePlus AT29LV512_lib;
+extern const CTRDGiFlashTypePlus MN63F805MNP;
+
+static const CTRDGiFlashTypePlus *const flash1M_list[] = {
+ &MX29L010,
+ &LE26FV10N1TS_10,
+ &defaultFlash1M
+};
+
+static const CTRDGiFlashTypePlus *const flash512_list[] = {
+ &LE39FW512,
+ &AT29LV512_lib,
+ &MN63F805MNP,
+ &defaultFlash512
+};
+
+static const u16 readidtime[] = {
+ 20
+};
+
+ARM_FUNC u16 CTRDG_IdentifyAgbBackup(CTRDGBackupType type)
+{
+ u16 result = 1;
+ u16 flashID;
+ const CTRDGiFlashTypePlus *const *flp;
+ MICartridgeRamCycle ram_cycle;
+
+ if (type == CTRDG_BACKUP_TYPE_FLASH_512K || type == CTRDG_BACKUP_TYPE_FLASH_1M)
+ {
+ ctrdgi_flash_lock_id = (u16)OS_GetLockID();
+
+ (void)OS_LockCartridge(ctrdgi_flash_lock_id);
+
+ ram_cycle = MI_GetCartridgeRamCycle();
+ MI_SetCartridgeRamCycle(MI_CTRDG_RAMCYCLE_18);
+
+ ctrdgi_fl_maxtime = readidtime;
+ flashID = CTRDGi_ReadFlashID();
+
+ if (type == CTRDG_BACKUP_TYPE_FLASH_512K)
+ {
+ flp = flash512_list;
+ }
+
+ if (type == CTRDG_BACKUP_TYPE_FLASH_1M)
+ {
+ flp = flash1M_list;
+ }
+
+ MI_SetCartridgeRamCycle(ram_cycle);
+ (void)OS_UnlockCartridge(ctrdgi_flash_lock_id);
+
+ result = 1;
+ while ((*flp)->type.makerID != 0)
+ {
+ if ((flashID & 0xff) == *(u16 *)&((*flp)->type.makerID))
+ {
+ result = 0;
+ break;
+ }
+ flp++;
+ }
+ CTRDGi_WriteAgbFlashSector = (*flp)->CTRDGi_WriteAgbFlashSector;
+ CTRDGi_EraseAgbFlashChip = (*flp)->CTRDGi_EraseAgbFlashChip;
+ CTRDGi_EraseAgbFlashSector = (*flp)->CTRDGi_EraseAgbFlashSector;
+ CTRDGi_WriteAgbFlashSectorAsync = (*flp)->CTRDGi_WriteAgbFlashSectorAsync;
+ CTRDGi_EraseAgbFlashChipAsync = (*flp)->CTRDGi_EraseAgbFlashChipAsync;
+ CTRDGi_EraseAgbFlashSectorAsync = (*flp)->CTRDGi_EraseAgbFlashSectorAsync;
+ CTRDGi_PollingSR = (*flp)->CTRDGi_PollingSR;
+ ctrdgi_fl_maxtime = (*flp)->maxtime;
+ AgbFlash = &(*flp)->type;
+ }
+ else if (type == CTRDG_BACKUP_TYPE_SRAM)
+ {
+ ctrdgi_sram_lock_id = (u16)OS_GetLockID();
+ result = 0;
+ }
+ return result;
+}
diff --git a/arm9/lib/src/CTRDG_common.c b/arm9/lib/src/CTRDG_common.c
new file mode 100644
index 00000000..3d80cf24
--- /dev/null
+++ b/arm9/lib/src/CTRDG_common.c
@@ -0,0 +1,349 @@
+#include "CTRDG_common.h"
+#include "function_target.h"
+#include "syscall.h"
+#include "OS_cache.h"
+#include "OS_protectionRegion.h"
+#include "OS_terminate_proc.h"
+#include "PXI_fifo.h"
+#include "MI_dma.h"
+#include "MI_memory.h"
+
+CTRDGWork CTRDGi_Work;
+
+static BOOL CTRDGi_EnableFlag = FALSE;
+
+ARM_FUNC void CTRDGi_InitCommon(void)
+{
+ SVC_CpuClear(0, &CTRDGi_Work, sizeof(CTRDGi_Work), 32);
+
+ CTRDGi_Work.lockID = (u16)OS_GetLockID();
+}
+
+ARM_FUNC BOOL CTRDG_IsAgbCartridge(void)
+{
+ return (CTRDG_IsExisting() && CTRDGi_IsAgbCartridgeAtInit());
+}
+
+ARM_FUNC BOOL CTRDG_IsOptionCartridge(void)
+{
+ return (CTRDG_IsExisting() && !CTRDGi_IsAgbCartridgeAtInit());
+}
+
+ARM_FUNC BOOL CTRDGi_IsAgbCartridgeAtInit(void)
+{
+ CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr();
+
+ return cip->isAgbCartridge;
+}
+
+ARM_FUNC u32 CTRDG_GetAgbGameCode(void)
+{
+ u32 ret = 0;
+
+ if (CTRDG_IsExisting())
+ {
+ ret = CTRDGi_GetAgbGameCodeAtInit();
+ }
+
+ return ret;
+}
+
+ARM_FUNC u32 CTRDGi_GetAgbGameCodeAtInit(void)
+{
+ CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr();
+ u32 ret = 0;
+
+ if (CTRDGi_IsAgbCartridgeAtInit())
+ {
+ ret = cip->gameCode;
+ }
+
+ return ret;
+}
+
+ARM_FUNC u16 CTRDG_GetAgbMakerCode(void)
+{
+ u16 ret = 0;
+
+ if (CTRDG_IsExisting())
+ {
+ ret = CTRDGi_GetAgbMakerCodeAtInit();
+ }
+
+ return ret;
+}
+
+ARM_FUNC u16 CTRDGi_GetAgbMakerCodeAtInit(void)
+{
+ CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr();
+ u16 ret = 0;
+
+ if (CTRDGi_IsAgbCartridgeAtInit())
+ {
+ ret = cip->makerCode;
+ }
+
+ return ret;
+}
+
+ARM_FUNC BOOL CTRDG_IsPulledOut(void)
+{
+ CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr();
+
+ if (cip->moduleID.raw == 0xffff)
+ {
+ return FALSE;
+ }
+
+ if (!cip->detectPullOut)
+ {
+ (void)CTRDG_IsExisting();
+ }
+
+ return cip->detectPullOut;
+}
+
+ARM_FUNC BOOL CTRDG_IsExisting(void)
+{
+ BOOL ret = TRUE;
+ CTRDGLockByProc lockInfo;
+
+ CTRDGHeader *chp = CTRDGi_GetHeaderAddr();
+ CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr();
+
+ if (cip->moduleID.raw == 0xffff)
+ {
+ return FALSE;
+ }
+
+ if (cip->detectPullOut == TRUE)
+ {
+ return FALSE;
+ }
+
+ CTRDGi_LockByProcessor(CTRDGi_Work.lockID, &lockInfo);
+
+ CTRDGRomCycle rc;
+
+ CTRDGi_ChangeLatestAccessCycle(&rc);
+ u8 isRomCode = chp->isRomCode;
+
+ if ((isRomCode == CTRDG_IS_ROM_CODE && cip->moduleID.raw != chp->moduleID)
+ || (isRomCode != CTRDG_IS_ROM_CODE && cip->moduleID.raw != *CTRDGi_GetModuleIDImageAddr())
+ || ((cip->gameCode != chp->gameCode) && cip->isAgbCartridge))
+ {
+ cip->detectPullOut = TRUE;
+ ret = FALSE;
+ }
+
+ CTRDGi_RestoreAccessCycle(&rc);
+
+ CTRDGi_UnlockByProcessor(CTRDGi_Work.lockID, &lockInfo);
+
+ return ret;
+}
+
+ARM_FUNC void CTRDGi_ChangeLatestAccessCycle(CTRDGRomCycle *r)
+{
+ r->c1 = MI_GetCartridgeRomCycle1st();
+ r->c2 = MI_GetCartridgeRomCycle2nd();
+
+ MI_SetCartridgeRomCycle1st(MI_CTRDG_ROMCYCLE1_18);
+ MI_SetCartridgeRomCycle2nd(MI_CTRDG_ROMCYCLE2_6);
+}
+
+ARM_FUNC void CTRDGi_RestoreAccessCycle(CTRDGRomCycle *r)
+{
+ MI_SetCartridgeRomCycle1st(r->c1);
+ MI_SetCartridgeRomCycle2nd(r->c2);
+}
+
+ARM_FUNC void CTRDGi_LockByProcessor(u16 lockID, CTRDGLockByProc *info)
+{
+ while (TRUE)
+ {
+ info->irq = OS_DisableInterrupts();
+ if (((info->locked = OS_ReadOwnerOfLockCartridge() & CTRDG_LOCKED_BY_MYPROC_FLAG) != 0)
+ || (OS_TryLockCartridge(lockID) == OS_LOCK_SUCCESS))
+ {
+ break;
+ }
+ (void)OS_RestoreInterrupts(info->irq);
+
+ SVC_WaitByLoop(1);
+ }
+}
+
+ARM_FUNC void CTRDGi_UnlockByProcessor(u16 lockID, CTRDGLockByProc *info)
+{
+ if (!info->locked)
+ {
+ (void)OS_UnLockCartridge(lockID);
+ }
+
+ (void)OS_RestoreInterrupts(info->irq);
+}
+
+ARM_FUNC void CTRDGi_SendtoPxi(u32 data)
+{
+ while (PXI_SendWordByFifo(PXI_FIFO_TAG_CTRDG, data, FALSE) != PXI_FIFO_SUCCESS)
+ {
+ SVC_WaitByLoop(1);
+ }
+}
+
+ARM_FUNC BOOL CTRDG_CpuCopy8(const void *src, void *dest, u32 size)
+{
+ if (HW_CTRDG_ROM <= (u32)dest && (u32)dest < HW_CTRDG_RAM_END)
+ {
+ return CTRDGi_CopyCommon(0, (const void *)dest, (void *)src, size, CTRDGi_FORWARD_CPU8);
+ }
+ else
+ {
+ return CTRDGi_CopyCommon(0, src, dest, size, CTRDGi_FORWARD_CPU8);
+ }
+}
+
+ARM_FUNC BOOL CTRDG_CpuCopy16(const void *src, void *dest, u32 size)
+{
+ return CTRDGi_CopyCommon(0, src, dest, size, CTRDGi_FORWARD_CPU16);
+}
+
+ARM_FUNC BOOL CTRDG_CpuCopy32(const void *src, void *dest, u32 size)
+{
+ return CTRDGi_CopyCommon(0, src, dest, size, CTRDGi_FORWARD_CPU32);
+}
+
+ARM_FUNC BOOL CTRDGi_CopyCommon(u32 dmaNo, const void *src, void *dest, u32 size, u32 forwardType)
+{
+ if (!CTRDG_IsExisting())
+ {
+ return FALSE;
+ }
+
+ CTRDG_CheckEnabled();
+
+ (void)OS_LockCartridge(CTRDGi_Work.lockID);
+
+ if ((forwardType & CTRDGi_FORWARD_TYPE_MASK) == CTRDGi_FORWARD_TYPE_DMA)
+ {
+ MI_StopDma(dmaNo);
+ DC_FlushRange(dest, size);
+ }
+
+ switch (forwardType)
+ {
+ case CTRDGi_FORWARD_DMA16:
+ MI_DmaCopy16(dmaNo, src, dest, size);
+ break;
+ case CTRDGi_FORWARD_DMA32:
+ MI_DmaCopy32(dmaNo, src, dest, size);
+ break;
+ case CTRDGi_FORWARD_CPU16:
+ MI_CpuCopy16(src, dest, size);
+ break;
+ case CTRDGi_FORWARD_CPU32:
+ MI_CpuCopy32(src, dest, size);
+ break;
+
+ case CTRDGi_FORWARD_CPU8:
+ u8 *dest8 = (u8 *)dest;
+ u8 *src8 = (u8 *)src;
+ for (s32 n = 0; n < size; n++)
+ {
+ *dest8++ = *src8++;
+ }
+ break;
+ }
+
+ (void)OS_UnLockCartridge(CTRDGi_Work.lockID);
+
+ if (!CTRDG_IsExisting())
+ {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+ARM_FUNC BOOL CTRDG_Read32(const u32 *address, u32 *rdata)
+{
+ return CTRDGi_AccessCommon((void *)address, 0, rdata, CTRDGi_ACCESS_READ32);
+}
+
+ARM_FUNC BOOL CTRDGi_AccessCommon(void *address, u32 data, void *rdata, u32 accessType)
+{
+ if (!CTRDG_IsExisting())
+ {
+ return FALSE;
+ }
+
+ CTRDG_CheckEnabled();
+
+ (void)OS_LockCartridge(CTRDGi_Work.lockID);
+
+ switch (accessType)
+ {
+ case CTRDGi_ACCESS_READ8:
+ if (rdata)
+ {
+ *(u8 *)rdata = *(u8 *)address;
+ }
+ break;
+ case CTRDGi_ACCESS_READ16:
+ if (rdata)
+ {
+ *(u16 *)rdata = *(u16 *)address;
+ }
+ break;
+ case CTRDGi_ACCESS_READ32:
+ if (rdata)
+ {
+ *(u32 *)rdata = *(u32 *)address;
+ }
+ break;
+ case CTRDGi_ACCESS_WRITE8:
+ *(u8 *)address = (u8)data;
+ break;
+ case CTRDGi_ACCESS_WRITE16:
+ *(u16 *)address = (u16)data;
+ break;
+ case CTRDGi_ACCESS_WRITE32:
+ *(u32 *)address = (u32)data;
+ break;
+ }
+
+ (void)OS_UnLockCartridge(CTRDGi_Work.lockID);
+
+ if (!CTRDG_IsExisting())
+ {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+ARM_FUNC BOOL CTRDG_IsEnabled(void)
+{
+ return CTRDGi_EnableFlag;
+}
+
+ARM_FUNC void CTRDG_Enable(BOOL enable)
+{
+ OSIntrMode bak_cpsr = OS_DisableInterrupts();
+ CTRDGi_EnableFlag = enable;
+ if (!CTRDG_IsOptionCartridge())
+ {
+ u32 acc = (u32)(enable ? OS_PR3_ACCESS_RW : OS_PR3_ACCESS_RO);
+ (void)OS_SetDPermissionsForProtectionRegion(OS_PR3_ACCESS_MASK, acc);
+ }
+ (void)OS_RestoreInterrupts(bak_cpsr);
+}
+
+ARM_FUNC void CTRDG_CheckEnabled(void)
+{
+ if (!CTRDG_IsOptionCartridge() && !CTRDG_IsEnabled())
+ {
+ OS_Terminate();
+ }
+}
diff --git a/arm9/lib/src/CTRDG_flash_AT29LV512.c b/arm9/lib/src/CTRDG_flash_AT29LV512.c
new file mode 100644
index 00000000..8cd90c31
--- /dev/null
+++ b/arm9/lib/src/CTRDG_flash_AT29LV512.c
@@ -0,0 +1,143 @@
+#include "CTRDG_flash_AT29LV512.h"
+#include "function_target.h"
+#include "CTRDG_backup.h"
+#include "CTRDG_flash.h"
+#include "MI_exMemory.h"
+#include "OS_interrupt.h"
+#include "OS_spinLock.h"
+
+#define CTRDG_BACKUP_COM_ADR1 (CTRDG_AGB_FLASH_ADR+0x00005555)
+#define CTRDG_BACKUP_COM_ADR2 (CTRDG_AGB_FLASH_ADR+0x00002aaa)
+
+extern u16 ctrdgi_flash_lock_id;
+extern BOOL ctrdgi_backup_irq;
+
+extern u16 CTRDGi_PollingSR512kCOMMON(u16 phase, u8 *adr, u16 lastData);
+
+extern u16 CTRDGi_EraseFlashChipAT(void);
+extern u16 CTRDGi_EraseFlashSectorAT(u16 p_secNo);
+extern u16 CTRDGi_EraseFlash4KBAT(u16 l_secNo);
+extern u16 CTRDGi_WriteFlashSectorAT(u16 p_secNo, u8 *src);
+extern u16 CTRDGi_WriteFlash4KBAT(u16 l_secNo, u8 *src);
+
+extern void CTRDGi_EraseFlashChipAsyncAT(CTRDG_TASK_FUNC callback);
+extern void CTRDGi_EraseFlash4KBAsyncAT(u16 secNo, CTRDG_TASK_FUNC callback);
+extern void CTRDGi_WriteFlash4KBAsyncAT(u16 secNo, u8 *src, CTRDG_TASK_FUNC callback);
+extern void CTRDGi_EraseFlashSectorAsyncAT(u16 secNo, CTRDG_TASK_FUNC callback);
+extern void CTRDGi_WriteFlashSectorAsyncAT(u16 secNo, u8 *src, CTRDG_TASK_FUNC callback);
+
+static const u16 atMaxTime[] = {
+ 10, 40, 0, 40
+};
+
+const CTRDGiFlashTypePlus AT29LV512_lib = {
+ CTRDGi_WriteFlash4KBAT,
+ CTRDGi_EraseFlashChipAT,
+ CTRDGi_EraseFlash4KBAT,
+ CTRDGi_WriteFlash4KBAsyncAT,
+ CTRDGi_EraseFlashChipAsyncAT,
+ CTRDGi_EraseFlash4KBAsyncAT,
+ CTRDGi_PollingSR512kCOMMON,
+ atMaxTime,
+ {
+ 0x00010000, //ROM size
+ {0x00001000, 12, 16, 0}, //sector
+ {MI_CTRDG_RAMCYCLE_18, MI_CTRDG_RAMCYCLE_18}, //read cycle and write cycle
+ 0x1f, //maker ID
+ 0x3d, //device ID
+ }
+};
+
+const CTRDGiFlashTypePlus AT29LV512_org = {
+ CTRDGi_WriteFlashSectorAT,
+ CTRDGi_EraseFlashChipAT,
+ CTRDGi_EraseFlashSectorAT,
+ CTRDGi_WriteFlashSectorAsyncAT,
+ CTRDGi_EraseFlashChipAsyncAT,
+ CTRDGi_EraseFlashSectorAsyncAT,
+ CTRDGi_PollingSR512kCOMMON,
+ atMaxTime,
+ {
+ 0x00010000, //ROM size
+ {0x00000080, 7, 512, 0}, //sector
+ {MI_CTRDG_RAMCYCLE_18, MI_CTRDG_RAMCYCLE_18}, //read cycle and write cycle
+ 0x1f, //maker ID
+ 0x3d, //device ID
+ }
+};
+
+ARM_FUNC u32 CTRDGi_EraseFlashChipCoreAT(CTRDGTaskInfo *arg)
+{
+ MICartridgeRamCycle ram_cycle;
+ u32 result;
+ (void)arg;
+
+ (void)OS_LockCartridge(ctrdgi_flash_lock_id);
+
+ ram_cycle = MI_GetCartridgeRamCycle();
+ MI_SetCartridgeRamCycle(AgbFlash->agbWait[0]);
+
+ ctrdgi_backup_irq = OS_DisableIrq();
+
+ *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0xaa;
+ *(vu8 *)CTRDG_BACKUP_COM_ADR2 = 0x55;
+ *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0x80;
+ *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0xaa;
+ *(vu8 *)CTRDG_BACKUP_COM_ADR2 = 0x55;
+ *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0x10;
+
+ (void)OS_RestoreIrq(ctrdgi_backup_irq);
+
+ result = CTRDGi_PollingSR(CTRDG_BACKUP_PHASE_CHIP_ERASE, (u8 *)CTRDG_AGB_FLASH_ADR, 0xff);
+
+ MI_SetCartridgeRamCycle(ram_cycle);
+
+ (void)OS_UnlockCartridge(ctrdgi_flash_lock_id);
+
+ return result;
+}
+
+ARM_FUNC u32 CTRDGi_EraseFlashSectorCoreAT(CTRDGTaskInfo *arg)
+{
+ u32 i;
+ u8 *dst;
+ BOOL shlet_ime;
+ MICartridgeRamCycle ram_cycle;
+ u32 result;
+ CTRDGTaskInfo p = *arg;
+ u16 p_secNo = p.sec_num;
+
+ dst = (u8 *)(CTRDG_AGB_FLASH_ADR + (p_secNo << AT29LV512_org.type.sector.shift));
+
+ (void)OS_LockCartridge(ctrdgi_flash_lock_id);
+
+ ram_cycle = MI_GetCartridgeRamCycle();
+ MI_SetCartridgeRamCycle(AgbFlash->agbWait[0]);
+
+ shlet_ime = OS_DisableIrq();
+
+ *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0xaa;
+ *(vu8 *)CTRDG_BACKUP_COM_ADR2 = 0x55;
+ *(vu8 *)CTRDG_BACKUP_COM_ADR1 = 0xa0;
+
+ for (i = AT29LV512_org.type.sector.size; i > 0; i--)
+ {
+ *dst++ = 0xff;
+ }
+ dst--;
+
+ (void)OS_RestoreIrq(shlet_ime);
+
+ result = CTRDGi_PollingSR(CTRDG_BACKUP_PHASE_PROGRAM, dst, 0xff);
+
+ if (result)
+ {
+ result = (u16)((result & 0xff00) | CTRDG_BACKUP_PHASE_SECTOR_ERASE);
+ }
+
+ MI_SetCartridgeRamCycle(ram_cycle);
+
+ (void)OS_UnlockCartridge(ctrdgi_flash_lock_id);
+
+ return result;
+}
diff --git a/arm9/lib/src/OS_reset.c b/arm9/lib/src/OS_reset.c
index 8be8fb33..45d2bb13 100644
--- a/arm9/lib/src/OS_reset.c
+++ b/arm9/lib/src/OS_reset.c
@@ -10,14 +10,11 @@
#include "MI_dma.h"
#include "CARD_common.h"
#include "PXI_init.h"
+#include "PXI_fifo.h"
static u16 OSi_IsInitReset = 0;
vu16 OSi_IsResetOccurred = 0;
-extern u32 PXI_IsCallbackReady(u32 param1, u32 param2);
-extern void PXI_SetFifoRecvCallback(u32 param1, void* callback);
-extern BOOL PXI_SendWordByFifo(u32 param1, u32 data, u32 param2);
-
static void OSi_CommonCallback(PXIFifoTag tag, u32 data, BOOL err);
static void OSi_SendToPxi(u16 data);
static void OSi_DoResetSystem(void);
diff --git a/arm9/lib/src/PXI_fifo.c b/arm9/lib/src/PXI_fifo.c
new file mode 100644
index 00000000..35db1c7f
--- /dev/null
+++ b/arm9/lib/src/PXI_fifo.c
@@ -0,0 +1,185 @@
+#include "function_target.h"
+#include "consts.h"
+#include "OS_interrupt.h"
+#include "OS_system.h"
+#include "PXI_fifo.h"
+#include "systemWork.h"
+
+static u16 FifoCtrlInit = 0;
+static PXIFifoCallback FifoRecvCallbackTable[PXI_MAX_FIFO_TAG];
+
+static inline PXIFifoStatus PXIi_SetToFifo(u32 data);
+
+ARM_FUNC void PXI_InitFifo(void)
+{
+ OSSystemWork *p = OS_GetSystemWork();
+ OSIntrMode enabled = OS_DisableInterrupts();
+ s32 i;
+
+ if (!FifoCtrlInit)
+ {
+ FifoCtrlInit = TRUE;
+
+ p->pxiHandleChecker[PXI_PROC_ARM9] = 0UL;
+
+ for (i = 0; i < PXI_MAX_FIFO_TAG; i++)
+ {
+ FifoRecvCallbackTable[i] = NULL;
+ }
+
+ reg_PXI_SUBP_FIFO_CNT = (REG_PXI_SUBP_FIFO_CNT_SEND_CL_MASK
+ | REG_PXI_SUBP_FIFO_CNT_RECV_RI_MASK | REG_PXI_SUBP_FIFO_CNT_E_MASK | REG_PXI_SUBP_FIFO_CNT_ERR_MASK);
+
+ (void)OS_ResetRequestIrqMask(OS_IE_SPFIFO_RECV);
+ (void)OS_SetIrqFunction(OS_IE_SPFIFO_RECV, PXIi_HandlerRecvFifoNotEmpty);
+ (void)OS_EnableIrqMask(OS_IE_SPFIFO_RECV);
+
+ {
+ s32 timeout;
+ s32 c;
+
+ for (i = 0; ; i++)
+ {
+ c = reg_PXI_SUBPINTF & 15;
+ reg_PXI_SUBPINTF = (u16)(c << 8);
+
+ if (c == 0 && i > 4)
+ {
+ break;
+ }
+
+ for (timeout = 1000; (reg_PXI_SUBPINTF & 15) == c; timeout--)
+ {
+ if (timeout == 0)
+ {
+ i = 0;
+ break;
+ }
+ }
+ }
+ }
+ }
+ (void)OS_RestoreInterrupts(enabled);
+}
+
+ARM_FUNC void PXI_SetFifoRecvCallback(s32 fifotag, PXIFifoCallback callback)
+{
+ OSSystemWork *p = OS_GetSystemWork();
+ OSIntrMode enabled = OS_DisableInterrupts();
+
+ FifoRecvCallbackTable[fifotag] = callback;
+ if (callback)
+ {
+ p->pxiHandleChecker[PXI_PROC_ARM9] |= (1UL << fifotag);
+ }
+ else
+ {
+ p->pxiHandleChecker[PXI_PROC_ARM9] &= ~(1UL << fifotag);
+ }
+ (void)OS_RestoreInterrupts(enabled);
+}
+
+ARM_FUNC BOOL PXI_IsCallbackReady(s32 fifotag, PXIProc proc)
+{
+ OSSystemWork *p = OS_GetSystemWork();
+
+ return (p->pxiHandleChecker[proc] & (1UL << fifotag)) ? TRUE : FALSE;
+}
+
+ARM_FUNC s32 PXI_SendWordByFifo(s32 fifotag, u32 data, BOOL err)
+{
+ PXIFifoMessage fifomsg;
+
+ fifomsg.e.tag = (PXIFifoTag)fifotag;
+ fifomsg.e.err = (u32)err;
+ fifomsg.e.data = data;
+
+ return PXIi_SetToFifo(fifomsg.raw);
+}
+
+static inline PXIFifoStatus PXIi_SetToFifo(u32 data)
+{
+ if (reg_PXI_SUBP_FIFO_CNT & REG_PXI_SUBP_FIFO_CNT_ERR_MASK)
+ {
+ reg_PXI_SUBP_FIFO_CNT |= (REG_PXI_SUBP_FIFO_CNT_E_MASK | REG_PXI_SUBP_FIFO_CNT_ERR_MASK);
+ return PXI_FIFO_FAIL_SEND_ERR;
+ }
+
+ OSIntrMode enabled = OS_DisableInterrupts();
+ if (reg_PXI_SUBP_FIFO_CNT & REG_PXI_SUBP_FIFO_CNT_SEND_FULL_MASK)
+ {
+ (void)OS_RestoreInterrupts(enabled);
+ return PXI_FIFO_FAIL_SEND_FULL;
+ }
+
+ reg_PXI_SEND_FIFO = data;
+ (void)OS_RestoreInterrupts(enabled);
+ return PXI_FIFO_SUCCESS;
+}
+
+static inline PXIFifoStatus PXIi_GetFromFifo(u32 *data_buf)
+{
+ if (reg_PXI_SUBP_FIFO_CNT & REG_PXI_SUBP_FIFO_CNT_ERR_MASK)
+ {
+ reg_PXI_SUBP_FIFO_CNT |= (REG_PXI_SUBP_FIFO_CNT_E_MASK | REG_PXI_SUBP_FIFO_CNT_ERR_MASK);
+ return PXI_FIFO_FAIL_RECV_ERR;
+ }
+
+ OSIntrMode enabled = OS_DisableInterrupts();
+ if (reg_PXI_SUBP_FIFO_CNT & REG_PXI_SUBP_FIFO_CNT_RECV_EMP_MASK)
+ {
+ (void)OS_RestoreInterrupts(enabled);
+ return PXI_FIFO_FAIL_RECV_EMPTY;
+ }
+
+
+ *data_buf = reg_PXI_RECV_FIFO;
+ (void)OS_RestoreInterrupts(enabled);
+
+ return PXI_FIFO_SUCCESS;
+}
+
+ARM_FUNC void PXIi_HandlerRecvFifoNotEmpty(void)
+{
+ PXIFifoMessage fifomsg;
+ PXIFifoStatus ret_code;
+ PXIFifoTag tag;
+
+ while (TRUE)
+ {
+ ret_code = PXIi_GetFromFifo(&fifomsg.raw);
+
+ if (ret_code == PXI_FIFO_FAIL_RECV_EMPTY)
+ {
+ break;
+ }
+ if (ret_code == PXI_FIFO_FAIL_RECV_ERR)
+ {
+ continue;
+ }
+
+ tag = (PXIFifoTag)fifomsg.e.tag;
+
+ if (tag)
+ {
+ if (FifoRecvCallbackTable[tag])
+ {
+ (FifoRecvCallbackTable[tag])(tag, fifomsg.e.data, (BOOL)fifomsg.e.err);
+ }
+ else
+ {
+ if (fifomsg.e.err)
+ {
+ }
+ else
+ {
+ fifomsg.e.err = TRUE;
+ (void)PXIi_SetToFifo(fifomsg.raw);
+ }
+ }
+ }
+ else
+ {
+ }
+ }
+}
diff --git a/arm9/lib/src/PXI_init.c b/arm9/lib/src/PXI_init.c
index f079ca3d..d70ca3b0 100644
--- a/arm9/lib/src/PXI_init.c
+++ b/arm9/lib/src/PXI_init.c
@@ -1,8 +1,7 @@
#include "PXI_init.h"
+#include "PXI_fifo.h"
#include "function_target.h"
-extern void PXI_InitFifo(void);
-
ARM_FUNC void PXI_Init(void)
{
PXI_InitFifo();
diff --git a/arm9/lib/src/SND_command.c b/arm9/lib/src/SND_command.c
index 130a4ebc..4ad80be5 100644
--- a/arm9/lib/src/SND_command.c
+++ b/arm9/lib/src/SND_command.c
@@ -18,11 +18,6 @@ static u32 sCurrentTag;
static u32 sFinishedTag;
static struct SNDCommand *sFreeList;
-// TODO remove these function declarations once they are in the headers
-extern s32 PXI_SendWordByFifo(u32, u32, u32);
-extern void PXI_SetFifoRecvCallback(u32, void (*)(s32, s32));
-extern BOOL PXI_IsCallbackReady(u32, u32);
-
static void InitPXI(void);
static void RequestCommandProc(void);
static struct SNDCommand *AllocCommand(void);
@@ -280,25 +275,25 @@ ARM_FUNC s32 SND_CountWaitingCommand(void) {
return SND_CMD_COUNT - SND_CountFreeCommand() - SND_CountReservedCommand();
}
-ARM_FUNC static void PxiFifoCallback(s32 a, s32 b) {
-#pragma unused (a)
+ARM_FUNC static void PxiFifoCallback(PXIFifoTag tag, u32 data, BOOL) {
+#pragma unused (tag)
OSIntrMode oldirq = OS_DisableInterrupts();
- SNDi_CallAlarmHandler(b);
+ SNDi_CallAlarmHandler((s32)data);
(void)OS_RestoreInterrupts(oldirq);
}
ARM_FUNC static void InitPXI(void) {
- PXI_SetFifoRecvCallback(7, PxiFifoCallback);
+ PXI_SetFifoRecvCallback(PXI_FIFO_TAG_SOUND, PxiFifoCallback);
if (!IsCommandAvailable())
return;
- if (PXI_IsCallbackReady(7, 1))
+ if (PXI_IsCallbackReady(PXI_FIFO_TAG_SOUND, PXI_PROC_ARM7))
return;
do {
OS_SpinWait(100);
- } while (!PXI_IsCallbackReady(7, 1));
+ } while (!PXI_IsCallbackReady(PXI_FIFO_TAG_SOUND, PXI_PROC_ARM7));
}
ARM_FUNC static void RequestCommandProc(void) {
diff --git a/arm9/modules/05/asm/mod05_021E1374.s b/arm9/modules/05/asm/mod05_021E1374.s
index e3bb69a4..df43ddb9 100644
--- a/arm9/modules/05/asm/mod05_021E1374.s
+++ b/arm9/modules/05/asm/mod05_021E1374.s
@@ -915,7 +915,7 @@ MOD05_021E1A30: ; 0x021E1A30
str r0, [sp, #0xc]
bl FUN_020395F4
str r0, [sp, #8]
- bl FUN_0203962C
+ bl Field_TrainerIsDoubleBattle
cmp r0, #0
bne _021E1A60
add sp, #0x10
diff --git a/arm9/modules/05/asm/mod05_021E2B80.s b/arm9/modules/05/asm/mod05_021E2B80.s
index 8aa39261..16e19ae0 100644
--- a/arm9/modules/05/asm/mod05_021E2B80.s
+++ b/arm9/modules/05/asm/mod05_021E2B80.s
@@ -42,7 +42,7 @@ MOD05_021E2BB8: ; 0x021E2BB8
push {r4, lr}
add r4, r0, #0
add r0, r1, #0
- bl MOD05_021E2D00
+ bl MOD05_ScriptContext_GetTextFrameDelay
strb r0, [r4]
mov r0, #0
strb r0, [r4, #1]
@@ -68,15 +68,15 @@ MOD05_021E2BD0: ; 0x021E2BD0
add r0, #0x80
ldr r0, [r0]
add r1, sp, #8
- bl MOD05_021E2D9C
+ bl MOD05_CreateMessageBox
add r0, sp, #8
add r1, r6, #0
add r2, r7, #0
- bl MOD05_021E2DD4
+ bl MOD05_ReadAndExpandMsgDataViaBuffer
cmp r4, #0
bne _021E2C10
add r0, r5, #0
- bl MOD05_021E2D00
+ bl MOD05_ScriptContext_GetTextFrameDelay
add r2, r0, #0
mov r0, #0
mov r1, #1
@@ -89,7 +89,7 @@ _021E2C16:
str r0, [sp]
ldr r3, [sp, #4]
add r0, sp, #8
- bl MOD05_021E2E40
+ bl MOD05_DrawFieldMessage
add sp, #0x20
pop {r3, r4, r5, r6, r7, pc}
@@ -107,14 +107,14 @@ MOD05_ShowMessageInField: ; 0x021E2C24
add r5, #0x80
ldr r0, [r5]
add r1, sp, #0
- bl MOD05_021E2D9C
+ bl MOD05_CreateMessageBox
add r0, sp, #0
add r1, r4, #0
add r2, r6, #0
- bl MOD05_021E2DD4
+ bl MOD05_ReadAndExpandMsgDataViaBuffer
add r0, sp, #0
mov r1, #1
- bl MOD05_021E2E68
+ bl MOD05_AddTextPrinterParameterized
add sp, #0x18
pop {r4, r5, r6, pc}
@@ -134,7 +134,7 @@ MOD05_021E2C58: ; 0x021E2C58
add r0, #0x80
ldr r0, [r0]
add r1, sp, #4
- bl MOD05_021E2D9C
+ bl MOD05_CreateMessageBox
add r0, sp, #0x20
ldrh r0, [r0, #0x10]
add r1, r4, #0
@@ -142,13 +142,13 @@ MOD05_021E2C58: ; 0x021E2C58
str r0, [sp]
add r0, sp, #4
add r3, r7, #0
- bl MOD05_021E2DF0
+ bl MOD05_ExpandEasyChatMessage
add r0, sp, #0x20
ldrb r0, [r0, #0x14]
cmp r0, #0xff
beq _021E2CB0
add r0, r5, #0
- bl MOD05_021E2D00
+ bl MOD05_ScriptContext_GetTextFrameDelay
add r2, r0, #0
mov r0, #0
str r0, [sp]
@@ -156,13 +156,13 @@ MOD05_021E2C58: ; 0x021E2C58
ldrb r3, [r3, #0x14]
add r0, sp, #4
mov r1, #1
- bl MOD05_021E2E40
+ bl MOD05_DrawFieldMessage
add sp, #0x1c
pop {r4, r5, r6, r7, pc}
_021E2CB0:
add r0, sp, #4
mov r1, #1
- bl MOD05_021E2E68
+ bl MOD05_AddTextPrinterParameterized
add sp, #0x1c
pop {r4, r5, r6, r7, pc}
@@ -181,31 +181,31 @@ MOD05_021E2CBC: ; 0x021E2CBC
add r0, #0x80
ldr r0, [r0]
add r1, sp, #4
- bl MOD05_021E2D9C
+ bl MOD05_CreateMessageBox
ldr r1, [r5, #0x78]
add r0, sp, #4
add r2, r4, #0
- bl MOD05_021E2DD4
+ bl MOD05_ReadAndExpandMsgDataViaBuffer
add r0, r5, #0
- bl MOD05_021E2D00
+ bl MOD05_ScriptContext_GetTextFrameDelay
add r2, r0, #0
mov r0, #0
str r0, [sp]
add r0, sp, #4
mov r1, #1
add r3, r6, #0
- bl MOD05_021E2E40
+ bl MOD05_DrawFieldMessage
add sp, #0x1c
pop {r3, r4, r5, r6, pc}
- thumb_func_start MOD05_021E2D00
-MOD05_021E2D00: ; 0x021E2D00
+ thumb_func_start MOD05_ScriptContext_GetTextFrameDelay
+MOD05_ScriptContext_GetTextFrameDelay: ; 0x021E2D00
push {r3, lr}
add r0, #0x80
ldr r0, [r0]
ldr r0, [r0, #0xc]
bl Sav2_PlayerData_GetOptionsAddr
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
pop {r3, pc}
.balign 4, 0
@@ -272,8 +272,8 @@ MOD05_021E2D5C: ; 0x021E2D5C
str r0, [r4, #0x14]
pop {r4, r5, r6, pc}
- thumb_func_start MOD05_021E2D9C
-MOD05_021E2D9C: ; 0x021E2D9C
+ thumb_func_start MOD05_CreateMessageBox
+MOD05_CreateMessageBox: ; 0x021E2D9C
push {r3, r4, r5, lr}
add r4, r1, #0
add r5, r0, #0
@@ -300,8 +300,8 @@ _021E2DC8:
pop {r3, r4, r5, pc}
.balign 4, 0
- thumb_func_start MOD05_021E2DD4
-MOD05_021E2DD4: ; 0x021E2DD4
+ thumb_func_start MOD05_ReadAndExpandMsgDataViaBuffer
+MOD05_ReadAndExpandMsgDataViaBuffer: ; 0x021E2DD4
push {r4, lr}
add r4, r0, #0
add r0, r1, #0
@@ -315,8 +315,8 @@ MOD05_021E2DD4: ; 0x021E2DD4
pop {r4, pc}
.balign 4, 0
- thumb_func_start MOD05_021E2DF0
-MOD05_021E2DF0: ; 0x021E2DF0
+ thumb_func_start MOD05_ExpandEasyChatMessage
+MOD05_ExpandEasyChatMessage: ; 0x021E2DF0
push {r3, r4, r5, r6, r7, lr}
sub sp, #8
add r5, r0, #0
@@ -351,8 +351,8 @@ MOD05_021E2DF0: ; 0x021E2DF0
pop {r3, r4, r5, r6, r7, pc}
.balign 4, 0
- thumb_func_start MOD05_021E2E40
-MOD05_021E2E40: ; 0x021E2E40
+ thumb_func_start MOD05_DrawFieldMessage
+MOD05_DrawFieldMessage: ; 0x021E2E40
push {r4, r5, r6, lr}
sub sp, #8
add r4, r0, #0
@@ -367,14 +367,14 @@ MOD05_021E2E40: ; 0x021E2E40
ldr r1, [r4]
add r2, r6, #0
add r3, r5, #0
- bl FUN_02054690
+ bl DrawFieldMessage
ldr r1, [r4, #0x14]
strb r0, [r1]
add sp, #8
pop {r4, r5, r6, pc}
- thumb_func_start MOD05_021E2E68
-MOD05_021E2E68: ; 0x021E2E68
+ thumb_func_start MOD05_AddTextPrinterParameterized
+MOD05_AddTextPrinterParameterized: ; 0x021E2E68
push {r3, r4, lr}
sub sp, #0xc
mov r3, #0
diff --git a/arm9/modules/05/asm/mod05_021E7504.s b/arm9/modules/05/asm/mod05_021E7504.s
new file mode 100644
index 00000000..d7f960b2
--- /dev/null
+++ b/arm9/modules/05/asm/mod05_021E7504.s
@@ -0,0 +1,316 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E7504
+MOD05_021E7504: ; 0x021E7504
+ add r1, r0, #0
+ ldr r0, [r1, #0x10]
+ cmp r0, #3
+ bhi _021E7536
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_021E7518: ; jump table
+ .short _021E7520 - _021E7518 - 2 ; case 0
+ .short _021E752C - _021E7518 - 2 ; case 1
+ .short _021E7526 - _021E7518 - 2 ; case 2
+ .short _021E7532 - _021E7518 - 2 ; case 3
+_021E7520:
+ mov r0, #2
+ str r0, [r1, #0x10]
+ b _021E7536
+_021E7526:
+ mov r0, #1
+ str r0, [r1, #0x10]
+ b _021E7536
+_021E752C:
+ mov r0, #3
+ str r0, [r1, #0x10]
+ b _021E7536
+_021E7532:
+ mov r0, #0
+ str r0, [r1, #0x10]
+_021E7536:
+ ldr r0, [r1]
+ ldr r3, _021E7540 ; =FUN_02055304
+ ldr r0, [r0, #0x38]
+ ldr r1, [r1, #0x10]
+ bx r3
+ .balign 4, 0
+_021E7540: .word FUN_02055304
+
+ thumb_func_start MOD05_021E7544
+MOD05_021E7544: ; 0x021E7544
+ push {r4, r5, r6, r7, lr}
+ sub sp, #0x24
+ add r5, r1, #0
+ add r7, r0, #0
+ ldr r0, [r5]
+ ldr r0, [r0, #0x38]
+ bl FUN_020553A0
+ add r6, r0, #0
+ ldr r0, [r5, #8]
+ cmp r0, #0
+ beq _021E7564
+ cmp r0, #1
+ beq _021E756E
+ add sp, #0x24
+ pop {r4, r5, r6, r7, pc}
+_021E7564:
+ mov r0, #1
+ str r0, [r5, #8]
+ ldr r0, _021E760C ; =0x0000064F
+ bl FUN_020054C8
+_021E756E:
+ ldr r0, [r5, #0xc]
+ lsr r2, r0, #0x1f
+ lsl r1, r0, #0x1f
+ sub r1, r1, r2
+ mov r0, #0x1f
+ ror r1, r0
+ add r0, r2, r1
+ beq _021E7584
+ add r0, r5, #0
+ bl MOD05_021E7504
+_021E7584:
+ add r0, r6, #0
+ add r1, sp, #0x18
+ bl FUN_02058BA4
+ ldr r4, [r5, #0xc]
+ add r0, r4, #0
+ bl _dflt
+ str r0, [sp, #0x14]
+ lsl r0, r4, #0xb
+ str r1, [sp, #0x10]
+ bl _dflt
+ add r2, r0, #0
+ add r3, r1, #0
+ ldr r0, _021E7610 ; =0x9999999A
+ ldr r1, _021E7614 ; =0x40C19999
+ bl _dadd
+ add r2, r0, #0
+ add r3, r1, #0
+ ldr r0, [sp, #0x14]
+ ldr r1, [sp, #0x10]
+ bl _dmul
+ bl _dfix
+ str r0, [sp, #0x1c]
+ add r0, r6, #0
+ add r1, sp, #0x18
+ bl FUN_02058BB4
+ ldr r0, [r5, #0xc]
+ add r0, r0, #1
+ str r0, [r5, #0xc]
+ cmp r0, #0x14
+ bne _021E75EA
+ mov r0, #6
+ str r0, [sp]
+ mov r1, #0
+ mov r0, #1
+ str r0, [sp, #4]
+ mov r0, #4
+ str r0, [sp, #8]
+ mov r0, #2
+ add r2, r1, #0
+ add r3, r1, #0
+ bl FUN_0200E1D0
+ add sp, #0x24
+ pop {r4, r5, r6, r7, pc}
+_021E75EA:
+ ble _021E7606
+ bl FUN_0200E308
+ cmp r0, #0
+ beq _021E7606
+ ldr r0, [r5, #4]
+ mov r1, #1
+ str r1, [r0]
+ add r0, r5, #0
+ bl FreeToHeap
+ add r0, r7, #0
+ bl FUN_0200CAB4
+_021E7606:
+ add sp, #0x24
+ pop {r4, r5, r6, r7, pc}
+ nop
+_021E760C: .word 0x0000064F
+_021E7610: .word 0x9999999A
+_021E7614: .word 0x40C19999
+
+ thumb_func_start MOD05_021E7618
+MOD05_021E7618: ; 0x021E7618
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x20
+ add r5, r1, #0
+ add r6, r0, #0
+ ldr r0, [r5]
+ ldr r0, [r0, #0x38]
+ bl FUN_020553A0
+ ldr r1, [r5, #8]
+ add r4, r0, #0
+ cmp r1, #0
+ beq _021E763C
+ cmp r1, #1
+ beq _021E7694
+ cmp r1, #2
+ beq _021E771C
+ add sp, #0x20
+ pop {r3, r4, r5, r6, r7, pc}
+_021E763C:
+ bl FUN_02058914
+ add r0, r4, #0
+ add r1, sp, #0x14
+ bl FUN_02058BA4
+ ldr r1, [r5, #0xc]
+ mov r0, #0x14
+ sub r6, r0, r1
+ add r0, r6, #0
+ bl _dflt
+ str r0, [sp, #0xc]
+ lsl r0, r6, #0xb
+ add r7, r1, #0
+ bl _dflt
+ add r2, r0, #0
+ add r3, r1, #0
+ ldr r0, _021E7744 ; =0x9999999A
+ ldr r1, _021E7748 ; =0x40C19999
+ bl _dadd
+ add r2, r0, #0
+ add r3, r1, #0
+ ldr r0, [sp, #0xc]
+ add r1, r7, #0
+ bl _dmul
+ bl _dfix
+ str r0, [sp, #0x18]
+ add r0, r4, #0
+ add r1, sp, #0x14
+ bl FUN_02058BB4
+ add r0, r4, #0
+ bl MOD05_021F1D8C
+ ldr r0, _021E774C ; =0x0000064F
+ bl FUN_020054C8
+ mov r0, #1
+ str r0, [r5, #8]
+_021E7694:
+ ldr r0, [r5, #0xc]
+ lsr r2, r0, #0x1f
+ lsl r1, r0, #0x1f
+ sub r1, r1, r2
+ mov r0, #0x1f
+ ror r1, r0
+ add r0, r2, r1
+ beq _021E76AA
+ add r0, r5, #0
+ bl MOD05_021E7504
+_021E76AA:
+ add r0, r4, #0
+ add r1, sp, #0x14
+ bl FUN_02058BA4
+ ldr r1, [r5, #0xc]
+ mov r0, #0x14
+ sub r6, r0, r1
+ add r0, r6, #0
+ bl _dflt
+ str r0, [sp, #0x10]
+ lsl r0, r6, #0xb
+ add r7, r1, #0
+ bl _dflt
+ add r2, r0, #0
+ add r3, r1, #0
+ ldr r0, _021E7744 ; =0x9999999A
+ ldr r1, _021E7748 ; =0x40C19999
+ bl _dadd
+ add r2, r0, #0
+ add r3, r1, #0
+ ldr r0, [sp, #0x10]
+ add r1, r7, #0
+ bl _dmul
+ bl _dfix
+ str r0, [sp, #0x18]
+ add r0, r4, #0
+ add r1, sp, #0x14
+ bl FUN_02058BB4
+ ldr r0, [r5, #0xc]
+ add r0, r0, #1
+ str r0, [r5, #0xc]
+ cmp r0, #2
+ bne _021E770E
+ mov r0, #6
+ str r0, [sp]
+ mov r0, #1
+ str r0, [sp, #4]
+ mov r1, #4
+ str r1, [sp, #8]
+ add r1, r0, #0
+ add r2, r0, #0
+ mov r3, #0
+ bl FUN_0200E1D0
+_021E770E:
+ ldr r0, [r5, #0xc]
+ cmp r0, #0x14
+ ble _021E7740
+ mov r0, #2
+ add sp, #0x20
+ str r0, [r5, #8]
+ pop {r3, r4, r5, r6, r7, pc}
+_021E771C:
+ bl FUN_0200E308
+ cmp r0, #0
+ beq _021E7740
+ ldr r0, [r5]
+ mov r1, #1
+ ldr r0, [r0, #0x38]
+ bl FUN_02055304
+ ldr r0, [r5, #4]
+ mov r1, #1
+ str r1, [r0]
+ add r0, r5, #0
+ bl FreeToHeap
+ add r0, r6, #0
+ bl FUN_0200CAB4
+_021E7740:
+ add sp, #0x20
+ pop {r3, r4, r5, r6, r7, pc}
+ .balign 4, 0
+_021E7744: .word 0x9999999A
+_021E7748: .word 0x40C19999
+_021E774C: .word 0x0000064F
+
+ thumb_func_start MOD05_021E7750
+MOD05_021E7750: ; 0x021E7750
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r0, #0
+ add r6, r1, #0
+ mov r0, #4
+ mov r1, #0x14
+ add r7, r2, #0
+ bl AllocFromHeapAtEnd
+ add r4, r0, #0
+ mov r1, #0
+ mov r2, #0x14
+ bl MI_CpuFill8
+ str r5, [r4]
+ str r7, [r4, #4]
+ ldr r0, [r5, #0x38]
+ bl FUN_020552F8
+ str r0, [r4, #0x10]
+ cmp r6, #0
+ beq _021E7786
+ ldr r0, _021E7794 ; =MOD05_021E7544
+ add r1, r4, #0
+ mov r2, #0x64
+ bl FUN_0200CA44
+ pop {r3, r4, r5, r6, r7, pc}
+_021E7786:
+ ldr r0, _021E7798 ; =MOD05_021E7618
+ add r1, r4, #0
+ mov r2, #0x64
+ bl FUN_0200CA44
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_021E7794: .word MOD05_021E7544
+_021E7798: .word MOD05_021E7618
diff --git a/arm9/modules/05/asm/mod05_021E779C.s b/arm9/modules/05/asm/mod05_021E779C.s
new file mode 100644
index 00000000..ad4118ff
--- /dev/null
+++ b/arm9/modules/05/asm/mod05_021E779C.s
@@ -0,0 +1,621 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E779C
+MOD05_021E779C: ; 0x021E779C
+ push {r4, lr}
+ mov r2, #0
+ mov r1, #0x14
+ add r3, r2, #0
+ add r4, r0, #0
+ bl MOD05_021E4BE8
+ str r4, [r0, #0x10]
+ pop {r4, pc}
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E77B0
+MOD05_021E77B0: ; 0x021E77B0
+ push {r4, lr}
+ add r4, r0, #0
+ bl MOD05_021E78B4
+ add r0, r4, #0
+ bl MOD05_021E4C00
+ pop {r4, pc}
+
+ thumb_func_start MOD05_021E77C0
+MOD05_021E77C0: ; 0x021E77C0
+ ldr r1, [r0]
+ add r1, r1, #1
+ str r1, [r0]
+ bx lr
+
+ thumb_func_start MOD05_021E77C8
+MOD05_021E77C8: ; 0x021E77C8
+ push {r3, lr}
+ ldr r1, [r0]
+ sub r1, r1, #1
+ str r1, [r0]
+ bpl _021E77D6
+ bl ErrorHandling
+_021E77D6:
+ pop {r3, pc}
+
+ thumb_func_start MOD05_021E77D8
+MOD05_021E77D8: ; 0x021E77D8
+ ldr r1, [r0, #4]
+ add r1, r1, #1
+ str r1, [r0, #4]
+ bx lr
+
+ thumb_func_start MOD05_021E77E0
+MOD05_021E77E0: ; 0x021E77E0
+ push {r3, lr}
+ ldr r1, [r0, #4]
+ sub r1, r1, #1
+ str r1, [r0, #4]
+ bpl _021E77EE
+ bl ErrorHandling
+_021E77EE:
+ pop {r3, pc}
+
+ thumb_func_start MOD05_021E77F0
+MOD05_021E77F0: ; 0x021E77F0
+ push {r3, lr}
+ cmp r1, #0
+ bne _021E77FC
+ bl MOD05_021E77C0
+ pop {r3, pc}
+_021E77FC:
+ bl MOD05_021E77D8
+ pop {r3, pc}
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E7804
+MOD05_021E7804: ; 0x021E7804
+ push {r3, lr}
+ cmp r1, #0
+ bne _021E7810
+ bl MOD05_021E77C8
+ pop {r3, pc}
+_021E7810:
+ bl MOD05_021E77E0
+ pop {r3, pc}
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E7818
+MOD05_021E7818: ; 0x021E7818
+ push {r3, r4, lr}
+ sub sp, #0xc
+ add r4, r0, #0
+ ldr r0, [r4, #8]
+ cmp r0, #0
+ bne _021E785C
+ mov r1, #1
+ str r1, [r4, #8]
+ ldr r0, [r4, #0x10]
+ mov r2, #0x55
+ bl MOD05_021E5078
+ ldr r0, [r4, #0x10]
+ mov r1, #1
+ mov r2, #0x75
+ bl MOD05_021E50AC
+ mov r1, #1
+ ldr r0, [r4, #0x10]
+ mov r2, #4
+ add r3, r1, #0
+ bl MOD05_021E50D4
+ mov r1, #1
+ str r1, [sp]
+ mov r0, #0
+ str r0, [sp, #4]
+ ldr r0, _021E7860 ; =UNK05_021F7854
+ add r2, r1, #0
+ str r0, [sp, #8]
+ ldr r0, [r4, #0x10]
+ add r3, r1, #0
+ bl MOD05_021E4EFC
+_021E785C:
+ add sp, #0xc
+ pop {r3, r4, pc}
+ .balign 4, 0
+_021E7860: .word UNK05_021F7854
+
+ thumb_func_start MOD05_021E7864
+MOD05_021E7864: ; 0x021E7864
+ push {r3, r4, lr}
+ sub sp, #0xc
+ add r4, r0, #0
+ ldr r0, [r4, #0xc]
+ cmp r0, #0
+ bne _021E78AC
+ mov r0, #1
+ str r0, [r4, #0xc]
+ ldr r0, [r4, #0x10]
+ mov r1, #0xa
+ mov r2, #0x6c
+ bl MOD05_021E5078
+ ldr r0, [r4, #0x10]
+ mov r1, #0xa
+ mov r2, #0x75
+ bl MOD05_021E50AC
+ ldr r0, [r4, #0x10]
+ mov r1, #0xb
+ mov r2, #0xd
+ mov r3, #1
+ bl MOD05_021E50D4
+ mov r0, #0xb
+ str r0, [sp]
+ mov r0, #0
+ str r0, [sp, #4]
+ ldr r0, _021E78B0 ; =UNK05_021F7854
+ mov r2, #0xa
+ str r0, [sp, #8]
+ ldr r0, [r4, #0x10]
+ mov r1, #0xc
+ add r3, r2, #0
+ bl MOD05_021E4EFC
+_021E78AC:
+ add sp, #0xc
+ pop {r3, r4, pc}
+ .balign 4, 0
+_021E78B0: .word UNK05_021F7854
+
+ thumb_func_start MOD05_021E78B4
+MOD05_021E78B4: ; 0x021E78B4
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #8]
+ cmp r0, #1
+ bne _021E78E2
+ mov r0, #0
+ str r0, [r4, #8]
+ ldr r0, [r4, #0x10]
+ mov r1, #1
+ bl MOD05_021E50A0
+ ldr r0, [r4, #0x10]
+ mov r1, #1
+ bl MOD05_021E50C8
+ ldr r0, [r4, #0x10]
+ mov r1, #1
+ bl MOD05_021E5114
+ ldr r0, [r4, #0x10]
+ mov r1, #1
+ bl MOD05_021E506C
+_021E78E2:
+ pop {r4, pc}
+
+ thumb_func_start MOD05_021E78E4
+MOD05_021E78E4: ; 0x021E78E4
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #0xc]
+ cmp r0, #1
+ bne _021E7912
+ mov r0, #0
+ str r0, [r4, #0xc]
+ ldr r0, [r4, #0x10]
+ mov r1, #0xa
+ bl MOD05_021E50A0
+ ldr r0, [r4, #0x10]
+ mov r1, #0xa
+ bl MOD05_021E50C8
+ ldr r0, [r4, #0x10]
+ mov r1, #0xb
+ bl MOD05_021E5114
+ ldr r0, [r4, #0x10]
+ mov r1, #0xc
+ bl MOD05_021E506C
+_021E7912:
+ pop {r4, pc}
+
+ thumb_func_start MOD05_021E7914
+MOD05_021E7914: ; 0x021E7914
+ push {r3, lr}
+ ldr r1, [r0]
+ cmp r1, #0
+ bne _021E7920
+ bl MOD05_021E7818
+_021E7920:
+ pop {r3, pc}
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E7924
+MOD05_021E7924: ; 0x021E7924
+ push {r3, lr}
+ ldr r1, [r0, #4]
+ cmp r1, #0
+ bne _021E7930
+ bl MOD05_021E7864
+_021E7930:
+ pop {r3, pc}
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E7934
+MOD05_021E7934: ; 0x021E7934
+ push {r3, lr}
+ ldr r1, [r0]
+ cmp r1, #0
+ bne _021E7940
+ bl MOD05_021E78B4
+_021E7940:
+ pop {r3, pc}
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E7944
+MOD05_021E7944: ; 0x021E7944
+ push {r3, lr}
+ ldr r1, [r0, #4]
+ cmp r1, #0
+ bne _021E7950
+ bl MOD05_021E78E4
+_021E7950:
+ pop {r3, pc}
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E7954
+MOD05_021E7954: ; 0x021E7954
+ push {r3, lr}
+ cmp r1, #0
+ bne _021E7960
+ bl MOD05_021E7914
+ pop {r3, pc}
+_021E7960:
+ bl MOD05_021E7924
+ pop {r3, pc}
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E7968
+MOD05_021E7968: ; 0x021E7968
+ push {r3, lr}
+ cmp r1, #0
+ bne _021E7974
+ bl MOD05_021E7934
+ pop {r3, pc}
+_021E7974:
+ bl MOD05_021E7944
+ pop {r3, pc}
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E797C
+MOD05_021E797C: ; 0x021E797C
+ push {r3, r4, r5, lr}
+ sub sp, #8
+ ldr r3, _021E7998 ; =UNK05_021F7824
+ add r4, sp, #0
+ ldr r5, [r3]
+ ldr r3, [r3, #4]
+ str r5, [sp]
+ str r3, [sp, #4]
+ lsl r1, r1, #2
+ ldr r1, [r4, r1]
+ bl MOD05_021E4EE4
+ add sp, #8
+ pop {r3, r4, r5, pc}
+ .balign 4, 0
+_021E7998: .word UNK05_021F7824
+
+ thumb_func_start MOD05_021E799C
+MOD05_021E799C: ; 0x021E799C
+ push {r3, lr}
+ bl FUN_02064738
+ ldr r0, [r0, #0x14]
+ pop {r3, pc}
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E79A8
+MOD05_021E79A8: ; 0x021E79A8
+ push {r4, r5, lr}
+ sub sp, #0xc
+ add r4, r1, #0
+ add r5, r0, #0
+ bl FUN_0206475C
+ add r2, r4, #0
+ add r3, r0, #0
+ add r2, #0x30
+ ldmia r3!, {r0, r1}
+ stmia r2!, {r0, r1}
+ ldmia r3!, {r0, r1}
+ stmia r2!, {r0, r1}
+ mov r0, #6
+ lsl r0, r0, #0xc
+ str r0, [r4, #0x28]
+ ldr r0, [r4, #0x38]
+ ldr r1, [r4, #0x30]
+ bl MOD05_021E7954
+ add r0, r5, #0
+ add r1, sp, #0
+ bl FUN_0206477C
+ ldr r0, [r4, #0x34]
+ ldr r1, [r4, #0x30]
+ add r2, sp, #0
+ bl MOD05_021E797C
+ str r0, [r4, #0x40]
+ ldr r0, [r4, #0x38]
+ ldr r1, [r4, #0x30]
+ bl MOD05_021E77F0
+ add r0, r5, #0
+ bl FUN_02064754
+ cmp r0, #1
+ bne _021E79FC
+ ldr r0, _021E7A04 ; =0x000005DD
+ bl FUN_020054C8
+_021E79FC:
+ mov r0, #1
+ add sp, #0xc
+ pop {r4, r5, pc}
+ nop
+_021E7A04: .word 0x000005DD
+
+ thumb_func_start MOD05_021E7A08
+MOD05_021E7A08: ; 0x021E7A08
+ push {r4, r5, lr}
+ sub sp, #0xc
+ add r4, r1, #0
+ add r1, sp, #0
+ add r5, r0, #0
+ bl FUN_0206477C
+ ldr r0, [r4]
+ cmp r0, #0
+ beq _021E7A24
+ cmp r0, #1
+ beq _021E7A46
+ cmp r0, #2
+ b _021E7A5E
+_021E7A24:
+ ldr r1, [r4, #0x1c]
+ ldr r0, [r4, #0x28]
+ add r0, r1, r0
+ str r0, [r4, #0x1c]
+ beq _021E7A3A
+ mov r0, #2
+ ldr r1, [r4, #0x28]
+ lsl r0, r0, #0xc
+ sub r0, r1, r0
+ str r0, [r4, #0x28]
+ b _021E7A5E
+_021E7A3A:
+ mov r0, #0
+ str r0, [r4, #0x28]
+ ldr r0, [r4]
+ add r0, r0, #1
+ str r0, [r4]
+ b _021E7A5E
+_021E7A46:
+ ldr r0, [r4, #4]
+ add r0, r0, #1
+ str r0, [r4, #4]
+ cmp r0, #0x1e
+ blt _021E7A5E
+ ldr r0, [r4]
+ add r0, r0, #1
+ str r0, [r4]
+ mov r0, #0
+ str r0, [r4, #4]
+ mov r0, #1
+ str r0, [r4, #0x14]
+_021E7A5E:
+ add r0, r5, #0
+ add r1, sp, #0
+ bl FUN_0206476C
+ add sp, #0xc
+ pop {r4, r5, pc}
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E7A6C
+MOD05_021E7A6C: ; 0x021E7A6C
+ push {r4, lr}
+ add r4, r1, #0
+ ldr r0, [r4, #0x40]
+ bl FUN_0201F744
+ ldr r0, [r4, #0x38]
+ ldr r1, [r4, #0x30]
+ bl MOD05_021E7804
+ ldr r0, [r4, #0x38]
+ ldr r1, [r4, #0x30]
+ bl MOD05_021E7968
+ pop {r4, pc}
+
+ thumb_func_start MOD05_021E7A88
+MOD05_021E7A88: ; 0x021E7A88
+ push {r3, r4, lr}
+ sub sp, #0xc
+ add r4, r1, #0
+ ldr r1, [r4, #0x10]
+ cmp r1, #1
+ beq _021E7ABA
+ add r1, sp, #0
+ bl FUN_0206477C
+ ldr r1, [sp]
+ ldr r0, [r4, #0x18]
+ add r0, r1, r0
+ str r0, [sp]
+ ldr r1, [sp, #4]
+ ldr r0, [r4, #0x1c]
+ add r0, r1, r0
+ str r0, [sp, #4]
+ ldr r1, [sp, #8]
+ ldr r0, [r4, #0x20]
+ add r0, r1, r0
+ str r0, [sp, #8]
+ ldr r0, [r4, #0x40]
+ add r1, sp, #0
+ bl FUN_0201F7C8
+_021E7ABA:
+ add sp, #0xc
+ pop {r3, r4, pc}
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E7AC0
+MOD05_021E7AC0: ; 0x021E7AC0
+ push {r4, r5, r6, r7, lr}
+ sub sp, #0x24
+ add r5, r0, #0
+ add r6, r1, #0
+ add r7, r2, #0
+ bl MOD05_021E4C24
+ add r4, r0, #0
+ mov r1, #0x16
+ str r6, [sp, #0x14]
+ str r4, [sp, #0x18]
+ bl MOD05_021E4C08
+ str r0, [sp, #0x1c]
+ add r0, r5, #0
+ add r1, sp, #8
+ str r5, [sp, #0x20]
+ bl FUN_02058B5C
+ add r0, r5, #0
+ bl FUN_02058744
+ add r1, r0, #1
+ add r0, sp, #0x14
+ str r0, [sp]
+ str r1, [sp, #4]
+ ldr r1, _021E7B04 ; =UNK05_021F7840
+ add r0, r4, #0
+ add r2, sp, #8
+ add r3, r7, #0
+ bl MOD05_021E4DC4
+ add sp, #0x24
+ pop {r4, r5, r6, r7, pc}
+ .balign 4, 0
+_021E7B04: .word UNK05_021F7840
+
+ thumb_func_start MOD05_021E7B08
+MOD05_021E7B08: ; 0x021E7B08
+ push {r4, r5, lr}
+ sub sp, #0xc
+ add r4, r1, #0
+ add r5, r0, #0
+ bl FUN_0206475C
+ add r2, r4, #0
+ add r3, r0, #0
+ add r2, #0x30
+ ldmia r3!, {r0, r1}
+ stmia r2!, {r0, r1}
+ ldmia r3!, {r0, r1}
+ stmia r2!, {r0, r1}
+ ldr r0, [r4, #0x3c]
+ bl FUN_02058448
+ str r0, [r4, #8]
+ ldr r0, [r4, #0x3c]
+ bl FUN_02058450
+ str r0, [r4, #0xc]
+ mov r0, #6
+ lsl r0, r0, #0xc
+ str r0, [r4, #0x28]
+ ldr r0, [r4, #0x38]
+ ldr r1, [r4, #0x30]
+ bl MOD05_021E7954
+ add r0, r5, #0
+ add r1, sp, #0
+ bl FUN_0206477C
+ ldr r0, [r4, #0x34]
+ ldr r1, [r4, #0x30]
+ add r2, sp, #0
+ bl MOD05_021E797C
+ str r0, [r4, #0x40]
+ ldr r0, [r4, #0x38]
+ ldr r1, [r4, #0x30]
+ bl MOD05_021E77F0
+ add r0, r5, #0
+ bl FUN_02064754
+ cmp r0, #1
+ bne _021E7B6C
+ ldr r0, _021E7B74 ; =0x000005DD
+ bl FUN_020054C8
+_021E7B6C:
+ mov r0, #1
+ add sp, #0xc
+ pop {r4, r5, pc}
+ nop
+_021E7B74: .word 0x000005DD
+
+ thumb_func_start MOD05_021E7B78
+MOD05_021E7B78: ; 0x021E7B78
+ push {r3, r4, r5, r6, lr}
+ sub sp, #0xc
+ add r4, r1, #0
+ ldr r6, [r4, #0x3c]
+ ldr r1, [r4, #8]
+ add r5, r0, #0
+ ldr r2, [r4, #0xc]
+ add r0, r6, #0
+ bl FUN_020582A8
+ cmp r0, #0
+ bne _021E7B94
+ bl ErrorHandling
+_021E7B94:
+ add r0, r6, #0
+ add r1, sp, #0
+ bl MOD05_021F1E64
+ mov r0, #2
+ ldr r1, [sp, #4]
+ lsl r0, r0, #0x10
+ add r1, r1, r0
+ str r1, [sp, #4]
+ ldr r2, [sp, #8]
+ lsr r1, r0, #5
+ add r1, r2, r1
+ str r1, [sp, #8]
+ ldr r1, [r4]
+ cmp r1, #0
+ beq _021E7BBC
+ cmp r1, #1
+ beq _021E7BDC
+ cmp r1, #2
+ b _021E7BF4
+_021E7BBC:
+ ldr r2, [r4, #0x1c]
+ ldr r1, [r4, #0x28]
+ add r1, r2, r1
+ str r1, [r4, #0x1c]
+ beq _021E7BD0
+ ldr r1, [r4, #0x28]
+ lsr r0, r0, #4
+ sub r0, r1, r0
+ str r0, [r4, #0x28]
+ b _021E7BF4
+_021E7BD0:
+ mov r0, #0
+ str r0, [r4, #0x28]
+ ldr r0, [r4]
+ add r0, r0, #1
+ str r0, [r4]
+ b _021E7BF4
+_021E7BDC:
+ ldr r0, [r4, #4]
+ add r0, r0, #1
+ str r0, [r4, #4]
+ cmp r0, #0x1e
+ blt _021E7BF4
+ ldr r0, [r4]
+ add r0, r0, #1
+ str r0, [r4]
+ mov r0, #0
+ str r0, [r4, #4]
+ mov r0, #1
+ str r0, [r4, #0x14]
+_021E7BF4:
+ add r0, r5, #0
+ add r1, sp, #0
+ bl FUN_0206476C
+ add sp, #0xc
+ pop {r3, r4, r5, r6, pc}
+
+ .section .rodata
+
+ .global UNK05_021F7824
+UNK05_021F7824: ; 0x021F7824
+ .word 0x00000001, 0x0000000C, 0x00000044, MOD05_021E79A8
+ .word MOD05_021E7A6C, MOD05_021E7A08, MOD05_021E7A88
+
+ .global UNK05_021F7840
+UNK05_021F7840: ; 0x021F7840
+ .word 0x00000044, MOD05_021E7B08, MOD05_021E7A6C, MOD05_021E7B78
+ .word MOD05_021E7A88
+
+ .global UNK05_021F7854
+UNK05_021F7854: ; 0x021F7854
+ .word 0x00000000, 0x00000001, 0x00000000, 0x00000000
+ .word 0x00000000, 0x00000002
diff --git a/arm9/modules/05/asm/mod05_021E7C00.s b/arm9/modules/05/asm/mod05_021E7C00.s
new file mode 100644
index 00000000..2e968e4f
--- /dev/null
+++ b/arm9/modules/05/asm/mod05_021E7C00.s
@@ -0,0 +1,708 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E7C00
+MOD05_021E7C00: ; 0x021E7C00
+ push {r4, lr}
+ mov r1, #0x46
+ lsl r1, r1, #6
+ bl AllocFromHeap
+ add r4, r0, #0
+ bl MOD05_021E7C1C
+ add r0, r4, #0
+ pop {r4, pc}
+
+ thumb_func_start MOD05_021E7C14
+MOD05_021E7C14: ; 0x021E7C14
+ ldr r3, _021E7C18 ; =FreeToHeap
+ bx r3
+ .balign 4, 0
+_021E7C18: .word FreeToHeap
+
+ thumb_func_start MOD05_021E7C1C
+MOD05_021E7C1C: ; 0x021E7C1C
+ push {r3, r4, r5, r6, r7}
+ sub sp, #0xc
+ mov r4, #0
+ mov ip, r0
+ add r7, sp, #0
+ add r3, r4, #0
+_021E7C28:
+ str r3, [r7]
+ str r3, [r7, #4]
+ mov r0, #0x8c
+ add r1, r4, #0
+ mul r1, r0
+ mov r0, ip
+ add r2, r0, r1
+ add r5, r2, #0
+ str r3, [r7, #8]
+ mov r0, ip
+ str r3, [r0, r1]
+ str r3, [r2, #4]
+ str r3, [r2, #8]
+ str r3, [r2, #0xc]
+ add r6, r7, #0
+ ldmia r6!, {r0, r1}
+ add r5, #0x68
+ stmia r5!, {r0, r1}
+ ldr r0, [r6]
+ add r6, r7, #0
+ str r0, [r5]
+ add r5, r2, #0
+ ldmia r6!, {r0, r1}
+ add r5, #0x74
+ stmia r5!, {r0, r1}
+ ldr r0, [r6]
+ add r6, r7, #0
+ str r0, [r5]
+ add r5, r2, #0
+ ldmia r6!, {r0, r1}
+ add r5, #0x80
+ stmia r5!, {r0, r1}
+ ldr r0, [r6]
+ str r0, [r5]
+ add r0, r4, #1
+ lsl r0, r0, #0x18
+ lsr r4, r0, #0x18
+ str r3, [r2, #0x64]
+ cmp r4, #0x20
+ blo _021E7C28
+ add sp, #0xc
+ pop {r3, r4, r5, r6, r7}
+ bx lr
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E7C80
+MOD05_021E7C80: ; 0x021E7C80
+ push {r3, r4, r5, r6, lr}
+ sub sp, #0xc
+ add r5, r0, #0
+ add r4, r1, #0
+ cmp r5, #0x20
+ blt _021E7C90
+ bl ErrorHandling
+_021E7C90:
+ add r6, sp, #0
+ mov r3, #0
+ str r3, [r6]
+ str r3, [r6, #4]
+ mov r0, #0x8c
+ mul r0, r5
+ str r3, [r6, #8]
+ str r3, [r4, r0]
+ add r2, r4, r0
+ str r3, [r2, #4]
+ str r3, [r2, #8]
+ add r4, r2, #0
+ str r3, [r2, #0xc]
+ add r5, r6, #0
+ ldmia r5!, {r0, r1}
+ add r4, #0x68
+ stmia r4!, {r0, r1}
+ ldr r0, [r5]
+ add r5, r6, #0
+ str r0, [r4]
+ add r4, r2, #0
+ ldmia r5!, {r0, r1}
+ add r4, #0x74
+ stmia r4!, {r0, r1}
+ ldr r0, [r5]
+ str r0, [r4]
+ add r4, r2, #0
+ ldmia r6!, {r0, r1}
+ add r4, #0x80
+ stmia r4!, {r0, r1}
+ ldr r0, [r6]
+ str r0, [r4]
+ str r3, [r2, #0x64]
+ add sp, #0xc
+ pop {r3, r4, r5, r6, pc}
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E7CD8
+MOD05_021E7CD8: ; 0x021E7CD8
+ push {r4, r5, r6, r7, lr}
+ sub sp, #0x14
+ add r6, r0, #0
+ ldr r0, [sp, #0x28]
+ add r4, r1, #0
+ str r0, [sp, #0x28]
+ mov r0, #0
+ add r7, r2, #0
+ add r5, r3, #0
+ str r0, [sp, #4]
+ cmp r4, #0
+ beq _021E7D0E
+ mov r0, #4
+ bl AllocFromHeapAtEnd
+ str r0, [sp, #4]
+ ldr r2, [sp, #4]
+ add r0, r6, #0
+ add r1, r4, #0
+ bl NARC_ReadFile
+ add r0, r4, #0
+ mov r1, #0x30
+ bl _u32_div_f
+ str r0, [sp]
+ b _021E7D10
+_021E7D0E:
+ str r0, [sp]
+_021E7D10:
+ ldr r4, [sp, #4]
+ mov r6, #0
+_021E7D14:
+ ldr r0, [sp]
+ cmp r6, r0
+ bhs _021E7D82
+ ldr r0, [r4]
+ add r2, r5, #0
+ str r0, [r5]
+ mov r0, #1
+ str r0, [r5, #4]
+ mov r0, #0
+ add r3, r4, #4
+ str r0, [r5, #0xc]
+ ldmia r3!, {r0, r1}
+ add r2, #0x68
+ stmia r2!, {r0, r1}
+ ldr r0, [r3]
+ add r3, r4, #0
+ str r0, [r2]
+ add r3, #0x10
+ add r2, r5, #0
+ ldmia r3!, {r0, r1}
+ add r2, #0x74
+ stmia r2!, {r0, r1}
+ ldr r0, [r3]
+ add r3, r4, #0
+ str r0, [r2]
+ add r3, #0x1c
+ add r2, r5, #0
+ ldmia r3!, {r0, r1}
+ add r2, #0x80
+ stmia r2!, {r0, r1}
+ ldr r0, [r3]
+ add r3, r5, #0
+ str r0, [r2]
+ add r2, r5, #0
+ ldr r0, [r5]
+ add r1, r7, #0
+ add r2, #0x10
+ add r3, #0x64
+ bl MOD05_021E7F10
+ ldr r1, [r5]
+ add r0, r7, #0
+ bl MOD05_021F4CE4
+ cmp r0, #0
+ bne _021E7D74
+ mov r0, #0
+ str r0, [r5]
+_021E7D74:
+ add r1, r5, #0
+ ldr r0, [r5]
+ ldr r2, [sp, #0x28]
+ add r1, #0x10
+ bl MOD05_021D9E80
+ b _021E7DBE
+_021E7D82:
+ mov r1, #0
+ add r0, sp, #8
+ str r1, [r0]
+ str r1, [r0, #4]
+ str r1, [r0, #8]
+ add r0, r1, #0
+ str r0, [r5]
+ str r0, [r5, #4]
+ add r2, r5, #0
+ add r3, sp, #8
+ str r0, [r5, #0xc]
+ ldmia r3!, {r0, r1}
+ add r2, #0x68
+ stmia r2!, {r0, r1}
+ ldr r0, [r3]
+ add r3, sp, #8
+ str r0, [r2]
+ add r2, r5, #0
+ ldmia r3!, {r0, r1}
+ add r2, #0x74
+ stmia r2!, {r0, r1}
+ ldr r0, [r3]
+ add r3, sp, #8
+ str r0, [r2]
+ add r2, r5, #0
+ ldmia r3!, {r0, r1}
+ add r2, #0x80
+ stmia r2!, {r0, r1}
+ ldr r0, [r3]
+ str r0, [r2]
+_021E7DBE:
+ add r6, r6, #1
+ add r5, #0x8c
+ add r4, #0x30
+ cmp r6, #0x20
+ blt _021E7D14
+ ldr r0, [sp, #4]
+ cmp r0, #0
+ beq _021E7DD2
+ bl FreeToHeap
+_021E7DD2:
+ add sp, #0x14
+ pop {r4, r5, r6, r7, pc}
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E7DD8
+MOD05_021E7DD8: ; 0x021E7DD8
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x48
+ ldr r4, _021E7E94 ; =UNK05_021F7878
+ str r2, [sp, #0xc]
+ str r3, [sp, #0x10]
+ add r6, r0, #0
+ str r1, [sp, #8]
+ add r3, sp, #0x18
+ mov r2, #4
+_021E7DEA:
+ ldmia r4!, {r0, r1}
+ stmia r3!, {r0, r1}
+ sub r2, r2, #1
+ bne _021E7DEA
+ ldr r0, [r4]
+ ldr r5, [sp, #0x60]
+ str r0, [r3]
+ mov r7, #0
+_021E7DFA:
+ ldr r0, [r5, #4]
+ cmp r0, #0
+ beq _021E7E86
+ ldr r0, [r5, #8]
+ cmp r0, #0
+ bne _021E7E86
+ add r4, r5, #0
+ add r4, #0x68
+ ldmia r4!, {r0, r1}
+ add r3, sp, #0x3c
+ add r2, r3, #0
+ stmia r3!, {r0, r1}
+ ldr r0, [r4]
+ str r0, [r3]
+ ldr r1, [sp, #0x3c]
+ ldr r0, [r6]
+ add r3, r5, #0
+ add r0, r1, r0
+ str r0, [sp, #0x3c]
+ ldr r1, [sp, #0x44]
+ ldr r0, [r6, #8]
+ add r3, #0x80
+ add r0, r1, r0
+ str r0, [sp, #0x44]
+ add r1, r2, #0
+ ldr r0, [r5, #0x64]
+ add r2, sp, #0x18
+ bl FUN_0201B6D0
+ cmp r0, #0
+ beq _021E7E86
+ ldr r0, [sp, #8]
+ bl MOD05_021F4C9C
+ add r4, r0, #0
+ ldr r0, [sp, #0xc]
+ cmp r0, #1
+ bne _021E7E50
+ ldr r0, [sp, #0x10]
+ ldr r1, [r5, #0x64]
+ ldr r2, _021E7E98 ; =0x00000F33
+ bl MOD05_021DBB8C
+_021E7E50:
+ ldr r0, [r5]
+ add r1, r4, #0
+ add r2, sp, #0x14
+ bl MOD05_021DB9D4
+ add r0, sp, #0x14
+ ldrh r0, [r0]
+ add r1, sp, #0x3c
+ cmp r0, #0
+ bne _021E7E74
+ add r0, r5, #0
+ add r3, r5, #0
+ add r0, #0x10
+ add r2, sp, #0x18
+ add r3, #0x80
+ bl FUN_0201B26C
+ b _021E7E86
+_021E7E74:
+ str r4, [sp]
+ ldr r0, [r5]
+ add r3, r5, #0
+ str r0, [sp, #4]
+ ldr r0, [r5, #0x64]
+ add r2, sp, #0x18
+ add r3, #0x80
+ bl MOD05_021E7F34
+_021E7E86:
+ add r7, r7, #1
+ add r5, #0x8c
+ cmp r7, #0x20
+ blt _021E7DFA
+ add sp, #0x48
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_021E7E94: .word UNK05_021F7878
+_021E7E98: .word 0x00000F33
+
+ thumb_func_start MOD05_021E7E9C
+MOD05_021E7E9C: ; 0x021E7E9C
+ add r0, #0x74
+ bx lr
+
+ thumb_func_start MOD05_021E7EA0
+MOD05_021E7EA0: ; 0x021E7EA0
+ add r2, r1, #0
+ add r2, #0x68
+ add r3, r0, #0
+ ldmia r2!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldr r0, [r2]
+ str r0, [r3]
+ bx lr
+
+ thumb_func_start MOD05_021E7EB0
+MOD05_021E7EB0: ; 0x021E7EB0
+ add r3, r1, #0
+ add r2, r0, #0
+ ldmia r3!, {r0, r1}
+ add r2, #0x68
+ stmia r2!, {r0, r1}
+ ldr r0, [r3]
+ str r0, [r2]
+ bx lr
+
+ thumb_func_start MOD05_021E7EC0
+MOD05_021E7EC0: ; 0x021E7EC0
+ str r1, [r0, #8]
+ bx lr
+
+ thumb_func_start MOD05_021E7EC4
+MOD05_021E7EC4: ; 0x021E7EC4
+ ldr r0, [r0]
+ bx lr
+
+ thumb_func_start MOD05_021E7EC8
+MOD05_021E7EC8: ; 0x021E7EC8
+ add r0, #0x10
+ bx lr
+
+ thumb_func_start MOD05_021E7ECC
+MOD05_021E7ECC: ; 0x021E7ECC
+ ldr r0, [r0, #0x64]
+ bx lr
+
+ thumb_func_start MOD05_021E7ED0
+MOD05_021E7ED0: ; 0x021E7ED0
+ mov r2, #0x8c
+ mul r2, r1
+ add r0, r0, r2
+ bx lr
+
+ thumb_func_start MOD05_021E7ED8
+MOD05_021E7ED8: ; 0x021E7ED8
+ mov r3, #0
+_021E7EDA:
+ ldr r2, [r0]
+ cmp r2, r1
+ beq _021E7EEA
+ add r3, r3, #1
+ add r0, #0x8c
+ cmp r3, #0x20
+ blt _021E7EDA
+ mov r0, #0
+_021E7EEA:
+ bx lr
+
+ thumb_func_start MOD05_021E7EEC
+MOD05_021E7EEC: ; 0x021E7EEC
+ push {r3, r4, r5, lr}
+ add r4, r1, #0
+ add r5, r0, #0
+ cmp r4, #0x20
+ blt _021E7EFA
+ bl ErrorHandling
+_021E7EFA:
+ mov r0, #0x8c
+ mul r0, r4
+ add r4, r5, r0
+ ldr r0, [r4, #4]
+ cmp r0, #0
+ bne _021E7F0A
+ bl ErrorHandling
+_021E7F0A:
+ add r0, r4, #0
+ pop {r3, r4, r5, pc}
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E7F10
+MOD05_021E7F10: ; 0x021E7F10
+ push {r3, r4, r5, lr}
+ add r5, r2, #0
+ add r4, r3, #0
+ bl MOD05_021F4BD0
+ ldr r0, [r0]
+ bl FUN_020BC13C
+ ldrh r1, [r0, #0xe]
+ add r1, r0, r1
+ ldr r1, [r1, #0xc]
+ add r1, r0, r1
+ add r0, r5, #0
+ str r1, [r4]
+ bl FUN_020B80B4
+ pop {r3, r4, r5, pc}
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E7F34
+MOD05_021E7F34: ; 0x021E7F34
+ push {r3, r4, r5, r6, r7, lr}
+ add r7, r0, #0
+ add r0, r1, #0
+ add r4, r2, #0
+ add r5, r3, #0
+ bl FUN_020B8474
+ ldr r1, _021E7FB4 ; =UNK_021CEDD4
+ add r0, r4, #0
+ bl MI_Copy36B
+ ldr r1, _021E7FB8 ; =UNK_021CED98
+ mov r0, #0xa4
+ ldr r2, [r1, #0x7c]
+ bic r2, r0
+ add r0, r5, #0
+ str r2, [r1, #0x7c]
+ bl FUN_020B844C
+ bl FUN_020B849C
+ add r2, sp, #0
+ ldr r0, [sp, #0x1c]
+ ldr r1, [sp, #0x18]
+ add r2, #2
+ add r3, sp, #0
+ bl MOD05_021DB9E0
+ add r0, sp, #0
+ ldrh r0, [r0]
+ ldr r1, [sp, #0x18]
+ bl MOD05_021DB9F8
+ add r6, r0, #0
+ add r0, sp, #0
+ ldrh r0, [r0, #2]
+ mov r5, #0xff
+ mov r4, #0
+ cmp r0, #0
+ ble _021E7FB0
+_021E7F84:
+ lsl r0, r4, #2
+ add r2, r6, r0
+ ldrh r0, [r6, r0]
+ cmp r5, r0
+ beq _021E7F96
+ lsl r0, r0, #0x18
+ lsr r5, r0, #0x18
+ mov r3, #1
+ b _021E7F98
+_021E7F96:
+ mov r3, #0
+_021E7F98:
+ ldrh r2, [r2, #2]
+ add r0, r7, #0
+ add r1, r5, #0
+ bl FUN_020BAFB8
+ add r0, r4, #1
+ lsl r0, r0, #0x18
+ lsr r4, r0, #0x18
+ add r0, sp, #0
+ ldrh r0, [r0, #2]
+ cmp r4, r0
+ blt _021E7F84
+_021E7FB0:
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_021E7FB4: .word UNK_021CEDD4
+_021E7FB8: .word UNK_021CED98
+
+ thumb_func_start MOD05_021E7FBC
+MOD05_021E7FBC: ; 0x021E7FBC
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x10
+ ldr r5, _021E8058 ; =UNK05_021F786C
+ add r6, r0, #0
+ add r7, r1, #0
+ ldmia r5!, {r0, r1}
+ add r4, sp, #4
+ stmia r4!, {r0, r1}
+ ldr r0, [r5]
+ str r0, [r4]
+ mov r4, #0
+ mov r0, #0x8c
+_021E7FD4:
+ add r1, r4, #0
+ mul r1, r0
+ add r5, r6, r1
+ ldr r1, [r5, #4]
+ cmp r1, #0
+ bne _021E8044
+ mov r0, #1
+ str r0, [r5, #4]
+ add r6, r5, #0
+ ldmia r3!, {r0, r1}
+ add r6, #0x68
+ stmia r6!, {r0, r1}
+ ldr r0, [r3]
+ str r0, [r6]
+ ldr r6, [sp, #0x28]
+ cmp r6, #0
+ beq _021E8008
+ mov r0, #1
+ str r0, [r5, #0xc]
+ add r3, r5, #0
+ ldmia r6!, {r0, r1}
+ add r3, #0x74
+ stmia r3!, {r0, r1}
+ ldr r0, [r6]
+ str r0, [r3]
+ b _021E800C
+_021E8008:
+ mov r0, #0
+ str r0, [r5, #0xc]
+_021E800C:
+ add r6, sp, #4
+ add r3, r5, #0
+ ldmia r6!, {r0, r1}
+ add r3, #0x80
+ stmia r3!, {r0, r1}
+ ldr r0, [r6]
+ add r1, r7, #0
+ str r0, [r3]
+ add r3, r5, #0
+ str r2, [r5]
+ add r0, r2, #0
+ add r2, r5, #0
+ add r2, #0x10
+ add r3, #0x64
+ bl MOD05_021E7F10
+ ldr r0, [sp, #0x2c]
+ mov r1, #0
+ str r0, [sp]
+ ldr r0, [r5]
+ add r5, #0x10
+ add r2, r1, #0
+ add r3, r5, #0
+ bl MOD05_021D9DC0
+ add sp, #0x10
+ add r0, r4, #0
+ pop {r3, r4, r5, r6, r7, pc}
+_021E8044:
+ add r1, r4, #1
+ lsl r1, r1, #0x18
+ lsr r4, r1, #0x18
+ cmp r4, #0x20
+ blo _021E7FD4
+ bl ErrorHandling
+ mov r0, #0x20
+ add sp, #0x10
+ pop {r3, r4, r5, r6, r7, pc}
+ .balign 4, 0
+_021E8058: .word UNK05_021F786C
+
+ thumb_func_start MOD05_021E805C
+MOD05_021E805C: ; 0x021E805C
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x38
+ ldr r4, _021E80F4 ; =UNK05_021F789C
+ str r0, [sp, #8]
+ str r1, [sp, #0xc]
+ add r3, sp, #0x14
+ mov r2, #4
+_021E806A:
+ ldmia r4!, {r0, r1}
+ stmia r3!, {r0, r1}
+ sub r2, r2, #1
+ bne _021E806A
+ ldr r0, [r4]
+ mov r4, #0
+ str r0, [r3]
+ add r7, sp, #0x14
+_021E807A:
+ mov r0, #0x8c
+ add r1, r4, #0
+ mul r1, r0
+ ldr r0, [sp, #8]
+ add r5, r0, r1
+ ldr r0, [r5, #4]
+ cmp r0, #0
+ beq _021E80E4
+ ldr r0, [r5, #8]
+ cmp r0, #0
+ bne _021E80E4
+ ldr r0, [sp, #0xc]
+ bl MOD05_021F4C9C
+ add r6, r0, #0
+ ldr r0, [r5]
+ add r1, r6, #0
+ add r2, sp, #0x10
+ bl MOD05_021DB9D4
+ ldr r0, [r5, #0xc]
+ cmp r0, #0
+ beq _021E80B2
+ add r1, r5, #0
+ add r0, r7, #0
+ add r1, #0x74
+ bl FUN_0201CAA8
+_021E80B2:
+ add r0, sp, #0x10
+ ldrh r0, [r0]
+ cmp r0, #0
+ bne _021E80CE
+ add r0, r5, #0
+ add r1, r5, #0
+ add r5, #0x80
+ add r0, #0x10
+ add r1, #0x68
+ add r2, r7, #0
+ add r3, r5, #0
+ bl FUN_0201B26C
+ b _021E80E4
+_021E80CE:
+ str r6, [sp]
+ ldr r0, [r5]
+ add r1, r5, #0
+ str r0, [sp, #4]
+ ldr r0, [r5, #0x64]
+ add r5, #0x80
+ add r1, #0x68
+ add r2, r7, #0
+ add r3, r5, #0
+ bl MOD05_021E7F34
+_021E80E4:
+ add r0, r4, #1
+ lsl r0, r0, #0x18
+ lsr r4, r0, #0x18
+ cmp r4, #0x20
+ blo _021E807A
+ add sp, #0x38
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_021E80F4: .word UNK05_021F789C
+
+ .section .rodata
+
+ .global UNK05_021F786C
+UNK05_021F786C: ; 0x021F786C
+ .word 0x00001000, 0x00001000, 0x00001000
+
+ .global UNK05_021F7878
+UNK05_021F7878: ; 0x021F7878
+ .byte 0x00, 0x10, 0x00, 0x00 ;word
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00
+
+ .global UNK05_021F789C
+UNK05_021F789C: ; 0x021F789C
+ .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ;word
+ .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x10, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00
diff --git a/arm9/modules/05/asm/mod05_021E80F8.s b/arm9/modules/05/asm/mod05_021E80F8.s
new file mode 100644
index 00000000..82fd7a02
--- /dev/null
+++ b/arm9/modules/05/asm/mod05_021E80F8.s
@@ -0,0 +1,303 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E80F8
+MOD05_021E80F8: ; 0x021E80F8
+ push {r3, lr}
+ mov r1, #0x14
+ bl AllocFromHeap
+ add r3, r0, #0
+ mov r2, #0x14
+ mov r1, #0
+_021E8106:
+ strb r1, [r3]
+ add r3, r3, #1
+ sub r2, r2, #1
+ bne _021E8106
+ pop {r3, pc}
+
+ thumb_func_start MOD05_021E8110
+MOD05_021E8110: ; 0x021E8110
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r1, [r4, #0x13]
+ lsl r1, r1, #0x18
+ lsr r1, r1, #0x1f
+ beq _021E8120
+ bl FUN_02019178
+_021E8120:
+ add r0, r4, #0
+ bl FreeToHeap
+ pop {r4, pc}
+
+ thumb_func_start MOD05_021E8128
+MOD05_021E8128: ; 0x021E8128
+ strb r1, [r0, #0x12]
+ strh r2, [r0, #0x10]
+ bx lr
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E8130
+MOD05_021E8130: ; 0x021E8130
+ ldrb r3, [r0, #0x13]
+ mov r2, #0x7f
+ bic r3, r2
+ mov r2, #0x7f
+ and r1, r2
+ orr r1, r3
+ strb r1, [r0, #0x13]
+ bx lr
+
+ thumb_func_start MOD05_021E8140
+MOD05_021E8140: ; 0x021E8140
+ bx lr
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E8144
+MOD05_021E8144: ; 0x021E8144
+ ldrb r0, [r0, #0x12]
+ bx lr
+
+ thumb_func_start MOD05_021E8148
+MOD05_021E8148: ; 0x021E8148
+ ldrb r0, [r0, #0x13]
+ lsl r0, r0, #0x19
+ lsr r0, r0, #0x19
+ bne _021E8154
+ mov r0, #1
+ bx lr
+_021E8154:
+ mov r0, #0
+ bx lr
+
+ thumb_func_start MOD05_021E8158
+MOD05_021E8158: ; 0x021E8158
+ push {r4, lr}
+ ldr r4, [r0, #0x60]
+ ldrb r1, [r4, #0x13]
+ lsl r1, r1, #0x19
+ lsr r1, r1, #0x19
+ cmp r1, #4
+ bhi _021E81BA
+ add r1, r1, r1
+ add r1, pc
+ ldrh r1, [r1, #6]
+ lsl r1, r1, #0x10
+ asr r1, r1, #0x10
+ add pc, r1
+_021E8172: ; jump table
+ .short _021E81BA - _021E8172 - 2 ; case 0
+ .short _021E817C - _021E8172 - 2 ; case 1
+ .short _021E818A - _021E8172 - 2 ; case 2
+ .short _021E819C - _021E8172 - 2 ; case 3
+ .short _021E81AE - _021E8172 - 2 ; case 4
+_021E817C:
+ bl MOD05_021E81D0
+ ldrb r1, [r4, #0x13]
+ mov r0, #0x7f
+ bic r1, r0
+ strb r1, [r4, #0x13]
+ pop {r4, pc}
+_021E818A:
+ bl MOD05_021E82A0
+ cmp r0, #1
+ bne _021E81BA
+ ldrb r1, [r4, #0x13]
+ mov r0, #0x7f
+ bic r1, r0
+ strb r1, [r4, #0x13]
+ pop {r4, pc}
+_021E819C:
+ bl MOD05_021E8260
+ cmp r0, #1
+ bne _021E81BA
+ ldrb r1, [r4, #0x13]
+ mov r0, #0x7f
+ bic r1, r0
+ strb r1, [r4, #0x13]
+ pop {r4, pc}
+_021E81AE:
+ bl MOD05_021E820C
+ ldrb r1, [r4, #0x13]
+ mov r0, #0x7f
+ bic r1, r0
+ strb r1, [r4, #0x13]
+_021E81BA:
+ pop {r4, pc}
+
+ thumb_func_start MOD05_021E81BC
+MOD05_021E81BC: ; 0x021E81BC
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #0x60]
+ bl MOD05_021E8130
+ add r0, r4, #0
+ bl MOD05_021E8158
+ pop {r4, pc}
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E81D0
+MOD05_021E81D0: ; 0x021E81D0
+ push {r4, lr}
+ mov r1, #3
+ add r4, r0, #0
+ add r3, r1, #0
+ ldr r0, [r4, #8]
+ add r2, r1, #0
+ sub r3, #0x33
+ bl FUN_020179E0
+ ldr r1, [r4, #0x60]
+ ldrb r0, [r1, #0x13]
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x1f
+ bne _021E8200
+ ldrb r2, [r1, #0x12]
+ ldr r0, [r4, #8]
+ mov r3, #3
+ bl FUN_020546E0
+ ldr r2, [r4, #0x60]
+ mov r0, #0x80
+ ldrb r1, [r2, #0x13]
+ orr r0, r1
+ strb r0, [r2, #0x13]
+_021E8200:
+ ldr r0, [r4, #0x60]
+ ldrb r1, [r0, #0x12]
+ ldrh r2, [r0, #0x10]
+ bl FUN_02054744
+ pop {r4, pc}
+
+ thumb_func_start MOD05_021E820C
+MOD05_021E820C: ; 0x021E820C
+ push {r4, lr}
+ sub sp, #0x10
+ add r4, r0, #0
+ ldr r0, [r4, #0x60]
+ ldrb r1, [r0, #0x13]
+ lsl r1, r1, #0x18
+ lsr r1, r1, #0x1f
+ beq _021E825A
+ bl FUN_02019178
+ mov r0, #0x12
+ str r0, [sp]
+ mov r0, #0x20
+ str r0, [sp, #4]
+ mov r0, #6
+ str r0, [sp, #8]
+ mov r0, #0x10
+ str r0, [sp, #0xc]
+ mov r2, #0
+ ldr r0, [r4, #8]
+ mov r1, #3
+ add r3, r2, #0
+ bl FUN_02018540
+ ldr r0, [r4, #8]
+ mov r1, #3
+ bl FUN_02017CD0
+ mov r1, #3
+ ldr r0, [r4, #8]
+ add r2, r1, #0
+ mov r3, #0
+ bl FUN_020179E0
+ ldr r2, [r4, #0x60]
+ mov r0, #0x80
+ ldrb r1, [r2, #0x13]
+ bic r1, r0
+ strb r1, [r2, #0x13]
+_021E825A:
+ add sp, #0x10
+ pop {r4, pc}
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E8260
+MOD05_021E8260: ; 0x021E8260
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #8]
+ mov r1, #3
+ bl FUN_02017B54
+ cmp r0, #0
+ bne _021E8274
+ mov r0, #1
+ pop {r4, pc}
+_021E8274:
+ mov r1, #0x2f
+ mvn r1, r1
+ cmp r0, r1
+ ble _021E8280
+ cmp r0, #0
+ blt _021E828E
+_021E8280:
+ mov r1, #3
+ add r3, r1, #0
+ ldr r0, [r4, #8]
+ add r2, r1, #0
+ sub r3, #0x33
+ bl FUN_020179E0
+_021E828E:
+ ldr r0, [r4, #8]
+ mov r1, #3
+ mov r2, #4
+ mov r3, #0x10
+ bl FUN_020179E0
+ mov r0, #0
+ pop {r4, pc}
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E82A0
+MOD05_021E82A0: ; 0x021E82A0
+ push {r4, lr}
+ sub sp, #0x10
+ add r4, r0, #0
+ ldr r0, [r4, #8]
+ mov r1, #3
+ bl FUN_02017B54
+ mov r1, #0x2f
+ mvn r1, r1
+ cmp r0, r1
+ bne _021E82EC
+ mov r0, #0x12
+ str r0, [sp]
+ mov r0, #0x20
+ str r0, [sp, #4]
+ mov r0, #6
+ str r0, [sp, #8]
+ mov r0, #0x10
+ str r0, [sp, #0xc]
+ mov r2, #0
+ ldr r0, [r4, #8]
+ mov r1, #3
+ add r3, r2, #0
+ bl FUN_02018540
+ ldr r0, [r4, #8]
+ mov r1, #3
+ bl FUN_02017CD0
+ mov r1, #3
+ ldr r0, [r4, #8]
+ add r2, r1, #0
+ mov r3, #0
+ bl FUN_020179E0
+ add sp, #0x10
+ mov r0, #1
+ pop {r4, pc}
+_021E82EC:
+ ble _021E82F2
+ cmp r0, #0
+ blt _021E82FE
+_021E82F2:
+ mov r1, #3
+ ldr r0, [r4, #8]
+ add r2, r1, #0
+ mov r3, #0
+ bl FUN_020179E0
+_021E82FE:
+ ldr r0, [r4, #8]
+ mov r1, #3
+ mov r2, #5
+ mov r3, #0x10
+ bl FUN_020179E0
+ mov r0, #0
+ add sp, #0x10
+ pop {r4, pc}
diff --git a/arm9/modules/05/asm/mod05_021E8310.s b/arm9/modules/05/asm/mod05_021E8310.s
new file mode 100644
index 00000000..e3a28a97
--- /dev/null
+++ b/arm9/modules/05/asm/mod05_021E8310.s
@@ -0,0 +1,409 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E8310
+MOD05_021E8310: ; 0x021E8310
+ push {r3, r4, r5, r6, r7, lr}
+ ldr r4, [r1, #0xc]
+ add r5, r0, #0
+ add r0, r4, #0
+ bl FUN_02034E30
+ bl FUN_02034DC0
+ add r6, r0, #0
+ add r0, r4, #0
+ bl Sav2_Pokedex_get
+ add r7, r0, #0
+ ldr r0, [r6]
+ bl FUN_02034824
+ str r0, [r5, #4]
+ add r0, r7, #0
+ bl Pokedex_GetSinnohDexFlag
+ cmp r0, #0
+ beq _021E8344
+ add r0, r7, #0
+ bl Pokedex_CountSeenMons
+ b _021E8346
+_021E8344:
+ mov r0, #0
+_021E8346:
+ str r0, [r5]
+ add r0, r4, #0
+ bl Sav2_PlayerData_GetProfileAddr
+ str r0, [r5, #8]
+ add r0, r4, #0
+ bl Sav2_PlayerData_GetIGTAddr
+ str r0, [r5, #0xc]
+ pop {r3, r4, r5, r6, r7, pc}
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E835C
+MOD05_021E835C: ; 0x021E835C
+ push {r3, r4, r5, lr}
+ sub sp, #8
+ add r4, r1, #0
+ ldr r2, [r4, #4]
+ mov r1, #0
+ add r5, r0, #0
+ bl BufferLandmarkName
+ ldr r2, [r4, #8]
+ add r0, r5, #0
+ mov r1, #1
+ bl BufferPlayersName
+ ldr r0, [r4, #8]
+ bl PlayerProfile_CountBadges
+ add r2, r0, #0
+ mov r0, #0
+ str r0, [sp]
+ mov r3, #1
+ str r3, [sp, #4]
+ add r0, r5, #0
+ mov r1, #2
+ bl BufferIntegerAsString
+ ldr r2, [r4]
+ cmp r2, #0x64
+ blt _021E839A
+ mov r3, #3
+ mov r0, #0
+ b _021E83A8
+_021E839A:
+ cmp r2, #0xa
+ blt _021E83A4
+ mov r3, #3
+ mov r0, #1
+ b _021E83A8
+_021E83A4:
+ mov r3, #2
+ mov r0, #1
+_021E83A8:
+ str r0, [sp]
+ mov r0, #1
+ str r0, [sp, #4]
+ add r0, r5, #0
+ mov r1, #3
+ bl BufferIntegerAsString
+ ldr r0, [r4, #0xc]
+ bl GetIGTHours
+ add r2, r0, #0
+ cmp r2, #0x64
+ blt _021E83C8
+ mov r3, #3
+ mov r0, #0
+ b _021E83D6
+_021E83C8:
+ cmp r2, #0xa
+ blt _021E83D2
+ mov r3, #3
+ mov r0, #1
+ b _021E83D6
+_021E83D2:
+ mov r3, #2
+ mov r0, #1
+_021E83D6:
+ str r0, [sp]
+ mov r0, #1
+ str r0, [sp, #4]
+ add r0, r5, #0
+ mov r1, #4
+ bl BufferIntegerAsString
+ ldr r0, [r4, #0xc]
+ bl GetIGTMinutes
+ mov r3, #2
+ add r2, r0, #0
+ str r3, [sp]
+ mov r0, #1
+ str r0, [sp, #4]
+ add r0, r5, #0
+ mov r1, #5
+ bl BufferIntegerAsString
+ add sp, #8
+ pop {r3, r4, r5, pc}
+
+ thumb_func_start MOD05_021E8400
+MOD05_021E8400: ; 0x021E8400
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _021E840A
+ mov r0, #0xa
+ bx lr
+_021E840A:
+ mov r0, #8
+ bx lr
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E8410
+MOD05_021E8410: ; 0x021E8410
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x18
+ add r5, r0, #0
+ mov r0, #0
+ mov r1, #1
+ bl FUN_02002E4C
+ add r4, r0, #0
+ mov r0, #0
+ mov r1, #3
+ bl FUN_02002E4C
+ add r0, r4, r0
+ str r0, [sp, #0x14]
+ mov r4, #0
+ ldr r0, [r5, #0x14]
+ ldr r1, [r5, #0x18]
+ ldr r3, [r5, #4]
+ add r2, r4, #0
+ bl ReadMsgData_ExpandPlaceholders
+ add r1, r4, #0
+ add r6, r0, #0
+ str r1, [sp]
+ mov r0, #0xff
+ str r0, [sp, #4]
+ str r1, [sp, #8]
+ ldr r0, [r5, #0x10]
+ add r2, r6, #0
+ add r3, r1, #0
+ bl AddTextPrinterParameterized
+ add r0, r6, #0
+ bl String_dtor
+ mov r0, #1
+ str r0, [sp, #0x10]
+ ldr r0, _021E84EC ; =UNK05_021F78D4
+ ldr r7, _021E84F0 ; =UNK05_021F78C4
+ str r0, [sp, #0xc]
+_021E8460:
+ ldr r0, [sp, #0xc]
+ ldr r1, [r0]
+ cmp r1, #3
+ bne _021E846E
+ ldr r0, [r5, #0x1c]
+ cmp r0, #0
+ beq _021E84D6
+_021E846E:
+ ldr r0, [sp, #0x14]
+ add r4, r4, r0
+ ldr r0, [r5, #0x18]
+ bl NewString_ReadMsgData
+ add r6, r0, #0
+ mov r1, #0
+ str r4, [sp]
+ mov r0, #0xff
+ str r0, [sp, #4]
+ mov r0, #0
+ str r0, [sp, #8]
+ ldr r0, [r5, #0x10]
+ add r2, r6, #0
+ add r3, r1, #0
+ bl AddTextPrinterParameterized
+ add r0, r6, #0
+ bl String_dtor
+ sub r2, r7, #4
+ ldr r0, [r5, #0x14]
+ ldr r1, [r5, #0x18]
+ ldr r2, [r2]
+ ldr r3, [r5, #4]
+ bl ReadMsgData_ExpandPlaceholders
+ add r6, r0, #0
+ mov r0, #0
+ mov r1, #2
+ bl FUN_02002E4C
+ add r2, r0, #0
+ mov r0, #0
+ add r1, r6, #0
+ bl FUN_02002E14
+ mov r1, #0x68
+ sub r3, r1, r0
+ str r4, [sp]
+ mov r0, #0xff
+ str r0, [sp, #4]
+ mov r0, #0
+ str r0, [sp, #8]
+ ldr r0, [r5, #0x10]
+ mov r1, #0
+ add r2, r6, #0
+ bl AddTextPrinterParameterized
+ add r0, r6, #0
+ bl String_dtor
+_021E84D6:
+ ldr r0, [sp, #0xc]
+ add r7, r7, #4
+ add r0, r0, #4
+ str r0, [sp, #0xc]
+ ldr r0, [sp, #0x10]
+ add r0, r0, #1
+ str r0, [sp, #0x10]
+ cmp r0, #5
+ blo _021E8460
+ add sp, #0x18
+ pop {r3, r4, r5, r6, r7, pc}
+ .balign 4, 0
+_021E84EC: .word UNK05_021F78D4
+_021E84F0: .word UNK05_021F78C4
+
+ thumb_func_start MOD05_021E84F4
+MOD05_021E84F4: ; 0x021E84F4
+ push {r3, r4, lr}
+ sub sp, #0x14
+ add r4, r0, #0
+ ldr r0, [r4, #4]
+ mov r1, #0x10
+ bl AllocFromHeap
+ str r0, [r4, #0x10]
+ mov r3, #1
+ str r3, [sp]
+ ldr r0, [r4, #0x2c]
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ str r0, [sp, #4]
+ ldr r0, [r4, #0x30]
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ str r0, [sp, #8]
+ mov r0, #0xd
+ str r0, [sp, #0xc]
+ ldr r0, _021E8564 ; =0x0000027F
+ str r0, [sp, #0x10]
+ ldrb r2, [r4, #8]
+ ldr r0, [r4, #0xc]
+ ldr r1, [r4, #0x10]
+ bl FUN_02019064
+ mov r0, #0
+ str r0, [sp]
+ ldr r0, [r4, #4]
+ ldr r2, _021E8568 ; =0x000003D9
+ str r0, [sp, #4]
+ ldrb r1, [r4, #8]
+ ldr r0, [r4, #0xc]
+ mov r3, #0xb
+ bl FUN_0200CB00
+ mov r0, #0
+ mov r1, #6
+ bl FUN_02002E4C
+ add r1, r0, #0
+ ldr r0, [r4, #0x10]
+ bl FUN_02019620
+ add r0, r4, #0
+ bl MOD05_021E8410
+ ldr r0, [r4, #0x10]
+ ldr r2, _021E8568 ; =0x000003D9
+ mov r1, #0
+ mov r3, #0xb
+ bl FUN_0200CCA4
+ add sp, #0x14
+ pop {r3, r4, pc}
+ .balign 4, 0
+_021E8564: .word 0x0000027F
+_021E8568: .word 0x000003D9
+
+ thumb_func_start MOD05_021E856C
+MOD05_021E856C: ; 0x021E856C
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #0x10]
+ mov r1, #0
+ bl FUN_0200CCF8
+ ldr r0, [r4, #0x10]
+ bl FUN_02019178
+ ldr r0, [r4, #0x10]
+ bl FreeToHeap
+ pop {r4, pc}
+ .balign 4, 0
+
+ thumb_func_start MOD05_021E8588
+MOD05_021E8588: ; 0x021E8588
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r1, #0
+ add r6, r0, #0
+ add r0, r5, #0
+ mov r1, #0x34
+ add r7, r2, #0
+ bl AllocFromHeap
+ add r4, r0, #0
+ str r6, [r4]
+ str r5, [r4, #4]
+ strb r7, [r4, #8]
+ ldr r0, [r6, #8]
+ str r0, [r4, #0xc]
+ add r0, r5, #0
+ bl ScrStrBufs_new
+ str r0, [r4, #0x14]
+ ldr r2, _021E85E0 ; =0x000001E3
+ mov r0, #1
+ mov r1, #0x1a
+ add r3, r5, #0
+ bl NewMsgDataFromNarc
+ str r0, [r4, #0x18]
+ add r0, r4, #0
+ ldr r1, [r4]
+ add r0, #0x1c
+ bl MOD05_021E8310
+ add r1, r4, #0
+ ldr r0, [r4, #0x14]
+ add r1, #0x1c
+ bl MOD05_021E835C
+ mov r0, #0xd
+ str r0, [r4, #0x2c]
+ add r0, r4, #0
+ add r0, #0x1c
+ bl MOD05_021E8400
+ str r0, [r4, #0x30]
+ add r0, r4, #0
+ pop {r3, r4, r5, r6, r7, pc}
+ .balign 4, 0
+_021E85E0: .word 0x000001E3
+
+ thumb_func_start MOD05_021E85E4
+MOD05_021E85E4: ; 0x021E85E4
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #0x18]
+ bl DestroyMsgData
+ ldr r0, [r4, #0x14]
+ bl ScrStrBufs_delete
+ add r0, r4, #0
+ bl FreeToHeap
+ pop {r4, pc}
+
+ thumb_func_start MOD05_021E85FC
+MOD05_021E85FC: ; 0x021E85FC
+ push {r4, lr}
+ add r4, r0, #0
+ bl FUN_02034E48
+ add r0, r4, #0
+ mov r1, #4
+ mov r2, #0
+ bl MOD05_021EFA9C
+ ldr r0, [r4, #0x38]
+ bl FUN_02055320
+ ldr r1, [r4, #0x1c]
+ str r0, [r1, #8]
+ ldr r0, [r4, #0x38]
+ bl FUN_0205532C
+ ldr r1, [r4, #0x1c]
+ str r0, [r1, #0xc]
+ mov r1, #0
+ ldr r0, [r4, #0x1c]
+ mvn r1, r1
+ str r1, [r0, #4]
+ ldr r0, [r4, #0x38]
+ bl FUN_020552F8
+ ldr r1, [r4, #0x1c]
+ str r0, [r1, #0x10]
+ ldr r0, [r4, #0xc]
+ bl FUN_02022720
+ cmp r0, #2
+ bne _021E8642
+ mov r0, #1
+ pop {r4, pc}
+_021E8642:
+ mov r0, #0
+ pop {r4, pc}
+ .balign 4, 0
+
+ .section .rodata
+
+ .global UNK05_021F78C4
+UNK05_021F78C4: ; 0x021F78C4
+ .word 0x00000006, 0x00000007, 0x00000008, 0x00000000
+
+ .global UNK05_021F78D4
+UNK05_021F78D4: ; 0x021F78D4
+ .word 0x00000001, 0x00000002, 0x00000003, 0x00000004
diff --git a/arm9/modules/05/asm/module_05.s b/arm9/modules/05/asm/module_05.s
index d8ed3656..23f6ea7b 100644
--- a/arm9/modules/05/asm/module_05.s
+++ b/arm9/modules/05/asm/module_05.s
@@ -3,2564 +3,6 @@
.section .text
.balign 4, 0
- thumb_func_start MOD05_021E72FC
-MOD05_021E72FC: ; 0x021E72FC
- push {r4, r5, r6, lr}
- add r6, r1, #0
- add r5, r0, #0
- add r0, r6, #0
- bl FUN_020553A0
- bl FUN_02058720
- lsl r0, r0, #0x18
- lsr r4, r0, #0x18
- add r0, r4, #0
- bl FUN_02054B30
- cmp r0, #1
- bne _021E731E
- mov r2, #3
- b _021E734C
-_021E731E:
- add r0, r4, #0
- bl FUN_02054B3C
- cmp r0, #1
- bne _021E732C
- mov r2, #2
- b _021E734C
-_021E732C:
- add r0, r4, #0
- bl FUN_02054B48
- cmp r0, #1
- bne _021E733A
- mov r2, #0
- b _021E734C
-_021E733A:
- add r0, r4, #0
- bl FUN_02054B54
- cmp r0, #1
- bne _021E7348
- mov r2, #1
- b _021E734C
-_021E7348:
- mov r0, #0
- pop {r4, r5, r6, pc}
-_021E734C:
- add r0, r5, #0
- add r1, r6, #0
- bl MOD05_021E7358
- mov r0, #1
- pop {r4, r5, r6, pc}
-
- thumb_func_start MOD05_021E7358
-MOD05_021E7358: ; 0x021E7358
- push {r3, r4, r5, r6, r7, lr}
- add r5, r0, #0
- mov r0, #0x18
- add r6, r1, #0
- add r7, r2, #0
- bl MOD05_021E74D4
- add r4, r0, #0
- str r5, [r4, #0xc]
- str r6, [r4, #0x10]
- ldr r0, _021E7380 ; =0x00000658
- str r7, [r4]
- bl FUN_020054C8
- ldr r1, _021E7384 ; =MOD05_021E73B4
- add r0, r5, #0
- add r2, r4, #0
- bl FUN_020463CC
- pop {r3, r4, r5, r6, r7, pc}
- .balign 4, 0
-_021E7380: .word 0x00000658
-_021E7384: .word MOD05_021E73B4
-
- thumb_func_start MOD05_021E7388
-MOD05_021E7388: ; 0x021E7388
- cmp r0, #3
- bhi _021E73B0
- add r0, r0, r0
- add r0, pc
- ldrh r0, [r0, #6]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- add pc, r0
-_021E7398: ; jump table
- .short _021E73A0 - _021E7398 - 2 ; case 0
- .short _021E73A8 - _021E7398 - 2 ; case 1
- .short _021E73A4 - _021E7398 - 2 ; case 2
- .short _021E73AC - _021E7398 - 2 ; case 3
-_021E73A0:
- mov r0, #2
- bx lr
-_021E73A4:
- mov r0, #1
- bx lr
-_021E73A8:
- mov r0, #3
- bx lr
-_021E73AC:
- mov r0, #0
- bx lr
-_021E73B0:
- mov r0, #0
- bx lr
-
- thumb_func_start MOD05_021E73B4
-MOD05_021E73B4: ; 0x021E73B4
- push {r4, r5, r6, lr}
- bl FUN_0204652C
- add r4, r0, #0
- ldr r0, [r4, #0x10]
- bl FUN_020553A0
- add r6, r0, #0
- bl FUN_02058720
- lsl r0, r0, #0x18
- lsr r5, r0, #0x18
- ldr r0, [r4, #8]
- cmp r0, #0
- beq _021E73DC
- cmp r0, #1
- beq _021E73EE
- cmp r0, #2
- beq _021E741C
- b _021E74CA
-_021E73DC:
- mov r1, #1
- add r0, r6, #0
- lsl r1, r1, #8
- bl FUN_02058410
- ldr r0, [r4, #8]
- add r0, r0, #1
- str r0, [r4, #8]
- b _021E74CA
-_021E73EE:
- ldr r0, [r4, #0x10]
- bl FUN_02057254
- cmp r0, #0
- beq _021E74CA
- ldr r0, [r4]
- mov r1, #0xc
- bl FUN_0205AFDC
- add r1, r0, #0
- ldr r0, [r4, #0x10]
- bl FUN_02057260
- ldr r0, [r4, #0x10]
- ldr r1, [r4]
- bl FUN_02055304
- ldr r0, [r4, #8]
- add r0, r0, #1
- str r0, [r4, #8]
- mov r0, #7
- str r0, [r4, #4]
- b _021E74CA
-_021E741C:
- ldr r0, [r4, #4]
- cmp r0, #2
- beq _021E742A
- cmp r0, #4
- beq _021E742A
- cmp r0, #6
- bne _021E743A
-_021E742A:
- ldr r0, [r4]
- bl MOD05_021E7388
- str r0, [r4]
- ldr r0, [r4, #0x10]
- ldr r1, [r4]
- bl FUN_02055304
-_021E743A:
- ldr r0, [r4, #4]
- sub r0, r0, #1
- str r0, [r4, #4]
- bne _021E74CA
- add r0, r5, #0
- bl FUN_02054B30
- cmp r0, #1
- bne _021E7452
- mov r0, #3
- str r0, [r4]
- b _021E748A
-_021E7452:
- add r0, r5, #0
- bl FUN_02054B3C
- cmp r0, #1
- bne _021E7462
- mov r0, #2
- str r0, [r4]
- b _021E748A
-_021E7462:
- add r0, r5, #0
- bl FUN_02054B48
- cmp r0, #1
- bne _021E7472
- mov r0, #0
- str r0, [r4]
- b _021E748A
-_021E7472:
- add r0, r5, #0
- bl FUN_02054B54
- cmp r0, #1
- bne _021E7482
- mov r0, #1
- str r0, [r4]
- b _021E748A
-_021E7482:
- ldr r0, [r4]
- bl MOD05_021E7388
- str r0, [r4]
-_021E748A:
- ldr r0, [r4, #0x10]
- ldr r2, [r4]
- add r1, r6, #0
- bl FUN_02056B74
- cmp r0, #0
- bne _021E749E
- mov r0, #1
- str r0, [r4, #8]
- b _021E74CA
-_021E749E:
- add r0, r6, #0
- mov r1, #0x80
- bl FUN_02058418
- mov r1, #1
- add r0, r6, #0
- lsl r1, r1, #8
- bl FUN_02058418
- ldr r0, [r4, #0x10]
- ldr r1, [r4]
- bl FUN_02055304
- add r0, r4, #0
- bl MOD05_021E74F8
- ldr r0, _021E74D0 ; =0x00000658
- mov r1, #0
- bl FUN_020054F0
- mov r0, #1
- pop {r4, r5, r6, pc}
-_021E74CA:
- mov r0, #0
- pop {r4, r5, r6, pc}
- nop
-_021E74D0: .word 0x00000658
-
- thumb_func_start MOD05_021E74D4
-MOD05_021E74D4: ; 0x021E74D4
- push {r3, r4, r5, lr}
- add r5, r0, #0
- mov r0, #4
- add r1, r5, #0
- bl AllocFromHeapAtEnd
- add r4, r0, #0
- bne _021E74E8
- bl ErrorHandling
-_021E74E8:
- add r0, r4, #0
- mov r1, #0
- add r2, r5, #0
- bl memset
- add r0, r4, #0
- pop {r3, r4, r5, pc}
- .balign 4, 0
-
- thumb_func_start MOD05_021E74F8
-MOD05_021E74F8: ; 0x021E74F8
- ldr r3, _021E7500 ; =FUN_02016A8C
- add r1, r0, #0
- mov r0, #4
- bx r3
- .balign 4, 0
-_021E7500: .word FUN_02016A8C
-
- thumb_func_start MOD05_021E7504
-MOD05_021E7504: ; 0x021E7504
- add r1, r0, #0
- ldr r0, [r1, #0x10]
- cmp r0, #3
- bhi _021E7536
- add r0, r0, r0
- add r0, pc
- ldrh r0, [r0, #6]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- add pc, r0
-_021E7518: ; jump table
- .short _021E7520 - _021E7518 - 2 ; case 0
- .short _021E752C - _021E7518 - 2 ; case 1
- .short _021E7526 - _021E7518 - 2 ; case 2
- .short _021E7532 - _021E7518 - 2 ; case 3
-_021E7520:
- mov r0, #2
- str r0, [r1, #0x10]
- b _021E7536
-_021E7526:
- mov r0, #1
- str r0, [r1, #0x10]
- b _021E7536
-_021E752C:
- mov r0, #3
- str r0, [r1, #0x10]
- b _021E7536
-_021E7532:
- mov r0, #0
- str r0, [r1, #0x10]
-_021E7536:
- ldr r0, [r1]
- ldr r3, _021E7540 ; =FUN_02055304
- ldr r0, [r0, #0x38]
- ldr r1, [r1, #0x10]
- bx r3
- .balign 4, 0
-_021E7540: .word FUN_02055304
-
- thumb_func_start MOD05_021E7544
-MOD05_021E7544: ; 0x021E7544
- push {r4, r5, r6, r7, lr}
- sub sp, #0x24
- add r5, r1, #0
- add r7, r0, #0
- ldr r0, [r5]
- ldr r0, [r0, #0x38]
- bl FUN_020553A0
- add r6, r0, #0
- ldr r0, [r5, #8]
- cmp r0, #0
- beq _021E7564
- cmp r0, #1
- beq _021E756E
- add sp, #0x24
- pop {r4, r5, r6, r7, pc}
-_021E7564:
- mov r0, #1
- str r0, [r5, #8]
- ldr r0, _021E760C ; =0x0000064F
- bl FUN_020054C8
-_021E756E:
- ldr r0, [r5, #0xc]
- lsr r2, r0, #0x1f
- lsl r1, r0, #0x1f
- sub r1, r1, r2
- mov r0, #0x1f
- ror r1, r0
- add r0, r2, r1
- beq _021E7584
- add r0, r5, #0
- bl MOD05_021E7504
-_021E7584:
- add r0, r6, #0
- add r1, sp, #0x18
- bl FUN_02058BA4
- ldr r4, [r5, #0xc]
- add r0, r4, #0
- bl _dflt
- str r0, [sp, #0x14]
- lsl r0, r4, #0xb
- str r1, [sp, #0x10]
- bl _dflt
- add r2, r0, #0
- add r3, r1, #0
- ldr r0, _021E7610 ; =0x9999999A
- ldr r1, _021E7614 ; =0x40C19999
- bl _dadd
- add r2, r0, #0
- add r3, r1, #0
- ldr r0, [sp, #0x14]
- ldr r1, [sp, #0x10]
- bl _dmul
- bl _dfix
- str r0, [sp, #0x1c]
- add r0, r6, #0
- add r1, sp, #0x18
- bl FUN_02058BB4
- ldr r0, [r5, #0xc]
- add r0, r0, #1
- str r0, [r5, #0xc]
- cmp r0, #0x14
- bne _021E75EA
- mov r0, #6
- str r0, [sp]
- mov r1, #0
- mov r0, #1
- str r0, [sp, #4]
- mov r0, #4
- str r0, [sp, #8]
- mov r0, #2
- add r2, r1, #0
- add r3, r1, #0
- bl FUN_0200E1D0
- add sp, #0x24
- pop {r4, r5, r6, r7, pc}
-_021E75EA:
- ble _021E7606
- bl FUN_0200E308
- cmp r0, #0
- beq _021E7606
- ldr r0, [r5, #4]
- mov r1, #1
- str r1, [r0]
- add r0, r5, #0
- bl FreeToHeap
- add r0, r7, #0
- bl FUN_0200CAB4
-_021E7606:
- add sp, #0x24
- pop {r4, r5, r6, r7, pc}
- nop
-_021E760C: .word 0x0000064F
-_021E7610: .word 0x9999999A
-_021E7614: .word 0x40C19999
-
- thumb_func_start MOD05_021E7618
-MOD05_021E7618: ; 0x021E7618
- push {r3, r4, r5, r6, r7, lr}
- sub sp, #0x20
- add r5, r1, #0
- add r6, r0, #0
- ldr r0, [r5]
- ldr r0, [r0, #0x38]
- bl FUN_020553A0
- ldr r1, [r5, #8]
- add r4, r0, #0
- cmp r1, #0
- beq _021E763C
- cmp r1, #1
- beq _021E7694
- cmp r1, #2
- beq _021E771C
- add sp, #0x20
- pop {r3, r4, r5, r6, r7, pc}
-_021E763C:
- bl FUN_02058914
- add r0, r4, #0
- add r1, sp, #0x14
- bl FUN_02058BA4
- ldr r1, [r5, #0xc]
- mov r0, #0x14
- sub r6, r0, r1
- add r0, r6, #0
- bl _dflt
- str r0, [sp, #0xc]
- lsl r0, r6, #0xb
- add r7, r1, #0
- bl _dflt
- add r2, r0, #0
- add r3, r1, #0
- ldr r0, _021E7744 ; =0x9999999A
- ldr r1, _021E7748 ; =0x40C19999
- bl _dadd
- add r2, r0, #0
- add r3, r1, #0
- ldr r0, [sp, #0xc]
- add r1, r7, #0
- bl _dmul
- bl _dfix
- str r0, [sp, #0x18]
- add r0, r4, #0
- add r1, sp, #0x14
- bl FUN_02058BB4
- add r0, r4, #0
- bl MOD05_021F1D8C
- ldr r0, _021E774C ; =0x0000064F
- bl FUN_020054C8
- mov r0, #1
- str r0, [r5, #8]
-_021E7694:
- ldr r0, [r5, #0xc]
- lsr r2, r0, #0x1f
- lsl r1, r0, #0x1f
- sub r1, r1, r2
- mov r0, #0x1f
- ror r1, r0
- add r0, r2, r1
- beq _021E76AA
- add r0, r5, #0
- bl MOD05_021E7504
-_021E76AA:
- add r0, r4, #0
- add r1, sp, #0x14
- bl FUN_02058BA4
- ldr r1, [r5, #0xc]
- mov r0, #0x14
- sub r6, r0, r1
- add r0, r6, #0
- bl _dflt
- str r0, [sp, #0x10]
- lsl r0, r6, #0xb
- add r7, r1, #0
- bl _dflt
- add r2, r0, #0
- add r3, r1, #0
- ldr r0, _021E7744 ; =0x9999999A
- ldr r1, _021E7748 ; =0x40C19999
- bl _dadd
- add r2, r0, #0
- add r3, r1, #0
- ldr r0, [sp, #0x10]
- add r1, r7, #0
- bl _dmul
- bl _dfix
- str r0, [sp, #0x18]
- add r0, r4, #0
- add r1, sp, #0x14
- bl FUN_02058BB4
- ldr r0, [r5, #0xc]
- add r0, r0, #1
- str r0, [r5, #0xc]
- cmp r0, #2
- bne _021E770E
- mov r0, #6
- str r0, [sp]
- mov r0, #1
- str r0, [sp, #4]
- mov r1, #4
- str r1, [sp, #8]
- add r1, r0, #0
- add r2, r0, #0
- mov r3, #0
- bl FUN_0200E1D0
-_021E770E:
- ldr r0, [r5, #0xc]
- cmp r0, #0x14
- ble _021E7740
- mov r0, #2
- add sp, #0x20
- str r0, [r5, #8]
- pop {r3, r4, r5, r6, r7, pc}
-_021E771C:
- bl FUN_0200E308
- cmp r0, #0
- beq _021E7740
- ldr r0, [r5]
- mov r1, #1
- ldr r0, [r0, #0x38]
- bl FUN_02055304
- ldr r0, [r5, #4]
- mov r1, #1
- str r1, [r0]
- add r0, r5, #0
- bl FreeToHeap
- add r0, r6, #0
- bl FUN_0200CAB4
-_021E7740:
- add sp, #0x20
- pop {r3, r4, r5, r6, r7, pc}
- .balign 4, 0
-_021E7744: .word 0x9999999A
-_021E7748: .word 0x40C19999
-_021E774C: .word 0x0000064F
-
- thumb_func_start MOD05_021E7750
-MOD05_021E7750: ; 0x021E7750
- push {r3, r4, r5, r6, r7, lr}
- add r5, r0, #0
- add r6, r1, #0
- mov r0, #4
- mov r1, #0x14
- add r7, r2, #0
- bl AllocFromHeapAtEnd
- add r4, r0, #0
- mov r1, #0
- mov r2, #0x14
- bl MI_CpuFill8
- str r5, [r4]
- str r7, [r4, #4]
- ldr r0, [r5, #0x38]
- bl FUN_020552F8
- str r0, [r4, #0x10]
- cmp r6, #0
- beq _021E7786
- ldr r0, _021E7794 ; =MOD05_021E7544
- add r1, r4, #0
- mov r2, #0x64
- bl FUN_0200CA44
- pop {r3, r4, r5, r6, r7, pc}
-_021E7786:
- ldr r0, _021E7798 ; =MOD05_021E7618
- add r1, r4, #0
- mov r2, #0x64
- bl FUN_0200CA44
- pop {r3, r4, r5, r6, r7, pc}
- nop
-_021E7794: .word MOD05_021E7544
-_021E7798: .word MOD05_021E7618
-
- thumb_func_start MOD05_021E779C
-MOD05_021E779C: ; 0x021E779C
- push {r4, lr}
- mov r2, #0
- mov r1, #0x14
- add r3, r2, #0
- add r4, r0, #0
- bl MOD05_021E4BE8
- str r4, [r0, #0x10]
- pop {r4, pc}
- .balign 4, 0
-
- thumb_func_start MOD05_021E77B0
-MOD05_021E77B0: ; 0x021E77B0
- push {r4, lr}
- add r4, r0, #0
- bl MOD05_021E78B4
- add r0, r4, #0
- bl MOD05_021E4C00
- pop {r4, pc}
-
- thumb_func_start MOD05_021E77C0
-MOD05_021E77C0: ; 0x021E77C0
- ldr r1, [r0]
- add r1, r1, #1
- str r1, [r0]
- bx lr
-
- thumb_func_start MOD05_021E77C8
-MOD05_021E77C8: ; 0x021E77C8
- push {r3, lr}
- ldr r1, [r0]
- sub r1, r1, #1
- str r1, [r0]
- bpl _021E77D6
- bl ErrorHandling
-_021E77D6:
- pop {r3, pc}
-
- thumb_func_start MOD05_021E77D8
-MOD05_021E77D8: ; 0x021E77D8
- ldr r1, [r0, #4]
- add r1, r1, #1
- str r1, [r0, #4]
- bx lr
-
- thumb_func_start MOD05_021E77E0
-MOD05_021E77E0: ; 0x021E77E0
- push {r3, lr}
- ldr r1, [r0, #4]
- sub r1, r1, #1
- str r1, [r0, #4]
- bpl _021E77EE
- bl ErrorHandling
-_021E77EE:
- pop {r3, pc}
-
- thumb_func_start MOD05_021E77F0
-MOD05_021E77F0: ; 0x021E77F0
- push {r3, lr}
- cmp r1, #0
- bne _021E77FC
- bl MOD05_021E77C0
- pop {r3, pc}
-_021E77FC:
- bl MOD05_021E77D8
- pop {r3, pc}
- .balign 4, 0
-
- thumb_func_start MOD05_021E7804
-MOD05_021E7804: ; 0x021E7804
- push {r3, lr}
- cmp r1, #0
- bne _021E7810
- bl MOD05_021E77C8
- pop {r3, pc}
-_021E7810:
- bl MOD05_021E77E0
- pop {r3, pc}
- .balign 4, 0
-
- thumb_func_start MOD05_021E7818
-MOD05_021E7818: ; 0x021E7818
- push {r3, r4, lr}
- sub sp, #0xc
- add r4, r0, #0
- ldr r0, [r4, #8]
- cmp r0, #0
- bne _021E785C
- mov r1, #1
- str r1, [r4, #8]
- ldr r0, [r4, #0x10]
- mov r2, #0x55
- bl MOD05_021E5078
- ldr r0, [r4, #0x10]
- mov r1, #1
- mov r2, #0x75
- bl MOD05_021E50AC
- mov r1, #1
- ldr r0, [r4, #0x10]
- mov r2, #4
- add r3, r1, #0
- bl MOD05_021E50D4
- mov r1, #1
- str r1, [sp]
- mov r0, #0
- str r0, [sp, #4]
- ldr r0, _021E7860 ; =UNK05_021F7854
- add r2, r1, #0
- str r0, [sp, #8]
- ldr r0, [r4, #0x10]
- add r3, r1, #0
- bl MOD05_021E4EFC
-_021E785C:
- add sp, #0xc
- pop {r3, r4, pc}
- .balign 4, 0
-_021E7860: .word UNK05_021F7854
-
- thumb_func_start MOD05_021E7864
-MOD05_021E7864: ; 0x021E7864
- push {r3, r4, lr}
- sub sp, #0xc
- add r4, r0, #0
- ldr r0, [r4, #0xc]
- cmp r0, #0
- bne _021E78AC
- mov r0, #1
- str r0, [r4, #0xc]
- ldr r0, [r4, #0x10]
- mov r1, #0xa
- mov r2, #0x6c
- bl MOD05_021E5078
- ldr r0, [r4, #0x10]
- mov r1, #0xa
- mov r2, #0x75
- bl MOD05_021E50AC
- ldr r0, [r4, #0x10]
- mov r1, #0xb
- mov r2, #0xd
- mov r3, #1
- bl MOD05_021E50D4
- mov r0, #0xb
- str r0, [sp]
- mov r0, #0
- str r0, [sp, #4]
- ldr r0, _021E78B0 ; =UNK05_021F7854
- mov r2, #0xa
- str r0, [sp, #8]
- ldr r0, [r4, #0x10]
- mov r1, #0xc
- add r3, r2, #0
- bl MOD05_021E4EFC
-_021E78AC:
- add sp, #0xc
- pop {r3, r4, pc}
- .balign 4, 0
-_021E78B0: .word UNK05_021F7854
-
- thumb_func_start MOD05_021E78B4
-MOD05_021E78B4: ; 0x021E78B4
- push {r4, lr}
- add r4, r0, #0
- ldr r0, [r4, #8]
- cmp r0, #1
- bne _021E78E2
- mov r0, #0
- str r0, [r4, #8]
- ldr r0, [r4, #0x10]
- mov r1, #1
- bl MOD05_021E50A0
- ldr r0, [r4, #0x10]
- mov r1, #1
- bl MOD05_021E50C8
- ldr r0, [r4, #0x10]
- mov r1, #1
- bl MOD05_021E5114
- ldr r0, [r4, #0x10]
- mov r1, #1
- bl MOD05_021E506C
-_021E78E2:
- pop {r4, pc}
-
- thumb_func_start MOD05_021E78E4
-MOD05_021E78E4: ; 0x021E78E4
- push {r4, lr}
- add r4, r0, #0
- ldr r0, [r4, #0xc]
- cmp r0, #1
- bne _021E7912
- mov r0, #0
- str r0, [r4, #0xc]
- ldr r0, [r4, #0x10]
- mov r1, #0xa
- bl MOD05_021E50A0
- ldr r0, [r4, #0x10]
- mov r1, #0xa
- bl MOD05_021E50C8
- ldr r0, [r4, #0x10]
- mov r1, #0xb
- bl MOD05_021E5114
- ldr r0, [r4, #0x10]
- mov r1, #0xc
- bl MOD05_021E506C
-_021E7912:
- pop {r4, pc}
-
- thumb_func_start MOD05_021E7914
-MOD05_021E7914: ; 0x021E7914
- push {r3, lr}
- ldr r1, [r0]
- cmp r1, #0
- bne _021E7920
- bl MOD05_021E7818
-_021E7920:
- pop {r3, pc}
- .balign 4, 0
-
- thumb_func_start MOD05_021E7924
-MOD05_021E7924: ; 0x021E7924
- push {r3, lr}
- ldr r1, [r0, #4]
- cmp r1, #0
- bne _021E7930
- bl MOD05_021E7864
-_021E7930:
- pop {r3, pc}
- .balign 4, 0
-
- thumb_func_start MOD05_021E7934
-MOD05_021E7934: ; 0x021E7934
- push {r3, lr}
- ldr r1, [r0]
- cmp r1, #0
- bne _021E7940
- bl MOD05_021E78B4
-_021E7940:
- pop {r3, pc}
- .balign 4, 0
-
- thumb_func_start MOD05_021E7944
-MOD05_021E7944: ; 0x021E7944
- push {r3, lr}
- ldr r1, [r0, #4]
- cmp r1, #0
- bne _021E7950
- bl MOD05_021E78E4
-_021E7950:
- pop {r3, pc}
- .balign 4, 0
-
- thumb_func_start MOD05_021E7954
-MOD05_021E7954: ; 0x021E7954
- push {r3, lr}
- cmp r1, #0
- bne _021E7960
- bl MOD05_021E7914
- pop {r3, pc}
-_021E7960:
- bl MOD05_021E7924
- pop {r3, pc}
- .balign 4, 0
-
- thumb_func_start MOD05_021E7968
-MOD05_021E7968: ; 0x021E7968
- push {r3, lr}
- cmp r1, #0
- bne _021E7974
- bl MOD05_021E7934
- pop {r3, pc}
-_021E7974:
- bl MOD05_021E7944
- pop {r3, pc}
- .balign 4, 0
-
- thumb_func_start MOD05_021E797C
-MOD05_021E797C: ; 0x021E797C
- push {r3, r4, r5, lr}
- sub sp, #8
- ldr r3, _021E7998 ; =UNK05_021F7824
- add r4, sp, #0
- ldr r5, [r3]
- ldr r3, [r3, #4]
- str r5, [sp]
- str r3, [sp, #4]
- lsl r1, r1, #2
- ldr r1, [r4, r1]
- bl MOD05_021E4EE4
- add sp, #8
- pop {r3, r4, r5, pc}
- .balign 4, 0
-_021E7998: .word UNK05_021F7824
-
- thumb_func_start MOD05_021E799C
-MOD05_021E799C: ; 0x021E799C
- push {r3, lr}
- bl FUN_02064738
- ldr r0, [r0, #0x14]
- pop {r3, pc}
- .balign 4, 0
-
- thumb_func_start MOD05_021E79A8
-MOD05_021E79A8: ; 0x021E79A8
- push {r4, r5, lr}
- sub sp, #0xc
- add r4, r1, #0
- add r5, r0, #0
- bl FUN_0206475C
- add r2, r4, #0
- add r3, r0, #0
- add r2, #0x30
- ldmia r3!, {r0, r1}
- stmia r2!, {r0, r1}
- ldmia r3!, {r0, r1}
- stmia r2!, {r0, r1}
- mov r0, #6
- lsl r0, r0, #0xc
- str r0, [r4, #0x28]
- ldr r0, [r4, #0x38]
- ldr r1, [r4, #0x30]
- bl MOD05_021E7954
- add r0, r5, #0
- add r1, sp, #0
- bl FUN_0206477C
- ldr r0, [r4, #0x34]
- ldr r1, [r4, #0x30]
- add r2, sp, #0
- bl MOD05_021E797C
- str r0, [r4, #0x40]
- ldr r0, [r4, #0x38]
- ldr r1, [r4, #0x30]
- bl MOD05_021E77F0
- add r0, r5, #0
- bl FUN_02064754
- cmp r0, #1
- bne _021E79FC
- ldr r0, _021E7A04 ; =0x000005DD
- bl FUN_020054C8
-_021E79FC:
- mov r0, #1
- add sp, #0xc
- pop {r4, r5, pc}
- nop
-_021E7A04: .word 0x000005DD
-
- thumb_func_start MOD05_021E7A08
-MOD05_021E7A08: ; 0x021E7A08
- push {r4, r5, lr}
- sub sp, #0xc
- add r4, r1, #0
- add r1, sp, #0
- add r5, r0, #0
- bl FUN_0206477C
- ldr r0, [r4]
- cmp r0, #0
- beq _021E7A24
- cmp r0, #1
- beq _021E7A46
- cmp r0, #2
- b _021E7A5E
-_021E7A24:
- ldr r1, [r4, #0x1c]
- ldr r0, [r4, #0x28]
- add r0, r1, r0
- str r0, [r4, #0x1c]
- beq _021E7A3A
- mov r0, #2
- ldr r1, [r4, #0x28]
- lsl r0, r0, #0xc
- sub r0, r1, r0
- str r0, [r4, #0x28]
- b _021E7A5E
-_021E7A3A:
- mov r0, #0
- str r0, [r4, #0x28]
- ldr r0, [r4]
- add r0, r0, #1
- str r0, [r4]
- b _021E7A5E
-_021E7A46:
- ldr r0, [r4, #4]
- add r0, r0, #1
- str r0, [r4, #4]
- cmp r0, #0x1e
- blt _021E7A5E
- ldr r0, [r4]
- add r0, r0, #1
- str r0, [r4]
- mov r0, #0
- str r0, [r4, #4]
- mov r0, #1
- str r0, [r4, #0x14]
-_021E7A5E:
- add r0, r5, #0
- add r1, sp, #0
- bl FUN_0206476C
- add sp, #0xc
- pop {r4, r5, pc}
- .balign 4, 0
-
- thumb_func_start MOD05_021E7A6C
-MOD05_021E7A6C: ; 0x021E7A6C
- push {r4, lr}
- add r4, r1, #0
- ldr r0, [r4, #0x40]
- bl FUN_0201F744
- ldr r0, [r4, #0x38]
- ldr r1, [r4, #0x30]
- bl MOD05_021E7804
- ldr r0, [r4, #0x38]
- ldr r1, [r4, #0x30]
- bl MOD05_021E7968
- pop {r4, pc}
-
- thumb_func_start MOD05_021E7A88
-MOD05_021E7A88: ; 0x021E7A88
- push {r3, r4, lr}
- sub sp, #0xc
- add r4, r1, #0
- ldr r1, [r4, #0x10]
- cmp r1, #1
- beq _021E7ABA
- add r1, sp, #0
- bl FUN_0206477C
- ldr r1, [sp]
- ldr r0, [r4, #0x18]
- add r0, r1, r0
- str r0, [sp]
- ldr r1, [sp, #4]
- ldr r0, [r4, #0x1c]
- add r0, r1, r0
- str r0, [sp, #4]
- ldr r1, [sp, #8]
- ldr r0, [r4, #0x20]
- add r0, r1, r0
- str r0, [sp, #8]
- ldr r0, [r4, #0x40]
- add r1, sp, #0
- bl FUN_0201F7C8
-_021E7ABA:
- add sp, #0xc
- pop {r3, r4, pc}
- .balign 4, 0
-
- thumb_func_start MOD05_021E7AC0
-MOD05_021E7AC0: ; 0x021E7AC0
- push {r4, r5, r6, r7, lr}
- sub sp, #0x24
- add r5, r0, #0
- add r6, r1, #0
- add r7, r2, #0
- bl MOD05_021E4C24
- add r4, r0, #0
- mov r1, #0x16
- str r6, [sp, #0x14]
- str r4, [sp, #0x18]
- bl MOD05_021E4C08
- str r0, [sp, #0x1c]
- add r0, r5, #0
- add r1, sp, #8
- str r5, [sp, #0x20]
- bl FUN_02058B5C
- add r0, r5, #0
- bl FUN_02058744
- add r1, r0, #1
- add r0, sp, #0x14
- str r0, [sp]
- str r1, [sp, #4]
- ldr r1, _021E7B04 ; =UNK05_021F7840
- add r0, r4, #0
- add r2, sp, #8
- add r3, r7, #0
- bl MOD05_021E4DC4
- add sp, #0x24
- pop {r4, r5, r6, r7, pc}
- .balign 4, 0
-_021E7B04: .word UNK05_021F7840
-
- thumb_func_start MOD05_021E7B08
-MOD05_021E7B08: ; 0x021E7B08
- push {r4, r5, lr}
- sub sp, #0xc
- add r4, r1, #0
- add r5, r0, #0
- bl FUN_0206475C
- add r2, r4, #0
- add r3, r0, #0
- add r2, #0x30
- ldmia r3!, {r0, r1}
- stmia r2!, {r0, r1}
- ldmia r3!, {r0, r1}
- stmia r2!, {r0, r1}
- ldr r0, [r4, #0x3c]
- bl FUN_02058448
- str r0, [r4, #8]
- ldr r0, [r4, #0x3c]
- bl FUN_02058450
- str r0, [r4, #0xc]
- mov r0, #6
- lsl r0, r0, #0xc
- str r0, [r4, #0x28]
- ldr r0, [r4, #0x38]
- ldr r1, [r4, #0x30]
- bl MOD05_021E7954
- add r0, r5, #0
- add r1, sp, #0
- bl FUN_0206477C
- ldr r0, [r4, #0x34]
- ldr r1, [r4, #0x30]
- add r2, sp, #0
- bl MOD05_021E797C
- str r0, [r4, #0x40]
- ldr r0, [r4, #0x38]
- ldr r1, [r4, #0x30]
- bl MOD05_021E77F0
- add r0, r5, #0
- bl FUN_02064754
- cmp r0, #1
- bne _021E7B6C
- ldr r0, _021E7B74 ; =0x000005DD
- bl FUN_020054C8
-_021E7B6C:
- mov r0, #1
- add sp, #0xc
- pop {r4, r5, pc}
- nop
-_021E7B74: .word 0x000005DD
-
- thumb_func_start MOD05_021E7B78
-MOD05_021E7B78: ; 0x021E7B78
- push {r3, r4, r5, r6, lr}
- sub sp, #0xc
- add r4, r1, #0
- ldr r6, [r4, #0x3c]
- ldr r1, [r4, #8]
- add r5, r0, #0
- ldr r2, [r4, #0xc]
- add r0, r6, #0
- bl FUN_020582A8
- cmp r0, #0
- bne _021E7B94
- bl ErrorHandling
-_021E7B94:
- add r0, r6, #0
- add r1, sp, #0
- bl MOD05_021F1E64
- mov r0, #2
- ldr r1, [sp, #4]
- lsl r0, r0, #0x10
- add r1, r1, r0
- str r1, [sp, #4]
- ldr r2, [sp, #8]
- lsr r1, r0, #5
- add r1, r2, r1
- str r1, [sp, #8]
- ldr r1, [r4]
- cmp r1, #0
- beq _021E7BBC
- cmp r1, #1
- beq _021E7BDC
- cmp r1, #2
- b _021E7BF4
-_021E7BBC:
- ldr r2, [r4, #0x1c]
- ldr r1, [r4, #0x28]
- add r1, r2, r1
- str r1, [r4, #0x1c]
- beq _021E7BD0
- ldr r1, [r4, #0x28]
- lsr r0, r0, #4
- sub r0, r1, r0
- str r0, [r4, #0x28]
- b _021E7BF4
-_021E7BD0:
- mov r0, #0
- str r0, [r4, #0x28]
- ldr r0, [r4]
- add r0, r0, #1
- str r0, [r4]
- b _021E7BF4
-_021E7BDC:
- ldr r0, [r4, #4]
- add r0, r0, #1
- str r0, [r4, #4]
- cmp r0, #0x1e
- blt _021E7BF4
- ldr r0, [r4]
- add r0, r0, #1
- str r0, [r4]
- mov r0, #0
- str r0, [r4, #4]
- mov r0, #1
- str r0, [r4, #0x14]
-_021E7BF4:
- add r0, r5, #0
- add r1, sp, #0
- bl FUN_0206476C
- add sp, #0xc
- pop {r3, r4, r5, r6, pc}
-
- thumb_func_start MOD05_021E7C00
-MOD05_021E7C00: ; 0x021E7C00
- push {r4, lr}
- mov r1, #0x46
- lsl r1, r1, #6
- bl AllocFromHeap
- add r4, r0, #0
- bl MOD05_021E7C1C
- add r0, r4, #0
- pop {r4, pc}
-
- thumb_func_start MOD05_021E7C14
-MOD05_021E7C14: ; 0x021E7C14
- ldr r3, _021E7C18 ; =FreeToHeap
- bx r3
- .balign 4, 0
-_021E7C18: .word FreeToHeap
-
- thumb_func_start MOD05_021E7C1C
-MOD05_021E7C1C: ; 0x021E7C1C
- push {r3, r4, r5, r6, r7}
- sub sp, #0xc
- mov r4, #0
- mov ip, r0
- add r7, sp, #0
- add r3, r4, #0
-_021E7C28:
- str r3, [r7]
- str r3, [r7, #4]
- mov r0, #0x8c
- add r1, r4, #0
- mul r1, r0
- mov r0, ip
- add r2, r0, r1
- add r5, r2, #0
- str r3, [r7, #8]
- mov r0, ip
- str r3, [r0, r1]
- str r3, [r2, #4]
- str r3, [r2, #8]
- str r3, [r2, #0xc]
- add r6, r7, #0
- ldmia r6!, {r0, r1}
- add r5, #0x68
- stmia r5!, {r0, r1}
- ldr r0, [r6]
- add r6, r7, #0
- str r0, [r5]
- add r5, r2, #0
- ldmia r6!, {r0, r1}
- add r5, #0x74
- stmia r5!, {r0, r1}
- ldr r0, [r6]
- add r6, r7, #0
- str r0, [r5]
- add r5, r2, #0
- ldmia r6!, {r0, r1}
- add r5, #0x80
- stmia r5!, {r0, r1}
- ldr r0, [r6]
- str r0, [r5]
- add r0, r4, #1
- lsl r0, r0, #0x18
- lsr r4, r0, #0x18
- str r3, [r2, #0x64]
- cmp r4, #0x20
- blo _021E7C28
- add sp, #0xc
- pop {r3, r4, r5, r6, r7}
- bx lr
- .balign 4, 0
-
- thumb_func_start MOD05_021E7C80
-MOD05_021E7C80: ; 0x021E7C80
- push {r3, r4, r5, r6, lr}
- sub sp, #0xc
- add r5, r0, #0
- add r4, r1, #0
- cmp r5, #0x20
- blt _021E7C90
- bl ErrorHandling
-_021E7C90:
- add r6, sp, #0
- mov r3, #0
- str r3, [r6]
- str r3, [r6, #4]
- mov r0, #0x8c
- mul r0, r5
- str r3, [r6, #8]
- str r3, [r4, r0]
- add r2, r4, r0
- str r3, [r2, #4]
- str r3, [r2, #8]
- add r4, r2, #0
- str r3, [r2, #0xc]
- add r5, r6, #0
- ldmia r5!, {r0, r1}
- add r4, #0x68
- stmia r4!, {r0, r1}
- ldr r0, [r5]
- add r5, r6, #0
- str r0, [r4]
- add r4, r2, #0
- ldmia r5!, {r0, r1}
- add r4, #0x74
- stmia r4!, {r0, r1}
- ldr r0, [r5]
- str r0, [r4]
- add r4, r2, #0
- ldmia r6!, {r0, r1}
- add r4, #0x80
- stmia r4!, {r0, r1}
- ldr r0, [r6]
- str r0, [r4]
- str r3, [r2, #0x64]
- add sp, #0xc
- pop {r3, r4, r5, r6, pc}
- .balign 4, 0
-
- thumb_func_start MOD05_021E7CD8
-MOD05_021E7CD8: ; 0x021E7CD8
- push {r4, r5, r6, r7, lr}
- sub sp, #0x14
- add r6, r0, #0
- ldr r0, [sp, #0x28]
- add r4, r1, #0
- str r0, [sp, #0x28]
- mov r0, #0
- add r7, r2, #0
- add r5, r3, #0
- str r0, [sp, #4]
- cmp r4, #0
- beq _021E7D0E
- mov r0, #4
- bl AllocFromHeapAtEnd
- str r0, [sp, #4]
- ldr r2, [sp, #4]
- add r0, r6, #0
- add r1, r4, #0
- bl NARC_ReadFile
- add r0, r4, #0
- mov r1, #0x30
- bl _u32_div_f
- str r0, [sp]
- b _021E7D10
-_021E7D0E:
- str r0, [sp]
-_021E7D10:
- ldr r4, [sp, #4]
- mov r6, #0
-_021E7D14:
- ldr r0, [sp]
- cmp r6, r0
- bhs _021E7D82
- ldr r0, [r4]
- add r2, r5, #0
- str r0, [r5]
- mov r0, #1
- str r0, [r5, #4]
- mov r0, #0
- add r3, r4, #4
- str r0, [r5, #0xc]
- ldmia r3!, {r0, r1}
- add r2, #0x68
- stmia r2!, {r0, r1}
- ldr r0, [r3]
- add r3, r4, #0
- str r0, [r2]
- add r3, #0x10
- add r2, r5, #0
- ldmia r3!, {r0, r1}
- add r2, #0x74
- stmia r2!, {r0, r1}
- ldr r0, [r3]
- add r3, r4, #0
- str r0, [r2]
- add r3, #0x1c
- add r2, r5, #0
- ldmia r3!, {r0, r1}
- add r2, #0x80
- stmia r2!, {r0, r1}
- ldr r0, [r3]
- add r3, r5, #0
- str r0, [r2]
- add r2, r5, #0
- ldr r0, [r5]
- add r1, r7, #0
- add r2, #0x10
- add r3, #0x64
- bl MOD05_021E7F10
- ldr r1, [r5]
- add r0, r7, #0
- bl MOD05_021F4CE4
- cmp r0, #0
- bne _021E7D74
- mov r0, #0
- str r0, [r5]
-_021E7D74:
- add r1, r5, #0
- ldr r0, [r5]
- ldr r2, [sp, #0x28]
- add r1, #0x10
- bl MOD05_021D9E80
- b _021E7DBE
-_021E7D82:
- mov r1, #0
- add r0, sp, #8
- str r1, [r0]
- str r1, [r0, #4]
- str r1, [r0, #8]
- add r0, r1, #0
- str r0, [r5]
- str r0, [r5, #4]
- add r2, r5, #0
- add r3, sp, #8
- str r0, [r5, #0xc]
- ldmia r3!, {r0, r1}
- add r2, #0x68
- stmia r2!, {r0, r1}
- ldr r0, [r3]
- add r3, sp, #8
- str r0, [r2]
- add r2, r5, #0
- ldmia r3!, {r0, r1}
- add r2, #0x74
- stmia r2!, {r0, r1}
- ldr r0, [r3]
- add r3, sp, #8
- str r0, [r2]
- add r2, r5, #0
- ldmia r3!, {r0, r1}
- add r2, #0x80
- stmia r2!, {r0, r1}
- ldr r0, [r3]
- str r0, [r2]
-_021E7DBE:
- add r6, r6, #1
- add r5, #0x8c
- add r4, #0x30
- cmp r6, #0x20
- blt _021E7D14
- ldr r0, [sp, #4]
- cmp r0, #0
- beq _021E7DD2
- bl FreeToHeap
-_021E7DD2:
- add sp, #0x14
- pop {r4, r5, r6, r7, pc}
- .balign 4, 0
-
- thumb_func_start MOD05_021E7DD8
-MOD05_021E7DD8: ; 0x021E7DD8
- push {r3, r4, r5, r6, r7, lr}
- sub sp, #0x48
- ldr r4, _021E7E94 ; =UNK05_021F7878
- str r2, [sp, #0xc]
- str r3, [sp, #0x10]
- add r6, r0, #0
- str r1, [sp, #8]
- add r3, sp, #0x18
- mov r2, #4
-_021E7DEA:
- ldmia r4!, {r0, r1}
- stmia r3!, {r0, r1}
- sub r2, r2, #1
- bne _021E7DEA
- ldr r0, [r4]
- ldr r5, [sp, #0x60]
- str r0, [r3]
- mov r7, #0
-_021E7DFA:
- ldr r0, [r5, #4]
- cmp r0, #0
- beq _021E7E86
- ldr r0, [r5, #8]
- cmp r0, #0
- bne _021E7E86
- add r4, r5, #0
- add r4, #0x68
- ldmia r4!, {r0, r1}
- add r3, sp, #0x3c
- add r2, r3, #0
- stmia r3!, {r0, r1}
- ldr r0, [r4]
- str r0, [r3]
- ldr r1, [sp, #0x3c]
- ldr r0, [r6]
- add r3, r5, #0
- add r0, r1, r0
- str r0, [sp, #0x3c]
- ldr r1, [sp, #0x44]
- ldr r0, [r6, #8]
- add r3, #0x80
- add r0, r1, r0
- str r0, [sp, #0x44]
- add r1, r2, #0
- ldr r0, [r5, #0x64]
- add r2, sp, #0x18
- bl FUN_0201B6D0
- cmp r0, #0
- beq _021E7E86
- ldr r0, [sp, #8]
- bl MOD05_021F4C9C
- add r4, r0, #0
- ldr r0, [sp, #0xc]
- cmp r0, #1
- bne _021E7E50
- ldr r0, [sp, #0x10]
- ldr r1, [r5, #0x64]
- ldr r2, _021E7E98 ; =0x00000F33
- bl MOD05_021DBB8C
-_021E7E50:
- ldr r0, [r5]
- add r1, r4, #0
- add r2, sp, #0x14
- bl MOD05_021DB9D4
- add r0, sp, #0x14
- ldrh r0, [r0]
- add r1, sp, #0x3c
- cmp r0, #0
- bne _021E7E74
- add r0, r5, #0
- add r3, r5, #0
- add r0, #0x10
- add r2, sp, #0x18
- add r3, #0x80
- bl FUN_0201B26C
- b _021E7E86
-_021E7E74:
- str r4, [sp]
- ldr r0, [r5]
- add r3, r5, #0
- str r0, [sp, #4]
- ldr r0, [r5, #0x64]
- add r2, sp, #0x18
- add r3, #0x80
- bl MOD05_021E7F34
-_021E7E86:
- add r7, r7, #1
- add r5, #0x8c
- cmp r7, #0x20
- blt _021E7DFA
- add sp, #0x48
- pop {r3, r4, r5, r6, r7, pc}
- nop
-_021E7E94: .word UNK05_021F7878
-_021E7E98: .word 0x00000F33
-
- thumb_func_start MOD05_021E7E9C
-MOD05_021E7E9C: ; 0x021E7E9C
- add r0, #0x74
- bx lr
-
- thumb_func_start MOD05_021E7EA0
-MOD05_021E7EA0: ; 0x021E7EA0
- add r2, r1, #0
- add r2, #0x68
- add r3, r0, #0
- ldmia r2!, {r0, r1}
- stmia r3!, {r0, r1}
- ldr r0, [r2]
- str r0, [r3]
- bx lr
-
- thumb_func_start MOD05_021E7EB0
-MOD05_021E7EB0: ; 0x021E7EB0
- add r3, r1, #0
- add r2, r0, #0
- ldmia r3!, {r0, r1}
- add r2, #0x68
- stmia r2!, {r0, r1}
- ldr r0, [r3]
- str r0, [r2]
- bx lr
-
- thumb_func_start MOD05_021E7EC0
-MOD05_021E7EC0: ; 0x021E7EC0
- str r1, [r0, #8]
- bx lr
-
- thumb_func_start MOD05_021E7EC4
-MOD05_021E7EC4: ; 0x021E7EC4
- ldr r0, [r0]
- bx lr
-
- thumb_func_start MOD05_021E7EC8
-MOD05_021E7EC8: ; 0x021E7EC8
- add r0, #0x10
- bx lr
-
- thumb_func_start MOD05_021E7ECC
-MOD05_021E7ECC: ; 0x021E7ECC
- ldr r0, [r0, #0x64]
- bx lr
-
- thumb_func_start MOD05_021E7ED0
-MOD05_021E7ED0: ; 0x021E7ED0
- mov r2, #0x8c
- mul r2, r1
- add r0, r0, r2
- bx lr
-
- thumb_func_start MOD05_021E7ED8
-MOD05_021E7ED8: ; 0x021E7ED8
- mov r3, #0
-_021E7EDA:
- ldr r2, [r0]
- cmp r2, r1
- beq _021E7EEA
- add r3, r3, #1
- add r0, #0x8c
- cmp r3, #0x20
- blt _021E7EDA
- mov r0, #0
-_021E7EEA:
- bx lr
-
- thumb_func_start MOD05_021E7EEC
-MOD05_021E7EEC: ; 0x021E7EEC
- push {r3, r4, r5, lr}
- add r4, r1, #0
- add r5, r0, #0
- cmp r4, #0x20
- blt _021E7EFA
- bl ErrorHandling
-_021E7EFA:
- mov r0, #0x8c
- mul r0, r4
- add r4, r5, r0
- ldr r0, [r4, #4]
- cmp r0, #0
- bne _021E7F0A
- bl ErrorHandling
-_021E7F0A:
- add r0, r4, #0
- pop {r3, r4, r5, pc}
- .balign 4, 0
-
- thumb_func_start MOD05_021E7F10
-MOD05_021E7F10: ; 0x021E7F10
- push {r3, r4, r5, lr}
- add r5, r2, #0
- add r4, r3, #0
- bl MOD05_021F4BD0
- ldr r0, [r0]
- bl FUN_020BC13C
- ldrh r1, [r0, #0xe]
- add r1, r0, r1
- ldr r1, [r1, #0xc]
- add r1, r0, r1
- add r0, r5, #0
- str r1, [r4]
- bl FUN_020B80B4
- pop {r3, r4, r5, pc}
- .balign 4, 0
-
- thumb_func_start MOD05_021E7F34
-MOD05_021E7F34: ; 0x021E7F34
- push {r3, r4, r5, r6, r7, lr}
- add r7, r0, #0
- add r0, r1, #0
- add r4, r2, #0
- add r5, r3, #0
- bl FUN_020B8474
- ldr r1, _021E7FB4 ; =UNK_021CEDD4
- add r0, r4, #0
- bl MI_Copy36B
- ldr r1, _021E7FB8 ; =UNK_021CED98
- mov r0, #0xa4
- ldr r2, [r1, #0x7c]
- bic r2, r0
- add r0, r5, #0
- str r2, [r1, #0x7c]
- bl FUN_020B844C
- bl FUN_020B849C
- add r2, sp, #0
- ldr r0, [sp, #0x1c]
- ldr r1, [sp, #0x18]
- add r2, #2
- add r3, sp, #0
- bl MOD05_021DB9E0
- add r0, sp, #0
- ldrh r0, [r0]
- ldr r1, [sp, #0x18]
- bl MOD05_021DB9F8
- add r6, r0, #0
- add r0, sp, #0
- ldrh r0, [r0, #2]
- mov r5, #0xff
- mov r4, #0
- cmp r0, #0
- ble _021E7FB0
-_021E7F84:
- lsl r0, r4, #2
- add r2, r6, r0
- ldrh r0, [r6, r0]
- cmp r5, r0
- beq _021E7F96
- lsl r0, r0, #0x18
- lsr r5, r0, #0x18
- mov r3, #1
- b _021E7F98
-_021E7F96:
- mov r3, #0
-_021E7F98:
- ldrh r2, [r2, #2]
- add r0, r7, #0
- add r1, r5, #0
- bl FUN_020BAFB8
- add r0, r4, #1
- lsl r0, r0, #0x18
- lsr r4, r0, #0x18
- add r0, sp, #0
- ldrh r0, [r0, #2]
- cmp r4, r0
- blt _021E7F84
-_021E7FB0:
- pop {r3, r4, r5, r6, r7, pc}
- nop
-_021E7FB4: .word UNK_021CEDD4
-_021E7FB8: .word UNK_021CED98
-
- thumb_func_start MOD05_021E7FBC
-MOD05_021E7FBC: ; 0x021E7FBC
- push {r3, r4, r5, r6, r7, lr}
- sub sp, #0x10
- ldr r5, _021E8058 ; =UNK05_021F786C
- add r6, r0, #0
- add r7, r1, #0
- ldmia r5!, {r0, r1}
- add r4, sp, #4
- stmia r4!, {r0, r1}
- ldr r0, [r5]
- str r0, [r4]
- mov r4, #0
- mov r0, #0x8c
-_021E7FD4:
- add r1, r4, #0
- mul r1, r0
- add r5, r6, r1
- ldr r1, [r5, #4]
- cmp r1, #0
- bne _021E8044
- mov r0, #1
- str r0, [r5, #4]
- add r6, r5, #0
- ldmia r3!, {r0, r1}
- add r6, #0x68
- stmia r6!, {r0, r1}
- ldr r0, [r3]
- str r0, [r6]
- ldr r6, [sp, #0x28]
- cmp r6, #0
- beq _021E8008
- mov r0, #1
- str r0, [r5, #0xc]
- add r3, r5, #0
- ldmia r6!, {r0, r1}
- add r3, #0x74
- stmia r3!, {r0, r1}
- ldr r0, [r6]
- str r0, [r3]
- b _021E800C
-_021E8008:
- mov r0, #0
- str r0, [r5, #0xc]
-_021E800C:
- add r6, sp, #4
- add r3, r5, #0
- ldmia r6!, {r0, r1}
- add r3, #0x80
- stmia r3!, {r0, r1}
- ldr r0, [r6]
- add r1, r7, #0
- str r0, [r3]
- add r3, r5, #0
- str r2, [r5]
- add r0, r2, #0
- add r2, r5, #0
- add r2, #0x10
- add r3, #0x64
- bl MOD05_021E7F10
- ldr r0, [sp, #0x2c]
- mov r1, #0
- str r0, [sp]
- ldr r0, [r5]
- add r5, #0x10
- add r2, r1, #0
- add r3, r5, #0
- bl MOD05_021D9DC0
- add sp, #0x10
- add r0, r4, #0
- pop {r3, r4, r5, r6, r7, pc}
-_021E8044:
- add r1, r4, #1
- lsl r1, r1, #0x18
- lsr r4, r1, #0x18
- cmp r4, #0x20
- blo _021E7FD4
- bl ErrorHandling
- mov r0, #0x20
- add sp, #0x10
- pop {r3, r4, r5, r6, r7, pc}
- .balign 4, 0
-_021E8058: .word UNK05_021F786C
-
- thumb_func_start MOD05_021E805C
-MOD05_021E805C: ; 0x021E805C
- push {r3, r4, r5, r6, r7, lr}
- sub sp, #0x38
- ldr r4, _021E80F4 ; =UNK05_021F789C
- str r0, [sp, #8]
- str r1, [sp, #0xc]
- add r3, sp, #0x14
- mov r2, #4
-_021E806A:
- ldmia r4!, {r0, r1}
- stmia r3!, {r0, r1}
- sub r2, r2, #1
- bne _021E806A
- ldr r0, [r4]
- mov r4, #0
- str r0, [r3]
- add r7, sp, #0x14
-_021E807A:
- mov r0, #0x8c
- add r1, r4, #0
- mul r1, r0
- ldr r0, [sp, #8]
- add r5, r0, r1
- ldr r0, [r5, #4]
- cmp r0, #0
- beq _021E80E4
- ldr r0, [r5, #8]
- cmp r0, #0
- bne _021E80E4
- ldr r0, [sp, #0xc]
- bl MOD05_021F4C9C
- add r6, r0, #0
- ldr r0, [r5]
- add r1, r6, #0
- add r2, sp, #0x10
- bl MOD05_021DB9D4
- ldr r0, [r5, #0xc]
- cmp r0, #0
- beq _021E80B2
- add r1, r5, #0
- add r0, r7, #0
- add r1, #0x74
- bl FUN_0201CAA8
-_021E80B2:
- add r0, sp, #0x10
- ldrh r0, [r0]
- cmp r0, #0
- bne _021E80CE
- add r0, r5, #0
- add r1, r5, #0
- add r5, #0x80
- add r0, #0x10
- add r1, #0x68
- add r2, r7, #0
- add r3, r5, #0
- bl FUN_0201B26C
- b _021E80E4
-_021E80CE:
- str r6, [sp]
- ldr r0, [r5]
- add r1, r5, #0
- str r0, [sp, #4]
- ldr r0, [r5, #0x64]
- add r5, #0x80
- add r1, #0x68
- add r2, r7, #0
- add r3, r5, #0
- bl MOD05_021E7F34
-_021E80E4:
- add r0, r4, #1
- lsl r0, r0, #0x18
- lsr r4, r0, #0x18
- cmp r4, #0x20
- blo _021E807A
- add sp, #0x38
- pop {r3, r4, r5, r6, r7, pc}
- nop
-_021E80F4: .word UNK05_021F789C
-
- thumb_func_start MOD05_021E80F8
-MOD05_021E80F8: ; 0x021E80F8
- push {r3, lr}
- mov r1, #0x14
- bl AllocFromHeap
- add r3, r0, #0
- mov r2, #0x14
- mov r1, #0
-_021E8106:
- strb r1, [r3]
- add r3, r3, #1
- sub r2, r2, #1
- bne _021E8106
- pop {r3, pc}
-
- thumb_func_start MOD05_021E8110
-MOD05_021E8110: ; 0x021E8110
- push {r4, lr}
- add r4, r0, #0
- ldrb r1, [r4, #0x13]
- lsl r1, r1, #0x18
- lsr r1, r1, #0x1f
- beq _021E8120
- bl FUN_02019178
-_021E8120:
- add r0, r4, #0
- bl FreeToHeap
- pop {r4, pc}
-
- thumb_func_start MOD05_021E8128
-MOD05_021E8128: ; 0x021E8128
- strb r1, [r0, #0x12]
- strh r2, [r0, #0x10]
- bx lr
- .balign 4, 0
-
- thumb_func_start MOD05_021E8130
-MOD05_021E8130: ; 0x021E8130
- ldrb r3, [r0, #0x13]
- mov r2, #0x7f
- bic r3, r2
- mov r2, #0x7f
- and r1, r2
- orr r1, r3
- strb r1, [r0, #0x13]
- bx lr
-
- thumb_func_start MOD05_021E8140
-MOD05_021E8140: ; 0x021E8140
- bx lr
- .balign 4, 0
-
- thumb_func_start MOD05_021E8144
-MOD05_021E8144: ; 0x021E8144
- ldrb r0, [r0, #0x12]
- bx lr
-
- thumb_func_start MOD05_021E8148
-MOD05_021E8148: ; 0x021E8148
- ldrb r0, [r0, #0x13]
- lsl r0, r0, #0x19
- lsr r0, r0, #0x19
- bne _021E8154
- mov r0, #1
- bx lr
-_021E8154:
- mov r0, #0
- bx lr
-
- thumb_func_start MOD05_021E8158
-MOD05_021E8158: ; 0x021E8158
- push {r4, lr}
- ldr r4, [r0, #0x60]
- ldrb r1, [r4, #0x13]
- lsl r1, r1, #0x19
- lsr r1, r1, #0x19
- cmp r1, #4
- bhi _021E81BA
- add r1, r1, r1
- add r1, pc
- ldrh r1, [r1, #6]
- lsl r1, r1, #0x10
- asr r1, r1, #0x10
- add pc, r1
-_021E8172: ; jump table
- .short _021E81BA - _021E8172 - 2 ; case 0
- .short _021E817C - _021E8172 - 2 ; case 1
- .short _021E818A - _021E8172 - 2 ; case 2
- .short _021E819C - _021E8172 - 2 ; case 3
- .short _021E81AE - _021E8172 - 2 ; case 4
-_021E817C:
- bl MOD05_021E81D0
- ldrb r1, [r4, #0x13]
- mov r0, #0x7f
- bic r1, r0
- strb r1, [r4, #0x13]
- pop {r4, pc}
-_021E818A:
- bl MOD05_021E82A0
- cmp r0, #1
- bne _021E81BA
- ldrb r1, [r4, #0x13]
- mov r0, #0x7f
- bic r1, r0
- strb r1, [r4, #0x13]
- pop {r4, pc}
-_021E819C:
- bl MOD05_021E8260
- cmp r0, #1
- bne _021E81BA
- ldrb r1, [r4, #0x13]
- mov r0, #0x7f
- bic r1, r0
- strb r1, [r4, #0x13]
- pop {r4, pc}
-_021E81AE:
- bl MOD05_021E820C
- ldrb r1, [r4, #0x13]
- mov r0, #0x7f
- bic r1, r0
- strb r1, [r4, #0x13]
-_021E81BA:
- pop {r4, pc}
-
- thumb_func_start MOD05_021E81BC
-MOD05_021E81BC: ; 0x021E81BC
- push {r4, lr}
- add r4, r0, #0
- ldr r0, [r4, #0x60]
- bl MOD05_021E8130
- add r0, r4, #0
- bl MOD05_021E8158
- pop {r4, pc}
- .balign 4, 0
-
- thumb_func_start MOD05_021E81D0
-MOD05_021E81D0: ; 0x021E81D0
- push {r4, lr}
- mov r1, #3
- add r4, r0, #0
- add r3, r1, #0
- ldr r0, [r4, #8]
- add r2, r1, #0
- sub r3, #0x33
- bl FUN_020179E0
- ldr r1, [r4, #0x60]
- ldrb r0, [r1, #0x13]
- lsl r0, r0, #0x18
- lsr r0, r0, #0x1f
- bne _021E8200
- ldrb r2, [r1, #0x12]
- ldr r0, [r4, #8]
- mov r3, #3
- bl FUN_020546E0
- ldr r2, [r4, #0x60]
- mov r0, #0x80
- ldrb r1, [r2, #0x13]
- orr r0, r1
- strb r0, [r2, #0x13]
-_021E8200:
- ldr r0, [r4, #0x60]
- ldrb r1, [r0, #0x12]
- ldrh r2, [r0, #0x10]
- bl FUN_02054744
- pop {r4, pc}
-
- thumb_func_start MOD05_021E820C
-MOD05_021E820C: ; 0x021E820C
- push {r4, lr}
- sub sp, #0x10
- add r4, r0, #0
- ldr r0, [r4, #0x60]
- ldrb r1, [r0, #0x13]
- lsl r1, r1, #0x18
- lsr r1, r1, #0x1f
- beq _021E825A
- bl FUN_02019178
- mov r0, #0x12
- str r0, [sp]
- mov r0, #0x20
- str r0, [sp, #4]
- mov r0, #6
- str r0, [sp, #8]
- mov r0, #0x10
- str r0, [sp, #0xc]
- mov r2, #0
- ldr r0, [r4, #8]
- mov r1, #3
- add r3, r2, #0
- bl FUN_02018540
- ldr r0, [r4, #8]
- mov r1, #3
- bl FUN_02017CD0
- mov r1, #3
- ldr r0, [r4, #8]
- add r2, r1, #0
- mov r3, #0
- bl FUN_020179E0
- ldr r2, [r4, #0x60]
- mov r0, #0x80
- ldrb r1, [r2, #0x13]
- bic r1, r0
- strb r1, [r2, #0x13]
-_021E825A:
- add sp, #0x10
- pop {r4, pc}
- .balign 4, 0
-
- thumb_func_start MOD05_021E8260
-MOD05_021E8260: ; 0x021E8260
- push {r4, lr}
- add r4, r0, #0
- ldr r0, [r4, #8]
- mov r1, #3
- bl FUN_02017B54
- cmp r0, #0
- bne _021E8274
- mov r0, #1
- pop {r4, pc}
-_021E8274:
- mov r1, #0x2f
- mvn r1, r1
- cmp r0, r1
- ble _021E8280
- cmp r0, #0
- blt _021E828E
-_021E8280:
- mov r1, #3
- add r3, r1, #0
- ldr r0, [r4, #8]
- add r2, r1, #0
- sub r3, #0x33
- bl FUN_020179E0
-_021E828E:
- ldr r0, [r4, #8]
- mov r1, #3
- mov r2, #4
- mov r3, #0x10
- bl FUN_020179E0
- mov r0, #0
- pop {r4, pc}
- .balign 4, 0
-
- thumb_func_start MOD05_021E82A0
-MOD05_021E82A0: ; 0x021E82A0
- push {r4, lr}
- sub sp, #0x10
- add r4, r0, #0
- ldr r0, [r4, #8]
- mov r1, #3
- bl FUN_02017B54
- mov r1, #0x2f
- mvn r1, r1
- cmp r0, r1
- bne _021E82EC
- mov r0, #0x12
- str r0, [sp]
- mov r0, #0x20
- str r0, [sp, #4]
- mov r0, #6
- str r0, [sp, #8]
- mov r0, #0x10
- str r0, [sp, #0xc]
- mov r2, #0
- ldr r0, [r4, #8]
- mov r1, #3
- add r3, r2, #0
- bl FUN_02018540
- ldr r0, [r4, #8]
- mov r1, #3
- bl FUN_02017CD0
- mov r1, #3
- ldr r0, [r4, #8]
- add r2, r1, #0
- mov r3, #0
- bl FUN_020179E0
- add sp, #0x10
- mov r0, #1
- pop {r4, pc}
-_021E82EC:
- ble _021E82F2
- cmp r0, #0
- blt _021E82FE
-_021E82F2:
- mov r1, #3
- ldr r0, [r4, #8]
- add r2, r1, #0
- mov r3, #0
- bl FUN_020179E0
-_021E82FE:
- ldr r0, [r4, #8]
- mov r1, #3
- mov r2, #5
- mov r3, #0x10
- bl FUN_020179E0
- mov r0, #0
- add sp, #0x10
- pop {r4, pc}
-
- thumb_func_start MOD05_021E8310
-MOD05_021E8310: ; 0x021E8310
- push {r3, r4, r5, r6, r7, lr}
- ldr r4, [r1, #0xc]
- add r5, r0, #0
- add r0, r4, #0
- bl FUN_02034E30
- bl FUN_02034DC0
- add r6, r0, #0
- add r0, r4, #0
- bl Sav2_Pokedex_get
- add r7, r0, #0
- ldr r0, [r6]
- bl FUN_02034824
- str r0, [r5, #4]
- add r0, r7, #0
- bl Pokedex_GetSinnohDexFlag
- cmp r0, #0
- beq _021E8344
- add r0, r7, #0
- bl Pokedex_CountSeenMons
- b _021E8346
-_021E8344:
- mov r0, #0
-_021E8346:
- str r0, [r5]
- add r0, r4, #0
- bl Sav2_PlayerData_GetProfileAddr
- str r0, [r5, #8]
- add r0, r4, #0
- bl Sav2_PlayerData_GetIGTAddr
- str r0, [r5, #0xc]
- pop {r3, r4, r5, r6, r7, pc}
- .balign 4, 0
-
- thumb_func_start MOD05_021E835C
-MOD05_021E835C: ; 0x021E835C
- push {r3, r4, r5, lr}
- sub sp, #8
- add r4, r1, #0
- ldr r2, [r4, #4]
- mov r1, #0
- add r5, r0, #0
- bl BufferLandmarkName
- ldr r2, [r4, #8]
- add r0, r5, #0
- mov r1, #1
- bl BufferPlayersName
- ldr r0, [r4, #8]
- bl PlayerProfile_CountBadges
- add r2, r0, #0
- mov r0, #0
- str r0, [sp]
- mov r3, #1
- str r3, [sp, #4]
- add r0, r5, #0
- mov r1, #2
- bl BufferIntegerAsString
- ldr r2, [r4]
- cmp r2, #0x64
- blt _021E839A
- mov r3, #3
- mov r0, #0
- b _021E83A8
-_021E839A:
- cmp r2, #0xa
- blt _021E83A4
- mov r3, #3
- mov r0, #1
- b _021E83A8
-_021E83A4:
- mov r3, #2
- mov r0, #1
-_021E83A8:
- str r0, [sp]
- mov r0, #1
- str r0, [sp, #4]
- add r0, r5, #0
- mov r1, #3
- bl BufferIntegerAsString
- ldr r0, [r4, #0xc]
- bl GetIGTHours
- add r2, r0, #0
- cmp r2, #0x64
- blt _021E83C8
- mov r3, #3
- mov r0, #0
- b _021E83D6
-_021E83C8:
- cmp r2, #0xa
- blt _021E83D2
- mov r3, #3
- mov r0, #1
- b _021E83D6
-_021E83D2:
- mov r3, #2
- mov r0, #1
-_021E83D6:
- str r0, [sp]
- mov r0, #1
- str r0, [sp, #4]
- add r0, r5, #0
- mov r1, #4
- bl BufferIntegerAsString
- ldr r0, [r4, #0xc]
- bl GetIGTMinutes
- mov r3, #2
- add r2, r0, #0
- str r3, [sp]
- mov r0, #1
- str r0, [sp, #4]
- add r0, r5, #0
- mov r1, #5
- bl BufferIntegerAsString
- add sp, #8
- pop {r3, r4, r5, pc}
-
- thumb_func_start MOD05_021E8400
-MOD05_021E8400: ; 0x021E8400
- ldr r0, [r0]
- cmp r0, #0
- beq _021E840A
- mov r0, #0xa
- bx lr
-_021E840A:
- mov r0, #8
- bx lr
- .balign 4, 0
-
- thumb_func_start MOD05_021E8410
-MOD05_021E8410: ; 0x021E8410
- push {r3, r4, r5, r6, r7, lr}
- sub sp, #0x18
- add r5, r0, #0
- mov r0, #0
- mov r1, #1
- bl FUN_02002E4C
- add r4, r0, #0
- mov r0, #0
- mov r1, #3
- bl FUN_02002E4C
- add r0, r4, r0
- str r0, [sp, #0x14]
- mov r4, #0
- ldr r0, [r5, #0x14]
- ldr r1, [r5, #0x18]
- ldr r3, [r5, #4]
- add r2, r4, #0
- bl ReadMsgData_ExpandPlaceholders
- add r1, r4, #0
- add r6, r0, #0
- str r1, [sp]
- mov r0, #0xff
- str r0, [sp, #4]
- str r1, [sp, #8]
- ldr r0, [r5, #0x10]
- add r2, r6, #0
- add r3, r1, #0
- bl AddTextPrinterParameterized
- add r0, r6, #0
- bl String_dtor
- mov r0, #1
- str r0, [sp, #0x10]
- ldr r0, _021E84EC ; =UNK05_021F78D4
- ldr r7, _021E84F0 ; =UNK05_021F78C4
- str r0, [sp, #0xc]
-_021E8460:
- ldr r0, [sp, #0xc]
- ldr r1, [r0]
- cmp r1, #3
- bne _021E846E
- ldr r0, [r5, #0x1c]
- cmp r0, #0
- beq _021E84D6
-_021E846E:
- ldr r0, [sp, #0x14]
- add r4, r4, r0
- ldr r0, [r5, #0x18]
- bl NewString_ReadMsgData
- add r6, r0, #0
- mov r1, #0
- str r4, [sp]
- mov r0, #0xff
- str r0, [sp, #4]
- mov r0, #0
- str r0, [sp, #8]
- ldr r0, [r5, #0x10]
- add r2, r6, #0
- add r3, r1, #0
- bl AddTextPrinterParameterized
- add r0, r6, #0
- bl String_dtor
- sub r2, r7, #4
- ldr r0, [r5, #0x14]
- ldr r1, [r5, #0x18]
- ldr r2, [r2]
- ldr r3, [r5, #4]
- bl ReadMsgData_ExpandPlaceholders
- add r6, r0, #0
- mov r0, #0
- mov r1, #2
- bl FUN_02002E4C
- add r2, r0, #0
- mov r0, #0
- add r1, r6, #0
- bl FUN_02002E14
- mov r1, #0x68
- sub r3, r1, r0
- str r4, [sp]
- mov r0, #0xff
- str r0, [sp, #4]
- mov r0, #0
- str r0, [sp, #8]
- ldr r0, [r5, #0x10]
- mov r1, #0
- add r2, r6, #0
- bl AddTextPrinterParameterized
- add r0, r6, #0
- bl String_dtor
-_021E84D6:
- ldr r0, [sp, #0xc]
- add r7, r7, #4
- add r0, r0, #4
- str r0, [sp, #0xc]
- ldr r0, [sp, #0x10]
- add r0, r0, #1
- str r0, [sp, #0x10]
- cmp r0, #5
- blo _021E8460
- add sp, #0x18
- pop {r3, r4, r5, r6, r7, pc}
- .balign 4, 0
-_021E84EC: .word UNK05_021F78D4
-_021E84F0: .word UNK05_021F78C4
-
- thumb_func_start MOD05_021E84F4
-MOD05_021E84F4: ; 0x021E84F4
- push {r3, r4, lr}
- sub sp, #0x14
- add r4, r0, #0
- ldr r0, [r4, #4]
- mov r1, #0x10
- bl AllocFromHeap
- str r0, [r4, #0x10]
- mov r3, #1
- str r3, [sp]
- ldr r0, [r4, #0x2c]
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- str r0, [sp, #4]
- ldr r0, [r4, #0x30]
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- str r0, [sp, #8]
- mov r0, #0xd
- str r0, [sp, #0xc]
- ldr r0, _021E8564 ; =0x0000027F
- str r0, [sp, #0x10]
- ldrb r2, [r4, #8]
- ldr r0, [r4, #0xc]
- ldr r1, [r4, #0x10]
- bl FUN_02019064
- mov r0, #0
- str r0, [sp]
- ldr r0, [r4, #4]
- ldr r2, _021E8568 ; =0x000003D9
- str r0, [sp, #4]
- ldrb r1, [r4, #8]
- ldr r0, [r4, #0xc]
- mov r3, #0xb
- bl FUN_0200CB00
- mov r0, #0
- mov r1, #6
- bl FUN_02002E4C
- add r1, r0, #0
- ldr r0, [r4, #0x10]
- bl FUN_02019620
- add r0, r4, #0
- bl MOD05_021E8410
- ldr r0, [r4, #0x10]
- ldr r2, _021E8568 ; =0x000003D9
- mov r1, #0
- mov r3, #0xb
- bl FUN_0200CCA4
- add sp, #0x14
- pop {r3, r4, pc}
- .balign 4, 0
-_021E8564: .word 0x0000027F
-_021E8568: .word 0x000003D9
-
- thumb_func_start MOD05_021E856C
-MOD05_021E856C: ; 0x021E856C
- push {r4, lr}
- add r4, r0, #0
- ldr r0, [r4, #0x10]
- mov r1, #0
- bl FUN_0200CCF8
- ldr r0, [r4, #0x10]
- bl FUN_02019178
- ldr r0, [r4, #0x10]
- bl FreeToHeap
- pop {r4, pc}
- .balign 4, 0
-
- thumb_func_start MOD05_021E8588
-MOD05_021E8588: ; 0x021E8588
- push {r3, r4, r5, r6, r7, lr}
- add r5, r1, #0
- add r6, r0, #0
- add r0, r5, #0
- mov r1, #0x34
- add r7, r2, #0
- bl AllocFromHeap
- add r4, r0, #0
- str r6, [r4]
- str r5, [r4, #4]
- strb r7, [r4, #8]
- ldr r0, [r6, #8]
- str r0, [r4, #0xc]
- add r0, r5, #0
- bl ScrStrBufs_new
- str r0, [r4, #0x14]
- ldr r2, _021E85E0 ; =0x000001E3
- mov r0, #1
- mov r1, #0x1a
- add r3, r5, #0
- bl NewMsgDataFromNarc
- str r0, [r4, #0x18]
- add r0, r4, #0
- ldr r1, [r4]
- add r0, #0x1c
- bl MOD05_021E8310
- add r1, r4, #0
- ldr r0, [r4, #0x14]
- add r1, #0x1c
- bl MOD05_021E835C
- mov r0, #0xd
- str r0, [r4, #0x2c]
- add r0, r4, #0
- add r0, #0x1c
- bl MOD05_021E8400
- str r0, [r4, #0x30]
- add r0, r4, #0
- pop {r3, r4, r5, r6, r7, pc}
- .balign 4, 0
-_021E85E0: .word 0x000001E3
-
- thumb_func_start MOD05_021E85E4
-MOD05_021E85E4: ; 0x021E85E4
- push {r4, lr}
- add r4, r0, #0
- ldr r0, [r4, #0x18]
- bl DestroyMsgData
- ldr r0, [r4, #0x14]
- bl ScrStrBufs_delete
- add r0, r4, #0
- bl FreeToHeap
- pop {r4, pc}
-
- thumb_func_start MOD05_021E85FC
-MOD05_021E85FC: ; 0x021E85FC
- push {r4, lr}
- add r4, r0, #0
- bl FUN_02034E48
- add r0, r4, #0
- mov r1, #4
- mov r2, #0
- bl MOD05_021EFA9C
- ldr r0, [r4, #0x38]
- bl FUN_02055320
- ldr r1, [r4, #0x1c]
- str r0, [r1, #8]
- ldr r0, [r4, #0x38]
- bl FUN_0205532C
- ldr r1, [r4, #0x1c]
- str r0, [r1, #0xc]
- mov r1, #0
- ldr r0, [r4, #0x1c]
- mvn r1, r1
- str r1, [r0, #4]
- ldr r0, [r4, #0x38]
- bl FUN_020552F8
- ldr r1, [r4, #0x1c]
- str r0, [r1, #0x10]
- ldr r0, [r4, #0xc]
- bl FUN_02022720
- cmp r0, #2
- bne _021E8642
- mov r0, #1
- pop {r4, pc}
-_021E8642:
- mov r0, #0
- pop {r4, pc}
- .balign 4, 0
-
thumb_func_start MOD05_021E8648
MOD05_021E8648: ; 0x021E8648
push {r4, r5, r6, lr}
@@ -17395,7 +14837,7 @@ _021EFC20:
str r1, [r0]
ldr r0, [r4, #0x34]
bl Sav2_PlayerData_GetOptionsAddr
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
@@ -17546,7 +14988,7 @@ MOD05_021EFD40: ; 0x021EFD40
ldr r0, [r0, #8]
ldr r2, _021EFD78 ; =0x000003D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #0x44]
mov r0, #3
str r0, [r4, #0x48]
@@ -17637,7 +15079,7 @@ MOD05_021EFDF0: ; 0x021EFDF0
ldr r0, [r0, #8]
ldr r2, _021EFE28 ; =0x000003D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #0x44]
mov r0, #5
str r0, [r4, #0x48]
@@ -17703,7 +15145,7 @@ MOD05_021EFE70: ; 0x021EFE70
ldr r0, [r0, #8]
ldr r2, _021EFEA8 ; =0x000003D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #0x44]
mov r0, #7
str r0, [r4, #0x48]
@@ -17950,7 +15392,7 @@ MOD05_021F0080: ; 0x021F0080
ldr r0, [r0, #8]
ldr r2, _021F00B8 ; =0x000003D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #0x44]
mov r0, #0xb
str r0, [r4, #0x48]
@@ -31096,45 +28538,6 @@ _021F6428: .word MOD05_021F57F0
.section .rodata
- .global UNK05_021F7824
-UNK05_021F7824: ; 0x021F7824
- .word 0x00000001, 0x0000000C, 0x00000044, MOD05_021E79A8
- .word MOD05_021E7A6C, MOD05_021E7A08, MOD05_021E7A88
-
- .global UNK05_021F7840
-UNK05_021F7840: ; 0x021F7840
- .word 0x00000044, MOD05_021E7B08, MOD05_021E7A6C, MOD05_021E7B78
- .word MOD05_021E7A88
-
- .global UNK05_021F7854
-UNK05_021F7854: ; 0x021F7854
- .word 0x00000000, 0x00000001, 0x00000000, 0x00000000
- .word 0x00000000, 0x00000002
-
- .global UNK05_021F786C
-UNK05_021F786C: ; 0x021F786C
- .word 0x00001000, 0x00001000, 0x00001000
-
- .global UNK05_021F7878
-UNK05_021F7878: ; 0x021F7878
- .byte 0x00, 0x10, 0x00, 0x00 ;word
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00
-
- .global UNK05_021F789C
-UNK05_021F789C: ; 0x021F789C
- .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ;word
- .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x10, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00
-
- .global UNK05_021F78C4
-UNK05_021F78C4: ; 0x021F78C4
- .byte 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
- .global UNK05_021F78D4
-UNK05_021F78D4: ; 0x021F78D4
- .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00
-
.global UNK05_021F78E4
UNK05_021F78E4: ; 0x021F78E4
.byte 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
diff --git a/arm9/modules/05/include/mod05_021E72FC.h b/arm9/modules/05/include/mod05_021E72FC.h
new file mode 100644
index 00000000..6c61c913
--- /dev/null
+++ b/arm9/modules/05/include/mod05_021E72FC.h
@@ -0,0 +1,23 @@
+#ifndef POKEDIAMOND_MOD05_021E72FC_H
+#define POKEDIAMOND_MOD05_021E72FC_H
+
+#include "nitro/types.h"
+
+typedef struct UnkStruct021E7358
+{
+ u32 Unk00;
+ u32 Unk04;
+ u32 Unk08;
+ u32 Unk0C;
+ u32 Unk10;
+
+} UnkStruct021E7358;
+
+BOOL MOD05_021E72FC(u32 param0, u32 param1);
+void MOD05_021E7358(u32 param0, u32 param1, u32 param2);
+u32 MOD05_021E7388(u32 param0);
+BOOL MOD05_021E73B4(UnkStruct021E7358 *param0);
+UnkStruct021E7358 *MOD05_021E74D4(u32 param0);
+void MOD05_021E74F8(UnkStruct021E7358 *param0);
+
+#endif //POKEDIAMOND_MOD05_021E72FC_H
diff --git a/arm9/modules/05/src/mod05_021E72FC.c b/arm9/modules/05/src/mod05_021E72FC.c
new file mode 100644
index 00000000..8a31d032
--- /dev/null
+++ b/arm9/modules/05/src/mod05_021E72FC.c
@@ -0,0 +1,160 @@
+#include "global.h"
+#include "mod05_021E72FC.h"
+#include "heap.h"
+
+extern void FUN_020054C8(u32 param0);
+extern void FUN_020463CC(u32 param0, void *func, UnkStruct021E7358 *param2);
+extern u32 FUN_020553A0(u32 param0);
+extern u32 FUN_02058720(u32 param0);
+extern BOOL FUN_02054B30(u8 param0);
+extern BOOL FUN_02054B3C(u8 param0);
+extern BOOL FUN_02054B48(u8 param0);
+extern BOOL FUN_02054B54(u8 param0);
+extern UnkStruct021E7358 *FUN_0204652C(UnkStruct021E7358 *param0);
+extern void FUN_02058410(u32 param0, u32 param1);
+extern BOOL FUN_02057254(u32 param0);
+extern u32 FUN_0205AFDC(u32 param0, u32 param1);
+extern void FUN_02057260(u32 param0, u32 param1);
+extern void FUN_02055304(u32 param0, u32 param1);
+extern BOOL FUN_02056B74(u32 param0, u32 param1, u32 param2);
+extern void FUN_02058418(u32 param0, u32 param1);
+extern void FUN_020054F0(u32 param0, u32 param1);
+extern void FUN_02016A8C(u32 param0, void *param1);
+
+THUMB_FUNC BOOL MOD05_021E72FC(u32 param0, u32 param1)
+{
+ u8 res = (u8)FUN_02058720(FUN_020553A0(param1));
+ u32 r2;
+ if (FUN_02054B30(res) == TRUE)
+ {
+ r2 = 3;
+ goto label;
+ }
+ else if (FUN_02054B3C(res) == TRUE)
+ {
+ r2 = 2;
+ goto label;
+ }
+ else if (FUN_02054B48(res) == TRUE)
+ {
+ r2 = 0;
+ goto label;
+ }
+ else if (FUN_02054B54(res) == TRUE)
+ {
+ r2 = 1;
+ goto label;
+ }
+ return FALSE;
+label:
+ MOD05_021E7358(param0, param1, r2);
+ return TRUE;
+}
+
+THUMB_FUNC void MOD05_021E7358(u32 param0, u32 param1, u32 param2)
+{
+ UnkStruct021E7358 *res = MOD05_021E74D4(24);
+ res->Unk0C = param0;
+ res->Unk10 = param1;
+ res->Unk00 = param2;
+ FUN_020054C8(1624);
+ FUN_020463CC(param0, MOD05_021E73B4, res);
+}
+
+THUMB_FUNC u32 MOD05_021E7388(u32 param0)
+{
+ switch (param0)
+ {
+ case 0:
+ return 2;
+ case 2:
+ return 1;
+ case 1:
+ return 3;
+ case 3:
+ return 0;
+ }
+ return 0;
+}
+
+THUMB_FUNC BOOL MOD05_021E73B4(UnkStruct021E7358 *param0)
+{
+ UnkStruct021E7358 *strct = FUN_0204652C(param0);
+ u32 res = FUN_020553A0(strct->Unk10);
+ u8 res2 = (u8)FUN_02058720(res);
+ switch (strct->Unk08)
+ {
+ case 0:
+ FUN_02058410(res, 1 << 8);
+ strct->Unk08++;
+ break;
+ case 1:
+ if (!FUN_02057254(strct->Unk10))
+ {
+ break;
+ }
+ FUN_02057260(strct->Unk10, FUN_0205AFDC(strct->Unk00, 12));
+ FUN_02055304(strct->Unk10, strct->Unk00);
+ strct->Unk08++;
+ strct->Unk04 = 7;
+ break;
+ case 2:
+ if (strct->Unk04 == 2 || strct->Unk04 == 4 || strct->Unk04 == 6)
+ {
+ strct->Unk00 = MOD05_021E7388(strct->Unk00);
+ FUN_02055304(strct->Unk10, strct->Unk00);
+ }
+ if (--(strct->Unk04))
+ {
+ break;
+ }
+ if (FUN_02054B30(res2) == TRUE)
+ {
+ strct->Unk00 = 3;
+ }
+ else if (FUN_02054B3C(res2) == TRUE)
+ {
+ strct->Unk00 = 2;
+ }
+ else if (FUN_02054B48(res2) == TRUE)
+ {
+ strct->Unk00 = 0;
+ }
+ else if (FUN_02054B54(res2) == TRUE)
+ {
+ strct->Unk00 = 1;
+ }
+ else
+ {
+ strct->Unk00 = MOD05_021E7388(strct->Unk00);
+ }
+ if (FUN_02056B74(strct->Unk10, res, strct->Unk00) == FALSE)
+ {
+ strct->Unk08 = 1;
+ break;
+ }
+ FUN_02058418(res, 0x80);
+ FUN_02058418(res, 1 << 8);
+ FUN_02055304(strct->Unk10, strct->Unk00);
+ MOD05_021E74F8(strct);
+ FUN_020054F0(1624, 0);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+THUMB_FUNC UnkStruct021E7358 *MOD05_021E74D4(u32 param0)
+{
+ UnkStruct021E7358 *res = (UnkStruct021E7358 *)AllocFromHeapAtEnd(4, param0);
+ if (res == NULL)
+ {
+ ErrorHandling();
+ }
+ memset((void *)res, 0, param0);
+ return res;
+}
+
+THUMB_FUNC void MOD05_021E74F8(UnkStruct021E7358 *param0)
+{
+ FUN_02016A8C(4, param0);
+}
diff --git a/arm9/modules/06/asm/module_06.s b/arm9/modules/06/asm/module_06.s
index 1337a593..d39eedbd 100644
--- a/arm9/modules/06/asm/module_06.s
+++ b/arm9/modules/06/asm/module_06.s
@@ -8929,7 +8929,7 @@ _0223DA3E:
mov r0, #0x85
lsl r0, r0, #2
ldr r0, [r4, r0]
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
@@ -10293,7 +10293,7 @@ _0223E5FE:
ldr r0, [r4]
ldr r1, _0223E618 ; =0x0224F348
mov r2, #0x1f
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
add r4, #0x80
str r0, [r4]
mov r0, #8
@@ -12384,7 +12384,7 @@ MOD06_0223F720: ; 0x0223F720
ldr r0, [r0, #0x68]
mov r3, #0xb
ldr r0, [r0, #8]
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #0x60]
ldr r0, _0223F76C ; =MOD06_0223F770
bl MOD06_0223F8BC
@@ -13438,7 +13438,7 @@ MOD06_0223FFD4: ; 0x0223FFD4
ldr r0, [r0, #0x68]
mov r3, #0xb
ldr r0, [r0, #8]
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #0x60]
ldr r0, _0224002C ; =MOD06_02240030
bl MOD06_0223F8BC
@@ -13698,7 +13698,7 @@ MOD06_02240204: ; 0x02240204
ldr r0, [r0, #0x68]
mov r3, #0xb
ldr r0, [r0, #8]
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #0x60]
ldr r0, _02240254 ; =MOD06_02240258
bl MOD06_0223F8BC
@@ -13821,7 +13821,7 @@ MOD06_02240310: ; 0x02240310
ldr r0, [r0, #0x68]
mov r3, #0xb
ldr r0, [r0, #8]
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #0x60]
ldr r0, _02240360 ; =MOD06_0223FD08
bl MOD06_0223F8BC
@@ -19372,7 +19372,7 @@ _02242FA6:
ldr r0, [r0, #8]
ldr r2, _02242FE8 ; =0x000003D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #0x64]
add r0, r4, #0
mov r1, #0x24
@@ -41696,12 +41696,12 @@ MOD06_0224DBA8: ; 0x0224DBA8
ldr r0, [r5, #8]
bl Sav2_PlayerData_GetOptionsAddr
add r4, r0, #0
- bl FUN_02025084
+ bl Options_GetFrame
mov r1, #0x53
lsl r1, r1, #2
str r0, [r5, r1]
add r0, r4, #0
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
mov r1, #0x15
lsl r1, r1, #4
str r0, [r5, r1]
@@ -42800,7 +42800,7 @@ MOD06_0224E470: ; 0x0224E470
mov r2, #0x1f
mov r3, #0xb
str r4, [sp]
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r5, #4]
str r4, [r5, #8]
mov r0, #1
diff --git a/arm9/modules/11/asm/module_11_thumb2.s b/arm9/modules/11/asm/module_11_thumb2.s
index 15f4c237..f04e67da 100644
--- a/arm9/modules/11/asm/module_11_thumb2.s
+++ b/arm9/modules/11/asm/module_11_thumb2.s
@@ -120,7 +120,7 @@ _0222F30E:
mov r0, #0x13
lsl r0, r0, #4
ldr r0, [r4, r0]
- bl FUN_02025084
+ bl Options_GetFrame
add r4, r0, #0
lsl r0, r4, #0x18
lsr r0, r0, #0x18
@@ -3600,7 +3600,7 @@ _02230E2E:
mov r1, #0x6d
lsl r1, r1, #2
ldr r0, [r0, r1]
- bl FUN_0202502C
+ bl Options_GetBattleScene
cmp r0, #0
bne _02230E40
mov r0, #1
@@ -3613,11 +3613,11 @@ _02230E40:
MOD11_02230E44: ; 0x02230E44
mov r1, #0x6d
lsl r1, r1, #2
- ldr r3, _02230E50 ; =FUN_02025084
+ ldr r3, _02230E50 ; =Options_GetFrame
ldr r0, [r0, r1]
bx r3
nop
-_02230E50: .word FUN_02025084
+_02230E50: .word Options_GetFrame
thumb_func_start MOD11_02230E54
MOD11_02230E54: ; 0x02230E54
@@ -3632,7 +3632,7 @@ _02230E62:
mov r1, #0x6d
lsl r1, r1, #2
ldr r0, [r0, r1]
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
pop {r3, pc}
.align 2, 0
@@ -3640,11 +3640,11 @@ _02230E62:
MOD11_02230E70: ; 0x02230E70
mov r1, #0x6d
lsl r1, r1, #2
- ldr r3, _02230E7C ; =FUN_02025048
+ ldr r3, _02230E7C ; =Options_GetBattleStyle
ldr r0, [r0, r1]
bx r3
nop
-_02230E7C: .word FUN_02025048
+_02230E7C: .word Options_GetBattleStyle
thumb_func_start MOD11_02230E80
MOD11_02230E80: ; 0x02230E80
diff --git a/arm9/modules/12/asm/module_12.s b/arm9/modules/12/asm/module_12.s
index 215acf37..c24f23a7 100644
--- a/arm9/modules/12/asm/module_12.s
+++ b/arm9/modules/12/asm/module_12.s
@@ -4224,7 +4224,7 @@ MOD12_0222F834: ; 0x0222F834
ldr r1, [r5]
ldr r0, _0222F930 ; =0x00001988
ldr r0, [r1, r0]
- bl FUN_02025084
+ bl Options_GetFrame
add r4, r0, #0
lsl r0, r4, #0x18
lsr r0, r0, #0x18
@@ -6224,7 +6224,7 @@ MOD12_022308F0: ; 0x022308F0
ldr r1, [r5]
ldr r0, _022309C4 ; =0x00001988
ldr r0, [r1, r0]
- bl FUN_02025084
+ bl Options_GetFrame
add r4, r0, #0
lsl r0, r4, #0x18
lsr r0, r0, #0x18
@@ -15253,7 +15253,7 @@ _02234F2A:
bne _02234F40
ldr r0, _02234FAC ; =0x00001988
ldr r0, [r1, r0]
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
add r4, r0, #0
b _02234F42
_02234F40:
@@ -25497,7 +25497,7 @@ MOD12_02239AD0: ; 0x02239AD0
bne _02239AF2
ldr r0, _02239B44 ; =0x00001988
ldr r0, [r1, r0]
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
add r4, r0, #0
b _02239AF4
_02239AF2:
@@ -34742,7 +34742,7 @@ MOD12_0223E1EC: ; 0x0223E1EC
bne _0223E20E
ldr r0, _0223E26C ; =0x00001988
ldr r0, [r1, r0]
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
add r4, r0, #0
b _0223E210
_0223E20E:
@@ -43529,7 +43529,7 @@ MOD12_022425F4: ; 0x022425F4
bne _02242616
ldr r0, _02242674 ; =0x00001988
ldr r0, [r1, r0]
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
add r4, r0, #0
b _02242618
_02242616:
@@ -43673,7 +43673,7 @@ MOD12_022426BC: ; 0x022426BC
ldr r1, [r5]
ldr r0, _02242784 ; =0x00001988
ldr r0, [r1, r0]
- bl FUN_02025084
+ bl Options_GetFrame
add r4, r0, #0
lsl r0, r4, #0x18
lsr r0, r0, #0x18
@@ -43843,7 +43843,7 @@ MOD12_02242804: ; 0x02242804
ldr r1, [r6]
ldr r0, _022429D0 ; =0x00001988
ldr r0, [r1, r0]
- bl FUN_02025084
+ bl Options_GetFrame
add r4, r0, #0
lsl r0, r4, #0x18
lsr r0, r0, #0x18
diff --git a/arm9/modules/14/asm/module_14.s b/arm9/modules/14/asm/module_14.s
index ae226da3..0bded4bf 100644
--- a/arm9/modules/14/asm/module_14.s
+++ b/arm9/modules/14/asm/module_14.s
@@ -9849,11 +9849,11 @@ MOD14_021DC3AC: ; 0x021DC3AC
MOD14_021DC3B4: ; 0x021DC3B4
mov r1, #0x69
lsl r1, r1, #2
- ldr r3, _021DC3C0 ; =FUN_02025084
+ ldr r3, _021DC3C0 ; =Options_GetFrame
ldr r0, [r0, r1]
bx r3
nop
-_021DC3C0: .word FUN_02025084
+_021DC3C0: .word Options_GetFrame
thumb_func_start MOD14_021DC3C4
MOD14_021DC3C4: ; 0x021DC3C4
diff --git a/arm9/modules/17/asm/module_17.s b/arm9/modules/17/asm/module_17.s
index be4096d7..1f3abbf2 100644
--- a/arm9/modules/17/asm/module_17.s
+++ b/arm9/modules/17/asm/module_17.s
@@ -4666,7 +4666,7 @@ MOD17_021D9918: ; 0x021D9918
ldr r0, [r5, r0]
add r7, r2, #0
add r4, r3, #0
- bl FUN_02025084
+ bl Options_GetFrame
add r6, r0, #0
mov r0, #0
mov r1, #0xe0
@@ -4847,7 +4847,7 @@ _021D9A7E:
bne _021D9ACE
add r0, r0, #4
ldr r0, [r5, r0]
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
b _021D9AD0
_021D9ACE:
mov r0, #1
@@ -11480,12 +11480,12 @@ _021DCA42:
ldr r1, [r4, #0xc]
bl MOD17_021DCC38
ldr r0, [r4, #0xc]
- bl FUN_02025084
+ bl Options_GetFrame
mov r1, #0x4f
lsl r1, r1, #2
str r0, [r5, r1]
ldr r0, [r4, #0xc]
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
mov r1, #5
lsl r1, r1, #6
str r0, [r5, r1]
@@ -11760,7 +11760,7 @@ MOD17_021DCC38: ; 0x021DCC38
sub sp, #8
add r4, r0, #0
add r0, r1, #0
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
diff --git a/arm9/modules/18/asm/module_18.s b/arm9/modules/18/asm/module_18.s
index b611c883..6581e679 100644
--- a/arm9/modules/18/asm/module_18.s
+++ b/arm9/modules/18/asm/module_18.s
@@ -1223,7 +1223,7 @@ MOD18_02239F98: ; 0x02239F98
ldr r0, [r0]
mov r3, #0xb
ldr r0, [r0, #8]
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
ldr r2, _0223A044 ; =0x02251380
ldr r1, _0223A050 ; =0x000007E4
ldr r3, [r2]
@@ -7963,7 +7963,7 @@ MOD18_0223D414: ; 0x0223D414
add r6, r0, #0
ldr r0, [r5, #0xc]
bl Sav2_PlayerData_GetOptionsAddr
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
add r4, r0, #0
ldr r0, _0223D580 ; =0x02251388
mov r2, #0x15
@@ -25227,7 +25227,7 @@ _02245898:
ldr r1, _022459E0 ; =0x022504F8
ldr r2, _022459E4 ; =0x000003D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #4]
mov r0, #2
str r0, [r4, #0xc]
@@ -25262,7 +25262,7 @@ _022458D4:
ldr r1, _022459E0 ; =0x022504F8
ldr r2, _022459E4 ; =0x000003D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #4]
mov r0, #4
str r0, [r4, #0xc]
@@ -25302,7 +25302,7 @@ _0224592A:
ldr r1, _022459E0 ; =0x022504F8
ldr r2, _022459E4 ; =0x000003D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #4]
mov r0, #6
str r0, [r4, #0xc]
@@ -25669,7 +25669,7 @@ _02245C14:
ldr r1, _02245E08 ; =0x022504F8
ldr r2, _02245E0C ; =0x000003D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #4]
mov r0, #2
str r0, [r4, #0xc]
@@ -25715,7 +25715,7 @@ _02245C7C:
ldr r1, _02245E08 ; =0x022504F8
ldr r2, _02245E0C ; =0x000003D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #4]
mov r0, #5
str r0, [r4, #0xc]
@@ -27379,7 +27379,7 @@ _022469E0:
ldr r1, _02246AD8 ; =0x022504F8
ldr r2, _02246ADC ; =0x000003D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #8]
mov r0, #6
str r0, [r4, #0xc]
@@ -30583,7 +30583,7 @@ _0224830C:
ldr r0, [r0, #8]
ldr r2, _022484D4 ; =0x000003D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #0x24]
add r0, r4, #0
mov r1, #0x14
@@ -31535,7 +31535,7 @@ _02248AAE:
ldr r0, [r0, #8]
ldr r2, _02248D94 ; =0x000003D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #0x20]
b _02248DB6
_02248AD8:
@@ -31664,7 +31664,7 @@ _02248BC2:
ldr r0, [r0, #8]
ldr r2, _02248D94 ; =0x000003D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #0x20]
b _02248DB6
_02248BEC:
@@ -35073,7 +35073,7 @@ MOD18_0224A710: ; 0x0224A710
ldr r0, [r0, #8]
ldr r2, _0224A744 ; =0x000003D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #0x5c]
ldr r0, _0224A748 ; =0x00000246
mov r1, #0xc
@@ -35224,7 +35224,7 @@ MOD18_0224A844: ; 0x0224A844
ldr r0, [r0, #8]
ldr r2, _0224A878 ; =0x000003D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #0x5c]
ldr r0, _0224A87C ; =0x00000246
mov r1, #1
@@ -37895,7 +37895,7 @@ _0224BE0A:
ldr r0, [r0, #8]
ldr r2, _0224BE80 ; =0x000003D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #8]
mov r0, #1
str r0, [r4]
@@ -40208,7 +40208,7 @@ _0224D0DA:
ldr r0, [r0, #8]
ldr r2, _0224D1EC ; =0x000003D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r4, #0x5c]
ldr r0, _0224D1D8 ; =0x00000246
mov r1, #0xe
diff --git a/arm9/modules/21/asm/module_21.s b/arm9/modules/21/asm/module_21.s
deleted file mode 100644
index ad12a682..00000000
--- a/arm9/modules/21/asm/module_21.s
+++ /dev/null
@@ -1,733 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
- .section .text
- .balign 4, 0
-
- thumb_func_start MOD21_02254854
-MOD21_02254854: ; 0x02254854
- push {r3, r4, r5, r6, r7, lr}
- add r5, r0, #0
- add r6, r1, #0
- mov r0, #8
- mov r1, #0x2c
- add r7, r2, #0
- str r3, [sp]
- bl AllocFromHeap
- add r4, r0, #0
- beq _02254892
- ldr r3, [sp]
- add r1, r6, #0
- add r2, r7, #0
- bl MOD21_0225489C
- cmp r0, #0
- beq _0225488C
- ldr r0, _02254898 ; =MOD21_02254930
- add r1, r4, #0
- mov r2, #1
- bl FUN_0200CA44
- cmp r0, #0
- beq _0225488C
- str r4, [r5]
- mov r0, #1
- pop {r3, r4, r5, r6, r7, pc}
-_0225488C:
- add r0, r4, #0
- bl FreeToHeap
-_02254892:
- mov r0, #0
- pop {r3, r4, r5, r6, r7, pc}
- nop
-_02254898: .word MOD21_02254930
- thumb_func_end MOD21_02254854
-
- thumb_func_start MOD21_0225489C
-MOD21_0225489C: ; 0x0225489C
- push {r3, r4, r5, lr}
- add r5, r0, #0
- add r4, r1, #0
- add r1, r5, #0
- add r0, #0x24
- add r1, #0x14
- bl MOD21_02254A6C
- cmp r0, #0
- beq _0225490A
- mov r1, #0
- strb r1, [r5]
- strb r1, [r5, #1]
- strb r1, [r5, #2]
- mov r0, #1
- strb r0, [r5, #3]
- strb r1, [r5, #6]
- add r0, r5, #0
- str r1, [r5, #0x20]
- add r0, #0x14
- bl GF_RTC_CopyTime
- ldr r0, [r5, #0x14]
- cmp r0, #0x18
- blo _022548D6
- mov r1, #0x18
- bl _u32_div_f
- str r1, [r5, #0x14]
-_022548D6:
- ldr r0, [r5, #0x18]
- cmp r0, #0x3c
- blo _022548E6
- ldr r0, [r5, #0x14]
- mov r1, #0x3c
- bl _u32_div_f
- str r1, [r5, #0x14]
-_022548E6:
- ldr r0, [r5, #0x18]
- ldr r2, _02254910 ; =MOD21_02254974
- strb r0, [r5, #5]
- mov r0, #8
- str r0, [sp]
- ldr r0, _02254914 ; =MOD21_02254D80
- mov r1, #1
- add r3, r5, #0
- bl MOD20_02254130
- str r0, [r5, #0x10]
- cmp r0, #0
- bne _02254904
- mov r0, #0
- pop {r3, r4, r5, pc}
-_02254904:
- str r4, [r5, #0x28]
- mov r0, #1
- pop {r3, r4, r5, pc}
-_0225490A:
- mov r0, #0
- pop {r3, r4, r5, pc}
- nop
-_02254910: .word MOD21_02254974
-_02254914: .word MOD21_02254D80
- thumb_func_end MOD21_0225489C
-
- thumb_func_start MOD21_02254918
-MOD21_02254918: ; 0x02254918
- push {r4, lr}
- add r4, r0, #0
- ldr r0, [r4, #0x24]
- bl MOD21_02254B04
- ldr r0, [r4, #0x10]
- bl MOD20_02254198
- add r0, r4, #0
- bl FreeToHeap
- pop {r4, pc}
- thumb_func_end MOD21_02254918
-
- thumb_func_start MOD21_02254930
-MOD21_02254930: ; 0x02254930
- push {r3, r4, r5, lr}
- add r4, r1, #0
- add r5, r0, #0
- ldrb r0, [r4]
- cmp r0, #3
- bhs _02254966
- ldr r0, [r4, #0x28]
- ldr r1, [r4, #0x10]
- bl MOD20_02252C14
- ldrb r1, [r4]
- add r0, r4, #0
- lsl r2, r1, #2
- ldr r1, _02254968 ; =MOD21_02254D84
- ldr r1, [r1, r2]
- blx r1
- cmp r0, #0
- beq _02254966
- add r0, r4, #0
- bl MOD21_02254918
- add r0, r5, #0
- bl FUN_0200CAB4
- ldr r0, [r4, #0x28]
- bl MOD20_022529A0
-_02254966:
- pop {r3, r4, r5, pc}
- .align 2, 0
-_02254968: .word MOD21_02254D84
- thumb_func_end MOD21_02254930
-
- thumb_func_start MOD21_0225496C
-MOD21_0225496C: ; 0x0225496C
- mov r1, #1
- strb r1, [r0, #2]
- bx lr
- .align 2, 0
- thumb_func_end MOD21_0225496C
-
- thumb_func_start MOD21_02254974
-MOD21_02254974: ; 0x02254974
- cmp r2, #0
- beq _02254984
- cmp r2, #1
- bne _0225498C
- mov r0, #1
- str r0, [r3, #0x20]
- strb r0, [r3, #6]
- bx lr
-_02254984:
- mov r0, #0
- str r0, [r3, #0x20]
- mov r0, #1
- strb r0, [r3, #6]
-_0225498C:
- bx lr
- .align 2, 0
- thumb_func_end MOD21_02254974
-
- thumb_func_start MOD21_02254990
-MOD21_02254990: ; 0x02254990
- ldrb r2, [r0, #2]
- cmp r2, #0
- bne _02254998
- b _0225499A
-_02254998:
- mov r1, #2
-_0225499A:
- strb r1, [r0]
- mov r1, #0
- strb r1, [r0, #1]
- bx lr
- .align 2, 0
- thumb_func_end MOD21_02254990
-
- thumb_func_start MOD21_022549A4
-MOD21_022549A4: ; 0x022549A4
- push {r4, lr}
- add r4, r0, #0
- ldrb r0, [r4, #1]
- cmp r0, #0
- beq _022549B4
- cmp r0, #1
- beq _022549C4
- b _022549DE
-_022549B4:
- ldr r0, [r4, #0x24]
- mov r1, #0
- bl MOD21_02254B10
- ldrb r0, [r4, #1]
- add r0, r0, #1
- strb r0, [r4, #1]
- b _022549DE
-_022549C4:
- ldr r0, [r4, #0x24]
- mov r1, #0
- bl MOD21_02254B34
- cmp r0, #0
- beq _022549DE
- ldr r0, [r4, #0x28]
- bl MOD20_0225298C
- add r0, r4, #0
- mov r1, #1
- bl MOD21_02254990
-_022549DE:
- mov r0, #0
- pop {r4, pc}
- .align 2, 0
- thumb_func_end MOD21_022549A4
-
- thumb_func_start MOD21_022549E4
-MOD21_022549E4: ; 0x022549E4
- push {r4, lr}
- add r4, r0, #0
- ldrb r1, [r4, #2]
- cmp r1, #0
- beq _022549F8
- mov r1, #2
- bl MOD21_02254990
- mov r0, #0
- pop {r4, pc}
-_022549F8:
- ldrb r0, [r4, #6]
- cmp r0, #0
- beq _02254A0A
- mov r0, #0
- strb r0, [r4, #6]
- ldr r0, [r4, #0x24]
- mov r1, #2
- bl MOD21_02254B10
-_02254A0A:
- ldr r0, [r4, #0x24]
- mov r1, #1
- bl MOD21_02254B34
- cmp r0, #0
- beq _02254A32
- ldr r0, [r4, #0x18]
- strb r0, [r4, #5]
- add r0, r4, #0
- add r0, #0x14
- bl GF_RTC_CopyTime
- ldrb r1, [r4, #5]
- ldr r0, [r4, #0x18]
- cmp r1, r0
- beq _02254A32
- ldr r0, [r4, #0x24]
- mov r1, #1
- bl MOD21_02254B10
-_02254A32:
- mov r0, #0
- pop {r4, pc}
- .align 2, 0
- thumb_func_end MOD21_022549E4
-
- thumb_func_start MOD21_02254A38
-MOD21_02254A38: ; 0x02254A38
- push {r4, lr}
- add r4, r0, #0
- ldrb r0, [r4, #1]
- cmp r0, #0
- beq _02254A48
- cmp r0, #1
- beq _02254A58
- b _02254A66
-_02254A48:
- ldr r0, [r4, #0x24]
- mov r1, #3
- bl MOD21_02254B10
- ldrb r0, [r4, #1]
- add r0, r0, #1
- strb r0, [r4, #1]
- b _02254A66
-_02254A58:
- ldr r0, [r4, #0x24]
- bl MOD21_02254B40
- cmp r0, #0
- beq _02254A66
- mov r0, #1
- pop {r4, pc}
-_02254A66:
- mov r0, #0
- pop {r4, pc}
- .align 2, 0
- thumb_func_end MOD21_02254A38
-
- thumb_func_start MOD21_02254A6C
-MOD21_02254A6C: ; 0x02254A6C
- push {r4, r5, r6, lr}
- sub sp, #8
- add r6, r1, #0
- mov r1, #3
- add r5, r0, #0
- mov r0, #8
- lsl r1, r1, #8
- bl AllocFromHeap
- add r4, r0, #0
- beq _02254ACC
- add r0, #8
- mov r1, #8
- bl MOD20_022536F4
- str r6, [r4]
- bl MOD20_02252D34
- str r0, [r4, #4]
- mov r0, #8
- str r0, [sp]
- mov r0, #0xc
- mov r1, #0x19
- mov r2, #1
- add r3, sp, #4
- bl FUN_02006BDC
- add r6, r0, #0
- bne _02254AB2
- add r0, r4, #0
- bl FreeToHeap
- add sp, #8
- mov r0, #0
- pop {r4, r5, r6, pc}
-_02254AB2:
- ldr r0, [sp, #4]
- add r1, r4, #0
- add r0, #0xc
- add r1, #0x30
- bl MOD21_02254AD4
- add r0, r6, #0
- bl FreeToHeap
- add sp, #8
- str r4, [r5]
- mov r0, #1
- pop {r4, r5, r6, pc}
-_02254ACC:
- mov r0, #0
- add sp, #8
- pop {r4, r5, r6, pc}
- .align 2, 0
- thumb_func_end MOD21_02254A6C
-
- thumb_func_start MOD21_02254AD4
-MOD21_02254AD4: ; 0x02254AD4
- push {r3, r4, r5, r6, r7, lr}
- mov r6, #9
- add r5, r0, #0
- add r4, r1, #0
- mov r7, #0
- lsl r6, r6, #6
-_02254AE0:
- add r0, r5, #0
- add r1, r4, #0
- mov r2, #0x40
- bl MIi_CpuCopy16
- add r1, r4, #0
- add r0, r5, r6
- add r1, #0x40
- mov r2, #0x10
- bl MIi_CpuCopy16
- add r7, r7, #1
- add r5, #0x40
- add r4, #0x50
- sub r6, #0x30
- cmp r7, #9
- blt _02254AE0
- pop {r3, r4, r5, r6, r7, pc}
- thumb_func_end MOD21_02254AD4
-
- thumb_func_start MOD21_02254B04
-MOD21_02254B04: ; 0x02254B04
- push {r3, lr}
- cmp r0, #0
- beq _02254B0E
- bl FreeToHeap
-_02254B0E:
- pop {r3, pc}
- thumb_func_end MOD21_02254B04
-
- thumb_func_start MOD21_02254B10
-MOD21_02254B10: ; 0x02254B10
- push {lr}
- sub sp, #0xc
- add r2, r0, #0
- add r0, #8
- str r0, [sp]
- mov r0, #2
- str r0, [sp, #4]
- mov r0, #8
- str r0, [sp, #8]
- ldr r0, _02254B30 ; =MOD21_02254DAC
- ldr r3, [r2]
- bl MOD20_022537E0
- add sp, #0xc
- pop {pc}
- nop
-_02254B30: .word MOD21_02254DAC
- thumb_func_end MOD21_02254B10
-
- thumb_func_start MOD21_02254B34
-MOD21_02254B34: ; 0x02254B34
- ldr r3, _02254B3C ; =MOD20_02253794
- add r0, #8
- bx r3
- nop
-_02254B3C: .word MOD20_02253794
- thumb_func_end MOD21_02254B34
-
- thumb_func_start MOD21_02254B40
-MOD21_02254B40: ; 0x02254B40
- ldr r3, _02254B48 ; =MOD20_022537B8
- add r0, #8
- bx r3
- nop
-_02254B48: .word MOD20_022537B8
- thumb_func_end MOD21_02254B40
-
- thumb_func_start MOD21_02254B4C
-MOD21_02254B4C: ; 0x02254B4C
- push {r4, lr}
- add r4, r0, #0
- bl MOD20_022538A0
- add r0, #8
- add r1, r4, #0
- bl MOD20_02253888
- pop {r4, pc}
- .align 2, 0
- thumb_func_end MOD21_02254B4C
-
- thumb_func_start MOD21_02254B60
-MOD21_02254B60: ; 0x02254B60
- push {r4, r5, lr}
- sub sp, #0x14
- add r4, r1, #0
- add r0, r4, #0
- bl MOD20_022538A0
- add r5, r0, #0
- ldr r0, [r5, #4]
- ldr r2, _02254BE8 ; =MOD21_02254D90
- mov r1, #6
- mov r3, #0
- bl FUN_02016C18
- mov r0, #0
- str r0, [sp]
- str r0, [sp, #4]
- mov r0, #1
- str r0, [sp, #8]
- mov r0, #8
- str r0, [sp, #0xc]
- ldr r2, [r5, #4]
- mov r0, #0xc
- mov r1, #0x17
- mov r3, #6
- bl FUN_0200687C
- mov r0, #0
- str r0, [sp]
- str r0, [sp, #4]
- mov r0, #1
- str r0, [sp, #8]
- mov r0, #8
- str r0, [sp, #0xc]
- ldr r2, [r5, #4]
- mov r0, #0xc
- mov r1, #0x18
- mov r3, #6
- bl FUN_020068C8
- mov r0, #0
- add r1, r0, #0
- bl MOD20_02252D7C
- add r0, r5, #0
- bl MOD21_02254C5C
- ldr r0, [r5, #4]
- mov r1, #6
- bl FUN_02017CD0
- ldr r1, _02254BEC ; =0x04001000
- ldr r0, _02254BF0 ; =0xFFFFE0FF
- ldr r3, [r1]
- ldr r2, [r1]
- str r3, [sp, #0x10]
- and r0, r2
- lsl r2, r3, #0x13
- lsr r3, r2, #0x1b
- mov r2, #4
- orr r2, r3
- lsl r2, r2, #8
- orr r0, r2
- str r0, [r1]
- add r0, r4, #0
- bl MOD21_02254B4C
- add sp, #0x14
- pop {r4, r5, pc}
- .align 2, 0
-_02254BE8: .word MOD21_02254D90
-_02254BEC: .word 0x04001000
-_02254BF0: .word 0xFFFFE0FF
- thumb_func_end MOD21_02254B60
-
- thumb_func_start MOD21_02254BF4
-MOD21_02254BF4: ; 0x02254BF4
- push {r3, r4, r5, lr}
- add r5, r1, #0
- add r0, r5, #0
- bl MOD20_022538A0
- add r4, r0, #0
- bl MOD21_02254C5C
- ldr r0, [r4, #4]
- mov r1, #6
- bl FUN_02017CD0
- add r0, r5, #0
- bl MOD21_02254B4C
- pop {r3, r4, r5, pc}
- thumb_func_end MOD21_02254BF4
-
- thumb_func_start MOD21_02254C14
-MOD21_02254C14: ; 0x02254C14
- push {r4, lr}
- add r4, r1, #0
- add r0, r4, #0
- bl MOD20_022538A0
- ldr r0, [r0]
- ldr r0, [r0, #0xc]
- cmp r0, #0
- beq _02254C30
- mov r0, #0
- add r1, r0, #0
- bl MOD11_02252DB4
- b _02254C38
-_02254C30:
- mov r0, #0
- add r1, r0, #0
- bl MOD20_02252D7C
-_02254C38:
- add r0, r4, #0
- bl MOD21_02254B4C
- pop {r4, pc}
- thumb_func_end MOD21_02254C14
-
- thumb_func_start MOD21_02254C40
-MOD21_02254C40: ; 0x02254C40
- push {r4, lr}
- add r4, r1, #0
- add r0, r4, #0
- bl MOD20_022538A0
- ldr r0, [r0, #4]
- mov r1, #6
- bl FUN_020178A0
- add r0, r4, #0
- bl MOD21_02254B4C
- pop {r4, pc}
- .align 2, 0
- thumb_func_end MOD21_02254C40
-
- thumb_func_start MOD21_02254C5C
-MOD21_02254C5C: ; 0x02254C5C
- push {r4, r5, lr}
- sub sp, #0x1c
- add r4, r0, #0
- ldr r0, [r4]
- ldr r2, _02254D74 ; =0x04000280
- ldr r0, [r0]
- mov r3, #0
- strh r3, [r2]
- str r0, [r2, #0x10]
- add r0, r2, #0
- mov r1, #0xa
- add r0, #0x18
- str r1, [r0]
- str r3, [r0, #4]
- lsr r0, r2, #0xb
-_02254C7A:
- ldrh r1, [r2]
- tst r1, r0
- bne _02254C7A
- ldr r0, _02254D78 ; =0x040002A0
- add r3, r0, #0
- ldr r1, [r0]
- sub r3, #0x20
- lsr r0, r0, #0xb
-_02254C8A:
- ldrh r2, [r3]
- tst r2, r0
- bne _02254C8A
- ldr r0, _02254D7C ; =0x040002A8
- add r2, r4, #0
- ldr r5, [r0]
- mov r0, #4
- str r0, [sp]
- mov r0, #9
- lsl r1, r1, #0x1a
- str r0, [sp, #4]
- add r2, #0x30
- str r2, [sp, #8]
- lsr r1, r1, #0x18
- str r1, [sp, #0xc]
- mov r1, #0
- str r1, [sp, #0x10]
- mov r1, #0x28
- str r1, [sp, #0x14]
- str r0, [sp, #0x18]
- ldr r0, [r4, #4]
- mov r1, #6
- mov r2, #3
- mov r3, #7
- bl FUN_02018170
- mov r0, #4
- str r0, [sp]
- mov r0, #9
- add r1, r4, #0
- str r0, [sp, #4]
- add r1, #0x30
- str r1, [sp, #8]
- lsl r1, r5, #0x1a
- lsr r1, r1, #0x18
- str r1, [sp, #0xc]
- mov r1, #0
- str r1, [sp, #0x10]
- mov r1, #0x28
- str r1, [sp, #0x14]
- str r0, [sp, #0x18]
- ldr r0, [r4, #4]
- mov r1, #6
- mov r2, #8
- mov r3, #7
- bl FUN_02018170
- ldr r0, [r4]
- ldr r2, _02254D74 ; =0x04000280
- ldr r0, [r0, #4]
- mov r3, #0
- strh r3, [r2]
- str r0, [r2, #0x10]
- add r0, r2, #0
- mov r1, #0xa
- add r0, #0x18
- str r1, [r0]
- str r3, [r0, #4]
- lsr r0, r2, #0xb
-_02254D00:
- ldrh r1, [r2]
- tst r1, r0
- bne _02254D00
- ldr r0, _02254D78 ; =0x040002A0
- add r3, r0, #0
- ldr r1, [r0]
- sub r3, #0x20
- lsr r0, r0, #0xb
-_02254D10:
- ldrh r2, [r3]
- tst r2, r0
- bne _02254D10
- ldr r0, _02254D7C ; =0x040002A8
- add r2, r4, #0
- ldr r5, [r0]
- mov r0, #4
- str r0, [sp]
- mov r0, #9
- lsl r1, r1, #0x1a
- str r0, [sp, #4]
- add r2, #0x30
- str r2, [sp, #8]
- lsr r1, r1, #0x18
- str r1, [sp, #0xc]
- mov r1, #0
- str r1, [sp, #0x10]
- mov r1, #0x28
- str r1, [sp, #0x14]
- str r0, [sp, #0x18]
- ldr r0, [r4, #4]
- mov r1, #6
- mov r2, #0xf
- mov r3, #7
- bl FUN_02018170
- mov r0, #4
- str r0, [sp]
- mov r0, #9
- add r1, r4, #0
- str r0, [sp, #4]
- add r1, #0x30
- str r1, [sp, #8]
- lsl r1, r5, #0x1a
- lsr r1, r1, #0x18
- str r1, [sp, #0xc]
- mov r1, #0
- str r1, [sp, #0x10]
- mov r1, #0x28
- str r1, [sp, #0x14]
- str r0, [sp, #0x18]
- ldr r0, [r4, #4]
- mov r1, #6
- mov r2, #0x14
- mov r3, #7
- bl FUN_02018170
- add sp, #0x1c
- pop {r4, r5, pc}
- nop
-_02254D74: .word 0x04000280
-_02254D78: .word 0x040002A0
-_02254D7C: .word 0x040002A8
- thumb_func_end MOD21_02254C5C
-
- .section .rodata
-
- .global MOD21_02254D80
-MOD21_02254D80: ; 0x02254D80
- .byte 0x10, 0xAF, 0x10, 0xCF
-
- .global MOD21_02254D84
-MOD21_02254D84: ; 0x02254D84
- .word MOD21_022549A4, MOD21_022549E4, MOD21_02254A38
-
- .global MOD21_02254D90
-MOD21_02254D90: ; 0x02254D90
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x01, 0x00, 0x0E, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
- .global MOD21_02254DAC
-MOD21_02254DAC: ; 0x02254DAC
- .word 0x00, MOD21_02254B60, 0x00
- .word 0x01, MOD21_02254BF4, 0x00
- .word 0x02, MOD21_02254C14, 0x00
- .word 0x03, MOD21_02254C40, 0x00
- .word 0x00, 0x00000000, 0x00
diff --git a/arm9/modules/21/include/mod21_02254854.h b/arm9/modules/21/include/mod21_02254854.h
new file mode 100644
index 00000000..cc243568
--- /dev/null
+++ b/arm9/modules/21/include/mod21_02254854.h
@@ -0,0 +1,36 @@
+#ifndef POKEDIAMOND_MOD21_02254854_H
+#define POKEDIAMOND_MOD21_02254854_H
+
+#include "nitro/types.h"
+#include "mod21_02254A6C.h"
+
+typedef struct Time
+{
+ u32 hour;
+ u32 minute;
+} Time;
+
+typedef struct UnkStruct02254854
+{
+ u8 bytearray[8];
+ u8 padding0[8];
+ BOOL Unk10;
+ Time time;
+ u8 padding1[4];
+ u32 Unk20;
+ void *Unk24;
+ u32 Unk28;
+} UnkStruct02254854;
+
+BOOL MOD21_02254854(UnkStruct02254854 **param0, u32 param1, u32 param2, u32 param3);
+BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2, u32 param3);
+void MOD21_02254918(UnkStruct02254854 *param0);
+void MOD21_02254930(u32 param0, UnkStruct02254854 *param1);
+void MOD21_0225496C(UnkStruct02254854 *param0);
+void MOD21_02254974(u32 param0, u32 param1, u32 param2, UnkStruct02254854 * param3);
+void MOD21_02254990(UnkStruct02254854 * param0, u8 param1);
+BOOL MOD21_022549A4(UnkStruct02254854 * param0);
+BOOL MOD21_022549E4(UnkStruct02254854 * param0);
+BOOL MOD21_02254A38(UnkStruct02254854 * param0);
+
+#endif //POKEDIAMOND_MOD21_02254854_H
diff --git a/arm9/modules/21/include/mod21_02254A6C.h b/arm9/modules/21/include/mod21_02254A6C.h
new file mode 100644
index 00000000..bae9cab6
--- /dev/null
+++ b/arm9/modules/21/include/mod21_02254A6C.h
@@ -0,0 +1,38 @@
+#ifndef POKEDIAMOND_MOD21_02254A6C_H
+#define POKEDIAMOND_MOD21_02254A6C_H
+
+#include "nitro/types.h"
+
+typedef struct UnkStruct02254A6C UnkStruct02254A6C;
+
+struct UnkStruct02254A6C
+{
+ UnkStruct02254A6C *Unk00;
+ u32 Unk04;
+ u32 Unk08[1];
+ u32 Unk0C;
+ u8 padding0[0x20];
+ u32 Unk30[1];
+};
+
+typedef struct UnkOverlayStruct1
+{
+ u32 number;
+ BOOL (*func)(u32 param0, void *param1);
+ u32 Unk08;
+} UnkOverlayStruct1; //todo should probably be in mod 20 header
+
+BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1);
+void MOD21_02254AD4(void *param0, void *param1);
+void MOD21_02254B04(void *param0);
+void MOD21_02254B10(u32 *param0, u32 param1);
+BOOL MOD21_02254B34(void *param0, u32 param1);
+BOOL MOD21_02254B40(void *param0);
+BOOL MOD21_02254B4C(void *param0);
+BOOL MOD21_02254B60(u32 param0, void *param1);
+BOOL MOD21_02254BF4(u32 param0, void *param1);
+BOOL MOD21_02254C14(u32 param0, void *param1);
+BOOL MOD21_02254C40(u32 param0, void *param1);
+void MOD21_02254C5C(UnkStruct02254A6C *param0);
+
+#endif //POKEDIAMOND_MOD21_02254A6C_H
diff --git a/arm9/modules/21/src/mod21_02254854.c b/arm9/modules/21/src/mod21_02254854.c
new file mode 100644
index 00000000..a9a7599d
--- /dev/null
+++ b/arm9/modules/21/src/mod21_02254854.c
@@ -0,0 +1,199 @@
+#include "global.h"
+#include "heap.h"
+#include "unk_0200CA44.h"
+#include "mod21_02254854.h"
+
+extern void GF_RTC_CopyTime(Time *param0);
+
+u8 const MOD21_02254D80[] = { 0x10, 0xAF, 0x10, 0xCF };
+extern BOOL MOD20_02254130(void *param0, BOOL param1, void *param2, UnkStruct02254854 *param3, u32 param4);
+extern void MOD20_02252C14(u32 param0, BOOL param1);
+
+extern void MOD20_02254198(BOOL param0);
+extern void MOD20_022529A0(u32 param0);
+
+extern void MOD20_0225298C(u32 param0);
+
+extern void Poketch_InitApp(void *func1, void *func2);
+
+THUMB_FUNC static void MOD21_02254840(void)
+{
+ Poketch_InitApp(MOD21_02254854, MOD21_0225496C);
+}
+
+#define NitroStaticInit MOD21_02254840
+#include "sinit.h"
+
+THUMB_FUNC BOOL MOD21_02254854(UnkStruct02254854 **param0, u32 param1, u32 param2, u32 param3)
+{
+ UnkStruct02254854 *alloced = (UnkStruct02254854 *)AllocFromHeap(8, sizeof(UnkStruct02254854));
+ if (alloced != NULL)
+ {
+ if (MOD21_0225489C(alloced, param1, param2, param3) && FUN_0200CA44((void (*)(u32, void *))MOD21_02254930, alloced, (void *)1))
+ {
+ *param0 = alloced;
+ return TRUE;
+ }
+ FreeToHeap(alloced);
+ }
+ return FALSE;
+}
+
+THUMB_FUNC BOOL MOD21_0225489C(UnkStruct02254854 *param0, u32 param1, u32 param2, u32 param3)
+{
+#pragma unused (param2, param3) //not sure, please check
+ if (MOD21_02254A6C((UnkStruct02254A6C *)&param0->Unk24, &param0->time)) //todo fix
+ {
+ param0->bytearray[0] = 0;
+ param0->bytearray[1] = 0;
+ param0->bytearray[2] = 0;
+ param0->bytearray[3] = 1;
+ param0->bytearray[6] = 0;
+ param0->Unk20 = 0;
+ GF_RTC_CopyTime(&param0->time);
+ if (param0->time.hour >= 0x18)
+ {
+ param0->time.hour = param0->time.hour % 0x18;
+ }
+ if (param0->time.minute >= 0x3c)
+ {
+ param0->time.hour = param0->time.hour % 0x3c;
+ }
+ param0->bytearray[5] = (u8)param0->time.minute;
+ param0->Unk10 = MOD20_02254130((void *)MOD21_02254D80, TRUE, MOD21_02254974, param0, 8);
+ if (param0->Unk10 == FALSE)
+ {
+ return FALSE;
+ }
+ param0->Unk28 = param1;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+BOOL (* const MOD21_02254D84[])(UnkStruct02254854 *) = { MOD21_022549A4, MOD21_022549E4, MOD21_02254A38 };
+
+THUMB_FUNC void MOD21_02254918(UnkStruct02254854 *param0)
+{
+ MOD21_02254B04(param0->Unk24);
+ MOD20_02254198(param0->Unk10);
+ FreeToHeap((void *)param0);
+}
+
+THUMB_FUNC void MOD21_02254930(u32 param0, UnkStruct02254854 *param1)
+{
+ if (param1->bytearray[0] >= 3)
+ {
+ return;
+ }
+ MOD20_02252C14(param1->Unk28, param1->Unk10);
+ if (!MOD21_02254D84[param1->bytearray[0]](param1))
+ {
+ return;
+ }
+ MOD21_02254918(param1);
+ FUN_0200CAB4((s32)param0);
+ MOD20_022529A0(param1->Unk28);
+}
+
+THUMB_FUNC void MOD21_0225496C(UnkStruct02254854 *param0)
+{
+ param0->bytearray[2] = 1;
+}
+
+THUMB_FUNC void MOD21_02254974(u32 param0, u32 param1, u32 param2, UnkStruct02254854 * param3)
+{
+#pragma unused (param0, param1)
+ switch (param2)
+ {
+ case 1:
+ param3->Unk20 = 1;
+ param3->bytearray[6] = 1;
+ return;
+ case 0:
+ param3->Unk20 = 0;
+ param3->bytearray[6] = 1;
+ return;
+ default:
+ return;
+ }
+}
+
+THUMB_FUNC void MOD21_02254990(UnkStruct02254854 * param0, u8 param1)
+{
+ if (param0->bytearray[2] == 0)
+ {
+ param0->bytearray[0] = param1;
+ }
+ else
+ {
+ param0->bytearray[0] = 2;
+ }
+ param0->bytearray[1] = 0;
+}
+
+THUMB_FUNC BOOL MOD21_022549A4(UnkStruct02254854 * param0)
+{
+ switch (param0->bytearray[1])
+ {
+ case 0:
+ MOD21_02254B10(param0->Unk24, 0);
+ param0->bytearray[1]++;
+ break;
+ case 1:
+ if (MOD21_02254B34(param0->Unk24, 0) == FALSE)
+ {
+ break;
+ }
+ MOD20_0225298C(param0->Unk28);
+ MOD21_02254990(param0, 1);
+ break;
+ default:
+ break;
+ }
+ return FALSE;
+}
+
+THUMB_FUNC BOOL MOD21_022549E4(UnkStruct02254854 * param0)
+{
+ if (param0->bytearray[2])
+ {
+ MOD21_02254990(param0, 2);
+ return FALSE;
+ }
+ if (param0->bytearray[6])
+ {
+ param0->bytearray[6] = 0;
+ MOD21_02254B10(param0->Unk24, 2);
+ }
+ if (MOD21_02254B34(param0->Unk24, 1))
+ {
+ param0->bytearray[5] = (u8)param0->time.minute;
+ GF_RTC_CopyTime(&param0->time);
+ if (param0->bytearray[5] != param0->time.minute)
+ {
+ MOD21_02254B10(param0->Unk24, 1);
+ }
+ }
+ return FALSE;
+}
+
+THUMB_FUNC BOOL MOD21_02254A38(UnkStruct02254854 * param0)
+{
+ switch (param0->bytearray[1])
+ {
+ case 0:
+ MOD21_02254B10(param0->Unk24, 3);
+ param0->bytearray[1]++;
+ break;
+ case 1:
+ if (MOD21_02254B40(param0->Unk24))
+ {
+ return TRUE;
+ }
+ break;
+ default:
+ break;
+ }
+ return FALSE;
+}
diff --git a/arm9/modules/21/src/mod21_02254A6C.c b/arm9/modules/21/src/mod21_02254A6C.c
new file mode 100644
index 00000000..1dcbe4b8
--- /dev/null
+++ b/arm9/modules/21/src/mod21_02254A6C.c
@@ -0,0 +1,187 @@
+#include "global.h"
+#include "heap.h"
+#include "mod21_02254A6C.h"
+#include "MI_memory.h"
+
+extern void MOD20_022536F4(u32 *param0, u32 param1);
+extern u32 MOD20_02252D34(void);
+extern void *FUN_02006BDC(u32 param0, u32 param1, u32 param2, void *param3, u32 param4);
+extern void MOD20_022537E0(void *param0, u32 param1, void *param2, u32 param3, void *param4, u32 param5, u32 param6);
+
+UnkOverlayStruct1 const MOD21_02254DAC[] = {
+ { 0, MOD21_02254B60, 0 },
+ { 1, MOD21_02254BF4, 0 },
+ { 2, MOD21_02254C14, 0 },
+ { 3, MOD21_02254C40, 0 },
+ { 0, NULL, 0 }
+};
+
+extern BOOL MOD20_02253794(void *param0, u32 param1);
+extern BOOL MOD20_022537B8(void *param0);
+extern UnkStruct02254A6C *MOD20_022538A0(void *param0);
+extern BOOL MOD20_02253888(void *param0, void *param1);
+
+//todo datatype
+u8 const MOD21_02254D90[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x0E, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+extern void FUN_02016C18(u32 param0, u32 param1, void *param2, u32 param3);
+extern void FUN_0200687C(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7);
+extern void FUN_020068C8(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7);
+extern void MOD20_02252D7C(u32 param0, u32 param1);
+extern void FUN_02017CD0(u32 param0, u32 param1);
+extern void FUN_020178A0(u32 param0, u32 param1);
+
+extern void FUN_02018170(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 *param6, u8 param7, u32 param8, u32 param9, u32 param10);
+
+extern void MOD11_02252DB4(u32 param0, u32 param1);
+
+THUMB_FUNC BOOL MOD21_02254A6C(UnkStruct02254A6C *param0, void *param1)
+{
+ UnkStruct02254A6C *strct = (UnkStruct02254A6C *)AllocFromHeap(8, 3 << 8);
+ u32 sp4;
+ if (strct != NULL)
+ {
+ MOD20_022536F4(strct->Unk08, 8);
+ strct->Unk00 = param1;
+ strct->Unk04 = MOD20_02252D34();
+ void *res = FUN_02006BDC(12, 0x19, 1, &sp4, 8);
+ if (res == 0)
+ {
+ FreeToHeap(strct);
+ return FALSE;
+ }
+ MOD21_02254AD4((void *)(sp4 + 0xc), strct->Unk30);
+ FreeToHeap(res);
+ param0->Unk00 = strct;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+THUMB_FUNC void MOD21_02254AD4(void *param0, void *param1)
+{
+ s32 i = 0;
+ for (u32 r6 = 9 << 6; i < 9; r6 -= 0x30)
+ {
+ MI_CpuCopy16(param0, param1, 0x40);
+ MI_CpuCopy16((void *)((u32)param0 + r6), (void *)((u32)param1 + 0x40), 0x10);
+ i++;
+ param0 = (void *)((u32)param0 + 0x40);
+ param1 = (void *)((u32)param1 + 0x50);
+ }
+}
+
+THUMB_FUNC void MOD21_02254B04(void *param0)
+{
+ if (param0 != NULL)
+ {
+ FreeToHeap(param0);
+ }
+}
+
+THUMB_FUNC void MOD21_02254B10(u32 *param0, u32 param1)
+{
+ MOD20_022537E0(MOD21_02254DAC, param1, param0, *param0, (void *)(param0 + 2), 2, 8);
+}
+
+THUMB_FUNC BOOL MOD21_02254B34(void *param0, u32 param1)
+{
+ return MOD20_02253794((void *)((u32)param0 + 8), param1);
+}
+
+THUMB_FUNC BOOL MOD21_02254B40(void *param0)
+{
+ return MOD20_022537B8((void *)((u32)param0 + 8));
+}
+
+THUMB_FUNC BOOL MOD21_02254B4C(void *param0)
+{
+ return MOD20_02253888((void *)((u32)MOD20_022538A0(param0) + 8), param0);
+}
+
+THUMB_FUNC BOOL MOD21_02254B60(u32 param0, void *param1)
+{
+#pragma unused (param0)
+ UnkStruct02254A6C *strct = MOD20_022538A0(param1);
+ FUN_02016C18(strct->Unk04, 6, MOD21_02254D90, 0);
+ FUN_0200687C(12, 23, strct->Unk04, 6, 0, 0, 1, 8);
+ FUN_020068C8(12, 24, strct->Unk04, 6, 0, 0, 1, 8);
+ MOD20_02252D7C(0, 0);
+ MOD21_02254C5C(strct);
+ FUN_02017CD0(strct->Unk04, 6);
+ u32 r3 = reg_GXS_DB_DISPCNT;
+ u32 r2 = reg_GXS_DB_DISPCNT;
+ vu32 tmp = r3; //unused? wtf
+ u32 r0 = ~0x1F00 & r2;
+ r2 = r3 << 19; //cast with shift? can't replicate both though
+ r3 = r2 >> 27;
+ r2 = 4 | r3;
+ r2 <<= 8;
+ r0 |= r2;
+ reg_GXS_DB_DISPCNT = r0;
+ return MOD21_02254B4C(param1);
+}
+
+THUMB_FUNC BOOL MOD21_02254BF4(u32 param0, void *param1)
+{
+#pragma unused (param0)
+ UnkStruct02254A6C *strct = MOD20_022538A0(param1);
+ MOD21_02254C5C(strct);
+ FUN_02017CD0(strct->Unk04, 6);
+ return MOD21_02254B4C(param1);
+}
+
+THUMB_FUNC BOOL MOD21_02254C14(u32 param0, void *param1)
+{
+#pragma unused (param0)
+ UnkStruct02254A6C *strct = MOD20_022538A0(param1);
+ if (strct->Unk00->Unk0C)
+ {
+ MOD11_02252DB4(0, 0);
+ }
+ else
+ {
+ MOD20_02252D7C(0, 0);
+ }
+ return MOD21_02254B4C(param1);
+}
+
+THUMB_FUNC BOOL MOD21_02254C40(u32 param0, void *param1)
+{
+#pragma unused (param0)
+ UnkStruct02254A6C *strct = MOD20_022538A0(param1);
+ FUN_020178A0(strct->Unk04, 6);
+ return MOD21_02254B4C(param1);
+}
+
+THUMB_FUNC void MOD21_02254C5C(UnkStruct02254A6C *param0)
+{
+ u32 tmp = (u32)param0->Unk00->Unk00;
+ reg_CP_DIVCNT = 0;
+ (*(vu32 *)REG_DIV_NUMER_ADDR) = tmp;
+ reg_CP_DIV_DENOM = 10;
+ while (reg_CP_DIVCNT & ((u32)&reg_CP_DIVCNT >> 0xb)) { }
+
+ u32 regaddr = (u32)&reg_CP_DIV_RESULT_L;
+ u32 divResult = *(u32 *)regaddr;
+ while (reg_CP_DIVCNT & (regaddr >> 0xb)) { }
+
+ u32 divRemRes = reg_CP_DIVREM_RESULT_L;
+ FUN_02018170(param0->Unk04, 6, 3, 7, 4, 9, param0->Unk30, (u8)(divResult << 2), 0, 40, 9);
+ FUN_02018170(param0->Unk04, 6, 8, 7, 4, 9, param0->Unk30, (u8)(divRemRes << 2), 0, 40, 9);
+
+ tmp = param0->Unk00->Unk04;
+ reg_CP_DIVCNT = 0;
+ (*(vu32 *)REG_DIV_NUMER_ADDR) = tmp;
+ reg_CP_DIV_DENOM = 10;
+
+ while (reg_CP_DIVCNT & ((u32)&reg_CP_DIVCNT >> 0xb)) { }
+
+ divResult = *(u32 *)regaddr;
+ while (reg_CP_DIVCNT & (regaddr >> 0xb)) { }
+
+ divRemRes = reg_CP_DIVREM_RESULT_L;
+ FUN_02018170(param0->Unk04, 6, 15, 7, 4, 9, param0->Unk30, (u8)(divResult << 2), 0, 40, 9);
+ FUN_02018170(param0->Unk04, 6, 20, 7, 4, 9, param0->Unk30, (u8)(divRemRes << 2), 0, 40, 9);
+}
diff --git a/arm9/modules/21/src/module_21_sinit.c b/arm9/modules/21/src/module_21_sinit.c
deleted file mode 100644
index 2af569ec..00000000
--- a/arm9/modules/21/src/module_21_sinit.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "global.h"
-
-extern void Poketch_InitApp(void *func1, void *func2);
-extern void MOD21_02254854();
-extern void MOD21_0225496C();
-
-THUMB_FUNC static void MOD21_02254840(void)
-{
- Poketch_InitApp(MOD21_02254854, MOD21_0225496C);
-}
-
-#define NitroStaticInit MOD21_02254840
-#include "sinit.h"
diff --git a/arm9/modules/52/asm/module_52.s b/arm9/modules/52/asm/module_52.s
index 3fac1c6f..22824930 100644
--- a/arm9/modules/52/asm/module_52.s
+++ b/arm9/modules/52/asm/module_52.s
@@ -116,7 +116,7 @@ MOD52_021D7594: ; 0x021D7594
bl MOD52_021D7688
add r0, r4, #0
mov r1, #0
- bl FUN_02024F9C
+ bl Options_SetButtonModeOnMain
add r0, r5, #0
bl Sav2_SysInfo_MacAddressIsMine
cmp r0, #0
diff --git a/arm9/modules/53/asm/module_53.s b/arm9/modules/53/asm/module_53.s
index d128782b..366c45bd 100644
--- a/arm9/modules/53/asm/module_53.s
+++ b/arm9/modules/53/asm/module_53.s
@@ -846,7 +846,7 @@ MOD53_021D7B60: ; 0x021D7B60
bl FUN_020068C8
ldr r0, [r5, #8]
ldr r0, [r0, #8]
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
diff --git a/arm9/modules/54/asm/module_54.s b/arm9/modules/54/asm/module_54.s
index 0acfed98..49c51d11 100644
--- a/arm9/modules/54/asm/module_54.s
+++ b/arm9/modules/54/asm/module_54.s
@@ -766,7 +766,7 @@ MOD54_021D7AA0: ; 0x021D7AA0
bl FUN_020068C8
ldr r0, [r5, #8]
ldr r0, [r0, #8]
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
@@ -1502,7 +1502,7 @@ MOD54_021D8120: ; 0x021D8120
ldr r1, _021D814C ; =0x021D9678
mov r2, #0x1f
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
mov r1, #0x32
lsl r1, r1, #4
str r0, [r5, r1]
@@ -1767,7 +1767,7 @@ MOD54_021D8340: ; 0x021D8340
ldr r1, _021D836C ; =0x021D9678
mov r2, #0x1f
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
mov r1, #0x32
lsl r1, r1, #4
str r0, [r5, r1]
@@ -2128,7 +2128,7 @@ MOD54_021D8600: ; 0x021D8600
ldr r1, _021D862C ; =0x021D9678
mov r2, #0x1f
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
mov r1, #0x32
lsl r1, r1, #4
str r0, [r5, r1]
diff --git a/arm9/modules/55/asm/module_55.s b/arm9/modules/55/asm/module_55.s
index eb124639..b6f57d67 100644
--- a/arm9/modules/55/asm/module_55.s
+++ b/arm9/modules/55/asm/module_55.s
@@ -808,7 +808,7 @@ MOD55_021D7AE0: ; 0x021D7AE0
bl FUN_020068C8
ldr r0, [r5, #8]
bl Sav2_PlayerData_GetOptionsAddr
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
@@ -2031,7 +2031,7 @@ MOD55_021D8544: ; 0x021D8544
ldr r1, _021D857C ; =0x021DA2AC
ldr r2, _021D8580 ; =0x000001D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
add r1, r5, #0
add r1, #0xe8
str r0, [r1]
@@ -5253,7 +5253,7 @@ MOD55_021D9FDC: ; 0x021D9FDC
ldr r1, _021DA014 ; =0x021DA2AC
ldr r2, _021DA018 ; =0x000001D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
add r1, r5, #0
add r1, #0xe8
str r0, [r1]
@@ -5349,7 +5349,7 @@ MOD55_021DA0A4: ; 0x021DA0A4
ldr r0, [r5, #8]
add r6, r1, #0
bl Sav2_PlayerData_GetOptionsAddr
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
add r4, r0, #0
mov r0, #0xce
lsl r0, r0, #2
diff --git a/arm9/modules/56/asm/module_56.s b/arm9/modules/56/asm/module_56.s
index fbe645b5..97d746da 100644
--- a/arm9/modules/56/asm/module_56.s
+++ b/arm9/modules/56/asm/module_56.s
@@ -1014,7 +1014,7 @@ MOD56_0221257C: ; 0x0221257C
add r5, #0xc4
ldr r0, [r5]
bl Sav2_PlayerData_GetOptionsAddr
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
@@ -1565,7 +1565,7 @@ _02212A9A:
ldr r1, _02212B34 ; =0x02216310
ldr r2, _02212B38 ; =0x000001D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
mov r1, #0x5f
lsl r1, r1, #2
str r0, [r5, r1]
@@ -1627,7 +1627,7 @@ MOD56_02212B3C: ; 0x02212B3C
ldr r1, _02212B7C ; =0x022162F8
ldr r2, _02212B80 ; =0x000001D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
mov r1, #0x5f
lsl r1, r1, #2
str r0, [r5, r1]
@@ -1727,7 +1727,7 @@ MOD56_02212BE8: ; 0x02212BE8
ldr r1, _02212C48 ; =0x02216310
ldr r2, _02212C4C ; =0x000001D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
mov r1, #0x5f
lsl r1, r1, #2
str r0, [r5, r1]
@@ -1786,7 +1786,7 @@ _02212C74:
ldr r1, _02212CC4 ; =0x02216310
ldr r2, _02212CC8 ; =0x000001D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
mov r1, #0x5f
lsl r1, r1, #2
str r0, [r5, r1]
@@ -2378,7 +2378,7 @@ MOD56_022130F4: ; 0x022130F4
ldr r1, _02213134 ; =0x02216308
ldr r2, _02213138 ; =0x000001D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
mov r1, #0x5f
lsl r1, r1, #2
str r0, [r5, r1]
@@ -4575,7 +4575,7 @@ MOD56_02214238: ; 0x02214238
ldr r1, _02214284 ; =0x02216308
ldr r2, _02214288 ; =0x000001D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
mov r1, #0x5f
lsl r1, r1, #2
str r0, [r5, r1]
@@ -4968,7 +4968,7 @@ MOD56_02214520: ; 0x02214520
ldr r1, _02214560 ; =0x02216308
ldr r2, _02214564 ; =0x000001D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
mov r1, #0x5f
lsl r1, r1, #2
str r0, [r5, r1]
@@ -6212,7 +6212,7 @@ MOD56_02214F0C: ; 0x02214F0C
ldr r1, _02214F4C ; =0x02216308
ldr r2, _02214F50 ; =0x000001D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
mov r1, #0x5f
lsl r1, r1, #2
str r0, [r5, r1]
@@ -6317,7 +6317,7 @@ MOD56_02214FD8: ; 0x02214FD8
ldr r1, _02215018 ; =0x02216308
ldr r2, _0221501C ; =0x000001D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
mov r1, #0x5f
lsl r1, r1, #2
str r0, [r5, r1]
@@ -7646,7 +7646,7 @@ MOD56_02215A8C: ; 0x02215A8C
ldr r1, _02215ACC ; =0x02216308
ldr r2, _02215AD0 ; =0x000001D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
mov r1, #0x5f
lsl r1, r1, #2
str r0, [r5, r1]
@@ -7831,7 +7831,7 @@ _02215BF0:
ldr r1, _02215C28 ; =0x02216308
ldr r2, _02215C2C ; =0x000001D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
mov r1, #0x5f
lsl r1, r1, #2
str r0, [r5, r1]
@@ -7985,7 +7985,7 @@ MOD56_02215D20: ; 0x02215D20
ldr r1, _02215D60 ; =0x02216308
ldr r2, _02215D64 ; =0x000001D9
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
mov r1, #0x5f
lsl r1, r1, #2
str r0, [r5, r1]
@@ -8164,7 +8164,7 @@ MOD56_02215EA4: ; 0x02215EA4
add r4, r1, #0
add r6, r2, #0
bl Sav2_PlayerData_GetOptionsAddr
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
add r7, r0, #0
mov r0, #0xdb
lsl r0, r0, #2
diff --git a/arm9/modules/58/asm/module_58.s b/arm9/modules/58/asm/module_58.s
index ddcbedd9..a22e6e08 100644
--- a/arm9/modules/58/asm/module_58.s
+++ b/arm9/modules/58/asm/module_58.s
@@ -662,7 +662,7 @@ MOD58_021D9F14: ; 0x021D9F14
mov r3, #5
bl FUN_020068C8
ldr r0, [r5, #0xc]
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
@@ -2226,7 +2226,7 @@ MOD58_021DAB94: ; 0x021DAB94
mov r3, #0xa
bl FUN_0200D0BC
ldr r0, [r5, #0xc]
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
mov r3, #0
str r3, [sp]
str r0, [sp, #4]
diff --git a/arm9/modules/59/asm/module_59.s b/arm9/modules/59/asm/mod59_021D74E0_asm.s
index 9182c632..77f574fd 100644
--- a/arm9/modules/59/asm/module_59.s
+++ b/arm9/modules/59/asm/mod59_021D74E0_asm.s
@@ -3,69 +3,6 @@
.section .text
.balign 4, 0
- thumb_func_start MOD59_021D74E0
-MOD59_021D74E0: ; 0x021D74E0
- push {r3, r4, r5, lr}
- mov r2, #1
- add r5, r0, #0
- mov r0, #3
- mov r1, #0x52
- lsl r2, r2, #0x12
- bl FUN_0201681C
- add r0, r5, #0
- mov r1, #0xb4
- mov r2, #0x52
- bl OverlayManager_CreateAndGetData
- mov r1, #0
- mov r2, #0xb4
- add r4, r0, #0
- bl memset
- mov r0, #0x52
- str r0, [r4]
- add r0, r5, #0
- bl OverlayManager_GetField18
- ldr r0, [r0, #8]
- str r0, [r4, #4]
- bl Sav2_PlayerData_GetOptionsAddr
- mov r1, #0
- str r0, [r4, #8]
- str r1, [r4, #0xc]
- str r1, [r4, #0x10]
- str r1, [r4, #0x14]
- ldr r0, [r4, #8]
- add r2, r1, #0
- str r0, [sp]
- mov r0, #0x52
- mov r3, #7
- bl FUN_02077A84
- str r0, [r4, #0x70]
- ldr r0, [r4, #8]
- mov r1, #3
- str r0, [sp]
- mov r0, #0x52
- mov r2, #0
- mov r3, #7
- bl FUN_02077A84
- str r0, [r4, #0x74]
- add r0, r4, #0
- mov r1, #0
- add r0, #0x88
- strb r1, [r0]
- add r0, r4, #0
- add r0, #0x89
- strb r1, [r0]
- add r0, r4, #0
- add r0, #0x8a
- strb r1, [r0]
- add r0, r4, #0
- add r0, #0x8b
- strb r1, [r0]
- add r4, #0x90
- str r1, [r4]
- mov r0, #1
- pop {r3, r4, r5, pc}
- thumb_func_end MOD59_021D74E0
-
thumb_func_start MOD59_021D7564
MOD59_021D7564: ; 0x021D7564
push {r3, r4, r5, r6, lr}
@@ -999,7 +936,7 @@ _021D7C5E:
add r0, r6, #0
bl String_dtor
ldr r0, [r5, #8]
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
add r3, r4, #0
str r3, [sp]
str r0, [sp, #4]
@@ -4411,633 +4348,8 @@ _021D985C:
_021D9864: .word MOD59_021D9DDC
thumb_func_end MOD59_021D8920
- thumb_func_start MOD59_021D9868
-MOD59_021D9868: ; 0x021D9868
- push {r4, lr}
- mov r2, #1
- add r4, r0, #0
- mov r0, #3
- mov r1, #0x53
- lsl r2, r2, #0x12
- bl FUN_0201681C
- add r0, r4, #0
- mov r1, #0x28
- mov r2, #0x53
- bl OverlayManager_CreateAndGetData
- mov r1, #0
- mov r2, #0x28
- add r4, r0, #0
- bl memset
- mov r0, #0x53
- str r0, [r4]
- mov r0, #0
- str r0, [r4, #0x24]
- mov r0, #1
- pop {r4, pc}
- thumb_func_end MOD59_021D9868
-
- thumb_func_start MOD59_021D9898
-MOD59_021D9898: ; 0x021D9898
- push {r3, r4, r5, r6, lr}
- sub sp, #0xc
- add r5, r1, #0
- bl OverlayManager_GetData
- ldr r1, [r5]
- add r4, r0, #0
- mov r6, #0
- cmp r1, #5
- bls _021D98AE
- b _021D99E2
-_021D98AE:
- add r1, r1, r1
- add r1, pc
- ldrh r1, [r1, #6]
- lsl r1, r1, #0x10
- asr r1, r1, #0x10
- add pc, r1
-_021D98BA: ; jump table
- .short _021D98C6 - _021D98BA - 2 ; case 0
- .short _021D992C - _021D98BA - 2 ; case 1
- .short _021D9952 - _021D98BA - 2 ; case 2
- .short _021D997C - _021D98BA - 2 ; case 3
- .short _021D998E - _021D98BA - 2 ; case 4
- .short _021D99C0 - _021D98BA - 2 ; case 5
-_021D98C6:
- add r0, r6, #0
- add r1, r6, #0
- bl FUN_0200E3A0
- mov r0, #1
- add r1, r6, #0
- bl FUN_0200E3A0
- add r0, r6, #0
- add r1, r0, #0
- bl Main_SetVBlankIntrCB
- add r0, r6, #0
- add r1, r0, #0
- bl FUN_02015F34
- bl FUN_0201E6D8
- bl FUN_0201E740
- mov r2, #1
- lsl r2, r2, #0x1a
- ldr r1, [r2]
- ldr r0, _021D99E8 ; =0xFFFFE0FF
- and r1, r0
- str r1, [r2]
- ldr r2, _021D99EC ; =0x04001000
- ldr r1, [r2]
- and r0, r1
- str r0, [r2]
- mov r0, #4
- mov r1, #8
- bl FUN_0201669C
- add r0, r4, #0
- bl MOD59_021D9A20
- add r0, r4, #0
- bl MOD59_021D9C48
- ldr r0, _021D99F0 ; =MOD59_021D9A14
- add r1, r4, #0
- bl Main_SetVBlankIntrCB
- bl FUN_0201E788
- mov r0, #0x3c
- str r0, [r4, #0x24]
- mov r0, #1
- str r0, [r5]
- b _021D99E2
-_021D992C:
- ldr r0, [r4, #0x24]
- cmp r0, #0
- beq _021D9938
- sub r0, r0, #1
- str r0, [r4, #0x24]
- b _021D99E2
-_021D9938:
- ldr r0, _021D99F4 ; =0x00000406
- bl FUN_0200414C
- ldr r1, _021D99F4 ; =0x00000406
- mov r0, #4
- mov r2, #1
- bl FUN_0200433C
- mov r0, #0x5a
- str r0, [r4, #0x24]
- mov r0, #2
- str r0, [r5]
- b _021D99E2
-_021D9952:
- ldr r0, [r4, #0x24]
- cmp r0, #0
- beq _021D995E
- sub r0, r0, #1
- str r0, [r4, #0x24]
- b _021D99E2
-_021D995E:
- str r6, [r4, #0x24]
- mov r0, #6
- mov r1, #1
- str r0, [sp]
- str r1, [sp, #4]
- ldr r0, [r4]
- add r2, r1, #0
- str r0, [sp, #8]
- add r0, r6, #0
- add r3, r6, #0
- bl FUN_0200E1D0
- mov r0, #3
- str r0, [r5]
- b _021D99E2
-_021D997C:
- bl MOD59_021D9D78
- bl FUN_0200E308
- cmp r0, #1
- bne _021D99E2
- mov r0, #4
- str r0, [r5]
- b _021D99E2
-_021D998E:
- bl MOD59_021D9D78
- add r0, r4, #0
- add r1, r6, #0
- mov r2, #0x28
- mov r3, #0x30
- bl MOD59_021D9C74
- cmp r0, #1
- bne _021D99E2
- mov r0, #6
- str r0, [sp]
- mov r0, #1
- str r0, [sp, #4]
- ldr r0, [r4]
- str r0, [sp, #8]
- add r0, r6, #0
- add r1, r0, #0
- add r2, r0, #0
- add r3, r0, #0
- bl FUN_0200E1D0
- mov r0, #5
- str r0, [r5]
- b _021D99E2
-_021D99C0:
- bl MOD59_021D9D78
- bl FUN_0200E308
- cmp r0, #1
- bne _021D99E2
- add r0, r4, #0
- bl MOD59_021D9C68
- add r0, r4, #0
- bl MOD59_021D9BD0
- add r0, r6, #0
- add r1, r0, #0
- bl Main_SetVBlankIntrCB
- mov r6, #1
-_021D99E2:
- add r0, r6, #0
- add sp, #0xc
- pop {r3, r4, r5, r6, pc}
- .align 2, 0
-_021D99E8: .word 0xFFFFE0FF
-_021D99EC: .word 0x04001000
-_021D99F0: .word MOD59_021D9A14
-_021D99F4: .word 0x00000406
- thumb_func_end MOD59_021D9898
-
- thumb_func_start MOD59_021D99F8
-MOD59_021D99F8: ; 0x021D99F8
- push {r3, r4, r5, lr}
- add r5, r0, #0
- bl OverlayManager_GetData
- ldr r4, [r0]
- add r0, r5, #0
- bl OverlayManager_FreeData
- add r0, r4, #0
- bl FUN_020168D0
- mov r0, #1
- pop {r3, r4, r5, pc}
- .align 2, 0
- thumb_func_end MOD59_021D99F8
-
- thumb_func_start MOD59_021D9A14
-MOD59_021D9A14: ; 0x021D9A14
- ldr r3, _021D9A1C ; =FUN_0201AB60
- ldr r0, [r0, #4]
- bx r3
- nop
-_021D9A1C: .word FUN_0201AB60
- thumb_func_end MOD59_021D9A14
-
- thumb_func_start MOD59_021D9A20
-MOD59_021D9A20: ; 0x021D9A20
- push {r3, r4, r5, lr}
- sub sp, #0xb8
- ldr r5, _021D9BB4 ; =0x021DA0D4
- add r4, r0, #0
- add r3, sp, #0x90
- mov r2, #5
-_021D9A2C:
- ldmia r5!, {r0, r1}
- stmia r3!, {r0, r1}
- sub r2, r2, #1
- bne _021D9A2C
- add r0, sp, #0x90
- bl FUN_0201E66C
- ldr r0, [r4]
- bl FUN_02016B94
- add r3, sp, #0x80
- ldr r5, _021D9BB8 ; =0x021DA054
- str r0, [r4, #4]
- add r2, r3, #0
- ldmia r5!, {r0, r1}
- stmia r3!, {r0, r1}
- ldmia r5!, {r0, r1}
- stmia r3!, {r0, r1}
- add r0, r2, #0
- bl FUN_02016BBC
- ldr r5, _021D9BBC ; =0x021DA080
- add r3, sp, #0x64
- ldmia r5!, {r0, r1}
- add r2, r3, #0
- stmia r3!, {r0, r1}
- ldmia r5!, {r0, r1}
- stmia r3!, {r0, r1}
- ldmia r5!, {r0, r1}
- stmia r3!, {r0, r1}
- ldr r0, [r5]
- mov r1, #2
- str r0, [r3]
- ldr r0, [r4, #4]
- mov r3, #0
- bl FUN_02016C18
- ldr r3, [r4]
- mov r0, #2
- mov r1, #0x20
- mov r2, #0
- bl FUN_02017F18
- ldr r0, [r4, #4]
- mov r1, #2
- bl FUN_02018744
- ldr r5, _021D9BC0 ; =0x021DA09C
- add r3, sp, #0x48
- ldmia r5!, {r0, r1}
- add r2, r3, #0
- stmia r3!, {r0, r1}
- ldmia r5!, {r0, r1}
- stmia r3!, {r0, r1}
- ldmia r5!, {r0, r1}
- stmia r3!, {r0, r1}
- ldr r0, [r5]
- mov r1, #0
- str r0, [r3]
- ldr r0, [r4, #4]
- add r3, r1, #0
- bl FUN_02016C18
- mov r3, #0
- str r3, [sp]
- str r3, [sp, #4]
- str r3, [sp, #8]
- ldr r0, [r4]
- mov r1, #1
- str r0, [sp, #0xc]
- ldr r2, [r4, #4]
- mov r0, #0x88
- bl FUN_0200687C
- mov r3, #0
- str r3, [sp]
- str r3, [sp, #4]
- str r3, [sp, #8]
- ldr r0, [r4]
- mov r1, #4
- str r0, [sp, #0xc]
- ldr r2, [r4, #4]
- mov r0, #0x88
- bl FUN_020068C8
- ldr r5, _021D9BC4 ; =0x021DA064
- add r3, sp, #0x2c
- ldmia r5!, {r0, r1}
- add r2, r3, #0
- stmia r3!, {r0, r1}
- ldmia r5!, {r0, r1}
- stmia r3!, {r0, r1}
- ldmia r5!, {r0, r1}
- stmia r3!, {r0, r1}
- ldr r0, [r5]
- mov r1, #1
- str r0, [r3]
- ldr r0, [r4, #4]
- mov r3, #0
- bl FUN_02016C18
- mov r0, #0
- str r0, [sp]
- str r0, [sp, #4]
- str r0, [sp, #8]
- ldr r0, [r4]
- mov r1, #2
- str r0, [sp, #0xc]
- ldr r2, [r4, #4]
- mov r0, #0x88
- mov r3, #1
- bl FUN_0200687C
- mov r0, #0
- str r0, [sp]
- str r0, [sp, #4]
- str r0, [sp, #8]
- ldr r0, [r4]
- mov r1, #5
- str r0, [sp, #0xc]
- ldr r2, [r4, #4]
- mov r0, #0x88
- mov r3, #1
- bl FUN_020068C8
- ldr r5, _021D9BC8 ; =0x021DA0B8
- add r3, sp, #0x10
- ldmia r5!, {r0, r1}
- add r2, r3, #0
- stmia r3!, {r0, r1}
- ldmia r5!, {r0, r1}
- stmia r3!, {r0, r1}
- ldmia r5!, {r0, r1}
- stmia r3!, {r0, r1}
- ldr r0, [r5]
- mov r1, #3
- str r0, [r3]
- ldr r0, [r4, #4]
- mov r3, #0
- bl FUN_02016C18
- mov r1, #0
- str r1, [sp]
- str r1, [sp, #4]
- str r1, [sp, #8]
- ldr r0, [r4]
- mov r3, #3
- str r0, [sp, #0xc]
- ldr r2, [r4, #4]
- mov r0, #0x88
- bl FUN_0200687C
- mov r0, #0
- str r0, [sp]
- str r0, [sp, #4]
- str r0, [sp, #8]
- ldr r0, [r4]
- mov r1, #3
- str r0, [sp, #0xc]
- ldr r2, [r4, #4]
- mov r0, #0x88
- add r3, r1, #0
- bl FUN_020068C8
- mov r2, #0
- str r2, [sp]
- ldr r0, [r4]
- mov r1, #6
- str r0, [sp, #4]
- mov r0, #0x88
- add r3, r2, #0
- bl FUN_02006930
- ldr r2, [r4]
- mov r0, #0
- mov r1, #0x20
- bl FUN_02002ED0
- mov r0, #0
- add r1, r0, #0
- bl FUN_02017FE4
- mov r0, #4
- mov r1, #0
- bl FUN_02017FE4
- mov r2, #0xc
- ldr r0, _021D9BCC ; =0x04000050
- mov r1, #2
- mov r3, #4
- str r2, [sp]
- bl G2x_SetBlendAlpha_
- add sp, #0xb8
- pop {r3, r4, r5, pc}
- nop
-_021D9BB4: .word MOD59_021DA0D4
-_021D9BB8: .word MOD59_021DA054
-_021D9BBC: .word MOD59_021DA080
-_021D9BC0: .word MOD59_021DA09C
-_021D9BC4: .word MOD59_021DA064
-_021D9BC8: .word MOD59_021DA0B8
-_021D9BCC: .word 0x04000050
- thumb_func_end MOD59_021D9A20
-
- thumb_func_start MOD59_021D9BD0
-MOD59_021D9BD0: ; 0x021D9BD0
- push {r4, lr}
- add r4, r0, #0
- mov r0, #0
- add r1, r0, #0
- bl FUN_0201797C
- mov r0, #1
- mov r1, #0
- bl FUN_0201797C
- mov r0, #2
- mov r1, #0
- bl FUN_0201797C
- mov r0, #3
- mov r1, #0
- bl FUN_0201797C
- mov r0, #4
- mov r1, #0
- bl FUN_0201797C
- mov r0, #5
- mov r1, #0
- bl FUN_0201797C
- mov r0, #6
- mov r1, #0
- bl FUN_0201797C
- mov r0, #7
- mov r1, #0
- bl FUN_0201797C
- ldr r0, _021D9C44 ; =0x04000050
- mov r1, #0
- strh r1, [r0]
- ldr r0, [r4, #4]
- mov r1, #3
- bl FUN_020178A0
- ldr r0, [r4, #4]
- mov r1, #1
- bl FUN_020178A0
- ldr r0, [r4, #4]
- mov r1, #0
- bl FUN_020178A0
- ldr r0, [r4, #4]
- mov r1, #2
- bl FUN_020178A0
- ldr r0, [r4, #4]
- bl FreeToHeap
- pop {r4, pc}
- nop
-_021D9C44: .word 0x04000050
- thumb_func_end MOD59_021D9BD0
-
- thumb_func_start MOD59_021D9C48
-MOD59_021D9C48: ; 0x021D9C48
- push {r4, lr}
- add r4, r0, #0
- ldr r2, _021D9C64 ; =0x00000225
- ldr r3, [r4]
- mov r0, #1
- mov r1, #0x1a
- bl NewMsgDataFromNarc
- str r0, [r4, #8]
- bl FUN_0201BD5C
- mov r0, #0
- str r0, [r4, #0xc]
- pop {r4, pc}
- .align 2, 0
-_021D9C64: .word 0x00000225
- thumb_func_end MOD59_021D9C48
-
- thumb_func_start MOD59_021D9C68
-MOD59_021D9C68: ; 0x021D9C68
- ldr r3, _021D9C70 ; =DestroyMsgData
- ldr r0, [r0, #8]
- bx r3
- nop
-_021D9C70: .word DestroyMsgData
- thumb_func_end MOD59_021D9C68
-
- thumb_func_start MOD59_021D9C74
-MOD59_021D9C74: ; 0x021D9C74
- push {r4, r5, r6, r7, lr}
- sub sp, #0x14
- add r4, r0, #0
- ldr r0, [r4, #0xc]
- str r1, [sp, #0x10]
- add r7, r3, #0
- mov r5, #0
- cmp r0, #3
- bhi _021D9D66
- add r0, r0, r0
- add r0, pc
- ldrh r0, [r0, #6]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- add pc, r0
-_021D9C92: ; jump table
- .short _021D9C9A - _021D9C92 - 2 ; case 0
- .short _021D9D24 - _021D9C92 - 2 ; case 1
- .short _021D9D36 - _021D9C92 - 2 ; case 2
- .short _021D9D50 - _021D9C92 - 2 ; case 3
-_021D9C9A:
- mov r0, #2
- add r1, r5, #0
- bl FUN_0201797C
- mov r0, #1
- ldr r1, [r4]
- lsl r0, r0, #0xa
- bl String_ctor
- add r6, r0, #0
- ldr r0, [r4, #8]
- ldr r1, [sp, #0x10]
- add r2, r6, #0
- bl ReadMsgDataIntoString
- add r1, r4, #0
- ldr r0, [r4, #4]
- ldr r2, _021D9D6C ; =0x021DA04C
- add r1, #0x10
- bl FUN_02019150
- add r1, r5, #0
- mov r0, #1
- lsl r0, r0, #8
- str r0, [sp]
- mov r0, #0xc0
- str r0, [sp, #4]
- add r0, r4, #0
- add r0, #0x10
- add r2, r1, #0
- add r3, r1, #0
- bl FUN_020196F4
- add r0, r5, #0
- add r1, r6, #0
- add r2, r0, #0
- bl FUN_02002F08
- mov r1, #1
- lsl r1, r1, #8
- sub r0, r1, r0
- lsr r3, r0, #1
- str r7, [sp]
- add r1, r5, #0
- ldr r0, _021D9D70 ; =0x000F0200
- str r1, [sp, #4]
- str r0, [sp, #8]
- add r0, r4, #0
- add r0, #0x10
- add r2, r6, #0
- str r1, [sp, #0xc]
- bl AddTextPrinterParameterized2
- add r0, r6, #0
- bl String_dtor
- add r0, r4, #0
- add r0, #0x10
- bl FUN_020191D0
- mov r0, #2
- mov r1, #1
- bl FUN_0201797C
- mov r0, #0xf0
- str r0, [r4, #0x24]
- mov r0, #1
- str r0, [r4, #0xc]
- b _021D9D66
-_021D9D24:
- ldr r0, [r4, #0x24]
- cmp r0, #0
- beq _021D9D30
- sub r0, r0, #1
- str r0, [r4, #0x24]
- b _021D9D66
-_021D9D30:
- mov r0, #2
- str r0, [r4, #0xc]
- b _021D9D66
-_021D9D36:
- ldr r0, _021D9D74 ; =gMain
- ldr r1, [r0, #0x48]
- mov r0, #1
- and r0, r1
- cmp r0, #1
- beq _021D9D4A
- mov r0, #2
- and r0, r1
- cmp r0, #2
- bne _021D9D66
-_021D9D4A:
- mov r0, #3
- str r0, [r4, #0xc]
- b _021D9D66
-_021D9D50:
- add r0, r4, #0
- add r0, #0x10
- bl FUN_02019178
- ldr r0, [r4, #4]
- mov r1, #2
- bl FUN_02018744
- add r0, r5, #0
- str r0, [r4, #0xc]
- mov r5, #1
-_021D9D66:
- add r0, r5, #0
- add sp, #0x14
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_021D9D6C: .word MOD59_021DA04C
-_021D9D70: .word 0x000F0200
-_021D9D74: .word gMain
- thumb_func_end MOD59_021D9C74
-
- thumb_func_start MOD59_021D9D78
-MOD59_021D9D78: ; 0x021D9D78
- push {r3, lr}
- ldr r1, [r0, #0x20]
- mov r2, #3
- add r3, r1, #4
- str r3, [r0, #0x20]
- ldr r0, [r0, #4]
- mov r1, #1
- asr r3, r3, #4
- bl FUN_020179E0
- pop {r3, pc}
- .align 2, 0
- thumb_func_end MOD59_021D9D78
-
.rodata
+
.global MOD59_021D9D90
MOD59_021D9D90: ; 0x021D9D90
.byte 0x00, 0x08, 0x00, 0x18, 0x18, 0x05, 0x2D, 0x01, 0x00, 0x04, 0x00, 0x18, 0x18, 0x05, 0x2D, 0x01
@@ -5168,40 +4480,3 @@ MOD59_021D9FE8: ; 0x021D9FE8
.byte 0x34, 0x35, 0x36, 0x37, 0x4C, 0x4D, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x4E, 0x4F
.byte 0x50, 0x51, 0x52, 0x53, 0x58, 0x59, 0x5A, 0x5B, 0x60, 0x61, 0x54, 0x55, 0x56, 0x57, 0x5C, 0x5D
.byte 0x5E, 0x5F, 0x62, 0x63
-
- .global MOD59_021DA04C
-MOD59_021DA04C: ; 0x021DA04C
- .byte 0x02, 0x00, 0x00, 0x20, 0x18, 0x01, 0x01, 0x00
-
- .global MOD59_021DA054
-MOD59_021DA054: ; 0x021DA054
- .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
- .global MOD59_021DA064
-MOD59_021DA064: ; 0x021DA064
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x01, 0x00, 0x02, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
- .global MOD59_021DA080
-MOD59_021DA080: ; 0x021DA080
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x01, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
- .global MOD59_021DA09C
-MOD59_021DA09C: ; 0x021DA09C
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x01, 0x00, 0x01, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
- .global MOD59_021DA0B8
-MOD59_021DA0B8: ; 0x021DA0B8
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x01, 0x01, 0x03, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
- .global MOD59_021DA0D4
-MOD59_021DA0D4: ; 0x021DA0D4
- .byte 0x03, 0x00, 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, 0x00, 0x00, 0x00, 0x00
-
- .data
- .bss
diff --git a/arm9/modules/59/asm/mod59_021D9868.s b/arm9/modules/59/asm/mod59_021D9868.s
new file mode 100644
index 00000000..4e03cbe3
--- /dev/null
+++ b/arm9/modules/59/asm/mod59_021D9868.s
@@ -0,0 +1,666 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .balign 4, 0
+
+ thumb_func_start MOD59_021D9868
+MOD59_021D9868: ; 0x021D9868
+ push {r4, lr}
+ mov r2, #1
+ add r4, r0, #0
+ mov r0, #3
+ mov r1, #0x53
+ lsl r2, r2, #0x12
+ bl FUN_0201681C
+ add r0, r4, #0
+ mov r1, #0x28
+ mov r2, #0x53
+ bl OverlayManager_CreateAndGetData
+ mov r1, #0
+ mov r2, #0x28
+ add r4, r0, #0
+ bl memset
+ mov r0, #0x53
+ str r0, [r4]
+ mov r0, #0
+ str r0, [r4, #0x24]
+ mov r0, #1
+ pop {r4, pc}
+ thumb_func_end MOD59_021D9868
+
+ thumb_func_start MOD59_021D9898
+MOD59_021D9898: ; 0x021D9898
+ push {r3, r4, r5, r6, lr}
+ sub sp, #0xc
+ add r5, r1, #0
+ bl OverlayManager_GetData
+ ldr r1, [r5]
+ add r4, r0, #0
+ mov r6, #0
+ cmp r1, #5
+ bls _021D98AE
+ b _021D99E2
+_021D98AE:
+ add r1, r1, r1
+ add r1, pc
+ ldrh r1, [r1, #6]
+ lsl r1, r1, #0x10
+ asr r1, r1, #0x10
+ add pc, r1
+_021D98BA: ; jump table
+ .short _021D98C6 - _021D98BA - 2 ; case 0
+ .short _021D992C - _021D98BA - 2 ; case 1
+ .short _021D9952 - _021D98BA - 2 ; case 2
+ .short _021D997C - _021D98BA - 2 ; case 3
+ .short _021D998E - _021D98BA - 2 ; case 4
+ .short _021D99C0 - _021D98BA - 2 ; case 5
+_021D98C6:
+ add r0, r6, #0
+ add r1, r6, #0
+ bl FUN_0200E3A0
+ mov r0, #1
+ add r1, r6, #0
+ bl FUN_0200E3A0
+ add r0, r6, #0
+ add r1, r0, #0
+ bl Main_SetVBlankIntrCB
+ add r0, r6, #0
+ add r1, r0, #0
+ bl FUN_02015F34
+ bl FUN_0201E6D8
+ bl FUN_0201E740
+ mov r2, #1
+ lsl r2, r2, #0x1a
+ ldr r1, [r2]
+ ldr r0, _021D99E8 ; =0xFFFFE0FF
+ and r1, r0
+ str r1, [r2]
+ ldr r2, _021D99EC ; =0x04001000
+ ldr r1, [r2]
+ and r0, r1
+ str r0, [r2]
+ mov r0, #4
+ mov r1, #8
+ bl FUN_0201669C
+ add r0, r4, #0
+ bl MOD59_021D9A20
+ add r0, r4, #0
+ bl MOD59_021D9C48
+ ldr r0, _021D99F0 ; =MOD59_021D9A14
+ add r1, r4, #0
+ bl Main_SetVBlankIntrCB
+ bl FUN_0201E788
+ mov r0, #0x3c
+ str r0, [r4, #0x24]
+ mov r0, #1
+ str r0, [r5]
+ b _021D99E2
+_021D992C:
+ ldr r0, [r4, #0x24]
+ cmp r0, #0
+ beq _021D9938
+ sub r0, r0, #1
+ str r0, [r4, #0x24]
+ b _021D99E2
+_021D9938:
+ ldr r0, _021D99F4 ; =0x00000406
+ bl FUN_0200414C
+ ldr r1, _021D99F4 ; =0x00000406
+ mov r0, #4
+ mov r2, #1
+ bl FUN_0200433C
+ mov r0, #0x5a
+ str r0, [r4, #0x24]
+ mov r0, #2
+ str r0, [r5]
+ b _021D99E2
+_021D9952:
+ ldr r0, [r4, #0x24]
+ cmp r0, #0
+ beq _021D995E
+ sub r0, r0, #1
+ str r0, [r4, #0x24]
+ b _021D99E2
+_021D995E:
+ str r6, [r4, #0x24]
+ mov r0, #6
+ mov r1, #1
+ str r0, [sp]
+ str r1, [sp, #4]
+ ldr r0, [r4]
+ add r2, r1, #0
+ str r0, [sp, #8]
+ add r0, r6, #0
+ add r3, r6, #0
+ bl FUN_0200E1D0
+ mov r0, #3
+ str r0, [r5]
+ b _021D99E2
+_021D997C:
+ bl MOD59_021D9D78
+ bl FUN_0200E308
+ cmp r0, #1
+ bne _021D99E2
+ mov r0, #4
+ str r0, [r5]
+ b _021D99E2
+_021D998E:
+ bl MOD59_021D9D78
+ add r0, r4, #0
+ add r1, r6, #0
+ mov r2, #0x28
+ mov r3, #0x30
+ bl MOD59_021D9C74
+ cmp r0, #1
+ bne _021D99E2
+ mov r0, #6
+ str r0, [sp]
+ mov r0, #1
+ str r0, [sp, #4]
+ ldr r0, [r4]
+ str r0, [sp, #8]
+ add r0, r6, #0
+ add r1, r0, #0
+ add r2, r0, #0
+ add r3, r0, #0
+ bl FUN_0200E1D0
+ mov r0, #5
+ str r0, [r5]
+ b _021D99E2
+_021D99C0:
+ bl MOD59_021D9D78
+ bl FUN_0200E308
+ cmp r0, #1
+ bne _021D99E2
+ add r0, r4, #0
+ bl MOD59_021D9C68
+ add r0, r4, #0
+ bl MOD59_021D9BD0
+ add r0, r6, #0
+ add r1, r0, #0
+ bl Main_SetVBlankIntrCB
+ mov r6, #1
+_021D99E2:
+ add r0, r6, #0
+ add sp, #0xc
+ pop {r3, r4, r5, r6, pc}
+ .align 2, 0
+_021D99E8: .word 0xFFFFE0FF
+_021D99EC: .word 0x04001000
+_021D99F0: .word MOD59_021D9A14
+_021D99F4: .word 0x00000406
+ thumb_func_end MOD59_021D9898
+
+ thumb_func_start MOD59_021D99F8
+MOD59_021D99F8: ; 0x021D99F8
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ bl OverlayManager_GetData
+ ldr r4, [r0]
+ add r0, r5, #0
+ bl OverlayManager_FreeData
+ add r0, r4, #0
+ bl FUN_020168D0
+ mov r0, #1
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+ thumb_func_end MOD59_021D99F8
+
+ thumb_func_start MOD59_021D9A14
+MOD59_021D9A14: ; 0x021D9A14
+ ldr r3, _021D9A1C ; =FUN_0201AB60
+ ldr r0, [r0, #4]
+ bx r3
+ nop
+_021D9A1C: .word FUN_0201AB60
+ thumb_func_end MOD59_021D9A14
+
+ thumb_func_start MOD59_021D9A20
+MOD59_021D9A20: ; 0x021D9A20
+ push {r3, r4, r5, lr}
+ sub sp, #0xb8
+ ldr r5, _021D9BB4 ; =0x021DA0D4
+ add r4, r0, #0
+ add r3, sp, #0x90
+ mov r2, #5
+_021D9A2C:
+ ldmia r5!, {r0, r1}
+ stmia r3!, {r0, r1}
+ sub r2, r2, #1
+ bne _021D9A2C
+ add r0, sp, #0x90
+ bl FUN_0201E66C
+ ldr r0, [r4]
+ bl FUN_02016B94
+ add r3, sp, #0x80
+ ldr r5, _021D9BB8 ; =0x021DA054
+ str r0, [r4, #4]
+ add r2, r3, #0
+ ldmia r5!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldmia r5!, {r0, r1}
+ stmia r3!, {r0, r1}
+ add r0, r2, #0
+ bl FUN_02016BBC
+ ldr r5, _021D9BBC ; =0x021DA080
+ add r3, sp, #0x64
+ ldmia r5!, {r0, r1}
+ add r2, r3, #0
+ stmia r3!, {r0, r1}
+ ldmia r5!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldmia r5!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldr r0, [r5]
+ mov r1, #2
+ str r0, [r3]
+ ldr r0, [r4, #4]
+ mov r3, #0
+ bl FUN_02016C18
+ ldr r3, [r4]
+ mov r0, #2
+ mov r1, #0x20
+ mov r2, #0
+ bl FUN_02017F18
+ ldr r0, [r4, #4]
+ mov r1, #2
+ bl FUN_02018744
+ ldr r5, _021D9BC0 ; =0x021DA09C
+ add r3, sp, #0x48
+ ldmia r5!, {r0, r1}
+ add r2, r3, #0
+ stmia r3!, {r0, r1}
+ ldmia r5!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldmia r5!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldr r0, [r5]
+ mov r1, #0
+ str r0, [r3]
+ ldr r0, [r4, #4]
+ add r3, r1, #0
+ bl FUN_02016C18
+ mov r3, #0
+ str r3, [sp]
+ str r3, [sp, #4]
+ str r3, [sp, #8]
+ ldr r0, [r4]
+ mov r1, #1
+ str r0, [sp, #0xc]
+ ldr r2, [r4, #4]
+ mov r0, #0x88
+ bl FUN_0200687C
+ mov r3, #0
+ str r3, [sp]
+ str r3, [sp, #4]
+ str r3, [sp, #8]
+ ldr r0, [r4]
+ mov r1, #4
+ str r0, [sp, #0xc]
+ ldr r2, [r4, #4]
+ mov r0, #0x88
+ bl FUN_020068C8
+ ldr r5, _021D9BC4 ; =0x021DA064
+ add r3, sp, #0x2c
+ ldmia r5!, {r0, r1}
+ add r2, r3, #0
+ stmia r3!, {r0, r1}
+ ldmia r5!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldmia r5!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldr r0, [r5]
+ mov r1, #1
+ str r0, [r3]
+ ldr r0, [r4, #4]
+ mov r3, #0
+ bl FUN_02016C18
+ mov r0, #0
+ str r0, [sp]
+ str r0, [sp, #4]
+ str r0, [sp, #8]
+ ldr r0, [r4]
+ mov r1, #2
+ str r0, [sp, #0xc]
+ ldr r2, [r4, #4]
+ mov r0, #0x88
+ mov r3, #1
+ bl FUN_0200687C
+ mov r0, #0
+ str r0, [sp]
+ str r0, [sp, #4]
+ str r0, [sp, #8]
+ ldr r0, [r4]
+ mov r1, #5
+ str r0, [sp, #0xc]
+ ldr r2, [r4, #4]
+ mov r0, #0x88
+ mov r3, #1
+ bl FUN_020068C8
+ ldr r5, _021D9BC8 ; =0x021DA0B8
+ add r3, sp, #0x10
+ ldmia r5!, {r0, r1}
+ add r2, r3, #0
+ stmia r3!, {r0, r1}
+ ldmia r5!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldmia r5!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldr r0, [r5]
+ mov r1, #3
+ str r0, [r3]
+ ldr r0, [r4, #4]
+ mov r3, #0
+ bl FUN_02016C18
+ mov r1, #0
+ str r1, [sp]
+ str r1, [sp, #4]
+ str r1, [sp, #8]
+ ldr r0, [r4]
+ mov r3, #3
+ str r0, [sp, #0xc]
+ ldr r2, [r4, #4]
+ mov r0, #0x88
+ bl FUN_0200687C
+ mov r0, #0
+ str r0, [sp]
+ str r0, [sp, #4]
+ str r0, [sp, #8]
+ ldr r0, [r4]
+ mov r1, #3
+ str r0, [sp, #0xc]
+ ldr r2, [r4, #4]
+ mov r0, #0x88
+ add r3, r1, #0
+ bl FUN_020068C8
+ mov r2, #0
+ str r2, [sp]
+ ldr r0, [r4]
+ mov r1, #6
+ str r0, [sp, #4]
+ mov r0, #0x88
+ add r3, r2, #0
+ bl FUN_02006930
+ ldr r2, [r4]
+ mov r0, #0
+ mov r1, #0x20
+ bl FUN_02002ED0
+ mov r0, #0
+ add r1, r0, #0
+ bl FUN_02017FE4
+ mov r0, #4
+ mov r1, #0
+ bl FUN_02017FE4
+ mov r2, #0xc
+ ldr r0, _021D9BCC ; =0x04000050
+ mov r1, #2
+ mov r3, #4
+ str r2, [sp]
+ bl G2x_SetBlendAlpha_
+ add sp, #0xb8
+ pop {r3, r4, r5, pc}
+ nop
+_021D9BB4: .word MOD59_021DA0D4
+_021D9BB8: .word MOD59_021DA054
+_021D9BBC: .word MOD59_021DA080
+_021D9BC0: .word MOD59_021DA09C
+_021D9BC4: .word MOD59_021DA064
+_021D9BC8: .word MOD59_021DA0B8
+_021D9BCC: .word 0x04000050
+ thumb_func_end MOD59_021D9A20
+
+ thumb_func_start MOD59_021D9BD0
+MOD59_021D9BD0: ; 0x021D9BD0
+ push {r4, lr}
+ add r4, r0, #0
+ mov r0, #0
+ add r1, r0, #0
+ bl FUN_0201797C
+ mov r0, #1
+ mov r1, #0
+ bl FUN_0201797C
+ mov r0, #2
+ mov r1, #0
+ bl FUN_0201797C
+ mov r0, #3
+ mov r1, #0
+ bl FUN_0201797C
+ mov r0, #4
+ mov r1, #0
+ bl FUN_0201797C
+ mov r0, #5
+ mov r1, #0
+ bl FUN_0201797C
+ mov r0, #6
+ mov r1, #0
+ bl FUN_0201797C
+ mov r0, #7
+ mov r1, #0
+ bl FUN_0201797C
+ ldr r0, _021D9C44 ; =0x04000050
+ mov r1, #0
+ strh r1, [r0]
+ ldr r0, [r4, #4]
+ mov r1, #3
+ bl FUN_020178A0
+ ldr r0, [r4, #4]
+ mov r1, #1
+ bl FUN_020178A0
+ ldr r0, [r4, #4]
+ mov r1, #0
+ bl FUN_020178A0
+ ldr r0, [r4, #4]
+ mov r1, #2
+ bl FUN_020178A0
+ ldr r0, [r4, #4]
+ bl FreeToHeap
+ pop {r4, pc}
+ nop
+_021D9C44: .word 0x04000050
+ thumb_func_end MOD59_021D9BD0
+
+ thumb_func_start MOD59_021D9C48
+MOD59_021D9C48: ; 0x021D9C48
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r2, _021D9C64 ; =0x00000225
+ ldr r3, [r4]
+ mov r0, #1
+ mov r1, #0x1a
+ bl NewMsgDataFromNarc
+ str r0, [r4, #8]
+ bl FUN_0201BD5C
+ mov r0, #0
+ str r0, [r4, #0xc]
+ pop {r4, pc}
+ .align 2, 0
+_021D9C64: .word 0x00000225
+ thumb_func_end MOD59_021D9C48
+
+ thumb_func_start MOD59_021D9C68
+MOD59_021D9C68: ; 0x021D9C68
+ ldr r3, _021D9C70 ; =DestroyMsgData
+ ldr r0, [r0, #8]
+ bx r3
+ nop
+_021D9C70: .word DestroyMsgData
+ thumb_func_end MOD59_021D9C68
+
+ thumb_func_start MOD59_021D9C74
+MOD59_021D9C74: ; 0x021D9C74
+ push {r4, r5, r6, r7, lr}
+ sub sp, #0x14
+ add r4, r0, #0
+ ldr r0, [r4, #0xc]
+ str r1, [sp, #0x10]
+ add r7, r3, #0
+ mov r5, #0
+ cmp r0, #3
+ bhi _021D9D66
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_021D9C92: ; jump table
+ .short _021D9C9A - _021D9C92 - 2 ; case 0
+ .short _021D9D24 - _021D9C92 - 2 ; case 1
+ .short _021D9D36 - _021D9C92 - 2 ; case 2
+ .short _021D9D50 - _021D9C92 - 2 ; case 3
+_021D9C9A:
+ mov r0, #2
+ add r1, r5, #0
+ bl FUN_0201797C
+ mov r0, #1
+ ldr r1, [r4]
+ lsl r0, r0, #0xa
+ bl String_ctor
+ add r6, r0, #0
+ ldr r0, [r4, #8]
+ ldr r1, [sp, #0x10]
+ add r2, r6, #0
+ bl ReadMsgDataIntoString
+ add r1, r4, #0
+ ldr r0, [r4, #4]
+ ldr r2, _021D9D6C ; =0x021DA04C
+ add r1, #0x10
+ bl FUN_02019150
+ add r1, r5, #0
+ mov r0, #1
+ lsl r0, r0, #8
+ str r0, [sp]
+ mov r0, #0xc0
+ str r0, [sp, #4]
+ add r0, r4, #0
+ add r0, #0x10
+ add r2, r1, #0
+ add r3, r1, #0
+ bl FUN_020196F4
+ add r0, r5, #0
+ add r1, r6, #0
+ add r2, r0, #0
+ bl FUN_02002F08
+ mov r1, #1
+ lsl r1, r1, #8
+ sub r0, r1, r0
+ lsr r3, r0, #1
+ str r7, [sp]
+ add r1, r5, #0
+ ldr r0, _021D9D70 ; =0x000F0200
+ str r1, [sp, #4]
+ str r0, [sp, #8]
+ add r0, r4, #0
+ add r0, #0x10
+ add r2, r6, #0
+ str r1, [sp, #0xc]
+ bl AddTextPrinterParameterized2
+ add r0, r6, #0
+ bl String_dtor
+ add r0, r4, #0
+ add r0, #0x10
+ bl FUN_020191D0
+ mov r0, #2
+ mov r1, #1
+ bl FUN_0201797C
+ mov r0, #0xf0
+ str r0, [r4, #0x24]
+ mov r0, #1
+ str r0, [r4, #0xc]
+ b _021D9D66
+_021D9D24:
+ ldr r0, [r4, #0x24]
+ cmp r0, #0
+ beq _021D9D30
+ sub r0, r0, #1
+ str r0, [r4, #0x24]
+ b _021D9D66
+_021D9D30:
+ mov r0, #2
+ str r0, [r4, #0xc]
+ b _021D9D66
+_021D9D36:
+ ldr r0, _021D9D74 ; =gMain
+ ldr r1, [r0, #0x48]
+ mov r0, #1
+ and r0, r1
+ cmp r0, #1
+ beq _021D9D4A
+ mov r0, #2
+ and r0, r1
+ cmp r0, #2
+ bne _021D9D66
+_021D9D4A:
+ mov r0, #3
+ str r0, [r4, #0xc]
+ b _021D9D66
+_021D9D50:
+ add r0, r4, #0
+ add r0, #0x10
+ bl FUN_02019178
+ ldr r0, [r4, #4]
+ mov r1, #2
+ bl FUN_02018744
+ add r0, r5, #0
+ str r0, [r4, #0xc]
+ mov r5, #1
+_021D9D66:
+ add r0, r5, #0
+ add sp, #0x14
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_021D9D6C: .word MOD59_021DA04C
+_021D9D70: .word 0x000F0200
+_021D9D74: .word gMain
+ thumb_func_end MOD59_021D9C74
+
+ thumb_func_start MOD59_021D9D78
+MOD59_021D9D78: ; 0x021D9D78
+ push {r3, lr}
+ ldr r1, [r0, #0x20]
+ mov r2, #3
+ add r3, r1, #4
+ str r3, [r0, #0x20]
+ ldr r0, [r0, #4]
+ mov r1, #1
+ asr r3, r3, #4
+ bl FUN_020179E0
+ pop {r3, pc}
+ .align 2, 0
+ thumb_func_end MOD59_021D9D78
+
+ .rodata
+
+ .global MOD59_021DA04C
+MOD59_021DA04C: ; 0x021DA04C
+ .byte 0x02, 0x00, 0x00, 0x20, 0x18, 0x01, 0x01, 0x00
+
+ .global MOD59_021DA054
+MOD59_021DA054: ; 0x021DA054
+ .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ .global MOD59_021DA064
+MOD59_021DA064: ; 0x021DA064
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x01, 0x00, 0x02, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ .global MOD59_021DA080
+MOD59_021DA080: ; 0x021DA080
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x01, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ .global MOD59_021DA09C
+MOD59_021DA09C: ; 0x021DA09C
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x01, 0x00, 0x01, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ .global MOD59_021DA0B8
+MOD59_021DA0B8: ; 0x021DA0B8
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x01, 0x01, 0x03, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ .global MOD59_021DA0D4
+MOD59_021DA0D4: ; 0x021DA0D4
+ .byte 0x03, 0x00, 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, 0x00, 0x00, 0x00, 0x00
diff --git a/arm9/modules/59/include/mod59_021D74E0.h b/arm9/modules/59/include/mod59_021D74E0.h
new file mode 100644
index 00000000..9342913d
--- /dev/null
+++ b/arm9/modules/59/include/mod59_021D74E0.h
@@ -0,0 +1,32 @@
+#ifndef POKEDIAMOND_MOD59_021D74E0_H
+#define POKEDIAMOND_MOD59_021D74E0_H
+
+#include "nitro/types.h"
+#include "options.h"
+#include "save_block_2.h"
+#include "main.h"
+
+typedef struct MOD59_OverlayData
+{
+ u32 heap_id;
+ struct SaveBlock2 *sav2;
+ struct Options *options;
+ u32 Unk0C;
+ u32 Unk10;
+ u32 Unk14;
+ u8 padding[0x58];
+ u32 Unk70;
+ u32 Unk74;
+ u8 padding2[0x10];
+ u8 Unk88;
+ u8 Unk89;
+ u8 Unk8A;
+ u8 Unk8B;
+ u8 padding3[4];
+ u32 Unk90;
+ //TODO pad to 0xb4
+} MOD59_OverlayData;
+
+BOOL MOD59_Init(struct UnkStruct_02006234 *param0);
+
+#endif //POKEDIAMOND_MOD59_021D74E0_H
diff --git a/arm9/modules/59/src/mod59_021D74E0_src.c b/arm9/modules/59/src/mod59_021D74E0_src.c
new file mode 100644
index 00000000..9fccfd95
--- /dev/null
+++ b/arm9/modules/59/src/mod59_021D74E0_src.c
@@ -0,0 +1,29 @@
+#include "global.h"
+#include "player_data.h"
+#include "overlay_manager.h"
+#include "mod59_021D74E0.h"
+
+extern void FUN_0201681C(u32 param0, u32 heap_id, u32 param2);
+extern u32 FUN_02077A84(u32 heap_id, u32 param1, u32 param2, u32 param3, struct Options *options);
+
+THUMB_FUNC BOOL MOD59_Init(struct UnkStruct_02006234 *param0)
+{
+ //note: 0xb4 is likely the overlay data struct size, once struct is padded replace with sizeof
+ FUN_0201681C(3, 0x52, 1 << 18);
+ MOD59_OverlayData *data = (MOD59_OverlayData *) OverlayManager_CreateAndGetData(param0, 0xb4, 0x52);
+ (void)memset((void *)data, 0, 0xb4);
+
+ data->heap_id = 0x52;
+ int *field18 = OverlayManager_GetField18(param0);
+ data->sav2 = (struct SaveBlock2 *)field18[2]; //?
+ data->options = Sav2_PlayerData_GetOptionsAddr(data->sav2);
+ data->Unk14 = data->Unk10 = data->Unk0C = 0;
+ data->Unk70 = FUN_02077A84(0x52, 0, 0, 7, data->options);
+ data->Unk74 = FUN_02077A84(0x52, 3, 0, 7, data->options);
+ data->Unk88 = 0;
+ data->Unk89 = 0;
+ data->Unk8A = 0;
+ data->Unk8B = 0;
+ data->Unk90 = 0;
+ return TRUE;
+}
diff --git a/arm9/modules/60/asm/module_60.s b/arm9/modules/60/asm/module_60.s
index 28028e5f..81f6d273 100644
--- a/arm9/modules/60/asm/module_60.s
+++ b/arm9/modules/60/asm/module_60.s
@@ -25,7 +25,7 @@ MOD60_021D74E0: ; 0x021D74E0
add r4, r0, #0
bl memset
add r0, r5, #0
- bl FUN_02024FD8
+ bl Options_GetTextSpeed
ldrh r1, [r4, #0x18]
mov r2, #0xf
lsl r0, r0, #0x10
@@ -36,7 +36,7 @@ MOD60_021D74E0: ; 0x021D74E0
orr r0, r1
strh r0, [r4, #0x18]
add r0, r5, #0
- bl FUN_0202502C
+ bl Options_GetBattleScene
lsl r0, r0, #0x10
lsr r0, r0, #0x10
lsl r0, r0, #0x1f
@@ -47,7 +47,7 @@ MOD60_021D74E0: ; 0x021D74E0
orr r0, r1
strh r0, [r4, #0x18]
add r0, r5, #0
- bl FUN_02025048
+ bl Options_GetBattleStyle
lsl r0, r0, #0x10
lsr r0, r0, #0x10
lsl r0, r0, #0x1f
@@ -58,7 +58,7 @@ MOD60_021D74E0: ; 0x021D74E0
orr r0, r1
strh r0, [r4, #0x18]
add r0, r5, #0
- bl FUN_02025010
+ bl Options_GetSoundMethod
lsl r0, r0, #0x10
lsr r0, r0, #0x10
lsl r0, r0, #0x1e
@@ -69,7 +69,7 @@ MOD60_021D74E0: ; 0x021D74E0
orr r0, r1
strh r0, [r4, #0x18]
add r0, r5, #0
- bl FUN_02025064
+ bl Options_GetButtonMode
lsl r0, r0, #0x10
lsr r0, r0, #0x10
lsl r0, r0, #0x1e
@@ -80,7 +80,7 @@ MOD60_021D74E0: ; 0x021D74E0
orr r0, r1
strh r0, [r4, #0x18]
add r0, r5, #0
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x10
lsr r0, r0, #0x10
lsl r0, r0, #0x1b
@@ -172,32 +172,32 @@ MOD60_021D75B0: ; 0x021D75B0
ldr r0, [r4, #0x1c]
lsl r1, r1, #0x1c
lsr r1, r1, #0x1c
- bl FUN_02024FE0
+ bl Options_SetTextSpeed
ldrh r1, [r4, #0x18]
ldr r0, [r4, #0x1c]
lsl r1, r1, #0x19
lsr r1, r1, #0x1f
- bl FUN_02025034
+ bl Options_SetBattleScene
ldrh r1, [r4, #0x18]
ldr r0, [r4, #0x1c]
lsl r1, r1, #0x18
lsr r1, r1, #0x1f
- bl FUN_02025050
+ bl Options_SetBattleStyle
ldrh r1, [r4, #0x18]
ldr r0, [r4, #0x1c]
lsl r1, r1, #0x1a
lsr r1, r1, #0x1e
- bl FUN_02025018
+ bl Options_SetSoundMethod
ldrh r1, [r4, #0x18]
ldr r0, [r4, #0x1c]
lsl r1, r1, #0x16
lsr r1, r1, #0x1e
- bl FUN_0202506C
+ bl Options_SetButtonMode
ldrh r1, [r4, #0x18]
ldr r0, [r4, #0x1c]
lsl r1, r1, #0x11
lsr r1, r1, #0x1b
- bl FUN_0202508C
+ bl Options_SetFrame
b _021D769A
_021D7680:
cmp r0, #2
@@ -210,7 +210,7 @@ _021D7680:
mov r0, #0
lsl r1, r1, #0x16
lsr r1, r1, #0x1e
- bl FUN_02024F9C
+ bl Options_SetButtonModeOnMain
_021D769A:
add r0, r5, #0
bl OverlayManager_FreeData
@@ -1270,7 +1270,7 @@ _021D7F3C:
add r1, r1, r2
add r1, #0x5e
ldrh r1, [r1]
- bl FUN_02024F9C
+ bl Options_SetButtonModeOnMain
_021D7F54:
ldr r0, [sp, #0x14]
mov r1, #0x54
diff --git a/arm9/modules/61/asm/module_61.s b/arm9/modules/61/asm/module_61.s
index 5cb5badb..ed38301b 100644
--- a/arm9/modules/61/asm/module_61.s
+++ b/arm9/modules/61/asm/module_61.s
@@ -44,11 +44,11 @@ MOD61_021D74E0: ; 0x021D74E0
strh r1, [r0]
ldr r0, [r4, #0x1c]
ldr r0, [r0, #4]
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
strb r0, [r4, #0x10]
ldr r0, [r4, #0x1c]
ldr r0, [r0, #4]
- bl FUN_02025084
+ bl Options_GetFrame
strh r0, [r4, #0xa]
mov r0, #1
pop {r3, r4, r5, pc}
@@ -374,7 +374,7 @@ MOD61_021D7790: ; 0x021D7790
ldr r0, [r4, #0x18]
mov r2, #1
mov r3, #5
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
add r4, #0xa4
str r0, [r4]
add sp, #4
diff --git a/arm9/modules/64/asm/module_64.s b/arm9/modules/64/asm/module_64.s
index 1dee0562..645c9569 100644
--- a/arm9/modules/64/asm/module_64.s
+++ b/arm9/modules/64/asm/module_64.s
@@ -35,11 +35,11 @@ _021D7504:
bl OverlayManager_GetField18
add r4, r0, #0
ldr r0, [r4, #4]
- bl FUN_02025084
+ bl Options_GetFrame
ldr r1, _021D7634 ; =0x000006A8
str r0, [r5, r1]
ldr r0, [r4, #4]
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
ldr r1, _021D7638 ; =0x000006AC
str r0, [r5, r1]
mov r0, #8
@@ -2212,7 +2212,7 @@ _021D8604:
ldr r2, _021D86D8 ; =0x0000029E
add r1, #0xb0
mov r3, #1
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
add r1, r4, #0
add r1, #0xb8
str r0, [r1]
diff --git a/arm9/modules/65/asm/module_65.s b/arm9/modules/65/asm/module_65.s
index af08a5f3..4ff5aca1 100644
--- a/arm9/modules/65/asm/module_65.s
+++ b/arm9/modules/65/asm/module_65.s
@@ -950,7 +950,7 @@ MOD65_021D7C04: ; 0x021D7C04
bl FUN_0200CB00
ldr r0, [r6, #0x20]
ldr r0, [r0, #0x18]
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
@@ -1103,7 +1103,7 @@ _021D7D42:
_021D7D66:
ldr r0, [r5, #0x20]
ldr r0, [r0, #0x18]
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
add r5, #0x7c
strb r0, [r5]
pop {r4, r5, r6, pc}
@@ -2418,7 +2418,7 @@ MOD65_021D87B0: ; 0x021D87B0
ldr r0, [r4, #0x24]
mov r2, #0x1f
mov r3, #0xf
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
add r4, #0xd4
str r0, [r4]
add sp, #4
diff --git a/arm9/modules/71/asm/module_71.s b/arm9/modules/71/asm/module_71.s
index b77c8662..e7f0b24d 100644
--- a/arm9/modules/71/asm/module_71.s
+++ b/arm9/modules/71/asm/module_71.s
@@ -278,7 +278,7 @@ MOD71_0222D820: ; 0x0222D820
bl MOD71_0222D780
ldr r0, [r4, #8]
ldr r0, [r0, #0x18]
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
mov r2, #0x5d
@@ -6668,7 +6668,7 @@ MOD71_02230C48: ; 0x02230C48
mov r1, #0
bl FUN_02019620
add r0, r4, #0
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
@@ -7038,7 +7038,7 @@ _02230FC8:
ldr r1, _02230FFC ; =0x022313CC
ldr r2, _02231000 ; =0x000001F7
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
str r0, [r5]
ldr r0, [r4]
add r0, r0, #1
diff --git a/arm9/modules/73/asm/module_73.s b/arm9/modules/73/asm/module_73.s
index 20e8b507..e06f4d00 100644
--- a/arm9/modules/73/asm/module_73.s
+++ b/arm9/modules/73/asm/module_73.s
@@ -55,11 +55,11 @@ _021D7536:
bl MOD73_021D8DF4
ldr r0, [r4, #0x10]
ldr r0, [r0, #0x18]
- bl FUN_02025084
+ bl Options_GetFrame
str r0, [r5, #0x24]
ldr r0, [r4, #0x10]
ldr r0, [r0, #0x18]
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
str r0, [r5, #0x28]
mov r0, #0xae
mov r1, #1
diff --git a/arm9/modules/75/asm/module_75.s b/arm9/modules/75/asm/module_75.s
index 63f45d1d..87c9c55a 100644
--- a/arm9/modules/75/asm/module_75.s
+++ b/arm9/modules/75/asm/module_75.s
@@ -841,7 +841,7 @@ MOD75_021E7214: ; 0x021E7214
add r0, r4, #0
add r0, #0xd0
ldr r0, [r0]
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
@@ -9447,7 +9447,7 @@ MOD75_021EB660: ; 0x021EB660
add r0, r4, #0
add r0, #0xd0
ldr r0, [r0]
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
mov r3, #0
str r3, [sp]
str r0, [sp, #4]
@@ -9515,7 +9515,7 @@ MOD75_021EB6E0: ; 0x021EB6E0
ldr r1, _021EB700 ; =0x021EC6AC
ldr r2, _021EB704 ; =0x000003F7
mov r3, #0xe
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
mov r1, #0x56
lsl r1, r1, #2
str r0, [r4, r1]
diff --git a/arm9/modules/76/asm/module_76.s b/arm9/modules/76/asm/module_76.s
index 12b6e9fc..d81a7697 100644
--- a/arm9/modules/76/asm/module_76.s
+++ b/arm9/modules/76/asm/module_76.s
@@ -437,7 +437,7 @@ MOD76_021D7814: ; 0x021D7814
bl FUN_0200CB00
ldr r0, [r4]
ldr r0, [r0, #8]
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
@@ -735,7 +735,7 @@ MOD76_021D7AB4: ; 0x021D7AB4
ldr r1, _021D7AD8 ; =0x021D9034
mov r2, #1
mov r3, #0xc
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
mov r1, #0x43
lsl r1, r1, #2
str r0, [r4, r1]
@@ -2053,7 +2053,7 @@ MOD76_021D853C: ; 0x021D853C
bl FUN_02002B7C
ldr r0, [r4]
ldr r0, [r0, #8]
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
mov r3, #0
str r3, [sp]
str r0, [sp, #4]
diff --git a/arm9/modules/77/asm/module_77.s b/arm9/modules/77/asm/module_77.s
index 1c074133..4536decb 100644
--- a/arm9/modules/77/asm/module_77.s
+++ b/arm9/modules/77/asm/module_77.s
@@ -291,7 +291,7 @@ _021D7744:
ldr r2, _021D7998 ; =0x000001D9
ldr r0, [r4, r0]
mov r3, #7
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
ldr r1, _021D799C ; =0x0000C05C
str r0, [r4, r1]
mov r0, #6
@@ -499,7 +499,7 @@ _021D78EE:
ldr r2, _021D7998 ; =0x000001D9
ldr r0, [r4, r0]
mov r3, #7
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
ldr r1, _021D799C ; =0x0000C05C
str r0, [r4, r1]
mov r0, #0xd
@@ -1383,7 +1383,7 @@ MOD77_021D7FAC: ; 0x021D7FAC
add r3, r1, #0
bl FUN_020068C8
ldr r0, [r5, #8]
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
@@ -1685,7 +1685,7 @@ _021D82B0:
ldr r2, [r5, r2]
bl ReadMsgDataIntoString
ldr r0, [r5, #8]
- bl FUN_02024FF4
+ bl Options_GetTextFrameDelay
add r3, r4, #0
str r3, [sp]
str r0, [sp, #4]
diff --git a/arm9/modules/80/asm/module_80.s b/arm9/modules/80/asm/module_80.s
index 29a329f0..9e91c64e 100644
--- a/arm9/modules/80/asm/module_80.s
+++ b/arm9/modules/80/asm/module_80.s
@@ -2192,7 +2192,7 @@ MOD80_0222E6A8: ; 0x0222E6A8
add r1, r3, #0
mov r2, #0x1f
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
add sp, #0xc
pop {r3, r4, r5, r6, pc}
.align 2, 0
@@ -2328,11 +2328,11 @@ MOD80_0222E7B0: ; 0x0222E7B0
thumb_func_start MOD80_0222E7BC
MOD80_0222E7BC: ; 0x0222E7BC
ldr r0, [r0]
- ldr r3, _0222E7C4 ; =FUN_02024FF4
+ ldr r3, _0222E7C4 ; =Options_GetTextFrameDelay
ldr r0, [r0, #0x24]
bx r3
.align 2, 0
-_0222E7C4: .word FUN_02024FF4
+_0222E7C4: .word Options_GetTextFrameDelay
thumb_func_end MOD80_0222E7BC
thumb_func_start MOD80_0222E7C8
@@ -2805,7 +2805,7 @@ MOD80_0222EB6C: ; 0x0222EB6C
bl FUN_02002EEC
ldr r0, [r5]
ldr r0, [r0, #0x24]
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
@@ -4099,7 +4099,7 @@ MOD80_0222F5A8: ; 0x0222F5A8
bl FUN_02002EEC
ldr r0, [r5]
ldr r0, [r0, #0x24]
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
@@ -5388,7 +5388,7 @@ MOD80_02230054: ; 0x02230054
bl FUN_02002EEC
ldr r0, [r5]
ldr r0, [r0, #0x24]
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
@@ -6395,7 +6395,7 @@ MOD80_02230840: ; 0x02230840
bl FUN_02002EEC
ldr r0, [r5]
ldr r0, [r0, #0x24]
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
@@ -8807,7 +8807,7 @@ MOD80_02231BF4: ; 0x02231BF4
bl FUN_02002EEC
ldr r0, [r5]
ldr r0, [r0, #0x24]
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
@@ -11836,7 +11836,7 @@ MOD80_0223346C: ; 0x0223346C
bl FUN_02002EEC
ldr r0, [r5]
ldr r0, [r0, #0x24]
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
@@ -14380,7 +14380,7 @@ MOD80_022348CC: ; 0x022348CC
bl FUN_02002EEC
ldr r0, [r5]
ldr r0, [r0, #0x24]
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
@@ -18024,7 +18024,7 @@ MOD80_02236488: ; 0x02236488
bl FUN_02002EEC
ldr r0, [r5]
ldr r0, [r0, #0x24]
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
diff --git a/arm9/modules/81/asm/module_81.s b/arm9/modules/81/asm/module_81.s
index 3db42aa1..927b69b6 100644
--- a/arm9/modules/81/asm/module_81.s
+++ b/arm9/modules/81/asm/module_81.s
@@ -1325,11 +1325,11 @@ _02238840: .word 0x0000014E
thumb_func_start MOD81_02238844
MOD81_02238844: ; 0x02238844
ldr r0, [r0]
- ldr r3, _0223884C ; =FUN_02025084
+ ldr r3, _0223884C ; =Options_GetFrame
ldr r0, [r0, #0x14]
bx r3
.align 2, 0
-_0223884C: .word FUN_02025084
+_0223884C: .word Options_GetFrame
thumb_func_end MOD81_02238844
thumb_func_start MOD81_02238850
diff --git a/arm9/modules/82/asm/module_82.s b/arm9/modules/82/asm/module_82.s
index 4e09a3ed..f1cd74ed 100644
--- a/arm9/modules/82/asm/module_82.s
+++ b/arm9/modules/82/asm/module_82.s
@@ -1230,7 +1230,7 @@ MOD82_0222DF38: ; 0x0222DF38
add r1, r3, #0
mov r2, #0x1f
mov r3, #0xb
- bl FUN_02002198
+ bl Std_CreateYesNoMenu
add sp, #0xc
pop {r3, r4, r5, r6, pc}
.align 2, 0
@@ -1638,7 +1638,7 @@ MOD82_0222E264: ; 0x0222E264
bl FUN_02002EEC
ldr r0, [r5]
ldr r0, [r0, #0x10]
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
diff --git a/arm9/modules/83/asm/module_83.s b/arm9/modules/83/asm/module_83.s
index ca3ff8d3..59fd717f 100644
--- a/arm9/modules/83/asm/module_83.s
+++ b/arm9/modules/83/asm/module_83.s
@@ -2561,7 +2561,7 @@ _0222E960:
add r3, r2, #0
bl FUN_0200CB00
ldr r0, [r4, #0x14]
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
@@ -6152,7 +6152,7 @@ MOD83_02230668: ; 0x02230668
mov r2, #0x56
bl FUN_02002ED0
ldr r0, [r4, #8]
- bl FUN_02025084
+ bl Options_GetFrame
lsl r0, r0, #0x18
lsr r0, r0, #0x18
str r0, [sp]
@@ -10287,7 +10287,7 @@ _022327E6:
ldr r1, _02232B58 ; =0x00002B48
str r0, [r4, r1]
ldr r0, [r4, r1]
- bl FUN_02025084
+ bl Options_GetFrame
ldr r1, _02232B5C ; =0x00002B4C
str r0, [r4, r1]
sub r1, #0xc
@@ -18540,7 +18540,7 @@ MOD83_02236764: ; 0x02236764
ldr r0, [r4, #0x10]
bl Sav2_PlayerData_GetOptionsAddr
str r0, [r4, #0x18]
- bl FUN_02025084
+ bl Options_GetFrame
str r0, [r4, #0x1c]
ldr r1, _022367F8 ; =0x00000496
mov r0, #9
diff --git a/arm9/src/options.c b/arm9/src/options.c
new file mode 100644
index 00000000..296b398a
--- /dev/null
+++ b/arm9/src/options.c
@@ -0,0 +1,110 @@
+#include "global.h"
+#include "heap.h"
+#include "main.h"
+#include "MI_memory.h"
+#include "options.h"
+#include "player_data.h"
+
+#pragma thumb on
+
+struct Options * Options_new(u32 heap_id) {
+ struct Options * ret = AllocFromHeap(heap_id, sizeof(struct Options));
+ Options_init(ret);
+ return ret;
+}
+
+void Options_copy(struct Options * src, struct Options * dest) {
+ MI_CpuCopy8(src, dest, sizeof(struct Options));
+}
+
+void Options_init(struct Options * options) {
+ MI_CpuFill8(options, 0, sizeof(struct Options));
+
+ options->textSpeed = 1; // mid speed
+ options->soundMethod = 0; // stereo
+ options->battleStyle = 0; // shift
+ options->battleScene = 0; // on
+ options->buttonMode = 0; // normal
+ options->frame = 0; // frame 1
+}
+
+void Options_SetButtonModeOnMain(struct SaveBlock2 * sav2, u32 buttonMode) {
+ if (sav2 != NULL) {
+ buttonMode = Options_GetButtonMode(Sav2_PlayerData_GetOptionsAddr(sav2));
+ }
+
+ switch (buttonMode) {
+ case 1:
+ gMain.unk34 = 1;
+ break;
+ case 2:
+ gMain.unk34 = 3;
+ break;
+ case 0:
+ default:
+ gMain.unk34 = 0;
+ break;
+ }
+}
+
+u16 Options_GetTextSpeed(struct Options * options) {
+ return options->textSpeed;
+}
+
+void Options_SetTextSpeed(struct Options * options, u16 textSpeed) {
+ options->textSpeed = (u16)(u32)textSpeed;
+}
+
+u32 Options_GetTextFrameDelay(struct Options * options) {
+ u16 textSpeed = Options_GetTextSpeed(options);
+
+ if (textSpeed == 0) {
+ return 8;
+ }
+
+ if (textSpeed == 1) {
+ return 4;
+ }
+
+ return 1;
+}
+
+u16 Options_GetSoundMethod(struct Options * options) {
+ return options->soundMethod;
+}
+
+void Options_SetSoundMethod(struct Options * options, u16 soundMethod) {
+ options->soundMethod = (u16)(u32)soundMethod;
+}
+
+u16 Options_GetBattleScene(struct Options * options) {
+ return options->battleScene;
+}
+
+void Options_SetBattleScene(struct Options * options, u16 battleScene) {
+ options->battleScene = (u16)(u32)battleScene;
+}
+
+u16 Options_GetBattleStyle(struct Options * options) {
+ return options->battleStyle;
+}
+
+void Options_SetBattleStyle(struct Options * options, u16 battleStyle) {
+ options->battleStyle = (u16)(u32)battleStyle;
+}
+
+u16 Options_GetButtonMode(struct Options * options) {
+ return options->buttonMode;
+}
+
+void Options_SetButtonMode(struct Options * options, u16 buttonMode) {
+ options->buttonMode = (u16)(u32)buttonMode;
+}
+
+u16 Options_GetFrame(struct Options * options) {
+ return options->frame;
+}
+
+void Options_SetFrame(struct Options * options, u16 frame) {
+ options->frame = (u16)(u32)frame;
+}
diff --git a/arm9/src/unk_02006234.c b/arm9/src/overlay_manager.c
index a493311d..a59e15ac 100644
--- a/arm9/src/unk_02006234.c
+++ b/arm9/src/overlay_manager.c
@@ -2,14 +2,7 @@
#include "main.h"
#include "poke_overlay.h"
#include "heap.h"
-
-struct UnkStruct_02006234 * OverlayManager_new(struct Unk21DBE18 * ovly_mgr, int * a1, u32 heap_id); //todo header?
-void OverlayManager_delete(struct UnkStruct_02006234 * a0);
-void * OverlayManager_CreateAndGetData(struct UnkStruct_02006234 * a0, u32 size, u32 heap_id);
-void * OverlayManager_GetData(struct UnkStruct_02006234 * a0);
-void OverlayManager_FreeData(struct UnkStruct_02006234 * a0);
-int * OverlayManager_GetField18(struct UnkStruct_02006234 * a0);
-BOOL OverlayManager_Run(struct UnkStruct_02006234 * a0);
+#include "overlay_manager.h"
THUMB_FUNC struct UnkStruct_02006234 * OverlayManager_new(struct Unk21DBE18 * ovly_mgr, int * a1, u32 heap_id)
{
diff --git a/arm9/src/sound.c b/arm9/src/sound.c
index dd928287..a1e31bbd 100644
--- a/arm9/src/sound.c
+++ b/arm9/src/sound.c
@@ -38,7 +38,7 @@ void InitSoundData(void * a0, struct Options * a1)
FUN_020040A4(sdat);
UNK_02107070[1] = 0;
sdat->unk_BCD4C = a0;
- FUN_02004D60(a1->unk0_4);
+ FUN_02004D60(a1->soundMethod);
}
void DoSoundUpdateFrame(void)
diff --git a/arm9/src/unk_0200CA44.c b/arm9/src/unk_0200CA44.c
index fc4656b2..fd703cd3 100644
--- a/arm9/src/unk_0200CA44.c
+++ b/arm9/src/unk_0200CA44.c
@@ -2,30 +2,30 @@
#include "main.h"
#include "unk_0200CA44.h"
-extern void FUN_0201B60C(void *, void (*)(void *, void *), void *, void *);
+extern BOOL FUN_0201B60C(void *, void (*)(u32, void *), void *, void *);
extern void FUN_0201B6A0(s32);
-THUMB_FUNC void FUN_0200CA44(void (*r0)(void *, void *), void * r1, void * r2)
+THUMB_FUNC BOOL FUN_0200CA44(void (*r0)(u32, void *), void * r1, void * r2)
{
- FUN_0201B60C(gMain.unk18, r0, r1, r2);
+ return FUN_0201B60C(gMain.unk18, r0, r1, r2);
}
-THUMB_FUNC void FUN_0200CA60(void (*r0)(void *, void *), void * r1, void * r2)
+THUMB_FUNC BOOL FUN_0200CA60(void (*r0)(u32, void *), void * r1, void * r2)
{
- FUN_0201B60C(gMain.unk1C, r0, r1, r2);
+ return FUN_0201B60C(gMain.unk1C, r0, r1, r2);
}
-THUMB_FUNC void FUN_0200CA7C(void (*r0)(void *, void *), void * r1, void * r2)
+THUMB_FUNC BOOL FUN_0200CA7C(void (*r0)(u32, void *), void * r1, void * r2)
{
- FUN_0201B60C(gMain.unk24, r0, r1, r2);
+ return FUN_0201B60C(gMain.unk24, r0, r1, r2);
}
-THUMB_FUNC void FUN_0200CA98(void (*r0)(void *, void *), void * r1, void * r2)
+THUMB_FUNC BOOL FUN_0200CA98(void (*r0)(u32, void *), void * r1, void * r2)
{
- FUN_0201B60C(gMain.unk20, r0, r1, r2);
+ return FUN_0201B60C(gMain.unk20, r0, r1, r2);
}
-THUMB_FUNC void FUN_0200CAB4(s32 unk1)
+THUMB_FUNC void FUN_0200CAB4(s32 unk1) //bool?
{
FUN_0201B6A0(unk1);
}
diff --git a/arm9/src/unk_0202C144.c b/arm9/src/unk_0202C144.c
index 27125eb3..b7dd45aa 100644
--- a/arm9/src/unk_0202C144.c
+++ b/arm9/src/unk_0202C144.c
@@ -1,18 +1,26 @@
#include "global.h"
-#include "pokemon.h"
#include "pokedex.h"
-#include "save_block_2.h"
-#include "unk_02029FBO.h"
#include "poketch.h"
+#include "unk_02029FB0.h"
+#include "unk_0202C144.h"
-THUMB_FUNC void FUN_0202C144(struct SaveBlock2 *sav2, struct Pokemon *pokemon) {
- if (GetMonData(pokemon, MON_DATA_IS_EGG, NULL) == 0)
+#pragma thumb on
+
+extern struct UnkStruct_02029FB0 * FUN_02029FC8(struct SaveBlock2 * sav2);
+extern void FUN_0202A1C4(struct UnkStruct_02029FB0 * unk, struct Pokedex * pokedex, u16 species);
+
+void FUN_0202C144(struct SaveBlock2 * sav2, struct Pokemon * mon)
+{
+ u32 is_egg = GetMonData(mon, MON_DATA_IS_EGG, NULL);
+ if (!is_egg)
{
- struct Pokedex *pokedex = Sav2_Pokedex_get(sav2);
- void *unkSavStruct = FUN_02029FC8(sav2); /* SavArray_get(sav2, 20) */
+ struct Pokedex * pokedex = Sav2_Pokedex_get(sav2);
+ struct UnkStruct_02029FB0 * unk = FUN_02029FC8(sav2);
+ u32 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
+ FUN_0202A1C4(unk, pokedex, (u16)species);
+ Pokedex_SetMonCaughtFlag(pokedex, mon);
- FUN_0202A1C4(unkSavStruct, pokedex, GetMonData(pokemon, MON_DATA_SPECIES, NULL));
- Pokedex_SetMonCaughtFlag(pokedex, pokemon);
- Sav2_Poketch_PokemonHistoryAddMon(Sav2_Poketch_get(sav2), &pokemon->box);
+ struct SavePoketch * poketch = Sav2_Poketch_get(sav2);
+ Sav2_Poketch_PokemonHistoryAddMon(poketch, &mon->box);
}
-} \ No newline at end of file
+}
diff --git a/contrib/docker/Dockerfile.ubuntu b/contrib/docker/Dockerfile.ubuntu
new file mode 100644
index 00000000..d06b15f2
--- /dev/null
+++ b/contrib/docker/Dockerfile.ubuntu
@@ -0,0 +1,13 @@
+FROM ubuntu:20.04
+
+RUN dpkg --add-architecture i386 && \
+apt update && \
+DEBIAN_FRONTEND=noninteractive apt install -y --no-install-recommends binutils-arm-none-eabi build-essential git libpng-dev wine wine32 && \
+rm -r /var/cache/apt/archives /var/lib/apt/lists
+
+WORKDIR /app
+
+# Run a persistent wineserver to avoid errors like
+# wine: a wine server seems to be running, but I cannot connect to it.
+RUN mkdir -p /root/.wine
+CMD /usr/lib/wine/wineserver32 -f -p
diff --git a/contrib/docker/build_docker.sh b/contrib/docker/build_docker.sh
index b59e2158..dafacbe7 100755
--- a/contrib/docker/build_docker.sh
+++ b/contrib/docker/build_docker.sh
@@ -1,11 +1,29 @@
#!/bin/sh
-ver="0.1"
+PROJECT_PATH="$(git rev-parse --show-toplevel)"
+PROJECT_NAME="pokediamond"
+PROJECT_VER="0.1"
-docker inspect pokediamond:$ver > /dev/null
-if [ $? = 0 ]; then
- echo "Not rebuilding image since image exists";
+# Build container image
+IMAGE_NAME="$PROJECT_NAME:$PROJECT_VER"
+IMAGE_PATH="$PROJECT_PATH/contrib/docker"
+if docker inspect $IMAGE_NAME > /dev/null; then
+ echo "Not rebuilding image since it already exists";
+elif [ "x$USE_UBUNTU" != "x" ]; then
+ docker build -t $IMAGE_NAME -f $IMAGE_PATH/Dockerfile.ubuntu $IMAGE_PATH
else
- docker build -t pokediamond:$ver $(git rev-parse --show-toplevel)/contrib/docker
+ docker build -t $IMAGE_NAME $IMAGE_PATH
fi
-docker run --network=none -it -v $(git rev-parse --show-toplevel):/app pokediamond:$ver
+
+# Start container and wine server
+CONTAINER_NAME="$PROJECT_NAME-build"
+docker run -d --name $CONTAINER_NAME --network=none -it --rm -v $PROJECT_PATH:/app $IMAGE_NAME
+
+# Build selected project, always exit successfully to ensure container stops
+EXIT_CODE="0"
+docker exec -i -t $CONTAINER_NAME make $@ || EXIT_CODE="$?"
+
+# Exit and remove the container
+docker stop $CONTAINER_NAME
+
+exit $EXIT_CODE
diff --git a/files/poketool/icongra/poke_icon/.gitignore b/files/poketool/icongra/poke_icon/.gitignore
index c51d6333..ce012113 100644
--- a/files/poketool/icongra/poke_icon/.gitignore
+++ b/files/poketool/icongra/poke_icon/.gitignore
@@ -5,4 +5,8 @@ narc_0009.NCGR
narc_0010.NCGR
narc_0011.NCGR
narc_0012.NCGR
+narc_0013.NCGR
+narc_0014.NCGR
+narc_0015.NCGR
+narc_0016.NCGR
narc_0402.NCGR
diff --git a/files/poketool/icongra/poke_icon/narc_0013.NCGR b/files/poketool/icongra/poke_icon/narc_0013.NCGR
deleted file mode 100644
index 2e4e896e..00000000
--- a/files/poketool/icongra/poke_icon/narc_0013.NCGR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/icongra/poke_icon/narc_0013.png b/files/poketool/icongra/poke_icon/narc_0013.png
new file mode 100644
index 00000000..3c641968
--- /dev/null
+++ b/files/poketool/icongra/poke_icon/narc_0013.png
Binary files differ
diff --git a/files/poketool/icongra/poke_icon/narc_0014.NCGR b/files/poketool/icongra/poke_icon/narc_0014.NCGR
deleted file mode 100644
index 23175ce8..00000000
--- a/files/poketool/icongra/poke_icon/narc_0014.NCGR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/icongra/poke_icon/narc_0014.png b/files/poketool/icongra/poke_icon/narc_0014.png
new file mode 100644
index 00000000..7a4b4616
--- /dev/null
+++ b/files/poketool/icongra/poke_icon/narc_0014.png
Binary files differ
diff --git a/files/poketool/icongra/poke_icon/narc_0015.NCGR b/files/poketool/icongra/poke_icon/narc_0015.NCGR
deleted file mode 100644
index e23cf4a7..00000000
--- a/files/poketool/icongra/poke_icon/narc_0015.NCGR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/icongra/poke_icon/narc_0015.png b/files/poketool/icongra/poke_icon/narc_0015.png
new file mode 100644
index 00000000..2cdfca2d
--- /dev/null
+++ b/files/poketool/icongra/poke_icon/narc_0015.png
Binary files differ
diff --git a/files/poketool/icongra/poke_icon/narc_0016.NCGR b/files/poketool/icongra/poke_icon/narc_0016.NCGR
deleted file mode 100644
index a65abf8d..00000000
--- a/files/poketool/icongra/poke_icon/narc_0016.NCGR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/icongra/poke_icon/narc_0016.png b/files/poketool/icongra/poke_icon/narc_0016.png
new file mode 100644
index 00000000..253d4f8d
--- /dev/null
+++ b/files/poketool/icongra/poke_icon/narc_0016.png
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/.gitignore b/files/poketool/pokegra/pokegra/.gitignore
index 0d0e68a8..2db06bd5 100644
--- a/files/poketool/pokegra/pokegra/.gitignore
+++ b/files/poketool/pokegra/pokegra/.gitignore
@@ -28,6 +28,30 @@ narc_0032.NCGR
narc_0033.NCGR
narc_0034.NCLR
narc_0035.NCLR
+narc_0036.NCGR
+narc_0037.NCGR
+narc_0038.NCGR
+narc_0039.NCGR
+narc_0040.NCLR
+narc_0041.NCLR
+narc_0042.NCGR
+narc_0043.NCGR
+narc_0044.NCGR
+narc_0045.NCGR
+narc_0046.NCLR
+narc_0047.NCLR
+narc_0048.NCGR
+narc_0049.NCGR
+narc_0050.NCGR
+narc_0051.NCGR
+narc_0052.NCLR
+narc_0053.NCLR
+narc_0054.NCGR
+narc_0055.NCGR
+narc_0056.NCGR
+narc_0057.NCGR
+narc_0058.NCLR
+narc_0059.NCLR
narc_2370.NCGR
narc_2371.NCGR
narc_2372.NCGR
diff --git a/files/poketool/pokegra/pokegra/narc_0036.NCGR b/files/poketool/pokegra/pokegra/narc_0036.NCGR
deleted file mode 100644
index bb9466f2..00000000
--- a/files/poketool/pokegra/pokegra/narc_0036.NCGR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0036.png b/files/poketool/pokegra/pokegra/narc_0036.png
new file mode 100644
index 00000000..1651dd87
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0036.png
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0036.png.key b/files/poketool/pokegra/pokegra/narc_0036.png.key
new file mode 100644
index 00000000..b52d8e8a
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0036.png.key
@@ -0,0 +1 @@
+™Òè) \ No newline at end of file
diff --git a/files/poketool/pokegra/pokegra/narc_0037.NCGR b/files/poketool/pokegra/pokegra/narc_0037.NCGR
deleted file mode 100644
index bb9466f2..00000000
--- a/files/poketool/pokegra/pokegra/narc_0037.NCGR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0037.png b/files/poketool/pokegra/pokegra/narc_0037.png
new file mode 100644
index 00000000..1651dd87
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0037.png
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0037.png.key b/files/poketool/pokegra/pokegra/narc_0037.png.key
new file mode 100644
index 00000000..b52d8e8a
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0037.png.key
@@ -0,0 +1 @@
+™Òè) \ No newline at end of file
diff --git a/files/poketool/pokegra/pokegra/narc_0038.NCGR b/files/poketool/pokegra/pokegra/narc_0038.NCGR
deleted file mode 100644
index c9146e9f..00000000
--- a/files/poketool/pokegra/pokegra/narc_0038.NCGR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0038.png b/files/poketool/pokegra/pokegra/narc_0038.png
new file mode 100644
index 00000000..08d8504c
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0038.png
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0038.png.key b/files/poketool/pokegra/pokegra/narc_0038.png.key
new file mode 100644
index 00000000..54a91c0e
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0038.png.key
@@ -0,0 +1 @@
+ÛÖ#å \ No newline at end of file
diff --git a/files/poketool/pokegra/pokegra/narc_0039.NCGR b/files/poketool/pokegra/pokegra/narc_0039.NCGR
deleted file mode 100644
index c9146e9f..00000000
--- a/files/poketool/pokegra/pokegra/narc_0039.NCGR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0039.png b/files/poketool/pokegra/pokegra/narc_0039.png
new file mode 100644
index 00000000..08d8504c
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0039.png
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0039.png.key b/files/poketool/pokegra/pokegra/narc_0039.png.key
new file mode 100644
index 00000000..54a91c0e
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0039.png.key
@@ -0,0 +1 @@
+ÛÖ#å \ No newline at end of file
diff --git a/files/poketool/pokegra/pokegra/narc_0040.NCLR b/files/poketool/pokegra/pokegra/narc_0040.NCLR
deleted file mode 100644
index b6781ea0..00000000
--- a/files/poketool/pokegra/pokegra/narc_0040.NCLR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0040.pal b/files/poketool/pokegra/pokegra/narc_0040.pal
new file mode 100644
index 00000000..d10b3496
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0040.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+131 189 148
+0 0 0
+255 255 255
+205 205 205
+98 98 98
+238 222 123
+238 180 90
+238 131 41
+205 82 65
+131 49 24
+32 156 197
+32 115 148
+8 65 82
+255 213 16
+246 164 16
+230 65 16
diff --git a/files/poketool/pokegra/pokegra/narc_0041.NCLR b/files/poketool/pokegra/pokegra/narc_0041.NCLR
deleted file mode 100644
index 0d402b94..00000000
--- a/files/poketool/pokegra/pokegra/narc_0041.NCLR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0041.pal b/files/poketool/pokegra/pokegra/narc_0041.pal
new file mode 100644
index 00000000..5759cb2c
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0041.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+131 189 148
+0 0 0
+255 255 255
+205 205 205
+98 98 98
+222 222 172
+189 189 172
+131 123 148
+90 90 106
+49 57 65
+246 65 74
+189 32 65
+131 16 41
+230 230 16
+230 180 16
+213 82 16
diff --git a/files/poketool/pokegra/pokegra/narc_0042.NCGR b/files/poketool/pokegra/pokegra/narc_0042.NCGR
deleted file mode 100644
index 24b02709..00000000
--- a/files/poketool/pokegra/pokegra/narc_0042.NCGR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0042.png b/files/poketool/pokegra/pokegra/narc_0042.png
new file mode 100644
index 00000000..1fa3f5fe
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0042.png
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0042.png.key b/files/poketool/pokegra/pokegra/narc_0042.png.key
new file mode 100644
index 00000000..35ce49c7
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0042.png.key
@@ -0,0 +1 @@
+#e \ No newline at end of file
diff --git a/files/poketool/pokegra/pokegra/narc_0043.NCGR b/files/poketool/pokegra/pokegra/narc_0043.NCGR
deleted file mode 100644
index 24b02709..00000000
--- a/files/poketool/pokegra/pokegra/narc_0043.NCGR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0043.png b/files/poketool/pokegra/pokegra/narc_0043.png
new file mode 100644
index 00000000..1fa3f5fe
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0043.png
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0043.png.key b/files/poketool/pokegra/pokegra/narc_0043.png.key
new file mode 100644
index 00000000..35ce49c7
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0043.png.key
@@ -0,0 +1 @@
+#e \ No newline at end of file
diff --git a/files/poketool/pokegra/pokegra/narc_0044.NCGR b/files/poketool/pokegra/pokegra/narc_0044.NCGR
deleted file mode 100644
index 161bc361..00000000
--- a/files/poketool/pokegra/pokegra/narc_0044.NCGR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0044.png b/files/poketool/pokegra/pokegra/narc_0044.png
new file mode 100644
index 00000000..e2cc9cfe
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0044.png
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0044.png.key b/files/poketool/pokegra/pokegra/narc_0044.png.key
new file mode 100644
index 00000000..68e9e799
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0044.png.key
@@ -0,0 +1 @@
+ßÐã \ No newline at end of file
diff --git a/files/poketool/pokegra/pokegra/narc_0045.NCGR b/files/poketool/pokegra/pokegra/narc_0045.NCGR
deleted file mode 100644
index 161bc361..00000000
--- a/files/poketool/pokegra/pokegra/narc_0045.NCGR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0045.png b/files/poketool/pokegra/pokegra/narc_0045.png
new file mode 100644
index 00000000..e2cc9cfe
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0045.png
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0045.png.key b/files/poketool/pokegra/pokegra/narc_0045.png.key
new file mode 100644
index 00000000..68e9e799
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0045.png.key
@@ -0,0 +1 @@
+ßÐã \ No newline at end of file
diff --git a/files/poketool/pokegra/pokegra/narc_0046.NCLR b/files/poketool/pokegra/pokegra/narc_0046.NCLR
deleted file mode 100644
index 544d175e..00000000
--- a/files/poketool/pokegra/pokegra/narc_0046.NCLR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0046.pal b/files/poketool/pokegra/pokegra/narc_0046.pal
new file mode 100644
index 00000000..051fc4a2
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0046.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+205 205 172
+255 255 255
+213 205 205
+213 148 82
+189 106 0
+98 41 0
+255 230 156
+255 213 106
+230 172 90
+205 123 41
+131 41 0
+180 246 238
+148 213 205
+90 172 156
+65 115 98
+16 16 16
diff --git a/files/poketool/pokegra/pokegra/narc_0047.NCLR b/files/poketool/pokegra/pokegra/narc_0047.NCLR
deleted file mode 100644
index bf1924a2..00000000
--- a/files/poketool/pokegra/pokegra/narc_0047.NCLR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0047.pal b/files/poketool/pokegra/pokegra/narc_0047.pal
new file mode 100644
index 00000000..392cf6ed
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0047.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+205 205 172
+255 255 255
+213 205 205
+156 222 123
+90 172 41
+16 90 16
+255 246 148
+255 230 98
+230 189 82
+205 139 32
+131 57 0
+230 246 255
+180 205 255
+123 164 230
+65 98 131
+16 16 16
diff --git a/files/poketool/pokegra/pokegra/narc_0048.NCGR b/files/poketool/pokegra/pokegra/narc_0048.NCGR
deleted file mode 100644
index 1b5aa7f4..00000000
--- a/files/poketool/pokegra/pokegra/narc_0048.NCGR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0048.png b/files/poketool/pokegra/pokegra/narc_0048.png
new file mode 100644
index 00000000..af74fa6f
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0048.png
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0048.png.key b/files/poketool/pokegra/pokegra/narc_0048.png.key
new file mode 100644
index 00000000..290d2bda
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0048.png.key
@@ -0,0 +1 @@
+Íaõ® \ No newline at end of file
diff --git a/files/poketool/pokegra/pokegra/narc_0049.NCGR b/files/poketool/pokegra/pokegra/narc_0049.NCGR
deleted file mode 100644
index 1b5aa7f4..00000000
--- a/files/poketool/pokegra/pokegra/narc_0049.NCGR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0049.png b/files/poketool/pokegra/pokegra/narc_0049.png
new file mode 100644
index 00000000..af74fa6f
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0049.png
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0049.png.key b/files/poketool/pokegra/pokegra/narc_0049.png.key
new file mode 100644
index 00000000..290d2bda
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0049.png.key
@@ -0,0 +1 @@
+Íaõ® \ No newline at end of file
diff --git a/files/poketool/pokegra/pokegra/narc_0050.NCGR b/files/poketool/pokegra/pokegra/narc_0050.NCGR
deleted file mode 100644
index b277cef7..00000000
--- a/files/poketool/pokegra/pokegra/narc_0050.NCGR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0050.png b/files/poketool/pokegra/pokegra/narc_0050.png
new file mode 100644
index 00000000..98fee5cd
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0050.png
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0050.png.key b/files/poketool/pokegra/pokegra/narc_0050.png.key
new file mode 100644
index 00000000..1eed73a4
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0050.png.key
@@ -0,0 +1 @@
+¸Œ#Q \ No newline at end of file
diff --git a/files/poketool/pokegra/pokegra/narc_0051.NCGR b/files/poketool/pokegra/pokegra/narc_0051.NCGR
deleted file mode 100644
index b277cef7..00000000
--- a/files/poketool/pokegra/pokegra/narc_0051.NCGR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0051.png b/files/poketool/pokegra/pokegra/narc_0051.png
new file mode 100644
index 00000000..98fee5cd
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0051.png
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0051.png.key b/files/poketool/pokegra/pokegra/narc_0051.png.key
new file mode 100644
index 00000000..1eed73a4
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0051.png.key
@@ -0,0 +1 @@
+¸Œ#Q \ No newline at end of file
diff --git a/files/poketool/pokegra/pokegra/narc_0052.NCLR b/files/poketool/pokegra/pokegra/narc_0052.NCLR
deleted file mode 100644
index 200cb6da..00000000
--- a/files/poketool/pokegra/pokegra/narc_0052.NCLR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0052.pal b/files/poketool/pokegra/pokegra/narc_0052.pal
new file mode 100644
index 00000000..758092a5
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0052.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+180 180 180
+255 255 255
+230 238 230
+197 213 222
+197 49 0
+205 131 32
+148 98 98
+106 74 24
+222 197 139
+189 139 57
+139 90 32
+197 189 255
+148 139 238
+98 106 197
+65 65 123
+16 16 16
diff --git a/files/poketool/pokegra/pokegra/narc_0053.NCLR b/files/poketool/pokegra/pokegra/narc_0053.NCLR
deleted file mode 100644
index 3b53b2ea..00000000
--- a/files/poketool/pokegra/pokegra/narc_0053.NCLR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0053.pal b/files/poketool/pokegra/pokegra/narc_0053.pal
new file mode 100644
index 00000000..c1107a6f
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0053.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+180 180 180
+255 255 255
+213 246 197
+180 222 189
+197 49 0
+156 197 49
+90 139 16
+57 90 16
+246 213 123
+222 164 65
+164 98 32
+222 222 255
+180 180 246
+139 123 189
+98 82 148
+16 16 16
diff --git a/files/poketool/pokegra/pokegra/narc_0054.NCGR b/files/poketool/pokegra/pokegra/narc_0054.NCGR
deleted file mode 100644
index 3811bd02..00000000
--- a/files/poketool/pokegra/pokegra/narc_0054.NCGR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0054.png b/files/poketool/pokegra/pokegra/narc_0054.png
new file mode 100644
index 00000000..1ebe1403
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0054.png
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0054.png.key b/files/poketool/pokegra/pokegra/narc_0054.png.key
new file mode 100644
index 00000000..2a23ccc4
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0054.png.key
@@ -0,0 +1 @@
+`ó,‚ \ No newline at end of file
diff --git a/files/poketool/pokegra/pokegra/narc_0055.NCGR b/files/poketool/pokegra/pokegra/narc_0055.NCGR
deleted file mode 100644
index 3811bd02..00000000
--- a/files/poketool/pokegra/pokegra/narc_0055.NCGR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0055.png b/files/poketool/pokegra/pokegra/narc_0055.png
new file mode 100644
index 00000000..1ebe1403
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0055.png
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0055.png.key b/files/poketool/pokegra/pokegra/narc_0055.png.key
new file mode 100644
index 00000000..2a23ccc4
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0055.png.key
@@ -0,0 +1 @@
+`ó,‚ \ No newline at end of file
diff --git a/files/poketool/pokegra/pokegra/narc_0056.NCGR b/files/poketool/pokegra/pokegra/narc_0056.NCGR
deleted file mode 100644
index 18e2ee43..00000000
--- a/files/poketool/pokegra/pokegra/narc_0056.NCGR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0056.png b/files/poketool/pokegra/pokegra/narc_0056.png
new file mode 100644
index 00000000..ff1aa71b
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0056.png
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0056.png.key b/files/poketool/pokegra/pokegra/narc_0056.png.key
new file mode 100644
index 00000000..8aff0240
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0056.png.key
@@ -0,0 +1 @@
+)8‹i \ No newline at end of file
diff --git a/files/poketool/pokegra/pokegra/narc_0057.NCGR b/files/poketool/pokegra/pokegra/narc_0057.NCGR
deleted file mode 100644
index 18e2ee43..00000000
--- a/files/poketool/pokegra/pokegra/narc_0057.NCGR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0057.png b/files/poketool/pokegra/pokegra/narc_0057.png
new file mode 100644
index 00000000..ff1aa71b
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0057.png
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0057.png.key b/files/poketool/pokegra/pokegra/narc_0057.png.key
new file mode 100644
index 00000000..8aff0240
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0057.png.key
@@ -0,0 +1 @@
+)8‹i \ No newline at end of file
diff --git a/files/poketool/pokegra/pokegra/narc_0058.NCLR b/files/poketool/pokegra/pokegra/narc_0058.NCLR
deleted file mode 100644
index 777e0ec7..00000000
--- a/files/poketool/pokegra/pokegra/narc_0058.NCLR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0058.pal b/files/poketool/pokegra/pokegra/narc_0058.pal
new file mode 100644
index 00000000..ec525b07
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0058.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+65 180 57
+0 0 0
+255 255 255
+205 205 213
+148 148 148
+74 74 74
+148 172 230
+90 139 205
+32 98 172
+8 57 98
+246 213 156
+230 197 115
+213 172 74
+213 172 74
+139 98 65
+90 57 24
diff --git a/files/poketool/pokegra/pokegra/narc_0059.NCLR b/files/poketool/pokegra/pokegra/narc_0059.NCLR
deleted file mode 100644
index d5989344..00000000
--- a/files/poketool/pokegra/pokegra/narc_0059.NCLR
+++ /dev/null
Binary files differ
diff --git a/files/poketool/pokegra/pokegra/narc_0059.pal b/files/poketool/pokegra/pokegra/narc_0059.pal
new file mode 100644
index 00000000..cb5dfcf6
--- /dev/null
+++ b/files/poketool/pokegra/pokegra/narc_0059.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+65 180 57
+0 0 0
+255 255 255
+205 205 213
+148 148 148
+74 74 74
+238 222 255
+213 180 246
+164 123 189
+115 82 148
+255 213 131
+246 197 98
+230 172 65
+148 222 90
+98 148 65
+32 90 24
diff --git a/files/poketool/trgra/trfgra/narc_0000.png b/files/poketool/trgra/trfgra/narc_0000.png
index a3697191..aa5642f7 100644
--- a/files/poketool/trgra/trfgra/narc_0000.png
+++ b/files/poketool/trgra/trfgra/narc_0000.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0002.png b/files/poketool/trgra/trfgra/narc_0002.png
index d3884147..327459ca 100644
--- a/files/poketool/trgra/trfgra/narc_0002.png
+++ b/files/poketool/trgra/trfgra/narc_0002.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0004.png b/files/poketool/trgra/trfgra/narc_0004.png
index 384e427b..cb49c323 100644
--- a/files/poketool/trgra/trfgra/narc_0004.png
+++ b/files/poketool/trgra/trfgra/narc_0004.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0006.png b/files/poketool/trgra/trfgra/narc_0006.png
index 4e85a9d8..0d70fe28 100644
--- a/files/poketool/trgra/trfgra/narc_0006.png
+++ b/files/poketool/trgra/trfgra/narc_0006.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0008.png b/files/poketool/trgra/trfgra/narc_0008.png
index 89692564..86499bf9 100644
--- a/files/poketool/trgra/trfgra/narc_0008.png
+++ b/files/poketool/trgra/trfgra/narc_0008.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0010.png b/files/poketool/trgra/trfgra/narc_0010.png
index 677d27e1..8485cd64 100644
--- a/files/poketool/trgra/trfgra/narc_0010.png
+++ b/files/poketool/trgra/trfgra/narc_0010.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0012.png b/files/poketool/trgra/trfgra/narc_0012.png
index 64a754c9..f4c3b167 100644
--- a/files/poketool/trgra/trfgra/narc_0012.png
+++ b/files/poketool/trgra/trfgra/narc_0012.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0014.png b/files/poketool/trgra/trfgra/narc_0014.png
index 44776c80..dfadbd12 100644
--- a/files/poketool/trgra/trfgra/narc_0014.png
+++ b/files/poketool/trgra/trfgra/narc_0014.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0016.png b/files/poketool/trgra/trfgra/narc_0016.png
index 00d4d114..71693ec1 100644
--- a/files/poketool/trgra/trfgra/narc_0016.png
+++ b/files/poketool/trgra/trfgra/narc_0016.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0018.png b/files/poketool/trgra/trfgra/narc_0018.png
index 08d15ae1..1601c4ea 100644
--- a/files/poketool/trgra/trfgra/narc_0018.png
+++ b/files/poketool/trgra/trfgra/narc_0018.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0020.png b/files/poketool/trgra/trfgra/narc_0020.png
index 959dc417..4a70d6be 100644
--- a/files/poketool/trgra/trfgra/narc_0020.png
+++ b/files/poketool/trgra/trfgra/narc_0020.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0022.png b/files/poketool/trgra/trfgra/narc_0022.png
index 944de430..f7e15d45 100644
--- a/files/poketool/trgra/trfgra/narc_0022.png
+++ b/files/poketool/trgra/trfgra/narc_0022.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0024.png b/files/poketool/trgra/trfgra/narc_0024.png
index 459114e0..c89113bf 100644
--- a/files/poketool/trgra/trfgra/narc_0024.png
+++ b/files/poketool/trgra/trfgra/narc_0024.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0026.png b/files/poketool/trgra/trfgra/narc_0026.png
index 8aa5ec86..5bd28080 100644
--- a/files/poketool/trgra/trfgra/narc_0026.png
+++ b/files/poketool/trgra/trfgra/narc_0026.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0028.png b/files/poketool/trgra/trfgra/narc_0028.png
index e5eb68dc..553128db 100644
--- a/files/poketool/trgra/trfgra/narc_0028.png
+++ b/files/poketool/trgra/trfgra/narc_0028.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0030.png b/files/poketool/trgra/trfgra/narc_0030.png
index 0baaa549..04a0cc10 100644
--- a/files/poketool/trgra/trfgra/narc_0030.png
+++ b/files/poketool/trgra/trfgra/narc_0030.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0032.png b/files/poketool/trgra/trfgra/narc_0032.png
index 0befdd00..35e9c4f9 100644
--- a/files/poketool/trgra/trfgra/narc_0032.png
+++ b/files/poketool/trgra/trfgra/narc_0032.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0034.png b/files/poketool/trgra/trfgra/narc_0034.png
index 4e047065..80d4e7e6 100644
--- a/files/poketool/trgra/trfgra/narc_0034.png
+++ b/files/poketool/trgra/trfgra/narc_0034.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0036.png b/files/poketool/trgra/trfgra/narc_0036.png
index 6ad45920..c6871ed8 100644
--- a/files/poketool/trgra/trfgra/narc_0036.png
+++ b/files/poketool/trgra/trfgra/narc_0036.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0038.png b/files/poketool/trgra/trfgra/narc_0038.png
index d6b7af72..b0034c89 100644
--- a/files/poketool/trgra/trfgra/narc_0038.png
+++ b/files/poketool/trgra/trfgra/narc_0038.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0040.png b/files/poketool/trgra/trfgra/narc_0040.png
index 4d3412bd..5c64c4f5 100644
--- a/files/poketool/trgra/trfgra/narc_0040.png
+++ b/files/poketool/trgra/trfgra/narc_0040.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0042.png b/files/poketool/trgra/trfgra/narc_0042.png
index 06b3f610..81b7af40 100644
--- a/files/poketool/trgra/trfgra/narc_0042.png
+++ b/files/poketool/trgra/trfgra/narc_0042.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0044.png b/files/poketool/trgra/trfgra/narc_0044.png
index b0a032e2..232d8731 100644
--- a/files/poketool/trgra/trfgra/narc_0044.png
+++ b/files/poketool/trgra/trfgra/narc_0044.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0046.png b/files/poketool/trgra/trfgra/narc_0046.png
index 06b42835..9d957414 100644
--- a/files/poketool/trgra/trfgra/narc_0046.png
+++ b/files/poketool/trgra/trfgra/narc_0046.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0048.png b/files/poketool/trgra/trfgra/narc_0048.png
index da0956dd..e18ec78b 100644
--- a/files/poketool/trgra/trfgra/narc_0048.png
+++ b/files/poketool/trgra/trfgra/narc_0048.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0050.png b/files/poketool/trgra/trfgra/narc_0050.png
index e982ba42..81f6ba27 100644
--- a/files/poketool/trgra/trfgra/narc_0050.png
+++ b/files/poketool/trgra/trfgra/narc_0050.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0052.png b/files/poketool/trgra/trfgra/narc_0052.png
index c2ec9802..f3fdd12f 100644
--- a/files/poketool/trgra/trfgra/narc_0052.png
+++ b/files/poketool/trgra/trfgra/narc_0052.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0054.png b/files/poketool/trgra/trfgra/narc_0054.png
index 4ddb1e0f..e8e3cb7f 100644
--- a/files/poketool/trgra/trfgra/narc_0054.png
+++ b/files/poketool/trgra/trfgra/narc_0054.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0056.png b/files/poketool/trgra/trfgra/narc_0056.png
index 600b10fb..358e325b 100644
--- a/files/poketool/trgra/trfgra/narc_0056.png
+++ b/files/poketool/trgra/trfgra/narc_0056.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0058.png b/files/poketool/trgra/trfgra/narc_0058.png
index 809a5f3a..95a196ee 100644
--- a/files/poketool/trgra/trfgra/narc_0058.png
+++ b/files/poketool/trgra/trfgra/narc_0058.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0060.png b/files/poketool/trgra/trfgra/narc_0060.png
index ab4a3955..6d1b164e 100644
--- a/files/poketool/trgra/trfgra/narc_0060.png
+++ b/files/poketool/trgra/trfgra/narc_0060.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0062.png b/files/poketool/trgra/trfgra/narc_0062.png
index 99b03a45..e6d66357 100644
--- a/files/poketool/trgra/trfgra/narc_0062.png
+++ b/files/poketool/trgra/trfgra/narc_0062.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0064.png b/files/poketool/trgra/trfgra/narc_0064.png
index a3c15ec4..ea8acae8 100644
--- a/files/poketool/trgra/trfgra/narc_0064.png
+++ b/files/poketool/trgra/trfgra/narc_0064.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0066.png b/files/poketool/trgra/trfgra/narc_0066.png
index 65fd1a5e..3b8ec7c3 100644
--- a/files/poketool/trgra/trfgra/narc_0066.png
+++ b/files/poketool/trgra/trfgra/narc_0066.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0068.png b/files/poketool/trgra/trfgra/narc_0068.png
index 51e71a5a..6699e5f1 100644
--- a/files/poketool/trgra/trfgra/narc_0068.png
+++ b/files/poketool/trgra/trfgra/narc_0068.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0070.png b/files/poketool/trgra/trfgra/narc_0070.png
index 79d2779d..1ff7e9d0 100644
--- a/files/poketool/trgra/trfgra/narc_0070.png
+++ b/files/poketool/trgra/trfgra/narc_0070.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0072.png b/files/poketool/trgra/trfgra/narc_0072.png
index f8f854ed..2a401481 100644
--- a/files/poketool/trgra/trfgra/narc_0072.png
+++ b/files/poketool/trgra/trfgra/narc_0072.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0074.png b/files/poketool/trgra/trfgra/narc_0074.png
index f852ec6b..181e3774 100644
--- a/files/poketool/trgra/trfgra/narc_0074.png
+++ b/files/poketool/trgra/trfgra/narc_0074.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0076.png b/files/poketool/trgra/trfgra/narc_0076.png
index cc986e83..31727042 100644
--- a/files/poketool/trgra/trfgra/narc_0076.png
+++ b/files/poketool/trgra/trfgra/narc_0076.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0078.png b/files/poketool/trgra/trfgra/narc_0078.png
index db0239b4..27ddaf76 100644
--- a/files/poketool/trgra/trfgra/narc_0078.png
+++ b/files/poketool/trgra/trfgra/narc_0078.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0080.png b/files/poketool/trgra/trfgra/narc_0080.png
index 24448da2..91c20f4a 100644
--- a/files/poketool/trgra/trfgra/narc_0080.png
+++ b/files/poketool/trgra/trfgra/narc_0080.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0082.png b/files/poketool/trgra/trfgra/narc_0082.png
index 99abb984..9613b1f0 100644
--- a/files/poketool/trgra/trfgra/narc_0082.png
+++ b/files/poketool/trgra/trfgra/narc_0082.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0084.png b/files/poketool/trgra/trfgra/narc_0084.png
index 65b23406..37158f79 100644
--- a/files/poketool/trgra/trfgra/narc_0084.png
+++ b/files/poketool/trgra/trfgra/narc_0084.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0086.png b/files/poketool/trgra/trfgra/narc_0086.png
index b6d9f4d7..1d4e71d4 100644
--- a/files/poketool/trgra/trfgra/narc_0086.png
+++ b/files/poketool/trgra/trfgra/narc_0086.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0088.png b/files/poketool/trgra/trfgra/narc_0088.png
index 80a5e390..60a4f92e 100644
--- a/files/poketool/trgra/trfgra/narc_0088.png
+++ b/files/poketool/trgra/trfgra/narc_0088.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0090.png b/files/poketool/trgra/trfgra/narc_0090.png
index ae518f3e..3014c4ca 100644
--- a/files/poketool/trgra/trfgra/narc_0090.png
+++ b/files/poketool/trgra/trfgra/narc_0090.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0092.png b/files/poketool/trgra/trfgra/narc_0092.png
index 64dece43..1b8d5556 100644
--- a/files/poketool/trgra/trfgra/narc_0092.png
+++ b/files/poketool/trgra/trfgra/narc_0092.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0094.png b/files/poketool/trgra/trfgra/narc_0094.png
index 4a7fc118..3840c0c7 100644
--- a/files/poketool/trgra/trfgra/narc_0094.png
+++ b/files/poketool/trgra/trfgra/narc_0094.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0096.png b/files/poketool/trgra/trfgra/narc_0096.png
index 2b4e4cb4..3ded4743 100644
--- a/files/poketool/trgra/trfgra/narc_0096.png
+++ b/files/poketool/trgra/trfgra/narc_0096.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0098.png b/files/poketool/trgra/trfgra/narc_0098.png
index 25acd449..eef365a3 100644
--- a/files/poketool/trgra/trfgra/narc_0098.png
+++ b/files/poketool/trgra/trfgra/narc_0098.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0100.png b/files/poketool/trgra/trfgra/narc_0100.png
index 89793875..db9621d2 100644
--- a/files/poketool/trgra/trfgra/narc_0100.png
+++ b/files/poketool/trgra/trfgra/narc_0100.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0102.png b/files/poketool/trgra/trfgra/narc_0102.png
index f8519a31..6e73707b 100644
--- a/files/poketool/trgra/trfgra/narc_0102.png
+++ b/files/poketool/trgra/trfgra/narc_0102.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0104.png b/files/poketool/trgra/trfgra/narc_0104.png
index 100e5a92..0b17d14b 100644
--- a/files/poketool/trgra/trfgra/narc_0104.png
+++ b/files/poketool/trgra/trfgra/narc_0104.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0106.png b/files/poketool/trgra/trfgra/narc_0106.png
index 7b21d535..cd77d1e6 100644
--- a/files/poketool/trgra/trfgra/narc_0106.png
+++ b/files/poketool/trgra/trfgra/narc_0106.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0108.png b/files/poketool/trgra/trfgra/narc_0108.png
index 7b99ebaf..5d1c5fff 100644
--- a/files/poketool/trgra/trfgra/narc_0108.png
+++ b/files/poketool/trgra/trfgra/narc_0108.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0110.png b/files/poketool/trgra/trfgra/narc_0110.png
index aacf71bc..1cb82182 100644
--- a/files/poketool/trgra/trfgra/narc_0110.png
+++ b/files/poketool/trgra/trfgra/narc_0110.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0112.png b/files/poketool/trgra/trfgra/narc_0112.png
index 0e707037..cdf4afb7 100644
--- a/files/poketool/trgra/trfgra/narc_0112.png
+++ b/files/poketool/trgra/trfgra/narc_0112.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0114.png b/files/poketool/trgra/trfgra/narc_0114.png
index eda17700..2ce5ef59 100644
--- a/files/poketool/trgra/trfgra/narc_0114.png
+++ b/files/poketool/trgra/trfgra/narc_0114.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0116.png b/files/poketool/trgra/trfgra/narc_0116.png
index c0969fd0..1e61e19c 100644
--- a/files/poketool/trgra/trfgra/narc_0116.png
+++ b/files/poketool/trgra/trfgra/narc_0116.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0118.png b/files/poketool/trgra/trfgra/narc_0118.png
index 46254918..fef42e79 100644
--- a/files/poketool/trgra/trfgra/narc_0118.png
+++ b/files/poketool/trgra/trfgra/narc_0118.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0120.png b/files/poketool/trgra/trfgra/narc_0120.png
index 17b39780..986cd841 100644
--- a/files/poketool/trgra/trfgra/narc_0120.png
+++ b/files/poketool/trgra/trfgra/narc_0120.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0122.png b/files/poketool/trgra/trfgra/narc_0122.png
index 2d479c0a..6b8c479d 100644
--- a/files/poketool/trgra/trfgra/narc_0122.png
+++ b/files/poketool/trgra/trfgra/narc_0122.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0124.png b/files/poketool/trgra/trfgra/narc_0124.png
index debfab77..cb4110df 100644
--- a/files/poketool/trgra/trfgra/narc_0124.png
+++ b/files/poketool/trgra/trfgra/narc_0124.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0126.png b/files/poketool/trgra/trfgra/narc_0126.png
index d623f26d..0d2810d3 100644
--- a/files/poketool/trgra/trfgra/narc_0126.png
+++ b/files/poketool/trgra/trfgra/narc_0126.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0128.png b/files/poketool/trgra/trfgra/narc_0128.png
index db2cd7b1..4c16bc97 100644
--- a/files/poketool/trgra/trfgra/narc_0128.png
+++ b/files/poketool/trgra/trfgra/narc_0128.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0130.png b/files/poketool/trgra/trfgra/narc_0130.png
index dcd5c7df..2e3fbb0f 100644
--- a/files/poketool/trgra/trfgra/narc_0130.png
+++ b/files/poketool/trgra/trfgra/narc_0130.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0132.png b/files/poketool/trgra/trfgra/narc_0132.png
index 0a85e8ae..d3e1e0c6 100644
--- a/files/poketool/trgra/trfgra/narc_0132.png
+++ b/files/poketool/trgra/trfgra/narc_0132.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0134.png b/files/poketool/trgra/trfgra/narc_0134.png
index 5625ad76..da3b4d62 100644
--- a/files/poketool/trgra/trfgra/narc_0134.png
+++ b/files/poketool/trgra/trfgra/narc_0134.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0136.png b/files/poketool/trgra/trfgra/narc_0136.png
index ddd6c1e3..cdcd4ae9 100644
--- a/files/poketool/trgra/trfgra/narc_0136.png
+++ b/files/poketool/trgra/trfgra/narc_0136.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0138.png b/files/poketool/trgra/trfgra/narc_0138.png
index 8d76dda4..8c4cef00 100644
--- a/files/poketool/trgra/trfgra/narc_0138.png
+++ b/files/poketool/trgra/trfgra/narc_0138.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0140.png b/files/poketool/trgra/trfgra/narc_0140.png
index fb71ab7a..6195eb75 100644
--- a/files/poketool/trgra/trfgra/narc_0140.png
+++ b/files/poketool/trgra/trfgra/narc_0140.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0142.png b/files/poketool/trgra/trfgra/narc_0142.png
index a7c23e6d..d6226a7a 100644
--- a/files/poketool/trgra/trfgra/narc_0142.png
+++ b/files/poketool/trgra/trfgra/narc_0142.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0144.png b/files/poketool/trgra/trfgra/narc_0144.png
index 300b779d..c51be8ea 100644
--- a/files/poketool/trgra/trfgra/narc_0144.png
+++ b/files/poketool/trgra/trfgra/narc_0144.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0146.png b/files/poketool/trgra/trfgra/narc_0146.png
index 10f6e2b1..063fa903 100644
--- a/files/poketool/trgra/trfgra/narc_0146.png
+++ b/files/poketool/trgra/trfgra/narc_0146.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0148.png b/files/poketool/trgra/trfgra/narc_0148.png
index 1b889c10..6f3c9b1c 100644
--- a/files/poketool/trgra/trfgra/narc_0148.png
+++ b/files/poketool/trgra/trfgra/narc_0148.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0150.png b/files/poketool/trgra/trfgra/narc_0150.png
index a438f376..cbdad2d7 100644
--- a/files/poketool/trgra/trfgra/narc_0150.png
+++ b/files/poketool/trgra/trfgra/narc_0150.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0152.png b/files/poketool/trgra/trfgra/narc_0152.png
index 09bf1b13..214ea366 100644
--- a/files/poketool/trgra/trfgra/narc_0152.png
+++ b/files/poketool/trgra/trfgra/narc_0152.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0154.png b/files/poketool/trgra/trfgra/narc_0154.png
index 3d09183b..01b319d0 100644
--- a/files/poketool/trgra/trfgra/narc_0154.png
+++ b/files/poketool/trgra/trfgra/narc_0154.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0156.png b/files/poketool/trgra/trfgra/narc_0156.png
index 7cb298f1..e6bb90c9 100644
--- a/files/poketool/trgra/trfgra/narc_0156.png
+++ b/files/poketool/trgra/trfgra/narc_0156.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0158.png b/files/poketool/trgra/trfgra/narc_0158.png
index a8ac3f6a..de3b290f 100644
--- a/files/poketool/trgra/trfgra/narc_0158.png
+++ b/files/poketool/trgra/trfgra/narc_0158.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0160.png b/files/poketool/trgra/trfgra/narc_0160.png
index 1f7c390c..9bc12f17 100644
--- a/files/poketool/trgra/trfgra/narc_0160.png
+++ b/files/poketool/trgra/trfgra/narc_0160.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0162.png b/files/poketool/trgra/trfgra/narc_0162.png
index 452f3532..929f70db 100644
--- a/files/poketool/trgra/trfgra/narc_0162.png
+++ b/files/poketool/trgra/trfgra/narc_0162.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0164.png b/files/poketool/trgra/trfgra/narc_0164.png
index d8be1b0e..25fa032c 100644
--- a/files/poketool/trgra/trfgra/narc_0164.png
+++ b/files/poketool/trgra/trfgra/narc_0164.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0166.png b/files/poketool/trgra/trfgra/narc_0166.png
index c33344ae..5f281e5c 100644
--- a/files/poketool/trgra/trfgra/narc_0166.png
+++ b/files/poketool/trgra/trfgra/narc_0166.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0168.png b/files/poketool/trgra/trfgra/narc_0168.png
index fdf6f6c7..ca5392d9 100644
--- a/files/poketool/trgra/trfgra/narc_0168.png
+++ b/files/poketool/trgra/trfgra/narc_0168.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0170.png b/files/poketool/trgra/trfgra/narc_0170.png
index bcdb5ccb..1ba2e7ac 100644
--- a/files/poketool/trgra/trfgra/narc_0170.png
+++ b/files/poketool/trgra/trfgra/narc_0170.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0172.png b/files/poketool/trgra/trfgra/narc_0172.png
index a4fae35f..cb00b2e9 100644
--- a/files/poketool/trgra/trfgra/narc_0172.png
+++ b/files/poketool/trgra/trfgra/narc_0172.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0174.png b/files/poketool/trgra/trfgra/narc_0174.png
index a08cd4fa..3fe372cf 100644
--- a/files/poketool/trgra/trfgra/narc_0174.png
+++ b/files/poketool/trgra/trfgra/narc_0174.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0176.png b/files/poketool/trgra/trfgra/narc_0176.png
index 51e2ac44..f47fca9c 100644
--- a/files/poketool/trgra/trfgra/narc_0176.png
+++ b/files/poketool/trgra/trfgra/narc_0176.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0178.png b/files/poketool/trgra/trfgra/narc_0178.png
index d889d4b5..c06b470e 100644
--- a/files/poketool/trgra/trfgra/narc_0178.png
+++ b/files/poketool/trgra/trfgra/narc_0178.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0180.png b/files/poketool/trgra/trfgra/narc_0180.png
index 2cfeb088..5c0a01f7 100644
--- a/files/poketool/trgra/trfgra/narc_0180.png
+++ b/files/poketool/trgra/trfgra/narc_0180.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0182.png b/files/poketool/trgra/trfgra/narc_0182.png
index 95ab4f4d..dd04fcbb 100644
--- a/files/poketool/trgra/trfgra/narc_0182.png
+++ b/files/poketool/trgra/trfgra/narc_0182.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0184.png b/files/poketool/trgra/trfgra/narc_0184.png
index 5510418b..c5134e31 100644
--- a/files/poketool/trgra/trfgra/narc_0184.png
+++ b/files/poketool/trgra/trfgra/narc_0184.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0186.png b/files/poketool/trgra/trfgra/narc_0186.png
index eff5735d..37951199 100644
--- a/files/poketool/trgra/trfgra/narc_0186.png
+++ b/files/poketool/trgra/trfgra/narc_0186.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0188.png b/files/poketool/trgra/trfgra/narc_0188.png
index adcaf3cb..20fd19fa 100644
--- a/files/poketool/trgra/trfgra/narc_0188.png
+++ b/files/poketool/trgra/trfgra/narc_0188.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0190.png b/files/poketool/trgra/trfgra/narc_0190.png
index a3697191..aa5642f7 100644
--- a/files/poketool/trgra/trfgra/narc_0190.png
+++ b/files/poketool/trgra/trfgra/narc_0190.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0192.png b/files/poketool/trgra/trfgra/narc_0192.png
index d3884147..327459ca 100644
--- a/files/poketool/trgra/trfgra/narc_0192.png
+++ b/files/poketool/trgra/trfgra/narc_0192.png
Binary files differ
diff --git a/files/poketool/trgra/trfgra/narc_0194.png b/files/poketool/trgra/trfgra/narc_0194.png
index cc7c2d7f..149cc08c 100644
--- a/files/poketool/trgra/trfgra/narc_0194.png
+++ b/files/poketool/trgra/trfgra/narc_0194.png
Binary files differ
diff --git a/filesystem.mk b/filesystem.mk
index 77650c5b..6f48d05b 100644
--- a/filesystem.mk
+++ b/filesystem.mk
@@ -2546,6 +2546,30 @@ files/poketool/pokegra/pokegra.narc: \
files/poketool/pokegra/pokegra/narc_0033.NCGR \
files/poketool/pokegra/pokegra/narc_0034.NCLR \
files/poketool/pokegra/pokegra/narc_0035.NCLR \
+ files/poketool/pokegra/pokegra/narc_0036.NCGR \
+ files/poketool/pokegra/pokegra/narc_0037.NCGR \
+ files/poketool/pokegra/pokegra/narc_0038.NCGR \
+ files/poketool/pokegra/pokegra/narc_0039.NCGR \
+ files/poketool/pokegra/pokegra/narc_0040.NCLR \
+ files/poketool/pokegra/pokegra/narc_0041.NCLR \
+ files/poketool/pokegra/pokegra/narc_0042.NCGR \
+ files/poketool/pokegra/pokegra/narc_0043.NCGR \
+ files/poketool/pokegra/pokegra/narc_0044.NCGR \
+ files/poketool/pokegra/pokegra/narc_0045.NCGR \
+ files/poketool/pokegra/pokegra/narc_0046.NCLR \
+ files/poketool/pokegra/pokegra/narc_0047.NCLR \
+ files/poketool/pokegra/pokegra/narc_0048.NCGR \
+ files/poketool/pokegra/pokegra/narc_0049.NCGR \
+ files/poketool/pokegra/pokegra/narc_0050.NCGR \
+ files/poketool/pokegra/pokegra/narc_0051.NCGR \
+ files/poketool/pokegra/pokegra/narc_0052.NCLR \
+ files/poketool/pokegra/pokegra/narc_0053.NCLR \
+ files/poketool/pokegra/pokegra/narc_0054.NCGR \
+ files/poketool/pokegra/pokegra/narc_0055.NCGR \
+ files/poketool/pokegra/pokegra/narc_0056.NCGR \
+ files/poketool/pokegra/pokegra/narc_0057.NCGR \
+ files/poketool/pokegra/pokegra/narc_0058.NCLR \
+ files/poketool/pokegra/pokegra/narc_0059.NCLR \
files/poketool/pokegra/pokegra/narc_2370.NCGR \
files/poketool/pokegra/pokegra/narc_2371.NCGR \
files/poketool/pokegra/pokegra/narc_2372.NCGR \
@@ -2561,6 +2585,10 @@ files/poketool/icongra/poke_icon.narc: \
files/poketool/icongra/poke_icon/narc_0010.NCGR \
files/poketool/icongra/poke_icon/narc_0011.NCGR \
files/poketool/icongra/poke_icon/narc_0012.NCGR \
+ files/poketool/icongra/poke_icon/narc_0013.NCGR \
+ files/poketool/icongra/poke_icon/narc_0014.NCGR \
+ files/poketool/icongra/poke_icon/narc_0015.NCGR \
+ files/poketool/icongra/poke_icon/narc_0016.NCGR \
files/poketool/icongra/poke_icon/narc_0402.NCGR
files/msgdata/msg.narc: \
diff --git a/graphics_rules.mk b/graphics_rules.mk
index 22b9152c..b0d05eb0 100644
--- a/graphics_rules.mk
+++ b/graphics_rules.mk
@@ -82,6 +82,10 @@ CLOBBER_SIZE_VERSION101_NCGR_FILES := files/graphic/bag_gra/narc_0002.NCGR \
files/poketool/icongra/poke_icon/narc_0010.NCGR \
files/poketool/icongra/poke_icon/narc_0011.NCGR \
files/poketool/icongra/poke_icon/narc_0012.NCGR \
+ files/poketool/icongra/poke_icon/narc_0013.NCGR \
+ files/poketool/icongra/poke_icon/narc_0014.NCGR \
+ files/poketool/icongra/poke_icon/narc_0015.NCGR \
+ files/poketool/icongra/poke_icon/narc_0016.NCGR \
files/poketool/icongra/poke_icon/narc_0402.NCGR
4BPP_NCLR_FILES := files/demo/title/titledemo/narc_0016.NCLR \
@@ -242,6 +246,14 @@ VERSION101_SOPC_NCGR_FILES := files/demo/title/titledemo/narc_0007.NCGR \
files/poketool/pokegra/pokegra/narc_0029.NCLR \
files/poketool/pokegra/pokegra/narc_0034.NCLR \
files/poketool/pokegra/pokegra/narc_0035.NCLR \
+ files/poketool/pokegra/pokegra/narc_0040.NCLR \
+ files/poketool/pokegra/pokegra/narc_0041.NCLR \
+ files/poketool/pokegra/pokegra/narc_0046.NCLR \
+ files/poketool/pokegra/pokegra/narc_0047.NCLR \
+ files/poketool/pokegra/pokegra/narc_0052.NCLR \
+ files/poketool/pokegra/pokegra/narc_0053.NCLR \
+ files/poketool/pokegra/pokegra/narc_0058.NCLR \
+ files/poketool/pokegra/pokegra/narc_0059.NCLR \
files/poketool/pokegra/pokegra/narc_2374.NCLR \
files/poketool/pokegra/pokegra/narc_2375.NCLR
@@ -265,6 +277,22 @@ SCANNED_NCGR_FILES := files/poketool/pokegra/pokegra/narc_0006.NCGR \
files/poketool/pokegra/pokegra/narc_0031.NCGR \
files/poketool/pokegra/pokegra/narc_0032.NCGR \
files/poketool/pokegra/pokegra/narc_0033.NCGR \
+ files/poketool/pokegra/pokegra/narc_0036.NCGR \
+ files/poketool/pokegra/pokegra/narc_0037.NCGR \
+ files/poketool/pokegra/pokegra/narc_0038.NCGR \
+ files/poketool/pokegra/pokegra/narc_0039.NCGR \
+ files/poketool/pokegra/pokegra/narc_0042.NCGR \
+ files/poketool/pokegra/pokegra/narc_0043.NCGR \
+ files/poketool/pokegra/pokegra/narc_0044.NCGR \
+ files/poketool/pokegra/pokegra/narc_0045.NCGR \
+ files/poketool/pokegra/pokegra/narc_0048.NCGR \
+ files/poketool/pokegra/pokegra/narc_0049.NCGR \
+ files/poketool/pokegra/pokegra/narc_0050.NCGR \
+ files/poketool/pokegra/pokegra/narc_0051.NCGR \
+ files/poketool/pokegra/pokegra/narc_0054.NCGR \
+ files/poketool/pokegra/pokegra/narc_0055.NCGR \
+ files/poketool/pokegra/pokegra/narc_0056.NCGR \
+ files/poketool/pokegra/pokegra/narc_0057.NCGR \
files/poketool/pokegra/pokegra/narc_2370.NCGR \
files/poketool/pokegra/pokegra/narc_2371.NCGR \
files/poketool/pokegra/pokegra/narc_2372.NCGR \
@@ -461,6 +489,10 @@ NCGR_CLEAN_LIST := files/data/cell0.NCGR \
files/poketool/icongra/poke_icon/narc_0010.NCGR \
files/poketool/icongra/poke_icon/narc_0011.NCGR \
files/poketool/icongra/poke_icon/narc_0012.NCGR \
+ files/poketool/icongra/poke_icon/narc_0013.NCGR \
+ files/poketool/icongra/poke_icon/narc_0014.NCGR \
+ files/poketool/icongra/poke_icon/narc_0015.NCGR \
+ files/poketool/icongra/poke_icon/narc_0016.NCGR \
files/poketool/icongra/poke_icon/narc_0402.NCGR \
files/poketool/pokegra/pokegra/narc_0006.NCGR \
files/poketool/pokegra/pokegra/narc_0007.NCGR \
@@ -482,6 +514,22 @@ NCGR_CLEAN_LIST := files/data/cell0.NCGR \
files/poketool/pokegra/pokegra/narc_0031.NCGR \
files/poketool/pokegra/pokegra/narc_0032.NCGR \
files/poketool/pokegra/pokegra/narc_0033.NCGR \
+ files/poketool/pokegra/pokegra/narc_0036.NCGR \
+ files/poketool/pokegra/pokegra/narc_0037.NCGR \
+ files/poketool/pokegra/pokegra/narc_0038.NCGR \
+ files/poketool/pokegra/pokegra/narc_0039.NCGR \
+ files/poketool/pokegra/pokegra/narc_0042.NCGR \
+ files/poketool/pokegra/pokegra/narc_0043.NCGR \
+ files/poketool/pokegra/pokegra/narc_0044.NCGR \
+ files/poketool/pokegra/pokegra/narc_0045.NCGR \
+ files/poketool/pokegra/pokegra/narc_0048.NCGR \
+ files/poketool/pokegra/pokegra/narc_0049.NCGR \
+ files/poketool/pokegra/pokegra/narc_0050.NCGR \
+ files/poketool/pokegra/pokegra/narc_0051.NCGR \
+ files/poketool/pokegra/pokegra/narc_0054.NCGR \
+ files/poketool/pokegra/pokegra/narc_0055.NCGR \
+ files/poketool/pokegra/pokegra/narc_0056.NCGR \
+ files/poketool/pokegra/pokegra/narc_0057.NCGR \
files/poketool/pokegra/pokegra/narc_2370.NCGR \
files/poketool/pokegra/pokegra/narc_2371.NCGR \
files/poketool/pokegra/pokegra/narc_2372.NCGR \
@@ -709,6 +757,14 @@ NCLR_CLEAN_LIST := files/data/cell0.NCLR \
files/poketool/pokegra/pokegra/narc_0029.NCLR \
files/poketool/pokegra/pokegra/narc_0034.NCLR \
files/poketool/pokegra/pokegra/narc_0035.NCLR \
+ files/poketool/pokegra/pokegra/narc_0040.NCLR \
+ files/poketool/pokegra/pokegra/narc_0041.NCLR \
+ files/poketool/pokegra/pokegra/narc_0046.NCLR \
+ files/poketool/pokegra/pokegra/narc_0047.NCLR \
+ files/poketool/pokegra/pokegra/narc_0052.NCLR \
+ files/poketool/pokegra/pokegra/narc_0053.NCLR \
+ files/poketool/pokegra/pokegra/narc_0058.NCLR \
+ files/poketool/pokegra/pokegra/narc_0059.NCLR \
files/poketool/pokegra/pokegra/narc_2374.NCLR \
files/poketool/pokegra/pokegra/narc_2375.NCLR \
files/poketool/trgra/trbgra/narc_0000.NCLR \
diff --git a/include/macros.inc b/include/macros.inc
new file mode 100644
index 00000000..eb060422
--- /dev/null
+++ b/include/macros.inc
@@ -0,0 +1,5 @@
+.macro glabel label
+ .global \label
+ .thumb
+ \label:
+.endm
diff --git a/include/main.h b/include/main.h
index 499861a8..d40e22f9 100644
--- a/include/main.h
+++ b/include/main.h
@@ -22,7 +22,7 @@ struct UnkStruct_02006234
u32 unk14;
int * unk18;
void * unk1C;
- u32 unk20;
+ struct SaveBlock2 * unk20;
u32 unk24;
};
diff --git a/include/nitro/PXI_fifo_shared.h b/include/nitro/PXI_fifo_shared.h
index 2698e89d..297625a1 100644
--- a/include/nitro/PXI_fifo_shared.h
+++ b/include/nitro/PXI_fifo_shared.h
@@ -13,6 +13,12 @@
#ifndef POKEDIAMOND_PXI_FIFO_SHARED_H
#define POKEDIAMOND_PXI_FIFO_SHARED_H
+typedef enum
+{
+ PXI_PROC_ARM9 = 0,
+ PXI_PROC_ARM7 = 1
+} PXIProc;
+
typedef enum {
PXI_FIFO_TAG_EX = 0, // Extension format
PXI_FIFO_TAG_USER_0, // for application programmer, use it in free
diff --git a/include/options.h b/include/options.h
index 5f7a3d3f..fbddbffc 100644
--- a/include/options.h
+++ b/include/options.h
@@ -1,15 +1,33 @@
#ifndef POKEDIAMOND_OPTIONS_H
#define POKEDIAMOND_OPTIONS_H
+struct SaveBlock2;
+
struct Options {
- u16 unk0_0:4;
- u16 unk0_4:2;
- u16 unk0_6:1;
- u16 unk0_7:1;
- u16 unk0_8:2;
- u16 unk0_A:5;
+ u16 textSpeed:4;
+ u16 soundMethod:2;
+ u16 battleStyle:1;
+ u16 battleScene:1;
+ u16 buttonMode:2;
+ u16 frame:5;
};
+struct Options * Options_new(u32 heap_id);
+void Options_copy(struct Options * src, struct Options * dest);
void Options_init(struct Options * options);
+void Options_SetButtonModeOnMain(struct SaveBlock2 * sav2, u32 buttonMode);
+u16 Options_GetTextSpeed(struct Options * options);
+void Options_SetTextSpeed(struct Options * options, u16 textSpeed);
+u32 Options_GetTextFrameDelay(struct Options * options);
+u16 Options_GetSoundMethod(struct Options * options);
+void Options_SetSoundMethod(struct Options * options, u16 soundMethod);
+u16 Options_GetBattleScene(struct Options * options);
+void Options_SetBattleScene(struct Options * options, u16 battleScene);
+u16 Options_GetBattleStyle(struct Options * options);
+void Options_SetBattleStyle(struct Options * options, u16 battleStyle);
+u16 Options_GetButtonMode(struct Options * options);
+void Options_SetButtonMode(struct Options * options, u16 buttonMode);
+u16 Options_GetFrame(struct Options * options);
+void Options_SetFrame(struct Options * options, u16 frame);
#endif //POKEDIAMOND_OPTIONS_H
diff --git a/include/overlay_manager.h b/include/overlay_manager.h
new file mode 100644
index 00000000..193bc7e8
--- /dev/null
+++ b/include/overlay_manager.h
@@ -0,0 +1,16 @@
+#ifndef POKEDIAMOND_OVERLAY_MANAGER_H
+#define POKEDIAMOND_OVERLAY_MANAGER_H
+
+#include "nitro/types.h"
+
+struct Unk21DBE18;
+
+struct UnkStruct_02006234 * OverlayManager_new(struct Unk21DBE18 * ovly_mgr, int * a1, u32 heap_id);
+void OverlayManager_delete(struct UnkStruct_02006234 * a0);
+void * OverlayManager_CreateAndGetData(struct UnkStruct_02006234 * a0, u32 size, u32 heap_id);
+void * OverlayManager_GetData(struct UnkStruct_02006234 * a0);
+void OverlayManager_FreeData(struct UnkStruct_02006234 * a0);
+int * OverlayManager_GetField18(struct UnkStruct_02006234 * a0);
+BOOL OverlayManager_Run(struct UnkStruct_02006234 * a0);
+
+#endif //POKEDIAMOND_OVERLAY_MANAGER_H
diff --git a/include/unk_0200CA44.h b/include/unk_0200CA44.h
index 27d58c5c..2e479ab8 100644
--- a/include/unk_0200CA44.h
+++ b/include/unk_0200CA44.h
@@ -1,10 +1,10 @@
#ifndef POKEDIAMOND_UNK_0200CA44_H
#define POKEDIAMOND_UNK_0200CA44_H
-void FUN_0200CA44(void (*r0)(void *, void *), void * r1, void * r2);
-void FUN_0200CA60(void (*r0)(void *, void *), void * r1, void * r2);
-void FUN_0200CA7C(void (*r0)(void *, void *), void * r1, void * r2);
-void FUN_0200CA98(void (*r0)(void *, void *), void * r1, void * r2);
+BOOL FUN_0200CA44(void (*r0)(u32, void *), void * r1, void * r2);
+BOOL FUN_0200CA60(void (*r0)(u32, void *), void * r1, void * r2);
+BOOL FUN_0200CA7C(void (*r0)(u32, void *), void * r1, void * r2);
+BOOL FUN_0200CA98(void (*r0)(u32, void *), void * r1, void * r2);
void FUN_0200CAB4(s32 unk1);
#endif //POKEDIAMOND_UNK_0200CA44_H
diff --git a/include/unk_02029FB0.h b/include/unk_02029FB0.h
new file mode 100644
index 00000000..545a6d3a
--- /dev/null
+++ b/include/unk_02029FB0.h
@@ -0,0 +1,9 @@
+#ifndef POKEDIAMOND_UNK_02029FB0_H
+#define POKEDIAMOND_UNK_02029FB0_H
+
+struct UnkStruct_02029FB0
+{
+ u8 unk[0x14C];
+};
+
+#endif
diff --git a/include/unk_0202C144.h b/include/unk_0202C144.h
index 31d3942c..95ca3be4 100644
--- a/include/unk_0202C144.h
+++ b/include/unk_0202C144.h
@@ -1,6 +1,9 @@
#ifndef POKEDIAMOND_UNK_0202C144_H
#define POKEDIAMOND_UNK_0202C144_H
+#include "save_block_2.h"
+#include "pokemon.h"
+
void FUN_0202C144(struct SaveBlock2 * sav2, struct Pokemon * mon);
#endif //POKEDIAMOND_UNK_0202C144_H
diff --git a/tools/asm_processor/asm_processor.py b/tools/asm_processor/asm_processor.py
new file mode 100644
index 00000000..e3226cb2
--- /dev/null
+++ b/tools/asm_processor/asm_processor.py
@@ -0,0 +1,1261 @@
+#!/usr/bin/env python3
+import argparse
+import tempfile
+import struct
+import copy
+import sys
+import re
+import os
+from collections import namedtuple, defaultdict
+from io import StringIO
+
+MAX_FN_SIZE = 100
+SLOW_CHECKS = False
+
+EI_NIDENT = 16
+EI_CLASS = 4
+EI_DATA = 5
+EI_VERSION = 6
+EI_OSABI = 7
+EI_ABIVERSION = 8
+STN_UNDEF = 0
+
+SHN_UNDEF = 0
+SHN_ABS = 0xfff1
+SHN_COMMON = 0xfff2
+SHN_XINDEX = 0xffff
+SHN_LORESERVE = 0xff00
+
+STT_NOTYPE = 0
+STT_OBJECT = 1
+STT_FUNC = 2
+STT_SECTION = 3
+STT_FILE = 4
+STT_COMMON = 5
+STT_TLS = 6
+
+STB_LOCAL = 0
+STB_GLOBAL = 1
+STB_WEAK = 2
+
+STV_DEFAULT = 0
+STV_INTERNAL = 1
+STV_HIDDEN = 2
+STV_PROTECTED = 3
+
+SHT_NULL = 0
+SHT_PROGBITS = 1
+SHT_SYMTAB = 2
+SHT_STRTAB = 3
+SHT_RELA = 4
+SHT_HASH = 5
+SHT_DYNAMIC = 6
+SHT_NOTE = 7
+SHT_NOBITS = 8
+SHT_REL = 9
+SHT_SHLIB = 10
+SHT_DYNSYM = 11
+SHT_INIT_ARRAY = 14
+SHT_FINI_ARRAY = 15
+SHT_PREINIT_ARRAY = 16
+SHT_GROUP = 17
+SHT_SYMTAB_SHNDX = 18
+SHT_MIPS_GPTAB = 0x70000003
+SHT_MIPS_DEBUG = 0x70000005
+SHT_MIPS_REGINFO = 0x70000006
+SHT_MIPS_OPTIONS = 0x7000000d
+
+SHF_WRITE = 0x1
+SHF_ALLOC = 0x2
+SHF_EXECINSTR = 0x4
+SHF_MERGE = 0x10
+SHF_STRINGS = 0x20
+SHF_INFO_LINK = 0x40
+SHF_LINK_ORDER = 0x80
+SHF_OS_NONCONFORMING = 0x100
+SHF_GROUP = 0x200
+SHF_TLS = 0x400
+
+R_MIPS_32 = 2
+R_MIPS_26 = 4
+R_MIPS_HI16 = 5
+R_MIPS_LO16 = 6
+
+
+class ElfHeader:
+ """
+ typedef struct {
+ unsigned char e_ident[EI_NIDENT];
+ Elf32_Half e_type;
+ Elf32_Half e_machine;
+ Elf32_Word e_version;
+ Elf32_Addr e_entry;
+ Elf32_Off e_phoff;
+ Elf32_Off e_shoff;
+ Elf32_Word e_flags;
+ Elf32_Half e_ehsize;
+ Elf32_Half e_phentsize;
+ Elf32_Half e_phnum;
+ Elf32_Half e_shentsize;
+ Elf32_Half e_shnum;
+ Elf32_Half e_shstrndx;
+ } Elf32_Ehdr;
+ """
+
+ def __init__(self, data):
+ self.e_ident = data[:EI_NIDENT]
+ self.e_type, self.e_machine, self.e_version, self.e_entry, self.e_phoff, self.e_shoff, self.e_flags, self.e_ehsize, self.e_phentsize, self.e_phnum, self.e_shentsize, self.e_shnum, self.e_shstrndx = struct.unpack('<HHIIIIIHHHHHH', data[EI_NIDENT:])
+ assert self.e_ident[EI_CLASS] == 1 # 32-bit
+ #assert self.e_ident[EI_DATA] == 2 # big-endian
+ #assert self.e_type == 1 # relocatable
+ #assert self.e_machine == 8 # MIPS I Architecture
+ assert self.e_phoff == 0 # no program header
+ assert self.e_shoff != 0 # section header
+ assert self.e_shstrndx != SHN_UNDEF
+
+ def to_bin(self):
+ return self.e_ident + struct.pack('<HHIIIIIHHHHHH', self.e_type,
+ self.e_machine, self.e_version, self.e_entry, self.e_phoff,
+ self.e_shoff, self.e_flags, self.e_ehsize, self.e_phentsize,
+ self.e_phnum, self.e_shentsize, self.e_shnum, self.e_shstrndx)
+
+
+class Symbol:
+ """
+ typedef struct {
+ Elf32_Word st_name;
+ Elf32_Addr st_value;
+ Elf32_Word st_size;
+ unsigned char st_info;
+ unsigned char st_other;
+ Elf32_Half st_shndx;
+ } Elf32_Sym;
+ """
+
+ def __init__(self, data, strtab):
+ self.st_name, self.st_value, self.st_size, st_info, self.st_other, self.st_shndx = struct.unpack('<IIIBBH', data)
+ assert self.st_shndx != SHN_XINDEX, "too many sections (SHN_XINDEX not supported)"
+ self.bind = st_info >> 4
+ self.type = st_info & 15
+ self.name = strtab.lookup_str(self.st_name)
+ self.visibility = self.st_other & 3
+
+ def to_bin(self):
+ st_info = (self.bind << 4) | self.type
+ return struct.pack('<IIIBBH', self.st_name, self.st_value, self.st_size, st_info, self.st_other, self.st_shndx)
+
+
+class Relocation:
+ def __init__(self, data, sh_type):
+ self.sh_type = sh_type
+ if sh_type == SHT_REL:
+ self.r_offset, self.r_info = struct.unpack('<II', data)
+ else:
+ self.r_offset, self.r_info, self.r_addend = struct.unpack('<III', data)
+ self.sym_index = self.r_info >> 8
+ self.rel_type = self.r_info & 0xff
+
+ def to_bin(self):
+ self.r_info = (self.sym_index << 8) | self.rel_type
+ if self.sh_type == SHT_REL:
+ return struct.pack('<II', self.r_offset, self.r_info)
+ else:
+ return struct.pack('<III', self.r_offset, self.r_info, self.r_addend)
+
+class Section:
+ """
+ typedef struct {
+ Elf32_Word sh_name;
+ Elf32_Word sh_type;
+ Elf32_Word sh_flags;
+ Elf32_Addr sh_addr;
+ Elf32_Off sh_offset;
+ Elf32_Word sh_size;
+ Elf32_Word sh_link;
+ Elf32_Word sh_info;
+ Elf32_Word sh_addralign;
+ Elf32_Word sh_entsize;
+ } Elf32_Shdr;
+ """
+
+ def __init__(self, header, data, index):
+ self.sh_name, self.sh_type, self.sh_flags, self.sh_addr, self.sh_offset, self.sh_size, self.sh_link, self.sh_info, self.sh_addralign, self.sh_entsize = struct.unpack('<IIIIIIIIII', header)
+ assert not self.sh_flags & SHF_LINK_ORDER
+ if self.sh_entsize != 0:
+ assert self.sh_size % self.sh_entsize == 0
+ if self.sh_type == SHT_NOBITS:
+ self.data = ''
+ else:
+ self.data = data[self.sh_offset:self.sh_offset + self.sh_size]
+ self.index = index
+ self.relocated_by = []
+
+ @staticmethod
+ def from_parts(sh_name, sh_type, sh_flags, sh_link, sh_info, sh_addralign, sh_entsize, data, index):
+ header = struct.pack('<IIIIIIIIII', sh_name, sh_type, sh_flags, 0, 0, len(data), sh_link, sh_info, sh_addralign, sh_entsize)
+ return Section(header, data, index)
+
+ def lookup_str(self, index):
+ assert self.sh_type == SHT_STRTAB
+ to = self.data.find(b'\0', index)
+ assert to != -1
+ return self.data[index:to].decode('latin1')
+
+ def add_str(self, string):
+ assert self.sh_type == SHT_STRTAB
+ ret = len(self.data)
+ self.data += string.encode('latin1') + b'\0'
+ return ret
+
+ def is_rel(self):
+ return self.sh_type == SHT_REL or self.sh_type == SHT_RELA
+
+ def header_to_bin(self):
+ if self.sh_type != SHT_NOBITS:
+ self.sh_size = len(self.data)
+ return struct.pack('<IIIIIIIIII', self.sh_name, self.sh_type, self.sh_flags, self.sh_addr, self.sh_offset, self.sh_size, self.sh_link, self.sh_info, self.sh_addralign, self.sh_entsize)
+
+ def late_init(self, sections):
+ if self.sh_type == SHT_SYMTAB:
+ self.init_symbols(sections)
+ elif self.is_rel():
+ self.rel_target = sections[self.sh_info]
+ self.rel_target.relocated_by.append(self)
+ self.init_relocs()
+
+ def find_symbol(self, name):
+ assert self.sh_type == SHT_SYMTAB
+ for s in self.symbol_entries:
+ if s.name == name:
+ return (s.st_shndx, s.st_value)
+ return None
+
+ def find_symbol_in_section(self, name, section):
+ pos = self.find_symbol(name)
+ assert pos is not None
+ assert pos[0] == section.index
+ return pos[1]
+
+ def init_symbols(self, sections):
+ assert self.sh_type == SHT_SYMTAB
+ assert self.sh_entsize == 16
+ self.strtab = sections[self.sh_link]
+ entries = []
+ for i in range(0, self.sh_size, self.sh_entsize):
+ entries.append(Symbol(self.data[i:i+self.sh_entsize], self.strtab))
+ self.symbol_entries = entries
+
+ def init_relocs(self):
+ assert self.is_rel()
+ entries = []
+ for i in range(0, self.sh_size, self.sh_entsize):
+ entries.append(Relocation(self.data[i:i+self.sh_entsize], self.sh_type))
+ self.relocations = entries
+
+ def local_symbols(self):
+ assert self.sh_type == SHT_SYMTAB
+ return self.symbol_entries[:self.sh_info]
+
+ def global_symbols(self):
+ assert self.sh_type == SHT_SYMTAB
+ return self.symbol_entries[self.sh_info:]
+
+
+class ElfFile:
+ def __init__(self, data):
+ self.data = data
+ assert data[:4] == b'\x7fELF', "not an ELF file"
+
+ self.elf_header = ElfHeader(data[0:52])
+
+ offset, size = self.elf_header.e_shoff, self.elf_header.e_shentsize
+ null_section = Section(data[offset:offset + size], data, 0)
+ num_sections = self.elf_header.e_shnum or null_section.sh_size
+
+ self.sections = [null_section]
+ for i in range(1, num_sections):
+ ind = offset + i * size
+ self.sections.append(Section(data[ind:ind + size], data, i))
+
+ symtab = None
+ for s in self.sections:
+ if s.sh_type == SHT_SYMTAB:
+ assert not symtab
+ symtab = s
+ assert symtab is not None
+ self.symtab = symtab
+
+ shstr = self.sections[self.elf_header.e_shstrndx]
+ for s in self.sections:
+ s.name = shstr.lookup_str(s.sh_name)
+ s.late_init(self.sections)
+
+ def find_section(self, name, num):
+ i = 0 # Count how many sections of name `name` have been encountered so far, when i reaches `num` return that section
+ for s in self.sections:
+ if s.name == name and i == num:
+ return s
+ # Increment if section is a .text section
+ if s.name == ".text":
+ i += 1
+ return None
+
+ # Because Metrowerks for DS can make duplicate .text sections
+ # for every function, we may need to lookup a specific .text area.
+ def find_section_with_name(self, name, st_name):
+ for s in self.sections:
+ if s.name == name and s.sh_name == st_name:
+ return s
+ return None
+
+ # Return i, where i is the ith text section corresponding to the function
+ # called `name`.
+ def text_section_index(self, name):
+ st_shndx, _ = self.symtab.find_symbol(name)
+ n_text = 0
+ for sec in self.sections:
+ if sec.index == st_shndx:
+ return n_text
+ if sec.name =='.text':
+ n_text += 1
+ return -1
+
+ def add_section(self, name, sh_type, sh_flags, sh_link, sh_info, sh_addralign, sh_entsize, data):
+ shstr = self.sections[self.elf_header.e_shstrndx]
+ sh_name = shstr.add_str(name)
+ s = Section.from_parts(sh_name=sh_name, sh_type=sh_type,
+ sh_flags=sh_flags, sh_link=sh_link, sh_info=sh_info,
+ sh_addralign=sh_addralign, sh_entsize=sh_entsize, data=data,
+ index=len(self.sections))
+ self.sections.append(s)
+ s.name = name
+ s.late_init(self.sections)
+ return s
+
+ def drop_irrelevant_sections(self):
+ # We can only drop sections at the end, since otherwise section
+ # references might be wrong. Luckily, these sections typically are.
+ while self.sections[-1].sh_type in [SHT_MIPS_DEBUG, SHT_MIPS_GPTAB]:
+ self.sections.pop()
+
+ def write(self, filename):
+ outfile = open(filename, 'wb')
+ outidx = 0
+ def write_out(data):
+ nonlocal outidx
+ outfile.write(data)
+ outidx += len(data)
+ def pad_out(align):
+ if align and outidx % align:
+ write_out(b'\0' * (align - outidx % align))
+
+ self.elf_header.e_shnum = len(self.sections)
+ write_out(self.elf_header.to_bin())
+
+ for s in self.sections:
+ if s.sh_type != SHT_NOBITS and s.sh_type != SHT_NULL:
+ pad_out(s.sh_addralign)
+ s.sh_offset = outidx
+ write_out(s.data)
+
+ pad_out(4)
+ self.elf_header.e_shoff = outidx
+ for s in self.sections:
+ write_out(s.header_to_bin())
+
+ outfile.seek(0)
+ outfile.write(self.elf_header.to_bin())
+ outfile.close()
+
+
+def is_temp_name(name):
+ return name.startswith('_asmpp_')
+
+
+# https://stackoverflow.com/a/241506
+def re_comment_replacer(match):
+ s = match.group(0)
+ if s[0] in "/#":
+ return " "
+ else:
+ return s
+
+
+re_comment_or_string = re.compile(
+ r'#.*|/\*.*?\*/|"(?:\\.|[^\\"])*"'
+)
+
+
+class Failure(Exception):
+ def __init__(self, message):
+ self.message = message
+
+ def __str__(self):
+ return self.message
+
+
+class GlobalState:
+ def __init__(self, min_instr_count, skip_instr_count, use_jtbl_for_rodata):
+ # A value that hopefully never appears as a 32-bit rodata constant (or we
+ # miscompile late rodata). Increases by 1 in each step.
+ self.late_rodata_hex = 0xE0123456
+ self.namectr = 0
+ self.min_instr_count = min_instr_count
+ self.skip_instr_count = skip_instr_count
+ self.use_jtbl_for_rodata = use_jtbl_for_rodata
+
+ def next_late_rodata_hex(self):
+ dummy_bytes = struct.pack('<I', self.late_rodata_hex)
+ if (self.late_rodata_hex & 0xffff) == 0:
+ # Avoid lui
+ self.late_rodata_hex += 1
+ self.late_rodata_hex += 1
+ return dummy_bytes
+
+ def make_name(self, cat):
+ self.namectr += 1
+ return '_asmpp_{}{}'.format(cat, self.namectr)
+
+
+Function = namedtuple('Function', ['text_glabels', 'asm_conts', 'late_rodata_dummy_bytes', 'jtbl_rodata_size', 'late_rodata_asm_conts', 'fn_desc', 'data'])
+
+
+class GlobalAsmBlock:
+ def __init__(self, fn_desc):
+ self.fn_desc = fn_desc
+ self.cur_section = '.text'
+ self.asm_conts = []
+ self.late_rodata_asm_conts = []
+ self.late_rodata_alignment = 0
+ self.late_rodata_alignment_from_content = False
+ self.text_glabels = []
+ self.fn_section_sizes = {
+ '.text': 0,
+ '.init': 0,
+ '.data': 0,
+ '.bss': 0,
+ '.rodata': 0,
+ '.sdata': 0,
+ '.sdata2': 0,
+ '.sbss': 0,
+ #'.sbss2': 0,
+ '.late_rodata': 0,
+ }
+ self.fn_ins_inds = []
+ self.glued_line = ''
+ self.num_lines = 0
+
+ def fail(self, message, line=None):
+ context = self.fn_desc
+ if line:
+ context += ", at line \"" + line + "\""
+ raise Failure(message + "\nwithin " + context)
+
+ def count_quoted_size(self, line, z, real_line, output_enc):
+ line = line.encode(output_enc).decode('latin1')
+ in_quote = False
+ num_parts = 0
+ ret = 0
+ i = 0
+ digits = "0123456789" # 0-7 would be more sane, but this matches GNU as
+ while i < len(line):
+ c = line[i]
+ i += 1
+ if not in_quote:
+ if c == '"':
+ in_quote = True
+ num_parts += 1
+ else:
+ if c == '"':
+ in_quote = False
+ continue
+ ret += 1
+ if c != '\\':
+ continue
+ if i == len(line):
+ self.fail("backslash at end of line not supported", real_line)
+ c = line[i]
+ i += 1
+ # (if c is in "bfnrtv", we have a real escaped literal)
+ if c == 'x':
+ # hex literal, consume any number of hex chars, possibly none
+ while i < len(line) and line[i] in digits + "abcdefABCDEF":
+ i += 1
+ elif c in digits:
+ # octal literal, consume up to two more digits
+ it = 0
+ while i < len(line) and line[i] in digits and it < 2:
+ i += 1
+ it += 1
+
+ if in_quote:
+ self.fail("unterminated string literal", real_line)
+ if num_parts == 0:
+ self.fail(".ascii with no string", real_line)
+ return ret + num_parts if z else ret
+
+
+ def align4(self):
+ while self.fn_section_sizes[self.cur_section] % 2 != 0:
+ self.fn_section_sizes[self.cur_section] += 1
+
+ def add_sized(self, size, line):
+ if self.cur_section in ['.text', '.init', '.late_rodata']:
+ if size % 2 != 0:
+ self.fail("size must be a multiple of 2 or 4", line)
+ if size < 0:
+ self.fail("size cannot be negative", line)
+ self.fn_section_sizes[self.cur_section] += size
+ if self.cur_section in ['.text', '.init']:
+ if not self.text_glabels:
+ self.fail(".text or .init block without an initial glabel", line)
+ self.fn_ins_inds.append((self.num_lines - 1, size // 2))
+
+ def process_line(self, line, output_enc):
+ self.num_lines += 1
+ if line.endswith('\\'):
+ self.glued_line += line[:-1]
+ return
+ line = self.glued_line + line
+ self.glued_line = ''
+
+ real_line = line
+ line = re.sub(re_comment_or_string, re_comment_replacer, line)
+ line = line.strip()
+ line = re.sub(r'^[a-zA-Z0-9_]+:\s*', '', line)
+ changed_section = False
+ emitting_double = False
+ if line.startswith('glabel ') and self.cur_section in ['.text', '.init']:
+ self.text_glabels.append(line.split()[1])
+ if not line:
+ pass # empty line
+ elif line.startswith('glabel ') or (' ' not in line and line.endswith(':')):
+ pass # label
+ elif line.startswith('.section') or line in ['.text', '.init', '.data', '.rdata', '.rodata', '.sdata', '.sdata2', '.bss','.sbss', '.late_rodata']:
+ # section change
+ self.cur_section = '.rodata' if line == '.rdata' else line.split(',')[0].split()[-1]
+ if self.cur_section not in ['.data', '.text', '.init', '.rodata', '.sdata', '.sdata2', '.late_rodata', '.bss', '.sbss']:
+ self.fail("unrecognized .section directive", real_line)
+ changed_section = True
+ elif line.startswith('.late_rodata_alignment'):
+ if self.cur_section != '.late_rodata':
+ self.fail(".late_rodata_alignment must occur within .late_rodata section", real_line)
+ value = int(line.split()[1])
+ if value not in [4, 8]:
+ self.fail(".late_rodata_alignment argument must be 4 or 8", real_line)
+ if self.late_rodata_alignment and self.late_rodata_alignment != value:
+ self.fail(".late_rodata_alignment alignment assumption conflicts with earlier .double directive. Make sure to provide explicit alignment padding.")
+ self.late_rodata_alignment = value
+ changed_section = True
+ elif line.startswith('.incbin'):
+ self.add_sized(int(line.split(',')[-1].strip(), 0), real_line)
+ elif line.startswith('.skip'):
+ self.add_sized(int(line.split()[-1].strip(), 0), real_line)
+ elif line.startswith('.long') or line.startswith('.float'):
+ self.align4()
+ self.add_sized(4 * len(line.split(',')), real_line)
+ elif line.startswith('.double'):
+ self.align4()
+ if self.cur_section == '.late_rodata':
+ align8 = self.fn_section_sizes[self.cur_section] % 8
+ # Automatically set late_rodata_alignment, so the generated C code uses doubles.
+ # This gives us correct alignment for the transferred doubles even when the
+ # late_rodata_alignment is wrong, e.g. for non-matching compilation.
+ if not self.late_rodata_alignment:
+ self.late_rodata_alignment = 8 - align8
+ self.late_rodata_alignment_from_content = True
+ elif self.late_rodata_alignment != 8 - align8:
+ if self.late_rodata_alignment_from_content:
+ self.fail("found two .double directives with different start addresses mod 8. Make sure to provide explicit alignment padding.", real_line)
+ else:
+ self.fail(".double at address that is not 0 mod 8 (based on .late_rodata_alignment assumption). Make sure to provide explicit alignment padding.", real_line)
+ self.add_sized(8 * len(line.split(',')), real_line)
+ emitting_double = True
+ elif line.startswith('.space'):
+ self.add_sized(int(line.split()[1], 0), real_line)
+ elif line.startswith('.balign') or line.startswith('.align'):
+ align = int(line.split()[1])
+ if align != 2:
+ self.fail("only .balign 4 is supported", real_line)
+ self.align4()
+ elif line.startswith('.asci'):
+ z = (line.startswith('.asciz') or line.startswith('.asciiz'))
+ self.add_sized(self.count_quoted_size(line, z, real_line, output_enc), real_line)
+ elif line.startswith('.byte'):
+ self.add_sized(len(line.split(',')), real_line)
+ # Branches are 4 bytes long
+ elif line.startswith('bl'):
+ self.add_sized(4, real_line)
+ elif line.startswith('.'):
+ # .macro, ...
+ self.fail("asm directive not supported", real_line)
+ else:
+ # Unfortunately, macros are hard to support for .rodata --
+ # we don't know how how space they will expand to before
+ # running the assembler, but we need that information to
+ # construct the C code. So if we need that we'll either
+ # need to run the assembler twice (at least in some rare
+ # cases), or change how this program is invoked.
+ # Similarly, we can't currently deal with pseudo-instructions
+ # that expand to several real instructions.
+ if self.cur_section != '.text' and self.cur_section != '.init':
+ self.fail("instruction or macro call in non-.text/.init section? not supported", real_line)
+ self.add_sized(2, real_line)
+ if self.cur_section == '.late_rodata':
+ if not changed_section:
+ if emitting_double:
+ self.late_rodata_asm_conts.append(".align 0")
+ self.late_rodata_asm_conts.append(real_line)
+ if emitting_double:
+ self.late_rodata_asm_conts.append(".align 2")
+ else:
+ self.asm_conts.append(real_line)
+
+ def finish(self, state):
+ src = [''] * (self.num_lines + 1)
+ late_rodata_dummy_bytes = []
+ jtbl_rodata_size = 0
+ late_rodata_fn_output = []
+
+ num_instr = self.fn_section_sizes['.text'] // 2
+
+ if self.fn_section_sizes['.late_rodata'] > 0:
+ # Generate late rodata by emitting unique float constants.
+ # This requires 3 instructions for each 4 bytes of rodata.
+ # If we know alignment, we can use doubles, which give 3
+ # instructions for 8 bytes of rodata.
+ size = self.fn_section_sizes['.late_rodata'] // 2
+ skip_next = False
+ needs_double = (self.late_rodata_alignment != 0)
+ for i in range(size):
+ if skip_next:
+ skip_next = False
+ continue
+ # Jump tables give 9 instructions for >= 5 words of rodata, and should be
+ # emitted when:
+ # - -O2 or -O2 -g3 are used, which give the right codegen
+ # - we have emitted our first .float/.double (to ensure that we find the
+ # created rodata in the binary)
+ # - we have emitted our first .double, if any (to ensure alignment of doubles
+ # in shifted rodata sections)
+ # - we have at least 5 words of rodata left to emit (otherwise IDO does not
+ # generate a jump table)
+ # - we have at least 10 more instructions to go in this function (otherwise our
+ # function size computation will be wrong since the delay slot goes unused)
+ if (not needs_double and state.use_jtbl_for_rodata and i >= 1 and
+ size - i >= 5 and num_instr - len(late_rodata_fn_output) >= 10):
+ cases = " ".join("case {}:".format(case) for case in range(size - i))
+ late_rodata_fn_output.append("switch (*(volatile int*)0) { " + cases + " ; }")
+ late_rodata_fn_output.extend([""] * 8)
+ jtbl_rodata_size = (size - i) * 4
+ break
+ dummy_bytes = state.next_late_rodata_hex()
+ late_rodata_dummy_bytes.append(dummy_bytes)
+ if self.late_rodata_alignment == 4 * ((i + 1) % 2 + 1) and i + 1 < size:
+ dummy_bytes2 = state.next_late_rodata_hex()
+ late_rodata_dummy_bytes.append(dummy_bytes2)
+ fval, = struct.unpack('<d', dummy_bytes + dummy_bytes2)
+ late_rodata_fn_output.append('*(volatile double*)0 = {};'.format(fval))
+ skip_next = True
+ needs_double = True
+ else:
+ fval, = struct.unpack('<f', dummy_bytes)
+ late_rodata_fn_output.append('*(volatile float*)0 = {}f;'.format(fval))
+ late_rodata_fn_output.append('')
+ late_rodata_fn_output.append('')
+
+ text_name = None
+ if self.fn_section_sizes['.text'] > 0 or late_rodata_fn_output:
+ text_name = state.make_name('func')
+ src[0] = 'int {}(void) {{ return '.format(text_name)
+ instr_count = self.fn_section_sizes['.text'] // 2
+ src[self.num_lines] = '((volatile void *) 0); }; ' if instr_count > 1 else '; }; '
+ if instr_count < state.min_instr_count:
+ self.fail("too short .text block")
+ tot_emitted = 0
+ tot_skipped = 0
+ fn_emitted = 0
+ fn_skipped = 0
+ rodata_stack = late_rodata_fn_output[::-1]
+ for (line, count) in self.fn_ins_inds:
+ for _ in range(count):
+ if (fn_emitted > MAX_FN_SIZE and instr_count - tot_emitted > state.min_instr_count and
+ (not rodata_stack or rodata_stack[-1])):
+ # Don't let functions become too large. When a function reaches 284
+ # instructions, and -O2 -framepointer flags are passed, the IRIX
+ # compiler decides it is a great idea to start optimizing more.
+ fn_emitted = 0
+ fn_skipped = 0
+ src[line] += '((volatile void *) 0); }} int {}(void) {{ return '.format(state.make_name('large_func'))
+ if fn_skipped < state.skip_instr_count:
+ fn_skipped += 1
+ tot_skipped += 1
+ elif rodata_stack:
+ src[line] += rodata_stack.pop()
+ else:
+ src[line] += '*(int *)'
+ tot_emitted += 1
+ fn_emitted += 1
+ if rodata_stack:
+ size = len(late_rodata_fn_output) // 3
+ available = instr_count - tot_skipped
+ self.fail(
+ "late rodata to text ratio is too high: {} / {} must be <= 1/3\n"
+ "add .late_rodata_alignment (4|8) to the .late_rodata "
+ "block to double the allowed ratio."
+ .format(size, available))
+
+ init_name = None
+ if self.fn_section_sizes['.init'] > 0 or late_rodata_fn_output:
+ init_name = state.make_name('func')
+ src[0] = 'int {}(void) {{ return '.format(init_name)
+ instr_count = self.fn_section_sizes['.init'] // 2
+ src[self.num_lines] = '((volatile void *) 0); }; ' if instr_count else '; }; '
+ if instr_count < state.min_instr_count:
+ self.fail("too short .init block")
+ tot_emitted = 0
+ tot_skipped = 0
+ fn_emitted = 0
+ fn_skipped = 0
+ rodata_stack = late_rodata_fn_output[::-1]
+ for (line, count) in self.fn_ins_inds:
+ for _ in range(count):
+ if (fn_emitted > MAX_FN_SIZE and instr_count - tot_emitted > state.min_instr_count and
+ (not rodata_stack or rodata_stack[-1])):
+ # Don't let functions become too large. When a function reaches 284
+ # instructions, and -O2 -framepointer flags are passed, the IRIX
+ # compiler decides it is a great idea to start optimizing more.
+ fn_emitted = 0
+ fn_skipped = 0
+ src[line] += '((volatile void *) 0); }} int {}(void) {{ return '.format(state.make_name('large_func'))
+ if fn_skipped < state.skip_instr_count:
+ fn_skipped += 1
+ tot_skipped += 1
+ elif rodata_stack:
+ src[line] += rodata_stack.pop()
+ else:
+ src[line] += '*(int *)'
+ tot_emitted += 1
+ fn_emitted += 1
+ if rodata_stack:
+ size = len(late_rodata_fn_output) // 3
+ available = instr_count - tot_skipped
+ self.fail(
+ "late rodata to init ratio is too high: {} / {} must be <= 1/3\n"
+ "add .late_rodata_alignment (4|8) to the .late_rodata "
+ "block to double the allowed ratio."
+ .format(size, available))
+
+ rodata_name = None
+ if self.fn_section_sizes['.rodata'] > 0:
+ rodata_name = state.make_name('rodata')
+ src[self.num_lines] += f" const char {rodata_name}[{self.fn_section_sizes['.rodata']}] = {{1}};"
+
+ data_name = None
+ if self.fn_section_sizes['.data'] > 0:
+ data_name = state.make_name('data')
+ src[self.num_lines] += f" char {data_name}[{self.fn_section_sizes['.data']}] = {{1}};"
+
+ bss_name = None
+ if self.fn_section_sizes['.bss'] > 0:
+ bss_name = state.make_name('bss')
+ src[self.num_lines] += f" char {bss_name}[{self.fn_section_sizes['.bss']}];"
+
+ sdata_name = None # sdata is like data but small
+ if self.fn_section_sizes['.sdata'] > 0:
+ sdata_code = ""
+ for i in range(self.fn_section_sizes['.sdata']):
+ sdata_name = state.make_name('sdata')
+ sdata_code += f" char {sdata_name} = 1;"
+ src[self.num_lines] += sdata_code
+
+ sdata2_name = None # sdata2 is like rodata but small
+ if self.fn_section_sizes['.sdata2'] > 0:
+ sdata2_code = ""
+ for i in range(self.fn_section_sizes['.sdata2']):
+ sdata2_name = state.make_name('sdata2')
+ sdata2_code += f" const char {sdata2_name} = 1;"
+ src[self.num_lines] += sdata2_code
+
+ sbss_name = None # Similarly, sbss is like uninitialized data but small
+ if self.fn_section_sizes['.sbss'] > 0:
+ sbss_code = ""
+ for i in range(self.fn_section_sizes['.sbss']):
+ sbss_name = state.make_name('sbss')
+ sbss_code += f" char {sbss_name};"
+ src[self.num_lines] += sbss_code
+
+ """ sbss2 is currently borked
+ sbss2_name = None # Similarly, sbss2 is like uninitialized rodata but small
+ if self.fn_section_sizes['.sbss2'] > 0:
+ sbss2_code = ""
+ for i in range(self.fn_section_sizes['.sbss2']):
+ sbss2_name = state.make_name('sbss2')
+ sbss2_code += f" const char {sbss2_name};"
+ src[self.num_lines] += sbss2_code
+ """
+
+ fn = Function(
+ text_glabels=self.text_glabels,
+ asm_conts=self.asm_conts,
+ late_rodata_dummy_bytes=late_rodata_dummy_bytes,
+ jtbl_rodata_size=jtbl_rodata_size,
+ late_rodata_asm_conts=self.late_rodata_asm_conts,
+ fn_desc=self.fn_desc,
+ data={
+ '.text': (text_name, self.fn_section_sizes['.text']),
+ '.data': (data_name, self.fn_section_sizes['.data']),
+ '.rodata': (rodata_name, self.fn_section_sizes['.rodata']),
+ '.bss': (bss_name, self.fn_section_sizes['.bss']),
+ '.sdata': (sdata_name, self.fn_section_sizes['.sdata']),
+ '.sdata2': (sdata2_name, self.fn_section_sizes['.sdata2']),
+ '.sbss': (sbss_name, self.fn_section_sizes['.sbss']),
+ #'.sbss2': (sbss2_name, self.fn_section_sizes['.sbss2']),
+ })
+ return src, fn
+
+cutscene_data_regexpr = re.compile(r"CutsceneData (.|\n)*\[\] = {")
+float_regexpr = re.compile(r"[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?f")
+
+def repl_float_hex(m):
+ return str(struct.unpack("<I", struct.pack("<f", float(m.group(0).strip().rstrip("f"))))[0])
+
+def parse_source(f, opt, framepointer, input_enc, output_enc, print_source=None):
+ opt = "O4"
+ min_instr_count = 3 # idk
+ skip_instr_count = 2 # idk
+
+ use_jtbl_for_rodata = False
+ if opt in ['O2', 'g3'] and not framepointer:
+ use_jtbl_for_rodata = True
+
+ state = GlobalState(min_instr_count, skip_instr_count, use_jtbl_for_rodata)
+
+ global_asm = None
+ asm_functions = []
+ output_lines = []
+
+ is_cutscene_data = False
+
+ for line_no, raw_line in enumerate(f, 1):
+ raw_line = raw_line.rstrip()
+ line = raw_line.lstrip()
+
+ # Print exactly one output line per source line, to make compiler
+ # errors have correct line numbers. These will be overridden with
+ # reasonable content further down.
+ output_lines.append('')
+ if global_asm is not None:
+ if line.startswith(')'):
+ src, fn = global_asm.finish(state)
+ for i, line2 in enumerate(src):
+ output_lines[start_index + i] = line2
+ asm_functions.append(fn)
+ global_asm = None
+ else:
+ global_asm.process_line(raw_line, output_enc)
+ else:
+ if line in ['GLOBAL_ASM(', '#pragma GLOBAL_ASM(']:
+ global_asm = GlobalAsmBlock("GLOBAL_ASM block at line " + str(line_no))
+ start_index = len(output_lines)
+ elif ((line.startswith('GLOBAL_ASM("') or line.startswith('#pragma GLOBAL_ASM("'))
+ and line.endswith('")')):
+ fname = line[line.index('(') + 2 : -2]
+ global_asm = GlobalAsmBlock(fname)
+ with open(fname, encoding=input_enc) as f:
+ for line2 in f:
+ global_asm.process_line(line2.rstrip(), output_enc)
+ src, fn = global_asm.finish(state)
+ output_lines[-1] = ''.join(src)
+ asm_functions.append(fn)
+ global_asm = None
+ elif ((line.startswith('#include "')) and line.endswith('" EARLY')):
+ # C includes qualified with EARLY (i.e. #include "file.c" EARLY) will be
+ # processed recursively when encountered
+ fpath = os.path.dirname(f.name)
+ fname = line[line.index(' ') + 2 : -7]
+ include_src = StringIO()
+ with open(fpath + os.path.sep + fname, encoding=input_enc) as include_file:
+ parse_source(include_file, opt, framepointer, input_enc, output_enc, include_src)
+ output_lines[-1] = include_src.getvalue()
+ include_src.write('#line ' + str(line_no) + '\n')
+ include_src.close()
+ else:
+ # This is a hack to replace all floating-point numbers in an array of a particular type
+ # (in this case CutsceneData) with their corresponding IEEE-754 hexadecimal representation
+ if cutscene_data_regexpr.search(line) is not None:
+ is_cutscene_data = True
+ elif line.endswith("};"):
+ is_cutscene_data = False
+ if is_cutscene_data:
+ raw_line = re.sub(float_regexpr, repl_float_hex, raw_line)
+ output_lines[-1] = raw_line
+
+ if print_source:
+ if isinstance(print_source, StringIO):
+ for line in output_lines:
+ print_source.write(line + '\n')
+ else:
+ for line in output_lines:
+ print_source.write(line.encode(output_enc) + b'\n')
+ print_source.flush()
+ if print_source != sys.stdout.buffer:
+ print_source.close()
+ out_file = open("output.txt", 'w')
+ out_file.write(str(asm_functions))
+ out_file.close()
+ return asm_functions
+
+def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc):
+ SECTIONS = ['.data']
+ SECTIONS.extend(['.text' for i in range(0,len(functions))])
+ SECTIONS.extend(['.rodata', '.bss', '.sdata', '.sdata2', '.sbss'])
+
+ with open(objfile_name, 'rb') as f:
+ objfile = ElfFile(f.read())
+
+ prev_locs = defaultdict(int)
+ to_copy = defaultdict(list)
+
+ asm = []
+ all_late_rodata_dummy_bytes = []
+ all_jtbl_rodata_size = []
+ late_rodata_asm = []
+ late_rodata_source_name_start = None
+ late_rodata_source_name_end = None
+
+ # Generate an assembly file with all the assembly we need to fill in. For
+ # simplicity we pad with nops/.space so that addresses match exactly, so we
+ # don't have to fix up relocations/symbol references.
+ all_text_glabels = set()
+ for function in functions:
+ ifdefed = False
+ for sectype, (temp_name, size) in function.data.items():
+ if temp_name is None:
+ continue
+ assert size > 0
+ n_text = objfile.text_section_index(temp_name)
+ loc = objfile.symtab.find_symbol(temp_name)
+ if loc is None:
+ ifdefed = True
+ break
+ loc = loc[1]
+ prev_loc = prev_locs[sectype + (str(n_text) if sectype == '.text' else '')]
+ if loc < prev_loc:
+ raise Failure("Wrongly computed size for section {} (diff {}). This is an asm-processor bug!".format(sectype + (str(n_text) if sectype == '.text' else ''), prev_loc- loc))
+ if loc != prev_loc:
+ asm.append('.section ' + sectype)
+ if sectype == '.text':
+ for i in range((loc - prev_loc) // 2):
+ asm.append('nop')
+ else:
+ asm.append('.space {}'.format(loc - prev_loc))
+ to_copy[sectype + (str(n_text) if sectype == '.text' else '')].append((loc, size, temp_name, function.fn_desc))
+ prev_locs[sectype + (str(n_text) if sectype == '.text' else '')] = loc + size
+ if not ifdefed:
+ all_text_glabels.update(function.text_glabels)
+ all_late_rodata_dummy_bytes.append(function.late_rodata_dummy_bytes)
+ all_jtbl_rodata_size.append(function.jtbl_rodata_size)
+ late_rodata_asm.append(function.late_rodata_asm_conts)
+ for sectype, (temp_name, size) in function.data.items():
+ if temp_name is not None:
+ asm.append('.section ' + sectype)
+ asm.append('glabel ' + temp_name + '_asm_start')
+ asm.append('.section .text')
+ for line in function.asm_conts:
+ asm.append(line)
+ for sectype, (temp_name, size) in function.data.items():
+ if temp_name is not None:
+ #asm.append('.section ' + sectype)
+ asm.append('glabel ' + temp_name + '_asm_end')
+
+ if any(late_rodata_asm):
+ late_rodata_source_name_start = '_asmpp_late_rodata_start'
+ late_rodata_source_name_end = '_asmpp_late_rodata_end'
+ asm.append('.rdata')
+ asm.append('glabel {}'.format(late_rodata_source_name_start))
+ for conts in late_rodata_asm:
+ asm.extend(conts)
+ asm.append('glabel {}'.format(late_rodata_source_name_end))
+
+ o_file = open("asm_processor_temp.o", 'w').close() # Create temp file. tempfile module isn't working for me.
+ o_name = "asm_processor_temp.o"
+
+ s_file = open("asm_processor_temp.s", 'wb') # Ditto.
+ s_name = "asm_processor_temp.s"
+ try:
+ s_file.write(asm_prelude + b'\n')
+ for line in asm:
+ s_file.write(line.encode(output_enc) + b'\n')
+ s_file.close()
+ ret = os.system(assembler + " " + s_name + " -o " + o_name)
+ if ret != 0:
+ raise Failure("failed to assemble")
+ with open(o_name, 'rb') as f:
+ asm_objfile = ElfFile(f.read())
+
+ # Remove some clutter from objdump output
+ objfile.drop_irrelevant_sections()
+
+ """
+ # Unify reginfo sections
+ target_reginfo = objfile.find_section('.reginfo')
+ source_reginfo_data = list(asm_objfile.find_section('.reginfo').data)
+ data = list(target_reginfo.data)
+ for i in range(20):
+ data[i] |= source_reginfo_data[i]
+ target_reginfo.data = bytes(data)
+ """
+
+ # Move over section contents
+ modified_text_positions = set()
+ jtbl_rodata_positions = set()
+ last_rodata_pos = 0
+ n_text = 0
+ for sec in objfile.sections:
+ sectype = sec.name
+ if not to_copy[sectype + (str(n_text) if sectype == '.text' else '')]:
+ if sectype == '.text':
+ n_text += 1
+ continue
+ # This should work as long as you NONMATCH whole functions rather than asm fragments
+ func = to_copy[sectype + str(n_text) if sectype == '.text' else ''][0][2]
+ asm_n_text = asm_objfile.text_section_index(func + '_asm_start')
+ source = asm_objfile.find_section(sectype, asm_n_text if sectype == '.text' else 0)
+ assert source is not None, "didn't find source section: " + sectype
+ for (pos, count, temp_name, fn_desc) in to_copy[sectype + (str(n_text) if sectype == '.text' else '')]:
+ loc1 = asm_objfile.symtab.find_symbol_in_section(temp_name + '_asm_start', source)
+ loc2 = asm_objfile.symtab.find_symbol_in_section(temp_name + '_asm_end', source)
+ assert loc1 == pos, "assembly and C files don't line up for section " + sectype + ", " + fn_desc
+ if loc2 - loc1 != count:
+ raise Failure("incorrectly computed size for section " + sectype + ", " + fn_desc + ". If using .double, make sure to provide explicit alignment padding.")
+ if sectype == '.bss' or sectype == '.sbss2':
+ continue
+ target = objfile.find_section(sectype, n_text if sectype == '.text' else 0)
+ assert target is not None, "missing target section of type " + sectype
+ data = list(target.data)
+ for (pos, count, _, _) in to_copy[sectype + (str(n_text) if sectype == '.text' else '')]:
+ # mwasmarm 4-aligns text sections, so make sure to copy exactly `count` bytes
+ data[pos:pos + count] = source.data[pos:pos + count]
+ if sectype == '.text':
+ assert count % 2 == 0
+ assert pos % 2 == 0
+ for i in range(count // 2):
+ modified_text_positions.add(pos + 2 * i)
+ elif sectype == '.rodata':
+ last_rodata_pos = pos + count
+ target.data = bytes(data)
+ if sectype == '.text':
+ n_text += 1
+
+ # Move over late rodata. This is heuristic, sadly, since I can't think
+ # of another way of doing it.
+ moved_late_rodata = {}
+ if any(all_late_rodata_dummy_bytes) or any(all_jtbl_rodata_size):
+ source = asm_objfile.find_section('.rodata', 0)
+ target = objfile.find_section('.rodata', 0)
+ source_pos = asm_objfile.symtab.find_symbol_in_section(late_rodata_source_name_start, source)
+ source_end = asm_objfile.symtab.find_symbol_in_section(late_rodata_source_name_end, source)
+ if source_end - source_pos != sum(map(len, all_late_rodata_dummy_bytes)) * 2 + sum(all_jtbl_rodata_size):
+ raise Failure("computed wrong size of .late_rodata")
+ new_data = list(target.data)
+ for dummy_bytes_list, jtbl_rodata_size in zip(all_late_rodata_dummy_bytes, all_jtbl_rodata_size):
+ for index, dummy_bytes in enumerate(dummy_bytes_list):
+ pos = target.data.index(dummy_bytes, last_rodata_pos)
+ # This check is nice, but makes time complexity worse for large files:
+ if SLOW_CHECKS and target.data.find(dummy_bytes, pos + 2) != -1:
+ raise Failure("multiple occurrences of late_rodata hex magic. Change asm-processor to use something better than 0xE0123456!")
+ if index == 0 and len(dummy_bytes_list) > 1 and target.data[pos+2:pos+8] == b'\0\0\0\0':
+ # Ugly hack to handle double alignment for non-matching builds.
+ # We were told by .late_rodata_alignment (or deduced from a .double)
+ # that a function's late_rodata started out 4 (mod 8), and emitted
+ # a float and then a double. But it was actually 0 (mod 8), so our
+ # double was moved by 4 bytes. To make them adjacent to keep jump
+ # tables correct, move the float by 4 bytes as well.
+ new_data[pos:pos+2] = b'\0\0\0\0'
+ pos += 2
+ new_data[pos:pos+2] = source.data[source_pos:source_pos+2]
+ moved_late_rodata[source_pos] = pos
+ last_rodata_pos = pos + 2
+ source_pos += 2
+ if jtbl_rodata_size > 0:
+ assert dummy_bytes_list, "should always have dummy bytes before jtbl data"
+ pos = last_rodata_pos
+ new_data[pos : pos + jtbl_rodata_size] = \
+ source.data[source_pos : source_pos + jtbl_rodata_size]
+ for i in range(0, jtbl_rodata_size, 2):
+ moved_late_rodata[source_pos + i] = pos + i
+ jtbl_rodata_positions.add(pos + i)
+ last_rodata_pos += jtbl_rodata_size
+ source_pos += jtbl_rodata_size
+ target.data = bytes(new_data)
+
+ # Merge strtab data.
+ strtab_adj = len(objfile.symtab.strtab.data)
+ objfile.symtab.strtab.data += asm_objfile.symtab.strtab.data
+
+ # Find relocated symbols
+ relocated_symbols = set()
+ for obj in [asm_objfile, objfile]:
+ for sec in obj.sections:
+ for reltab in sec.relocated_by:
+ for rel in reltab.relocations:
+ relocated_symbols.add(obj.symtab.symbol_entries[rel.sym_index])
+
+ # Move over symbols, deleting the temporary function labels.
+ # Sometimes this naive procedure results in duplicate symbols, or UNDEF
+ # symbols that are also defined the same .o file. Hopefully that's fine.
+ # Skip over local symbols that aren't used relocated against, to avoid
+ # conflicts.
+ new_local_syms = [s for s in objfile.symtab.local_symbols() if not is_temp_name(s.name)]
+ new_global_syms = [s for s in objfile.symtab.global_symbols() if not is_temp_name(s.name)]
+ n_text = 0
+ for i, s in enumerate(asm_objfile.symtab.symbol_entries):
+ is_local = (i < asm_objfile.symtab.sh_info)
+ if is_local and s not in relocated_symbols:
+ continue
+ if is_temp_name(s.name):
+ continue
+ if s.st_shndx not in [SHN_UNDEF, SHN_ABS]:
+ section_name = asm_objfile.sections[s.st_shndx].name
+ if section_name not in SECTIONS:
+ raise Failure("generated assembly .o must only have symbols for .text, .data, .rodata, .sdata, .sdata2, .sbss, ABS and UNDEF, but found " + section_name)
+ if section_name == '.sbss2': #! I'm not sure why this isn't working
+ continue
+ s.st_shndx = objfile.find_section(section_name, n_text if section_name == '.text' else 0).index
+ if section_name == '.text':
+ n_text += 1
+ # glabel's aren't marked as functions, making objdump output confusing. Fix that.
+ if s.name in all_text_glabels:
+ s.type = STT_FUNC
+ if objfile.sections[s.st_shndx].name == '.rodata' and s.st_value in moved_late_rodata:
+ s.st_value = moved_late_rodata[s.st_value]
+ s.st_name += strtab_adj
+ if is_local:
+ new_local_syms.append(s)
+ else:
+ new_global_syms.append(s)
+ new_syms = new_local_syms + new_global_syms
+ for i, s in enumerate(new_syms):
+ s.new_index = i
+ objfile.symtab.data = b''.join(s.to_bin() for s in new_syms)
+ objfile.symtab.sh_info = len(new_local_syms)
+
+ # Move over relocations
+ n_text = 0
+ for sec in objfile.sections:
+ sectype = sec.name
+ # This should work as long as you NONMATCH whole functions rather than asm fragments
+ target = objfile.find_section(sectype, n_text if sectype == '.text' else 0)
+
+ if target is not None:
+ # fixup relocation symbol indices, since we butchered them above
+ for reltab in target.relocated_by:
+ nrels = []
+ for rel in reltab.relocations:
+ if (sectype == '.text' and rel.r_offset in modified_text_positions or
+ sectype == '.rodata' and rel.r_offset in jtbl_rodata_positions) or sectype == ".sbss2":
+ # don't include relocations for late_rodata dummy code
+ continue
+ # hopefully we don't have relocations for local or
+ # temporary symbols, so new_index exists
+ rel.sym_index = objfile.symtab.symbol_entries[rel.sym_index].new_index
+ nrels.append(rel)
+ reltab.relocations = nrels
+ reltab.data = b''.join(rel.to_bin() for rel in nrels)
+
+ if not to_copy[sectype + (str(n_text) if sectype == '.text' else '')]:
+ if sectype == '.text':
+ n_text += 1
+ continue
+
+ func = to_copy[sectype + str(n_text) if sectype == '.text' else ''][0][2]
+ asm_n_text = asm_objfile.text_section_index(func + '_asm_start')
+ source = asm_objfile.find_section(sectype, asm_n_text if sectype == '.text' else 0)
+ if not source:
+ if sectype == '.text':
+ n_text += 1
+ continue
+
+ target_reltab = objfile.find_section('.rel' + sectype, n_text if sectype == '.text' else 0)
+ target_reltaba = objfile.find_section('.rela' + sectype, n_text if sectype == '.text' else 0)
+ for reltab in source.relocated_by:
+ for rel in reltab.relocations:
+ rel.sym_index = asm_objfile.symtab.symbol_entries[rel.sym_index].new_index
+ # I suspect that this is requried for matching. If the after linking the
+ # binary doesn't match, retry after commenting out the following line:
+ rel.r_addend = 0
+ if sectype == '.rodata' and rel.r_offset in moved_late_rodata:
+ rel.r_offset = moved_late_rodata[rel.r_offset]
+ new_data = b''.join(rel.to_bin() for rel in reltab.relocations)
+ if reltab.sh_type == SHT_REL:
+ target_reltab = objfile.add_section('.rel' + sectype,
+ sh_type=SHT_REL, sh_flags=0,
+ sh_link=objfile.symtab.index, sh_info=target.index,
+ sh_addralign=4, sh_entsize=8, data=b'')
+ target_reltab.data += new_data
+ else:
+ # Always append as a separate .rela.text section
+ target_reltaba = objfile.add_section('.rela' + sectype,
+ sh_type=SHT_RELA, sh_flags=0,
+ sh_link=objfile.symtab.index, sh_info=target.index,
+ sh_addralign=4, sh_entsize=12, data=b'')
+ target_reltaba.data += new_data
+ if sectype == '.text':
+ n_text += 1
+
+ objfile.write(objfile_name)
+ finally:
+ s_file.close()
+ #os.remove(s_name)
+ try:
+ pass
+ #os.remove(o_name)
+ except:
+ pass
+
+def run_wrapped(argv, outfile):
+ parser = argparse.ArgumentParser(description="Pre-process .c files and post-process .o files to enable embedding assembly into C.")
+ parser.add_argument('filename', help="path to .c code")
+ parser.add_argument('--post-process', dest='objfile', help="path to .o file to post-process")
+ parser.add_argument('--assembler', dest='assembler', help="assembler command (e.g. \"mips-linux-gnu-as -march=vr4300 -mabi=32\")")
+ parser.add_argument('--asm-prelude', dest='asm_prelude', help="path to a file containing a prelude to the assembly file (with .set and .macro directives, e.g.)")
+ parser.add_argument('--input-enc', default='latin1', help="Input encoding (default: latin1)")
+ parser.add_argument('--output-enc', default='latin1', help="Output encoding (default: latin1)")
+ parser.add_argument('-framepointer', dest='framepointer', action='store_true')
+ parser.add_argument('-g3', dest='g3', action='store_true')
+ group = parser.add_mutually_exclusive_group(required=False)
+ group.add_argument('-O1', dest='opt', action='store_const', const='O1')
+ group.add_argument('-O2', dest='opt', action='store_const', const='O2')
+ group.add_argument('-g', dest='opt', action='store_const', const='g')
+ args = parser.parse_args(argv)
+ opt = args.opt
+ if args.g3:
+ if opt != 'O2':
+ raise Failure("-g3 is only supported together with -O2")
+ opt = 'g3'
+
+ if args.objfile is None:
+ with open(args.filename, encoding=args.input_enc) as f:
+ parse_source(f, opt=opt, framepointer=args.framepointer, input_enc=args.input_enc, output_enc=args.output_enc, print_source=outfile)
+ else:
+ if args.assembler is None:
+ raise Failure("must pass assembler command")
+ with open(args.filename, encoding=args.input_enc) as f:
+ functions = parse_source(f, opt=opt, framepointer=args.framepointer, input_enc=args.input_enc, output_enc=args.output_enc)
+ if not functions:
+ return
+ asm_prelude = b''
+ if args.asm_prelude:
+ with open(args.asm_prelude, 'rb') as f:
+ asm_prelude = f.read()
+ fixup_objfile(args.objfile, functions, asm_prelude, args.assembler, args.output_enc)
+
+def run(argv, outfile=sys.stdout.buffer):
+ try:
+ run_wrapped(argv, outfile)
+ except Failure as e:
+ sys.exit(1)
+
+if __name__ == "__main__":
+ run(sys.argv[1:])
diff --git a/tools/asm_processor/compile.sh b/tools/asm_processor/compile.sh
new file mode 100644
index 00000000..7d950644
--- /dev/null
+++ b/tools/asm_processor/compile.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+CC="$1"
+shift
+AS="$1"
+shift
+
+temp="$(mktemp)"
+../tools/asm_processor/asm_processor.py "$2" --assembler "$AS" > "$temp.c" &&
+$CC -c "$temp.c" -o "$1"
+
+prelude=$(mktemp prelude.XXXXXX)
+cat ../include/macros.inc >> "$prelude"
+cat global.inc >> "$prelude"
+
+../tools/asm_processor/asm_processor.py "$2" --post-process "$1" --assembler "$AS" --asm-prelude "$prelude"
+$DEVKITARM/bin/arm-none-eabi-objcopy --remove-section .comment "$1" "$1"
+rm "$prelude"
+rm "$temp"
diff --git a/tools/knarc/Makefile b/tools/knarc/Makefile
index 7dc8bd24..0e0a0920 100644
--- a/tools/knarc/Makefile
+++ b/tools/knarc/Makefile
@@ -8,7 +8,7 @@ else
C_SRCS :=
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Darwin)
-LDFLAGS += -lstdc++ -lc++ -lc
+LDFLAGS += -lstdc++ -lc++ -lc /usr/local/opt/llvm@8/lib/libc++fs.a
else
LDFLAGS += -lstdc++fs
endif
diff --git a/tools/mwasmarm_patcher/Makefile b/tools/mwasmarm_patcher/Makefile
index 9765f713..26df548c 100644
--- a/tools/mwasmarm_patcher/Makefile
+++ b/tools/mwasmarm_patcher/Makefile
@@ -1,6 +1,11 @@
.PHONY: all clean
+UNAME_S := $(shell uname -s)
+ifeq ($(UNAME_S),Darwin)
+CC := gcc-5
+else
CC := gcc
+endif
CFLAGS := -O3
.PHONY: all clean