Hacking [?] Wii slot light.

  • Thread starter Thread starter DaWiis
  • Start date Start date
  • Views Views 14,866
  • Replies Replies 76
My Wii's slot light IS always on. When i tried to install a casemod that was too small for the Wii, i somehow messed up the LED and it has always been on ever since. I have no idea how this happened but It is sooo annoying. Its always on unless teh system is off and not in WiiConnect24. It might sound like a good idea at first but I prefer it off.
 
eh its fairly simple in any app just add this;
*(u32*)0xCD0000C0 = *(u32*)0xCD0000C0^0x20;

Done, the wii light will stay on
 
nicksasa said:
eh its fairly simple in any app just add this;
*(u32*)0xCD0000C0 = *(u32*)0xCD0000C0^0x20;

Done, the wii light will stay on
grog.gif
AWESOME!
grog.gif

Seems like someone with some coding skill to put this to good use. Perhaps even make a preloader hack for it from here.
 
DaWiis said:
Another "solution" is to make the USB loader make the slot light light when you are playing a game.
That way the IOS doesn't need to be patched.

USB loaders is the most run program on the wii anyways
tongue.gif
(right?)


Oohh and make it so you can boot the game with hooks XD. Anyways, Waninkoko did something similar. Start up the rev13(?) installer, the light will stay on until you finish.
 
Sadly I cant help with this but would love to see it done. I think a preloader code will be better than an ios patch as it can be enabled/disabled simply without tampering with ios files!
 
blinktoday said:
How can we make "*(u32*)0xCD0000C0 = *(u32*)0xCD0000C0^0x20;" in to a preloader code?

We cannot (I think, this is pure pseudo code, and some guessing, someone confirm/bust this)

The Wii has several events:
QUOTE said:
OnStartUp -> PutLightValue(0)
OnDiskInsert -> PutLightValue(1)
OnDiscEject -> PutLightValue(0)
OnNewEmail -> PutLightValue(1)
etc.
(1 = true, 0 = false)

Where PutLightValue is the following:

QUOTE said:
function PutLightValue (true/false)
if true:
CheckLightSettings, Store hem in X (The hardness of the Wii slot light)
SetLight X

If false: SetLight 0

"*(u32*)0xCD0000C0 = *(u32*)0xCD0000C0^0x20;" is actually the SetLight X line. (Where X is 20 or so)

But the value will be overwritten with every light event. (On the wii startup, when a new email is read (so the email is not new anymore) etc etc.)
We need to find, and reverse engineer the complete PutLightValue so it will give full light, even when his parameter is false. A good modded function will be:

QUOTE
function PutLightValue (true/false)
CheckLightSettings, Store hem in X
SetLight X
Ignoring the true/false value, and always put the slotlight on. But this requires some reverse engineering, following/hooking the calls to this possible function. Then, use the code-patch for this function in preloader, to enable the full light.

But:
- This will probably only work for the sysmenu, not for games.
- IOS's will need a patch, to make it work for games, or even for the system menu(!). (I think)

So, for now, it's easier to hardmod the slot light. Soldering is even optional!
yay.gif

Or, you could wait for someone to add IOS/Preloader patches. But this might take a while, since the best programmers/reverse engineers are busy with other stuff.
tongue.gif

(Or you could do/try it yourself, ofourse)
 
it works really >_> it patches the value of *(u32*)0xCD0000C0 in the starlet register --> wii light try it yourself
ps, THIS WILL NEVER WORK IN PRELOADER AS A HACK OR SO
 
nicksasa said:
it works really >_> it patches the value of *(u32*)0xCD0000C0 in the starlet register --> wii light try it yourself
ps, THIS WILL NEVER WORK IN PRELOADER AS A HACK OR SO

I got it wrong with the patch thingy I guess. Still need some more clarification.
 
want a small thingy to clarify?
u32 level = *(u32*)0xCD0000C0;
printf("Level %d\n", level);
int i = 0x0;
while(i < 1000)
{
*(u32*)0xCD0000C0 = *(u32*)0xCD0000C0^0x20;
i += 1;
usleep(i*100);
printf("Level %d\n", i);
}
*(u32*)0xCD0000C0 = level;

this is DISCO !
biggrin.gif
 
nicksasa said:
want a small thingy to clarify?
u32 level = *(u32*)0xCD0000C0;
printf("Level %d\n", level);
int i = 0x0;
while(i < 1000)
{
*(u32*)0xCD0000C0 = *(u32*)0xCD0000C0^0x20;
i += 1;
usleep(i*100);
printf("Level %d\n", i);
}
*(u32*)0xCD0000C0 = level;

this is DISCO !
biggrin.gif

Ye I kinda get it now. I thought it was already patching functions, but it forces another value in the starlet Wii light address.

Still, we need to patch the function that sets the value in starlet, to make it preloader compatible. But it will be a big hog to find the values to patch. I'm not a reverse engineer.
 
well, i think you could make an app that does *(u32*)0xCD0000C0 = *(u32*)0xCD0000C0^0x20; and then launch the sysmenu dol, but i think this would fail
 
I did this with the Ultimate v7 loader back when I was using it as my main loader, it was as simple as the above folks mention -- just insert a bit of code before the game is run and the light stays on while the game is playing. I still have a copy of this version (I called it Ultimate v7-LEDmod) if anyone is interested.

I'll have a look at the source code for CoverFloader (the loader I use now) and see if I can modify it slightly so the LED stays on while playing Wii games. I imagine Backup Loader or Gecko OS could also be modified in a similar way to keep the LED light on while playing. I'm not a very good C coder so I'd have to hardcode it in, someone with more experience would need to make it into an option that can be enabled/disable since not everyone likes the idea.

Edit: For CoverFloader the change was simple, line 415 in main.c, normally turns off the Wii slot light. Just add // at the beginning to comment out the line to stop CoverFloader from turning off the slot light before launching a game:
Code:
ÂÂÂÂ// WiiLight(0); // LEDmod - do not turn off the slot light

I tested it and it works! You can download it here (based on CoverFlow RC7 rev678):

http://sharebee.com/1c9044ae

I'll see if I can get the same thing working with Backup Launcher and Gecko OS. If anyone has any other requests for other loaders/apps/etc, let me know.. I can probably make the modifications required except for the cIOS stuff.
 
nicksasa said:
well, i think you could make an app that does *(u32*)0xCD0000C0 = *(u32*)0xCD0000C0^0x20; and then launch the sysmenu dol, but i think this would fail

It will fail, becaus the wii resets the light state in the beginning. Someone needs to find out what function is being called that changes the value on 0xCD0000C0. Then that function needs to be patched to always patch the value to ^0x20 (light on).

Hells Guardianotherwise we also need to determine the code that resets it when loading a game and disable it. by doing that we would create a software based hack for this...... I would think it wouldn't be too difficult to do.....


Well upon taking a closer look at it I don't see the code thats reseting the light..... It may be that the hadware it's self is resetting.... I'm waiting for an email to myself to arrive now though.....

Oh I totally skipped page 2. You are on exactly the right trail, but there MUST be a function that resets the light value. Hardware can't determine what is going on in the wii menu (messages etc.) there must be some software based reset somewhere..
unsure.gif

Even when we get to that, it'll only work for the wii menu. We'll need to modify IOS's to enable the light during gameplay.
 
Good stuff, I was always of the understanding that USBLoaderGX has the option of enabling the wii light but when ive set it to on it always turns it off before the game starts
blink.gif
:/ Any way around this?
 
Dont the LEDs gets blury if its always on? I heard somewhere that Nintendo uses a very cheap LEDs and they only last 5 years if the job is just to turn on the wii.....
 
Ive not ever heard of an LED getting blurry, If they do then its a simple job to replace them
smile.gif
Your Wii's lens will die long before the LEDs do
wink.gif
 
Most LED's have a lifespan of over 100,000 hours which is 11.4 years running 24/7 (or over 20 years running 12 hours a day) They are very cheap to replace so even in the rare chance it would burn out your LED, it wouldn't cost much to replace. When the lifespan of the LED is over it doesn't get blurry, instead it will gradually fade in brightness, until eventually one day it just turns off.

It's safe to say that you'll be playing another console (Wii 2, Xbox 720, etc) before the LED on your Wii ever dies. Think of all the old electronics that you have that have LEDs on them that are still working, probably much older than the Wii.

Anyways back on topic!

rustybanana: I've been tinkering for the last while with the USBLoader GX source code, I think I might have found the problem.. At line 1243 in menu.cpp there's another wiilight(0);, I simply put a // in front to comment it out. Unfortunately I can't test it since it won't compile for me, it ends up bombing with this error:

Code:
linking ... boot.elf
c:/devkitPro/libogc/lib/wii\libogc.a(ipc.o): In function `__ios_ioctlvformat_parse':
ipc.c:(.text.__ios_ioctlvformat_parse+0x174): undefined reference to `__ctype_ptr__'
c:/devkitpro/devkitppc/bin/../lib/gcc/powerpc-gekko/4.2.4/../../../../powerpc-gekko/bin/ld.exe: c:/devkitPro/libogc/lib/wii\libogc.a(ipc.o)(.text.__ios_ioctlvformat_parse+0x174): unresolvable R_PPC_EMB_SDA21 relocation against symbol `__ctype_ptr__'
ipc.c:(.text.__ios_ioctlvformat_parse+0x4e8): undefined reference to `__ctype_ptr__'
c:/devkitpro/devkitppc/bin/../lib/gcc/powerpc-gekko/4.2.4/../../../../powerpc-gekko/bin/ld.exe: c:/devkitPro/libogc/lib/wii\libogc.a(ipc.o)(.text.__ios_ioctlvformat_parse+0x4e8): unresolvable R_PPC_EMB_SDA21 relocation against symbol `__ctype_ptr__'
c:/devkitpro/devkitppc/bin/../lib/gcc/powerpc-gekko/4.2.4/../../../../powerpc-gekko/bin/ld.exe: final link failed: Nonrepresentable section on output
collect2: ld returned 1 exit status
make[1]: *** [/c/Coding/Wii/usbloader-gui-rev551-LEDmod/boot.elf] Error 1
"make": *** [build] Error 2

Anyone know how to fix this problem so it'll compile properly?
 

Site & Scene News

Popular threads in this forum