Thanks to various memebers, I was able to gain some understanding on how this process works. If I have used your information without quoting please let me know so I can credit you. I'll be adding information as they become available.
So here's my slightly clearer instructions for how to inject VC roms. (It's not complete because I don't fully understand every single step.
Custom banner
By default makerom will generate a 128mb file which is idiotic considering most gbc roms are ~3-5mb in size.
http://3dbrew.org/wiki/NCSD#Card_Info_Header
I did some dirty GBC-injection job.
1. unpack BBB's pokemon rom with ctrtool (which produces un-encrypted exefs.bin, exheader.bin, romfs.bin)
2. inject whatever gbc rom into romfs.bin with hex editor
3. find and edit correct IVFC hash value with hex editor (romfs.bin)
4. modify rsf file
5. with cell9's tools, i was able to recreate cci file
makerom.exe -f cci -target d -rsf gw.rsf -o 3dsrom.3ds -exheader exheader.bin -code code.bin -icon icon.bin -banner banner.bin -romfs romfs.bin -alignwr
So here's my slightly clearer instructions for how to inject VC roms. (It's not complete because I don't fully understand every single step.
- Unpack a VC.3ds rom with ctrtool (could someone come up with a command to do so?)
- Inject your desired gbc rom into romfs.bin using a hex editor. [Assuming a rudimentary knowledge of hex editing, this should basically involve opening the .gbc rom with a hex editor. Copying everything, pasting it into romfs.bin in the relevant sections. Can someone clarify how to determine the portion to be overwritten?)
- Find and edit correct IVFC value with hex editor in romfs.bin (I believe this is required to fix crc issues when using makerom. I have no idea how to edit though. There is a chance that the latest makerom build does not require you to do this?)
- Modify rsf file (Can someone explain this too?)
- Technically, the command I quote above should work since you have the edited romfs.bin, exheader, rsf file. So you'll be using makerom for this to work.
Custom banner
By default makerom will generate a 128mb file which is idiotic considering most gbc roms are ~3-5mb in size.
http://3dbrew.org/wiki/NCSD#Card_Info_Header
Look at Writable Address [media units] in the list in 3DSExplorer, that's the pointer to the NAND save. It seems to always be at 0x200 in the ROM. This info is no longer shown in 3DSExplorer 1.5.3.1 so you have to use 1.5.3.0 or older for that part.
You can super trim the ROM first, add blank space equal to the size of the save to the end of the ROM (you'll have to know this beforehand, can be checked by saving first and then looking at the save area in a hex editor, or to be safe just add a few MBs), and point that address there. The address is in media units which is in blocks of 0x200, so setting that to 0x1374 for example would point the save file location to 0x26E800.
If you already have a save, you can also copy that before super trimming and paste it into the new blank area (or simply paste it at the end of the ROM and point the Writable Address there, that might be easier)
No guarantees on whether it will work but it should.