MKWii.org
List of Certain Functions with Arguments Plus Descriptions - Printable Version

+- MKWii.org (https://mkwii.org)
+-- Forum: Hacks/Modding (https://mkwii.org/forumdisplay.php?fid=14)
+--- Forum: Hacking General (https://mkwii.org/forumdisplay.php?fid=23)
+--- Thread: List of Certain Functions with Arguments Plus Descriptions (/showthread.php?tid=1117)



List of Certain Functions with Arguments Plus Descriptions - zak - 04-05-2019

List of Certain Functions with Arguments Plus Descriptions

This is a list of functions I have used in codes I have made or attempted to have made. Arguments, descriptions, and return values are provided. If you are wanting to view a list of many many more functions (not as detailed as this), view this thread HERE. There's no need to have essentially two symbol map type threads in the Resources sub-forum, hence why this thread is in Hacking General sub-forum.




ISFS Specific Return Values (r3)

For any function that has the term ISFS in it, they all have the same return value numbering. Here's a list of those values (shown in decimal form):
-1 = Permission Denied
-2 = File/Directory already exists
-4 = Invalid Register Argument
-6 = File/Directory not found
-8 = Resource busy
-12 = ECC error
-22 = Could not allocate Memory
-101 = Invalid Register Argument
-102 = Permission Denied
-105 = File/Directory already exists
-106 = File/Directory not found
-107 = Too many fds open
-108 = Memory is full
-109 = Too many fds open
-110 = Pathname is too long
-111 = fd already open
-114 = ECC error
-115 = Directory not empty
-116 = Max directory depth exceeded
-118 = Resource busy
-119 = Fatal error




Function: memcpy

Summary: Copies Data from a spot in Memory to another spot; useful for very large amounts of data

Address (region-free):
0x80005F34

Arguments:
r3 = Destination Start Address
r4 = Source Start Address
r5 = Amount of Bytes to Copy Over

Return Values:
r0 = Last byte that was copied
r3 = Remains the same
r4 = Address for final byte of Source
r5 = 0x0
r6 = Address for final byte of Destination

~~~

Function: sprintf

Summary: Formats a String (C++ style) and stores string to desired memory location

Addresses:
NTSC-U 0x80010ECC
PAL = 0x80011A2C
NTSC-J = 0x80011950
NTSC-K = 0x80011A94

Arguments:
r3 = Address Pointer where Formatted String ASCii-Hex will be written to
r4 = Address Pointer where non-formatted ASCii-Hex String is located, must end in NULL
r5 thru r10 = Non-Float Values to be formatted
f1 thru f13 = Float Values to be formatted

NOTE: You must use single precision (lfs instruction) if loading floats from memory into FPRs
Another NOTE: If using Float Values ,then this instruction must be required after the lfs (before the function call) - crset 4*cr1+eq

Google printf Format for a list of format characters/symbols for use in the ASCii-Hex String.

Return Value (r3):
Value matching amount of bytes written to r3 = Success
Any negative value = Error

~~~

Function: DirectPrint: SetupFB

Summary: Sets up a Frame Buffer to allow later use of DirectPrint: Printf & DirectPrint: StoreCache

Addresses:
NTSC-U 0x800223E0
PAL 0x80022480
NTSC-J 0x800223A0
NTSC-K 0x800224E0

Arguments:
For r3, 2 instructions must bed used to get the Render Mode of mpVideo from RKSystem, the first instruction slightly differ per region:

NTSC-U = lwz r3, -0x5CA8 (r13)
PAL = lwz r3, -0x5CA0 (r13)
NTSC-J = lwz r3, -0x5CA0 (r13)
NTSC-K = lwz r3, -0x5C80 (r13)

Then execute the 2nd instruction (region-free): lwz r3, 0x0 (r3) 

r3 now contains the RenderMode

Return Values:
Any negative value = Error

~~~

Function: DirectPrint: Printf w/ DirectPrint: StoreCache

Summary: Both functions should be executed back-to-back hence why they are coupled together. These functions will preform a printf-style function that draws on the TV Screen; DirectPrint: SetupFB must already have been called beforehand

Addresses (Printf first, StoreCache second)

NTSC-U = 0x80021DF0, 0x80021DD0
PAL = 0x80021E90, 0x80021E70
NTSC-J = 0x80021DB0, 0x80021D90
NTSC-K = 0x80021EF0, 0x80021ED0

Arguments (for Printf only, StoreCache has no arguments):
r3 = X Coordinate (Starts Far Left)
r4 = Y Coordinate (Starts Very Top)
r5 = 0 for No Text Wrap, 1 for Text Wrap (Wrapping allows the text to enter into a new line if it reaches the edge of the screen)
r6 = Address Pointer to ASCii-Hex String that will be Drawn on Screen
r7 thru r10 = Standard printf format non-float arguments
f1 thru f13 = Standard printf format float arguments

NOTE: You must use single precision (lfs instruction) if loading floats from memory into FPRs
Another NOTE: If using Float Values ,then this instruction must be required after the lfs (before the function call) - crset 4*cr1+eq

Google printf Format for a list of format characters/symbols for use in the ASCii-Hex String.

Return Values:
Any negative value = Error

~~~

Function: ISFS_CreateDir

Summary: Creates a new directory on the NAND

Addresses:
NTSC-U = 80169DD4
PAL = 0x80169E74
NTSC-J = 0x80169D94
NTSC-K = 0x80169F10

Arguments:
r3 = Address that points to the File Path w/ new Directory that will be created (must be 32 bit aligned)
r4 = 0x0 (u8 attributes)
r5 = 0x3 (owner permissions)
r6 = 0x3 (group permissions)
r7 - 0x3 (other permissions)

Return Values (r3)
0 = Success
View ISFS List at top for negative values

##SPECIAL NOTE ABOUT ISFS_CreateDir & DOLPHIN##
Return value -105 will never occur on Dolphin for a Directory that already exists. It will instead return 0.

~~~

Function: ISFS_Delete

Summary: Delete a file or directory (recursively) from the NAND.

Addresses:
NTSC-U = 0x8016A6EC
PAL = 0x8016A78C
NTSC-J = 0x8016A6AC
NTSC-K = 0x8016A828

Arguments:
r3 = Address that points to file path (must be 32 bit aligned)

Return Values (r3):
0 = Success
View ISFS List at top for negative values

~~~

Function: ISFS_CreateFile

Summary: Creates a new file on the NAND, must use a pre-existing directory

Addresses:
NTSC-U = 0x8016ABD4
PAL = 0x8016AC74
NTSC-J = 0x8016AB94
NTSC-K = 0x8016AD10

Arguments:
r3 = Address that points to the File Path w/ new File that will be created
r4 = 0x0 (u8 attributes)
r5 = 0x3 (owner permissions)
r6 = 0x3 (group permissions)
r7 = 0x3 (other permissions)

Return Values (r3)
0 = Success
View ISFS List at top for negative values

~~~

Function: ISFS_Open

Summary: Opens a pre-existing file on the NAND to allow you to later read from it or write to it

Addresses:
NTSC-U = 0x8016ADBC
PAL = 0x8016AE5C
NTSC-J = 0x8016AD7C
NTSC-K = 0x8016AEF8

Arguments:
r3 = Address that points to the File Path
r4 = Permissions (Use 0x1 for Read, or 0x2 for Write)

Return Values (r3):
Success = File Descriptor Value Returned
View ISFS List at top for negative values

~~~

Function: ISFS_Seek

Summary: Only recommended for /readingwriting in a particular region of a very large file when not reading/writing at the very beginning of said file. Use after Open, before Read/Write.

Addresses:
NTSC-U = 0x8016B0CC
PAL = 0x8016B16C
NTSC-J = 0x8016B08C
NTSC-K = 0x8016B208

Arguments:
r3 = File Descriptor (value that was returned from ISFS_Open)
r4 = Offset from Location Mode aka where
r5 = Location Mode aka whence; 0x0 for Start of File, 0x1 = Current Spot of File, 0x2 = End of File

Return Values (r3):
Address after calculation of offset and mode, 0 is returned if r4 and r5 args were both zero
View ISFS List at top for negative values

~~~

Function: ISFS_Read

Summary: Read a file on the NAND to dump it's contents to a spot in Memory

Addresses:
NTSC-U = 0x8016B15C
PAL = 0x8016B1FC
NTSC-J = 0x8016B11C
NTSC-K = 0x8016B298

Arguments:
r3 = File Descriptor (value that was returned from ISFS_Open)
r4 = Address that points where the File's data will be dumped to (must be 32 byte aligned aka is address divisible by 0x20?)
r5 = Amount of Bytes of Data to dump from the File

Return Values (r3):
If r3 value's equals r5, then Success.
View ISFS List at top for negative values

~~~

Function: ISFS_Write

Summary: Write to a file on the NAND.

Addresses:
NTSC-U = 0x8016B220
PAL = 0x8016B2C0
NTSC-J = 0x8016B1E0
NTSC-K = 0x8016B35C

Arguments:
r3 = File Descriptor (value that was returned from ISFSOpen)
r4 = Address that points to the string of data that will be used to write to the File (must be 32 byte aligned aka is address divisible by 0x20?)
r5 = Amount of Bytes of Data to write from the string

Return Values (r3):
If r3 value's equals r5, then Success.
View ISFS List at top for negative values

~~~

Function: ISFS_Close

Summary: Close a file after reading from it or writing to it. This function must be done after the read/write.

Addresses:
NTSC-U = 0x8016B2E4
PAL = 0x8016B384
NTSC-J = 0x8016B2A4
NTSC-K = 0x8016B420

Arguments:
r3 = File Descriptor (value that was returned from ISFS_Open)

Return Values (r3):
0 = Success
View ISFS List at top for negative values

~~~

Function: OSFatal

Summary: Stops the game and displays a desired message on the TV screen. BG color, FG color, and text are all modifiable.

Addresses:
NTSC-U = 0x801A4E24
PAL = 0x801A4EC4
NTSC-J = 0x801A4DE4
NTSC-K = 0x801A5220

Arguments:
r3 = Address Pointer to Foreground (text) color
r4 = Address Pointer to Background color
r5 = Address Pointer to String of ASCII Text

Extra Notes:
Color = RRGGBBFF
RR = Red Value, GG = Green Value, BB = Blue Value

Return Values: None ofc...

~~~

Function: OSShutdownSystem

Summary: Standard shutdown of the Wii.

Addresses:
NTSC-U = 0x801A84CC
PAL = 0x801A856C
NTSC-J = 0x801A848C
NTSC-K = 0x801A88C8

Arguments: None

Return Values: None ofc...

~~~

Function: OSRestart

Summary: Reboots the game.

Addresses:
NTSC-U = 0x801A85E8
PAL = 0x801A8688
NTSC-J = 0x801A85A8
NTSC-K = 0x801A89E4

Arguments: None

Return Values: None ofc...

~~~

Function: OSReturnToMenu

Summary: Returns you to the Wii Menu.

Addresses:
NTSC-U = 0x801A87B8
PAL = 0x801A8858
NTSC-J = 0x801A8778
NTSC-K = 0x801A8BB4

Arguments: None

Return Values: None ofc...

~~~

Function: OSGetTime

Summary: Returns a 64 bit Time value base.

Addresses:
NTSC-U = 0x801AACBC
PAL = 0x801AAD5C
NTSC-J = 0x801AAC7C
NTSC-K = 0x801AB0B8

Arguments: None

Return Values (r3, r4):
r3 = Upper 32 bits of Time Base
r4 = Lower 32 bits of Time Base

~~~

Function: _OSShutdownToSBY

Summary: Shuts down the Wii to 'Red' light mode (completely off) even if your Wii is configured to shut down to 'Yellow' light mode

Addresses:
NTSC-U = 0x801AB8C0
PAL = 0x801AB960
NTSC-J = 0x801AB880
NTSC-K = 0x801ABCBC

Arguments: None

Return Values: None ofc...

~~~

Function: _OSHotReset

Summary: Reboots the Wii

Addresses:
NTSC-U = 0x801AB938
PAL = 0x801AB9D8
NTSC-J = 0x801AB8F8
NTSC-K = 0x801ABD34

Arguments: None

Return Values: None ofc...

~~~

Function: OSLaunchTitleI

Summary: Launches desired Wii Channel

Addresses:
NTSC-U = 0x801ADEC0
PAL = 0x801ADF60
NTSC-J = 0x801ADE80
NTSC-K = 0x801AE2BC

Arguments:
r3 = Upper 32 Bits of Title ID (ASCii-Hex)
r4 = Lower 32 Bits of Title ID
r5 = 0x03010000
r6 = 0x0

Return Values: None ofc...

~~~

Function: SCGetSimpleAddr

Summary: This will dump your Country Code, Region Residence Code, and Globe location from SYSCONF to a desired address. You will need at least 0x1008 blocks/bytes of free space.

Addresses:
NTSC-U = 0x801B1FD4
PAL = 0x801B2074
NTSC-J = 0x801B1F94
NTSC-K = 0x801B23D0

Arguments:
r3 = Address Where Country Code byte will be stored to (must be 32 bit aligned)
r3 + 0x1 = Address Where Region Residence byte will be stored to
r3 + 0x1004 = Address Where Globe Location word will be stored to

Return Values:
If r3 = 1, then success. If not, then unable to get Simple Address Data from SYSCONF.

~~~

Function: SCGetProductArea

Summary. This will dump your Console Area (3 Byte Capitalized ASCII) to a speicific address in Memory.

Addresses:
NTSC-U = 0x801B2300
PAL = 0x801B23A0
NTSC-J = 0x801B22C0
NTSC-K = 0x801B26FC

Arguments:
r3 = Address to Dump Console Area too

Return Values:
If r3 = 1, then success. If not, then unable to get Product Area from setting.txt.

~~~

Function: SCGetProductCode

Summary: This will dump the product code at a specific address in Static Memory. Once the product code is dumped, it will stay there until the Game is turned off

Addresses:
NTSC-U = 0x801B2384
PAL = 0x801B2424
NTSC-J = 0x801B2344
NTSC-K = 0x801B2780

Arguments: None

Return Values
If r3 = 1, then success. If not, then unable to get Product Code from setting.txt.
r4 minus r6 = Address where Product Code was dumped to
r5 = 6

~~~

Function: SCGetProductSN

Summary: This will dump the Serial Number at a specific address in Dynamic Memory. It will only be there during the DWC process of connecting to Wifi, then it will be cleared.
Addresses:
NTSC-U = 0x801B23C0
PAL = 0x801B2460
NTSC-J = 0x801B2380
NTSC-K = 0x801B27BC

Arguments: None

Return Values (r3, r4)
If r3 = 1, then success. If not, then unable to get SN from setting.txt.
r4's value minus 0xA = Address where Serial Number (in ASCII) was dumped to. Serial Number will always be 9 bytes in length)

~~~

Function: NCDiGetWirelessMacAddress

Summary: This will dump your MAC Address at a speicific address in Dynamic Memory. It will only be there during the DWC process of connecting to Wifi, then it will be cleared. However, you can change the first argument (r3) to dump it to a different spot if needed and not have it cleared.

Addresses:
NTSC-U = 0x801D0CD0
PAL = 0x801D0D70
NTSC-J = 0x801D0C90
NTSC-K = 0x801D10CC

Arguments: r3 = Address to dump MAC to

Return Values (r3)
If r3 = 0, then success. If not, then error attempting to get MAC from dev/fs.

~~~

Function: NETCalcCRC32

Summary: Calculates a CRC32-bit checksum. This function is required if you are wanting to make a code to modify MKWii's data save file (rksys.dat)

Addresses:
NTSC-U = 0x801D1C00
PAL = 0x801D1CA0
NTSC-J = 0x801D1BC0
NTSC-K = 0x801D1FFC

Arguments (r3, r4):
r3 = Address Pointer to start of Contents in Memory to be used for the CRC32 Calculation
r4 = Amount of Bytes to be used for the CRC32 Calculation

Return Value (r3);
r3 = CRC32-bit checksum calculated from contents (word)

~~~

Function: EGG::Heap::alloc

Summary: Creates a block of empty memory for available use.

Addresses:
NTSC-U = 0x80229490
PAL = 0x80229814
NTSC-J = 0x80229734
NTSC-K = 0x80229B88

Arguments (r3, r4, r5):
r3 = Size of Memory Block in Bytes
r4 = Alignment of Memory Block (if not sure, use 0x20 for 32 bit alignment)

For r5, 2 instructions must be preformed. The first instruction (get pointer from System Heap) will vary per region...
NTSC-U = lwz r5, -0x5CA8 (r13)
PAL = lwz r5, -0x5CA0 (r13)
NTSC-J = lwz r5, -0x5CA0 (r13)
NTSC-K = lwz r5, -0x5C80 (r13)

Second instruction for r5: lwz r5, 0x0024 (r5)

r5 thus has the Heap to allocate memory block in

Return Value (r3):
r3 = Pointer to Beginning of new Heap to use

~~~

Function: EGG::Heap::free

Summary: Free the block of memory that was created from EGG::Heap::alloc

Addresses (r3, r4):
NTSC-U = 0x80229800
PAL = 0x80229B84
NTSC-J = 0x80229AA4
NTSC-K = 0x80229EF8

Arguments:
r3 = Return value from EGG::Heap::alloc (Pointer to Beginning of Heap)

For r4, 2 instructions must be preformed. The first instruction (get pointer from System Heap) will vary per region...
NTSC-U = lwz r4, -0x5CA8 (r13)
PAL = lwz r4, -0x5CA0 (r13)
NTSC-J = lwz r4, -0x5CA0 (r13)
NTSC-K = lwz r4, -0x5C80 (r13)

Second instruction for r4: lwz r4, 0x24 (r4)

Return Value (r3):
If r3 = 1, then Success. Heap is freed. If not, then some sort of error occured.

~~~

Credits:
Megazig
RiiDefi
Bushing
Star