DWC_Authdata NAND File Modifier [Vega]
First thing's first, thank you Star!~
This code will permanently change the User ID within your DWC_Authdata file of the Wii NAND. Simply boot your game. After a breif moment (visual glitches may occur), you will be returned back to the Wii Menu. Congratz. Btw, the Return to Wii Menu ability may not work on Dolphin. This is normal, code will still take effect.
ZZZ ZZZZ ZZZZ = Your new DWC_Authdata value (in Hex); just use a random value.
This code makes use of memory addresses 0x80001620 thru 0x80001627. Make sure no other codes in your GCT/Cheat-Manager are using those addresses!!!
NTSC-U
06001620 00000008
00000ZZZ ZZZZZZZZ
C20095F4 00000011
3FC08016 4800001D
2F736861 72656432
2F445743 5F415554
48444154 41000000
7C6802A6 38800002
63DDADBC 7FA803A6
4E800021 2C030000
41800038 7C7F1B78
3C808000 60841620
38A00008 63DDB220
7FA803A6 4E800021
2C030008 40820014
7FE3FB78 63DDB2E4
7FA803A6 4E800021
3D80801A 618C87B8
7D8803A6 4E800020
60000000 00000000
PAL
06001620 00000008
00000ZZZ ZZZZZZZZ
C2009634 00000011
3FC08016 4800001D
2F736861 72656432
2F445743 5F415554
48444154 41000000
7C6802A6 38800002
63DDAE5C 7FA803A6
4E800021 2C030000
41800038 7C7F1B78
3C808000 60841620
38A00008 63DDB2C0
7FA803A6 4E800021
2C030008 40820014
7FE3FB78 63DDB384
7FA803A6 4E800021
3D80801A 618C8858
7D8803A6 4E800020
60000000 00000000
NTSC-J
06001620 00000008
00000ZZZ ZZZZZZZZ
C2009590 00000011
3FC08016 4800001D
2F736861 72656432
2F445743 5F415554
48444154 41000000
7C6802A6 38800002
63DDAD7C 7FA803A6
4E800021 2C030000
41800038 7C7F1B78
3C808000 60841620
38A00008 63DDB1E0
7FA803A6 4E800021
2C030008 40820014
7FE3FB78 63DDB2A4
7FA803A6 4E800021
3D80801A 618C8778
7D8803A6 4E800020
60000000 00000000
NTSC-K
06001620 00000008
00000ZZZ ZZZZZZZZ
C200973C 00000011
3FC08016 4800001D
2F736861 72656432
2F445743 5F415554
48444154 41000000
7C6802A6 38800002
63DDAEF8 7FA803A6
4E800021 2C030000
41800038 7C7F1B78
3C808000 60841620
38A00008 63DDB35C
7FA803A6 4E800021
2C030008 40820014
7FE3FB78 63DDB420
7FA803A6 4E800021
3D80801A 618C8BB4
7D8803A6 4E800020
60000000 00000000
List of Sources:
Gecko String Write "0x00000ZZZ ZZZZZZZZ" at 0x80001620
ISFS Cycle ASM:
#~~~~~~~~~~~~~~~~#
# START ASSEMBLY #
#~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~#
# Address Ports #
#~~~~~~~~~~~~~~~#
#800095F4 = NTSC-U
#80009634 = PAL
#80009590 = NTSC-J
#8000973C = NTSC-K
#~~~~~~~~~~~~~~~~~~~~~~~~~~~#
# Source Region Compilation #
#~~~~~~~~~~~~~~~~~~~~~~~~~~~#
.set region, '' #Fill in E, P, J, or K within the quotes for your region when Compiling! Lowercase letters can also be used.
#~~~~~~~~~~~~~~~~~~~~~~#
# Macros and Variables #
#~~~~~~~~~~~~~~~~~~~~~~#
.macro call_isfs address
ori r29, r30, \address@l
mtlr r29
blrl
.endm
.macro call_nolink address
lis r12, \address@h
ori r12, r12, \address@l
mtlr r12
blr
.endm
.if (region == 'E' || region == 'e') # RMCE
.set ISFS_Open, 0xADBC
.set ISFS_Write, 0xB220
.set ISFS_Close, 0xB2E4
.set Wii_Menu, 0x801A87B8
.elseif (region == 'P' || region == 'p') # RMCP
.set ISFS_Open, 0xAE5C
.set ISFS_Write, 0xB2C0
.set ISFS_Close, 0xB384
.set Wii_Menu, 0x801A8858
.elseif (region == 'J' || region == 'j') # RMCJ
.set ISFS_Open, 0xAD7C
.set ISFS_Write, 0xB1E0
.set ISFS_Close, 0xB2A4
.set Wii_Menu, 0x801A8778
.elseif (region == 'K' || region == 'k') # RMCK
.set ISFS_Open, 0xAEF8
.set ISFS_Write, 0xB35C
.set ISFS_Close, 0xB420
.set Wii_Menu, 0x801A8BB4
.else # Invalid Region
.err
.endif
#~~~~~~~~#
# Start #
#~~~~~~~~#
lis r30, 0x8016 #Set 1st half address for ISFS Functions
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
# ISFS_Open Arguments #
# r3 = Path to File #
# r4 = Permission Byte (1 Read, 2 Write) #
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
bl file_path
.llong 0x2F73686172656432 #String name of /shared2/DWC_AUTHDATA
.llong 0x2F4457435F415554
.llong 0x4844415441000000
file_path:
mflr r3
li r4, 0x2
call_isfs ISFS_Open
cmpwi r3, 0x0
blt- the_end
mr r31, r3 #Backup file descriptor
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
# ISFS_Write Arguments #
# r3 = File Descriptor #
# r4 = Address Pointer to String of Data to be Written #
# r5 = Amount of Bytes to Write #
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
lis r4, 0x8000
ori r4, r4, 0x1620
li r5, 0x8
call_isfs ISFS_Write
cmpwi r3, 0x8
bne- the_end
#~~~~~~~~~~~~~~~~~~~~~~#
# ISFS_Close Arguments #
# r3 = File Descriptor #
#~~~~~~~~~~~~~~~~~~~~~~#
mr r3, r31 #Move backed up file descriptor to r3
call_isfs ISFS_Close
#~~~~~#
# End #
#~~~~~#
the_end:
call_nolink Wii_Menu
#~~~~~~~~~~~~~~#
# END ASSEMBLY #
#~~~~~~~~~~~~~~#
Code creator: Vega
Code credits: Star (helped with Source), Megazig (ISFS functions founder)
First thing's first, thank you Star!~
This code will permanently change the User ID within your DWC_Authdata file of the Wii NAND. Simply boot your game. After a breif moment (visual glitches may occur), you will be returned back to the Wii Menu. Congratz. Btw, the Return to Wii Menu ability may not work on Dolphin. This is normal, code will still take effect.
ZZZ ZZZZ ZZZZ = Your new DWC_Authdata value (in Hex); just use a random value.
This code makes use of memory addresses 0x80001620 thru 0x80001627. Make sure no other codes in your GCT/Cheat-Manager are using those addresses!!!
NTSC-U
06001620 00000008
00000ZZZ ZZZZZZZZ
C20095F4 00000011
3FC08016 4800001D
2F736861 72656432
2F445743 5F415554
48444154 41000000
7C6802A6 38800002
63DDADBC 7FA803A6
4E800021 2C030000
41800038 7C7F1B78
3C808000 60841620
38A00008 63DDB220
7FA803A6 4E800021
2C030008 40820014
7FE3FB78 63DDB2E4
7FA803A6 4E800021
3D80801A 618C87B8
7D8803A6 4E800020
60000000 00000000
PAL
06001620 00000008
00000ZZZ ZZZZZZZZ
C2009634 00000011
3FC08016 4800001D
2F736861 72656432
2F445743 5F415554
48444154 41000000
7C6802A6 38800002
63DDAE5C 7FA803A6
4E800021 2C030000
41800038 7C7F1B78
3C808000 60841620
38A00008 63DDB2C0
7FA803A6 4E800021
2C030008 40820014
7FE3FB78 63DDB384
7FA803A6 4E800021
3D80801A 618C8858
7D8803A6 4E800020
60000000 00000000
NTSC-J
06001620 00000008
00000ZZZ ZZZZZZZZ
C2009590 00000011
3FC08016 4800001D
2F736861 72656432
2F445743 5F415554
48444154 41000000
7C6802A6 38800002
63DDAD7C 7FA803A6
4E800021 2C030000
41800038 7C7F1B78
3C808000 60841620
38A00008 63DDB1E0
7FA803A6 4E800021
2C030008 40820014
7FE3FB78 63DDB2A4
7FA803A6 4E800021
3D80801A 618C8778
7D8803A6 4E800020
60000000 00000000
NTSC-K
06001620 00000008
00000ZZZ ZZZZZZZZ
C200973C 00000011
3FC08016 4800001D
2F736861 72656432
2F445743 5F415554
48444154 41000000
7C6802A6 38800002
63DDAEF8 7FA803A6
4E800021 2C030000
41800038 7C7F1B78
3C808000 60841620
38A00008 63DDB35C
7FA803A6 4E800021
2C030008 40820014
7FE3FB78 63DDB420
7FA803A6 4E800021
3D80801A 618C8BB4
7D8803A6 4E800020
60000000 00000000
List of Sources:
Gecko String Write "0x00000ZZZ ZZZZZZZZ" at 0x80001620
ISFS Cycle ASM:
#~~~~~~~~~~~~~~~~#
# START ASSEMBLY #
#~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~#
# Address Ports #
#~~~~~~~~~~~~~~~#
#800095F4 = NTSC-U
#80009634 = PAL
#80009590 = NTSC-J
#8000973C = NTSC-K
#~~~~~~~~~~~~~~~~~~~~~~~~~~~#
# Source Region Compilation #
#~~~~~~~~~~~~~~~~~~~~~~~~~~~#
.set region, '' #Fill in E, P, J, or K within the quotes for your region when Compiling! Lowercase letters can also be used.
#~~~~~~~~~~~~~~~~~~~~~~#
# Macros and Variables #
#~~~~~~~~~~~~~~~~~~~~~~#
.macro call_isfs address
ori r29, r30, \address@l
mtlr r29
blrl
.endm
.macro call_nolink address
lis r12, \address@h
ori r12, r12, \address@l
mtlr r12
blr
.endm
.if (region == 'E' || region == 'e') # RMCE
.set ISFS_Open, 0xADBC
.set ISFS_Write, 0xB220
.set ISFS_Close, 0xB2E4
.set Wii_Menu, 0x801A87B8
.elseif (region == 'P' || region == 'p') # RMCP
.set ISFS_Open, 0xAE5C
.set ISFS_Write, 0xB2C0
.set ISFS_Close, 0xB384
.set Wii_Menu, 0x801A8858
.elseif (region == 'J' || region == 'j') # RMCJ
.set ISFS_Open, 0xAD7C
.set ISFS_Write, 0xB1E0
.set ISFS_Close, 0xB2A4
.set Wii_Menu, 0x801A8778
.elseif (region == 'K' || region == 'k') # RMCK
.set ISFS_Open, 0xAEF8
.set ISFS_Write, 0xB35C
.set ISFS_Close, 0xB420
.set Wii_Menu, 0x801A8BB4
.else # Invalid Region
.err
.endif
#~~~~~~~~#
# Start #
#~~~~~~~~#
lis r30, 0x8016 #Set 1st half address for ISFS Functions
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
# ISFS_Open Arguments #
# r3 = Path to File #
# r4 = Permission Byte (1 Read, 2 Write) #
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
bl file_path
.llong 0x2F73686172656432 #String name of /shared2/DWC_AUTHDATA
.llong 0x2F4457435F415554
.llong 0x4844415441000000
file_path:
mflr r3
li r4, 0x2
call_isfs ISFS_Open
cmpwi r3, 0x0
blt- the_end
mr r31, r3 #Backup file descriptor
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
# ISFS_Write Arguments #
# r3 = File Descriptor #
# r4 = Address Pointer to String of Data to be Written #
# r5 = Amount of Bytes to Write #
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
lis r4, 0x8000
ori r4, r4, 0x1620
li r5, 0x8
call_isfs ISFS_Write
cmpwi r3, 0x8
bne- the_end
#~~~~~~~~~~~~~~~~~~~~~~#
# ISFS_Close Arguments #
# r3 = File Descriptor #
#~~~~~~~~~~~~~~~~~~~~~~#
mr r3, r31 #Move backed up file descriptor to r3
call_isfs ISFS_Close
#~~~~~#
# End #
#~~~~~#
the_end:
call_nolink Wii_Menu
#~~~~~~~~~~~~~~#
# END ASSEMBLY #
#~~~~~~~~~~~~~~#
Code creator: Vega
Code credits: Star (helped with Source), Megazig (ISFS functions founder)