This is from the menupatcher by issac at
http://wiibrew.org/wiki/Menu_Patcher
CODE.globl regionfreeusaÂÂÂÂÂÂÂÂ# r3 address
regionfreeusa:
ÂÂÂÂmtctrÂÂÂÂr4
ÂÂÂÂlisÂÂÂÂr6, 0x281B
ÂÂÂÂoriÂÂÂÂr6, r6, 0x0001ÂÂÂÂ# blr
findusa:
ÂÂÂÂlwzÂÂÂÂr5, 0(r3)
ÂÂÂÂcmpwÂÂÂÂr6, r5
ÂÂÂÂbeqÂÂÂÂwritenop1
ÂÂÂÂaddiÂÂÂÂr3, r3, 4ÂÂÂÂ# next word
ÂÂÂÂbdnzÂÂÂÂfindusaÂÂÂÂÂÂÂÂ# loop length
ÂÂÂÂbÂÂÂÂexitusaÂÂÂÂÂÂÂÂ# stop unhooked game hanging
writenop1:
ÂÂÂÂaddiÂÂÂÂr3, r3, 4ÂÂÂÂ# next word
ÂÂÂÂlisÂÂÂÂ r4, 0x6000ÂÂÂÂ# nop
ÂÂÂÂoriÂÂÂÂ r4, r4, 0x0000
ÂÂÂÂstwÂÂÂÂ r4, 0(r3)ÂÂÂÂ# result in r3
ÂÂÂÂdcbfÂÂÂÂr0, r3ÂÂÂÂÂÂÂÂ# data cache block flush
ÂÂÂÂicbiÂÂÂÂr0, r3
exitusa:
ÂÂÂÂblrÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ # return
//patches.h
//Copyright (C) 2008 by raven
//This is Free Software released under the GNU/GPL License.
#ifndef _PATCHES_H_
#define _PATCHES_H_
#include "patch.h"
#define PATCH_COUNT 8
patch_t ptch[PATCH_COUNT] = {
ÂÂÂÂ{
ÂÂÂÂÂÂÂÂ{"No health check"},
ÂÂÂÂÂÂÂÂ{
ÂÂÂÂÂÂÂÂÂÂÂÂ0x41, 0x81, 0x00, 0x10, //bgtÂÂÂÂ l_check_pad_connected
ÂÂÂÂÂÂÂÂÂÂÂÂ0x88, 0x1D, 0x00, 0x7DÂÂ//lbzÂÂÂÂ %r0, 0x7D(%r29)
ÂÂÂÂÂÂÂÂ},
ÂÂÂÂÂÂÂÂ{
ÂÂÂÂÂÂÂÂÂÂÂÂ0x48, 0x00, 0x00, 0x34,ÂÂ//bÂÂÂÂÂÂ l_start_menu
ÂÂÂÂÂÂÂÂÂÂÂÂ0x88, 0x1D, 0x00, 0x7DÂÂ//lbzÂÂÂÂ %r0, 0x7D(%r29)
ÂÂÂÂÂÂÂÂ},
ÂÂÂÂÂÂÂÂ8, 8, 0
ÂÂÂÂ},
ÂÂÂÂ{
ÂÂÂÂÂÂÂÂ{"No background music"},
ÂÂÂÂÂÂÂÂ{
ÂÂÂÂÂÂÂÂÂÂÂÂ0x38, 0x63, 0x00, 0x34, //addiÂÂÂÂ%r3, %r3, 0x34
ÂÂÂÂÂÂÂÂÂÂÂÂ0x48, 0x00, 0x00, 0x21ÂÂ//blÂÂÂÂÂÂstartSound
ÂÂÂÂÂÂÂÂ},
ÂÂÂÂÂÂÂÂ{
ÂÂÂÂÂÂÂÂÂÂÂÂ0x38, 0x63, 0x00, 0x34, //addiÂÂÂÂ%r3, %r3, 0x34
ÂÂÂÂÂÂÂÂÂÂÂÂ0x48, 0x00, 0x00, 0x10ÂÂ//bÂÂÂÂÂÂ l_out
ÂÂÂÂÂÂÂÂ},
ÂÂÂÂÂÂÂÂ8, 8, 0
ÂÂÂÂ},
ÂÂÂÂ{
ÂÂÂÂÂÂÂÂ{"No icon.bin"},
ÂÂÂÂÂÂÂÂ{"icon.bin"},
ÂÂÂÂÂÂÂÂ{"zcon.bin"},
ÂÂÂÂÂÂÂÂ8, 8, 0
ÂÂÂÂ},
ÂÂÂÂ{
ÂÂÂÂÂÂÂÂ{"No banner.bin"},
ÂÂÂÂÂÂÂÂ{"banner.bin"},
ÂÂÂÂÂÂÂÂ{"zanner.bin"},
ÂÂÂÂÂÂÂÂ10, 10, 0
ÂÂÂÂ},
ÂÂÂÂ{
ÂÂÂÂÂÂÂÂ{"No sound.bin"},
ÂÂÂÂÂÂÂÂ{"sound.bin"},
ÂÂÂÂÂÂÂÂ{"zound.bin"},
ÂÂÂÂÂÂÂÂ9, 9, 0
ÂÂÂÂ},
ÂÂÂÂ{
ÂÂÂÂÂÂÂÂ{"Region JP"},
ÂÂÂÂÂÂÂÂ{
ÂÂÂÂÂÂÂÂÂÂÂÂ0x3B, 0xDE, 0x35, 0xA0, //addiÂÂÂÂ%r30, %r30, byte_816535A0@l
ÂÂÂÂÂÂÂÂÂÂÂÂ0x4B, 0xFF, 0xFE, 0x5DÂÂ//blÂÂÂÂÂÂ__SCF1
ÂÂÂÂÂÂÂÂ},
ÂÂÂÂÂÂÂÂ{
ÂÂÂÂÂÂÂÂÂÂÂÂ0x38, 0x60, 0x00, 0x00, //liÂÂÂÂÂÂ%r3, 0
ÂÂÂÂÂÂÂÂÂÂÂÂ0x48, 0x00, 0x00, 0x44ÂÂ//bÂÂÂÂÂÂ l_out
ÂÂÂÂÂÂÂÂ},
ÂÂÂÂÂÂÂÂ8, 8, 0
ÂÂÂÂ},
ÂÂÂÂ{
ÂÂÂÂÂÂÂÂ{"Region US"},
ÂÂÂÂÂÂÂÂ{
ÂÂÂÂÂÂÂÂÂÂÂÂ0x3B, 0xDE, 0x35, 0xA0, //addiÂÂÂÂ%r30, %r30, byte_816535A0@l
ÂÂÂÂÂÂÂÂÂÂÂÂ0x4B, 0xFF, 0xFE, 0x5DÂÂ//blÂÂÂÂÂÂ__SCF1
ÂÂÂÂÂÂÂÂ},
ÂÂÂÂÂÂÂÂ{
ÂÂÂÂÂÂÂÂÂÂÂÂ0x38, 0x60, 0x00, 0x01, //liÂÂÂÂÂÂ%r3, 1
ÂÂÂÂÂÂÂÂÂÂÂÂ0x48, 0x00, 0x00, 0x44ÂÂ//bÂÂÂÂÂÂ l_out
ÂÂÂÂÂÂÂÂ},
ÂÂÂÂÂÂÂÂ8, 8, 0
ÂÂÂÂ},
ÂÂÂÂ{
ÂÂÂÂÂÂÂÂ{"Region EU"},
ÂÂÂÂÂÂÂÂ{
ÂÂÂÂÂÂÂÂÂÂÂÂ0x3B, 0xDE, 0x35, 0xA0, //addiÂÂÂÂ%r30, %r30, byte_816535A0@l
ÂÂÂÂÂÂÂÂÂÂÂÂ0x4B, 0xFF, 0xFE, 0x5DÂÂ//blÂÂÂÂÂÂ__SCF1
ÂÂÂÂÂÂÂÂ},
ÂÂÂÂÂÂÂÂ{
ÂÂÂÂÂÂÂÂÂÂÂÂ0x38, 0x60, 0x00, 0x02, //liÂÂÂÂÂÂ%r3, 2
ÂÂÂÂÂÂÂÂÂÂÂÂ0x48, 0x00, 0x00, 0x44ÂÂ//bÂÂÂÂÂÂ l_out
ÂÂÂÂÂÂÂÂ},
ÂÂÂÂÂÂÂÂ8, 8, 0
ÂÂÂÂ}
};
#endif
#include
#include
#include
#include
#include
static void *xfb = NULL;
static GXRModeObj *rmode = NULL;
//---------------------------------------------------------------------------------
int main(int argc, char **argv) {
//---------------------------------------------------------------------------------
ÂÂÂÂ// Initialise the video system
ÂÂÂÂVIDEO_Init();
ÂÂÂÂ
ÂÂÂÂ// This function initialises the attached controllers
ÂÂÂÂWPAD_Init();
ÂÂÂÂ
ÂÂÂÂ// Obtain the preferred video mode from the system
ÂÂÂÂ// This will correspond to the settings in the Wii menu
ÂÂÂÂrmode = VIDEO_GetPreferredMode(NULL);
ÂÂÂÂ// Allocate memory for the display in the uncached region
ÂÂÂÂxfb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode));
ÂÂÂÂ
ÂÂÂÂ// Initialise the console, required for printf
ÂÂÂÂconsole_init(xfb,20,20,rmode->fbWidth,rmode->xfbHeight,rmode->fbWidth*VI_DISPLAY_PIX_SZ);
ÂÂÂÂ
ÂÂÂÂ// Set up the video registers with the chosen mode
ÂÂÂÂVIDEO_Configure(rmode);
ÂÂÂÂ
ÂÂÂÂ// Tell the video hardware where our display memory is
ÂÂÂÂVIDEO_SetNextFramebuffer(xfb);
ÂÂÂÂ
ÂÂÂÂ// Make the display visible
ÂÂÂÂVIDEO_SetBlack(FALSE);
ÂÂÂÂ// Flush the video register changes to the hardware
ÂÂÂÂVIDEO_Flush();
ÂÂÂÂ// Wait for Video setup to complete
ÂÂÂÂVIDEO_WaitVSync();
ÂÂÂÂif(rmode->viTVMode&VI_NON_INTERLACE) VIDEO_WaitVSync();
ÂÂÂÂ// The console understands VT terminal escape codes
ÂÂÂÂ// This positions the cursor on row 2, column 0
ÂÂÂÂ// we can use variables for this with format codes too
ÂÂÂÂ// e.g. printf ("\x1b[%d;%dH", row, column );
ÂÂÂÂprintf("\x1b[2;0H");
ÂÂÂÂ
ÂÂÂÂs32 ret;
ÂÂÂÂu32* num = 0;
ÂÂÂÂ//s8* list;
ÂÂÂÂ//list = malloc(0x7FFF);
ÂÂÂÂret = ISFS_Initialize();
ÂÂÂÂprintf("ISFS_Initialize returns %d\n\n", ret);
ÂÂÂÂret = ISFS_ReadDir("/", NULL, num);
ÂÂÂÂprintf("ISFS_ReadDir returns %d\n\n", ret);
ÂÂÂÂ//printf("%s", list);
ÂÂÂÂwhile(1) {
ÂÂÂÂÂÂÂÂ// Call WPAD_ScanPads each loop, this reads the latest controller states
ÂÂÂÂÂÂÂÂWPAD_ScanPads();
ÂÂÂÂÂÂÂÂ// WPAD_ButtonsDown tells us which buttons were pressed in this loop
ÂÂÂÂÂÂÂÂ// this is a "one shot" state which will not fire again until the button has been released
ÂÂÂÂÂÂÂÂu32 pressed = WPAD_ButtonsDown(0);
ÂÂÂÂÂÂÂÂ// We return to the launcher application via exit
ÂÂÂÂÂÂÂÂif ( pressed & WPAD_BUTTON_HOME ) exit(0);
ÂÂÂÂÂÂÂÂ// Wait for the next frame
ÂÂÂÂÂÂÂÂVIDEO_WaitVSync();
ÂÂÂÂ}
ÂÂÂÂreturn 0;
}
Maybe you have already seen it?? I think menu patcher is a combined starfall [crediar]/menu loader clone [raven]