• Welcome to SCdev.org. Please log in.

Welcome to the new SCdev forums!

Hacked SC lite firmware: lots of extra features!

Started by felix, February 03, 2007, 04:45:36 AM

Previous topic - Next topic

felix

chishm, the guy who wrote libfat, is hacking the SCL firmware.
Things done so far:
  • Firmware update extractor/injector
  • Stopped auto-booting by FlashMe
  • Optionally auto-boot _BOOT_SC.NDS before the SC firmware menu has loaded
  • Remove Chinese/English language check
Things to do:
  • Redirect homebrew *.nds file booting to a custom loader
http://forum.gbadev.org/viewtopic.php?p=117285
size=8]DS3, FM7, SCmSD1.80/2.60, WRT54GL with Tomato Firmware[/size]

what

omg just tried the "noflasme" Supercard Lite direct boot hack thingy and it works great!!!

I've got an sc lite on a flashed ds lite and an r4. I've always had to unplug the sc or hold select to boot the r4 but I don't have to anymore!!
r4 DS
EZ2 256mb
Supercard Lite
Wii (us, Wiikeyed)
DS Lite Onyx (Flashme v8a stealth)
PSP Slim Piano Black (3.71 M33)

Doggy124

We use SC to dump the DS FW.
Now we going to dump SC FW. *_*


jelbo

Will this work on SC Lite Rumble? I forgot if SCLR uses the same firmware as SCL.

/edit seems like SCLR firmware is different and so far only available as an .scu file. I've been told by Chishm that the 1.70 .bin file that's been hacked (ips patch @ gbadev thread) acts like a GBA ROM. That counts the SCLR out since it doesn't run GBA ROMs, though it can for some reason boot it's GBA menu in GBA mode..

onekelly

I am not getting what this will do for us (possibly cause i am dead sick with the flu), but why is this great (sorrry for askin noob quest)?

PharaohsVizier

Maybe he could do an awesome GUI, moonshell ftw!

liquidnitrogen

it seems we have to compile it from source... and that pretty much wards me off unless there are links to do so -.- ... haha

dantheman

onekelly, the features that sound interesting to me are:
1.  You can make it so that FlashMe doesn't auto-boot to the slot-2 card, allowing you to auto-boot to the slot-1 card and then hold ABXY if you wish to boot to slot-2.  This is sort of the reverse of the current stituation.
2.  You can auto-boot a file directly on the Supercard instead of the Supercard loader

That's what it looks like to me anyway.  I think I'll wait until miniSD code is verified before testing anything.

Doggy124



Cyprien Walker

well i can say supercard rumble soesnt work wont boot so now patch for that yet ( unless you need to do it with wireless multiboot witch i cant get to work on Vista it says device()open failed  after loading it.
aw And Order Is All We Need.

chrisalpha

could someone compile this for me please:
#include <stdio.h>
#include <malloc.h>
#include <string.h>

typedef unsigned int u32;
typedef unsigned short u16;
typedef unsigned char u8;

#define FW_SIZE 0x76000
#define FW_OFFSET 0x34000
#define CHECKSUM_OFFSET 0x1A78

void crypt_fw (u8* fw_data) {
   int i;
   u16* data;

   data = (u16*)fw_data;

   for (i = 0; i < FW_SIZE/2; i++) {
      data[i] = data[i] ^ (i * 2 * 0x1dea3470) ^ 0xaf2753b7;
   }
}   

u32 checksum_fw (u8* fw_data) {
   int i;
   u32 sum = 0;

   for (i = 0; i < FW_SIZE; i++) {
      sum += fw_data[i];
   }

   return sum;
}

int main(int argc, char* argv[]) {
   FILE* sc_upgrade;
   FILE* sc_fw;
   u8* fw_data;
   u32 checksum;

   if ((argc != 4) || (argv[1][0] != '-') || ((argv[1][1] != 'e') && (argv[1][1] != 'i'))) {
      printf ("Usage: %s [-e|-i] <upgrade> <firmware>\n", argv[0]);
      return -1;
   }

   if (argv[1][1] == 'e') {
      sc_upgrade = fopen (argv[2], "rb");
      sc_fw = fopen (argv[3], "wb");

      if ((sc_upgrade == NULL) || (sc_fw == NULL)) {
         printf ("File open error\n");
         return -1;
      }
     
      fw_data = (u8*) malloc (FW_SIZE);

      fseek (sc_upgrade, FW_OFFSET, SEEK_SET);
      fread (fw_data, 1, FW_SIZE, sc_upgrade);

      crypt_fw (fw_data);

      fwrite (fw_data, 1, FW_SIZE, sc_fw);
   } else if (argv[1][1] == 'i') {
      sc_upgrade = fopen (argv[2], "rb+");
      sc_fw = fopen (argv[3], "rb");

      if ((sc_upgrade == NULL) || (sc_fw == NULL)) {
         printf ("File open error\n");
         return -1;
      }
     
      fw_data = (u8*) malloc (FW_SIZE);

      fread (fw_data, 1, FW_SIZE, sc_fw);

      crypt_fw (fw_data);
      checksum = checksum_fw (fw_data);

      fseek (sc_upgrade, FW_OFFSET, SEEK_SET);
      fwrite (fw_data, 1, FW_SIZE, sc_upgrade);

      fseek (sc_upgrade, CHECKSUM_OFFSET, SEEK_SET);
      fwrite (&checksum, sizeof(u32), 1, sc_upgrade);
   }

   fclose (sc_upgrade);
   fclose (sc_fw);
   free (fw_data);

   return 0;
}