In my application, PSPident, which determines the motherboard version by reading the tachyon & baryon number, I also have functions to read the KIRK and SPOCK versions from their respective registers. However, on some PSPs, one or both of them randomly returns no data, or just corrupt data (appears as a smiley face)
This does not seem to be affected by the environment in which the app is running; Pandora, 1.50 kernel and 3.XX/4.XX kernel seems to be the same, and Slim/Fat doesn't make any difference. It looks more like it's specific to certain units, but I'm not sure why. Is it a timing issue?
Some examples - some of them are posts, since the images are now down. Should've posted about this ages ago...
http://forums.maxconsole.net/showpost.p ... stcount=92
No spock version
http://forums.maxconsole.net/showpost.p ... stcount=65
No kirk version (smiley face)
http://forums.maxconsole.net/showpost.p ... stcount=73
No kirk version (smiley face)
http://www.isarapix.org/pix51/1215532728.jpg
No kirk version (smiley face)
http://www.isarapix.org/pix80/1215532795.jpg
No spock version
Here are the functions used:
Code: Select all
u32 pspGetKirkVersion(void) {
int k1 = pspSdkSetK1(0);
sceSysregKirkBusClockEnable();
sceKernelDelayThread(1000);
int err = *(u32 *)0xBDE00004;
pspSdkSetK1(k1);
return err;
}
u32 pspGetSpockVersion(void) {
int k1 = pspSdkSetK1(0);
sceSysregAtaBusClockEnable();
sceKernelDelayThread(1000);
int err = *(u32 *)0xBDF00004;
pspSdkSetK1(k1);
return err;
}
Code: Select all
printf("Kirk: %c%c%c%c\n", kirk[3], kirk[2], kirk[1], kirk[0]);
printf("Spock: %c%c%c%c\n\n", spock[3], spock[2], spock[1], spock[0]);
http://www.sendspace.com/file/qbru1x