Hacking Devolution - Public Release

  • Thread starter Thread starter tueidj
  • Start date Start date
  • Views Views 1,469,605
  • Replies Replies 4,456
  • Likes Likes 56
Code:
Devolution Engine r105 2012/07/23 19:05:29
Copyright (C) 2012 tueidj

CARD_Init((null),(null))
CARD_ProbeEx(0,0x80086ce0,0x80086ce4)
Memory card found in slot A, 256 sectors of 8KB each (2097152 bytes).
CARD_Mount(0,0x80055700,0x0)
CARD_MountAsync(0,0x80055700,0x0,0x80012a5c)
card->attached = 0,00000000
card->attached = 1,00000008
__card_domount(0,0)
__card_domount(card_type = 00000010,00000010,00000010)
__card_clearstatus(0)
__card_readstatus(0,00000081)
__card_domount(card locked)
__dounlock(0,0x8005f994)
__card_readarrayunlock(0,7FECE000,0x8005fb00,29,0)
__card_readarrayunlock(0,00000000,0x8005fb00,30,1)
__dsp_initcallback(0x8005f9c4)
__dsp_donecallback(0x8005f9c4)
__card_readarrayunlock(0,37370000,0x8005fb00,23,1)
__card_readarrayunlock(0,539A0000,0x8005fb00,7,1)
__card_readstatus(0,00000081)
__card_synccallback(0,-5,-5)
CARD_Mount returned -5
Memory card emulation will be disabled.

Is what I got when I ran it, with the memory card locked.
Can you redownload it (new build, same URL) and try this again?
 
Sure can. Memory card locked, new build:

Code:
Devolution Engine r105 2012/07/23 19:05:29
Copyright (C) 2012 tueidj

CARD_Init((null),(null))
CARD_ProbeEx(0,0x80086ce0,0x80086ce4)
Memory card found in slot A, 256 sectors of 8KB each (2097152 bytes).
CARD_Mount(0,0x80055700,0x0)
CARD_MountAsync(0,0x80055700,0x0,0x80012a5c)
card->attached = 0,00000000
card->attached = 1,00000008
__card_domount(0,0)
__card_domount(card_type = 00000010,00000010,00000010)
__card_clearstatus(0)
__card_readstatus(0,00000081)
__card_domount(card locked)
__dounlock(0,0x8005f994)
__card_readarrayunlock(0,7FECF000,0x8005fb00,15,0)
__card_readarrayunlock(0,00000000,0x8005fb00,36,1)
__dsp_initcallback(0x8005f9c4)
__dsp_donecallback(0x8005f9c4)
__card_readarrayunlock(0,5BC70000,0x8005fb00,5,1)
__card_readarrayunlock(0,08900000,0x8005fb00,20,1)
__card_readstatus(0,000000c1)
__card_domount(0,1)
__card_enableinterrupt(0,1)
__card_read(0,00000000,8192,0x80055700,0x80014124)
__card_readsegment(0,00000000,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00000200,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00000400,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00000600,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00000800,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00000a00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00000c00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00000e00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00001000,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00001200,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00001400,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00001600,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00001800,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00001a00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00001c00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00001e00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_domount(0,3)
__card_read(0,00002000,8192,0x80057700,0x80014124)
__card_readsegment(0,00002000,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00002200,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00002400,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00002600,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00002800,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00002a00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00002c00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00002e00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00003000,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00003200,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00003400,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00003600,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00003800,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00003a00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00003c00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00003e00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_domount(0,4)
__card_read(0,00004000,8192,0x80059700,0x80014124)
__card_readsegment(0,00004000,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00004200,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00004400,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00004600,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00004800,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00004a00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00004c00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00004e00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00005000,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00005200,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00005400,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00005600,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00005800,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00005a00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00005c00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00005e00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_domount(0,5)
__card_read(0,00006000,8192,0x8005b700,0x80014124)
__card_readsegment(0,00006000,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00006200,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00006400,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00006600,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00006800,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00006a00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00006c00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00006e00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00007000,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00007200,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00007400,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00007600,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00007800,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00007a00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00007c00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00007e00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_domount(0,6)
__card_read(0,00008000,8192,0x8005d700,0x80014124)
__card_readsegment(0,00008000,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00008200,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00008400,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00008600,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00008800,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00008a00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00008c00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00008e00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00009000,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00009200,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00009400,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00009600,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00009800,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00009a00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00009c00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_readsegment(0,00009e00,0x80013924)
__card_start(0,0x80013924,0x0)
__setuptimeout(0x8005f9c0)
__card_start(done CARD_ERROR_READY)
__card_txhandler(0,0)
__blockreadcallback(0,0)
__card_checkdir(0x8005f94c,0x0)
__card_checksum(0x80057700,8188,0x8008ac82,0x8008ac80)
__card_checksum(0x80059700,8188,0x8008ac82,0x8008ac80)
__card_checkfat(0x8005f94c,0x0)
__card_checksum(0x8005b704,8188,0x8008ac80,0x8008ac82)
__card_checksum(0x8005d704,8188,0x8008ac80,0x8008ac82)
__card_verify(0)
__card_synccallback(0,0,0)
CARD_Mount returned 0
Memory card Flash ID: -snip-
Flash ID checksum: 91
Memory card emulation will be disabled.
Press X to mount USB drive, Y to mount SD card or B to exit.
 
I'll see if it works with a game. I didn't bother actually checking. xD

Yeah, PSO episode 3 is seeing it without saying it's damaged now, and I can save okay to it.

You've indeed fixed official memory cards, it seems. Might I ask where the bug in libogc was all along? I'm just curious.
 
You've indeed fixed official memory cards, it seems. Might I ask where the bug in libogc was all along? I'm just curious.
Some special DSP code is used to generate the magic numbers needed to unlock the cards, on the gamecube it uses ARAM but for the wii it has to be told to use MEM2 instead because ARAM doesn't exist.
see card.c: http://pastie.org/pa...7fricitsizfmnyq
There are other existing bugs affecting how the flash id checksum is read/written to SRAM (that I already knew about), libogc thinks the checksums are u16 but they're actually u8. Gotta wonder how nobody noticed the size of the combined SRAM structs is 66 bytes while the physical size is known to be 64 bytes.
 
What I find more fascinating though is how it took almost 4 years(I think?) for it to be discovered. :P

Thanks for the insight. :)
 
Three games that didn't work for me before are now working. Those are:

Star wars rogue leader
Luigi's mansion
Wave race blue storm

The ones that still don't work are:

Extream G3 racing (takes you back out to the hbc after inserting disc)
Pokemon XD gale of darkness (freezes a few seconds after start up)
F-Zero GX (freezes at memory card screen during start up)
 
You've indeed fixed official memory cards, it seems. Might I ask where the bug in libogc was all along? I'm just curious.
Some special DSP code is used to generate the magic numbers needed to unlock the cards, on the gamecube it uses ARAM but for the wii it has to be told to use MEM2 instead because ARAM doesn't exist.
see card.c: http://pastie.org/pa...7fricitsizfmnyq
There are other existing bugs affecting how the flash id checksum is read/written to SRAM (that I already knew about), libogc thinks the checksums are u16 but they're actually u8. Gotta wonder how nobody noticed the size of the combined SRAM structs is 66 bytes while the physical size is known to be 64 bytes.
Forgive my ignorance, but why would that only affect official memory cards?
 
I have a technical question, something I'm curious about... does Devolution work by mapping GC syscalls to their Wii equivalents, providing polyfills where necessary? If that is the case, could it be built upon to load Wii games the same way, without requiring cIOS to be installed?
 
Forgive my ignorance, but why would that only affect official memory cards?
Because unofficial cards aren't really locked, they just pretend to be (to mimic the proper behaviour) but always unlock successfully no matter what "magic numbers" are used.
I have a technical question, something I'm curious about... does Devolution work by mapping GC syscalls to their Wii equivalents, providing polyfills where necessary? If that is the case, could it be built upon to load Wii games the same way, without requiring cIOS to be installed?
Devolution has all of MEM2 to use for itself since it didn't exist on the gamecube, it would be a lot harder to do the same thing for wii games because they use that memory.
 
  • Like
Reactions: 1 person
I have a technical question, something I'm curious about... does Devolution work by mapping GC syscalls to their Wii equivalents, providing polyfills where necessary? If that is the case, could it be built upon to load Wii games the same way, without requiring cIOS to be installed?
Devolution has all of MEM2 to use for itself since it didn't exist on the gamecube, it would be a lot harder to do the same thing for wii games because they use that memory.
Yeah, that makes sense, it would have been cool though (what with cIOSes being evil and everything).
 
About the closest you'll come to that is an xNEEK setup, I would think. You don't need any CIOSes to run games from xNEEK, just bootmii IOS.
 
Some special DSP code is used to generate the magic numbers needed to unlock the cards, on the gamecube it uses ARAM but for the wii it has to be told to use MEM2 instead because ARAM doesn't exist.


So is this the bug in DSP and libogc I have heard about over the years (lib not being able to work well with "Official" cards?) Are you coming up with any ideas to trick this or is it just going to remain a bug in libogc that games must be unlocked first or possible recommendations of 3rd party cards only? Does this bug happen on 3rd party cards? All of mine seem to be the 16MB cards (forgot the block size) but 3rd party and I never see this bug.
 
Yes it is "that" bug. It's not a trick, it's the proper solution that is used by the system menu to be able to unlock cards in wii mode. It may or may not get fixed in libogc, like many other people I no longer bother submitting patches due to the way the project is managed. The fix is posted above, anyone else can submit it (but be aware the flash id checksum stuff is also broken).
 
This loader is amazing! Everything seems to be working fine for me on this end. The main problem I'm having is that after loading a game, and then pressing the power button to return to the homebrew channel, Devolution fails to mount the hard drive. In fact, the only way for me to load another game is to either power down the system, or physically unplug the hard drive. From observing the the lights on my hard drive, it seems that after returning to the homebrew channel via power button, the hard drive is still very much active. I'm not sure if this is a hard drive specific issue, or if its just because Devolution is still early in its development.

Very impressive work indeed! Also, I actually like the AP measures taken. It gives me more reason to be proud of my GameCube collection. Keep up the good work. Now, if I could just find a copy of Fire Emblem at a DECENT price........ ;)
 

Site & Scene News

Popular threads in this forum