Injecting GBC roms (for noobs)

Discussion in '3DS - Flashcards & Custom Firmwares' started by Dean_, Sep 20, 2014.

  1. Dean_
    OP

    Dean_ GBAtemp Advanced Fan

    Member
    651
    374
    Sep 11, 2014
    ** Currently GATEWAY or other flashcarts are needed to run VC **

    Rusb have made a much noobier tool. You would easily be able to make your own roms.



    ================================================================


    Now, I think, GBC injection have become a quite easy job.


    You need these tools :

    1. Latest compiled ctrtool, makerom

    *. 3DS_CTR_Decryptor (if you are going to use bigbluebox's pre-injected pokemon roms, it's not necessary)

    -----------------------------------------------------------------------------------------------------

    [​IMG]


    GBC roms is packed within romfs, so we need to extract it and edit it and re-pack it.




    Step 1, 2, 3 is done by ctrtool (see diagram above).


    Using this command, you can extract exefs, exheader, romfs.

    > ctrtool --romfs=romfs.bin --exefs=exefs.bin --exheader=exh.bin "ROM.3DS"



    Then

    > ctrtool -t exefs --decompresscode --exefsdir=exefs exefs.bin

    > ctrtool -t romfs --romfsdir romfs romfs.bin



    After done this, you can find extracted exefs and romfs.



    Step 4.

    Change rom file within /romfs/rom/




    And you need to make rsf file. Here's a sample

    ====================================================

    BasicInfo:
    Title : "Input whatever you like"
    CompanyCode : "00"
    ProductCode : "XXX-X-XXXX"
    ContentType : Application
    Logo : Nintendo # Nintendo / Licensed / Distributed / iQue / iQueForSystem

    Rom:
    # Specifies the root path of the file system to include in the ROM.
    HostRoot : "romfs"


    TitleInfo:
    UniqueId : 0xbbbbb
    Category : Application

    CardInfo:
    MediaSize : 128MB # 128MB / 256MB / 512MB / 1GB / 2GB / 4GB
    MediaType : Card2 # Card1 / Card2
    CardDevice : None # NorFlash(Pick this if you use savedata) / None


    Option:
    #UseOnSD : true # true if App is to be installed to SD
    FreeProductCode : true # Removes limitations on ProductCode
    MediaFootPadding : true # If true CCI files are created with padding
    EnableCrypt : true # Enables encryption for NCCH and CIA
    EnableCompress : true # Compresses exefs code

    ExeFs: # these are the program segments from the ELF, check your elf for the appropriate segment names
    ReadOnly:
    - .rodata
    - RO
    ReadWrite:
    - .data
    - RO
    Text:
    - .init
    - .text
    - STUP_ENTRY

    PlainRegion: # only used with SDK ELFs
    # - .module_id

    AccessControlInfo:
    #UseExtSaveData : true
    #ExtSaveDataId: 0xff3ff
    #UseExtendedSaveDataAccessControl: true
    #AccessibleSaveDataIds: [0x101, 0x202, 0x303, 0x404, 0x505, 0x606]

    SystemControlInfo:
    SaveDataSize: 1024KB
    RemasterVersion: 0
    StackSize: 0x40000

    # DO NOT EDIT BELOW HERE OR PROGRAMS WILL NOT LAUNCH (most likely)

    AccessControlInfo:
    FileSystemAccess:
    - Debug
    - DirectSdmc
    - DirectSdmcWrite

    IdealProcessor : 0
    AffinityMask : 1

    Priority : 16

    MaxCpu : 0x9E # Default

    CoreVersion : 2
    DescVersion : 2

    ReleaseKernelMajor : "02"
    ReleaseKernelMinor : "33"
    MemoryType : Application
    HandleTableSize: 512
    IORegisterMapping:
    - 1ff50000-1ff57fff
    - 1ff70000-1ff77fff
    MemoryMapping:
    - 1f000000-1f5fffff:r
    SystemCallAccess:
    ArbitrateAddress: 34
    Break: 60
    CancelTimer: 28
    ClearEvent: 25
    ClearTimer: 29
    CloseHandle: 35
    ConnectToPort: 45
    ControlMemory: 1
    CreateAddressArbiter: 33
    CreateEvent: 23
    CreateMemoryBlock: 30
    CreateMutex: 19
    CreateSemaphore: 21
    CreateThread: 8
    CreateTimer: 26
    DuplicateHandle: 39
    ExitProcess: 3
    ExitThread: 9
    GetCurrentProcessorNumber: 17
    GetHandleInfo: 41
    GetProcessId: 53
    GetProcessIdOfThread: 54
    GetProcessIdealProcessor: 6
    GetProcessInfo: 43
    GetResourceLimit: 56
    GetResourceLimitCurrentValues: 58
    GetResourceLimitLimitValues: 57
    GetSystemInfo: 42
    GetSystemTick: 40
    GetThreadContext: 59
    GetThreadId: 55
    GetThreadIdealProcessor: 15
    GetThreadInfo: 44
    GetThreadPriority: 11
    MapMemoryBlock: 31
    OutputDebugString: 61
    QueryMemory: 2
    ReleaseMutex: 20
    ReleaseSemaphore: 22
    SendSyncRequest1: 46
    SendSyncRequest2: 47
    SendSyncRequest3: 48
    SendSyncRequest4: 49
    SendSyncRequest: 50
    SetThreadPriority: 12
    SetTimer: 27
    SignalEvent: 24
    SleepThread: 10
    UnmapMemoryBlock: 32
    WaitSynchronization1: 36
    WaitSynchronizationN: 37
    InterruptNumbers:
    ServiceAccessControl:
    - APT:U
    - $hioFIO
    - $hostio0
    - $hostio1
    - ac:u
    - boss:U
    - cam:u
    - cecd:u
    - cfg:u
    - dlp:FKCL
    - dlp:SRVR
    - dsp::DSP
    - frd:u
    - fs:USER
    - gsp::Gpu
    - hid:USER
    - http:C
    - mic:u
    - ndm:u
    - news:u
    - nwm::UDS
    - ptm:u
    - pxi:dev
    - soc:U
    - ssl:C
    - y2r:u
    - ldr:ro
    - ir:USER


    SystemControlInfo:
    Dependency:
    ac: 0x0004013000002402L
    am: 0x0004013000001502L
    boss: 0x0004013000003402L
    camera: 0x0004013000001602L
    cecd: 0x0004013000002602L
    cfg: 0x0004013000001702L
    codec: 0x0004013000001802L
    csnd: 0x0004013000002702L
    dlp: 0x0004013000002802L
    dsp: 0x0004013000001a02L
    friends: 0x0004013000003202L
    gpio: 0x0004013000001b02L
    gsp: 0x0004013000001c02L
    hid: 0x0004013000001d02L
    http: 0x0004013000002902L
    i2c: 0x0004013000001e02L
    ir: 0x0004013000003302L
    mcu: 0x0004013000001f02L
    mic: 0x0004013000002002L
    ndm: 0x0004013000002b02L
    news: 0x0004013000003502L
    nim: 0x0004013000002c02L
    nwm: 0x0004013000002d02L
    pdn: 0x0004013000002102L
    ps: 0x0004013000003102L
    ptm: 0x0004013000002202L
    ro: 0x0004013000003702L
    socket: 0x0004013000002e02L
    spi: 0x0004013000002302L
    ssl: 0x0004013000002f02L
    CommonHeaderKey:
    D: |
    jL2yO86eUQnYbXIrzgFVMm7FVze0LglZ2f5g+c42hWoEdnb5BOotaMQPBfqt
    aUyAEmzQPaoi/4l4V+hTJRXQfthVRqIEx27B84l8LA6Tl5Fy9PaQaQ+4yRfP
    g6ylH2l0EikrIVjy2uMlFgl0QJCrG+QGKHftxhaGCifdAwFNmiZuyJ/TmktZ
    0RCb66lYcr2h/p2G7SnpKUliS9h9KnpmG+UEgVYQUK+4SCfByUa9PxYGpT0E
    nw1UcRz0gsBmdOqcgzwnAd9vVqgb42hVn6uQZyAl+j1RKiMWywZarazIR/k5
    Lmr4+groimSEa+3ajyoIho9WaWTDmFU3mkhA2tUDIQ==
    Exponent: |
    AQAB
    Modulus: |
    zwCcsyCgMkdlieCgQMVXA6X2jmb1ICjup0Q+jk/AydPkOgsx7I/MjUymFEkU
    vgXBtCKtzh3NKXtFFuW51tJ60GPOabLKuG0Qm5li+UXALrWhzWuvd5vv2FZI
    dTQCbrq/MFS/M02xNtwqzWiBjE/LwqIdbrDAAvX4HGy0ydaQJ1DKYeQeph5D
    lAGBw2nQ4izXhhuLaU3w8VQkIJHdhxIKI5gJY/20AGkG0vHD553Mh5kBINrWp
    CRYmmJS8DCYbAiQtKbkeUfzHViGTZuj6PwaY8Mv39PGO47a++pt45IUyCEs4/
    LjMS72cyfo8tU4twRGp76SFGYejYj3wGC1f/POQw==
    Signature: |
    BOPR0jL0BOV5Zx502BuPbOvi/hvOq5ID8Dz1MQfOjkey6FKP/6cb4f9YXpm6c
    ZCHAZLo0GduKdMepiKPUq1rsbbAxkRdQdjOOusEWoxNA58x3E4373tCAhlqM2
    DvuQERrIIQ/XnYLV9C3uw4efZwhFqog1jvVyoEHpuvs8xnYtGbsKQ8FrgLwXv
    pOZYy9cSgq+jqLy2D9IxiowPcbq2cRlbW9d2xlUfpq0AohyuXQhpxn7d9RUor
    9veoARRAdxRJK12EpcSoEM1LhTRYdJnSRCY3x3p6YIV3c+l1sWvaQwKt0sZ/U
    8TTDx2gb9g7r/+U9icneu/zlqUpSkexCS009Q==
    Descriptor: |
    AP///wAABAACAAAAAAAFGJ4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiIAAAAAAAABBUFQ6VQAAACRo
    aW9GSU8AJGhvc3RpbzAkaG9zdGlvMWFjOnUAAAAAYm9zczpVAABjYW06dQAA
    AGNlY2Q6dQAAY2ZnOnUAAABkbHA6RktDTGRscDpTUlZSZHNwOjpEU1BmcmQ6
    dQAAAGZzOlVTRVIAZ3NwOjpHcHVoaWQ6VVNFUmh0dHA6QwAAbWljOnUAAABu
    ZG06dQAAAG5ld3M6dQAAbndtOjpVRFNwdG06dQAAAHB4aTpkZXYAc29jOlUA
    AABzc2w6QwAAAHkycjp1AAAAbGRyOnJvAABpcjpVU0VSAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAABOn/rw/7//8ec/APIA8JH/APaR/1D/gf9Y/4H/cP+B/3j/gf8B
    AQD/AAIA/iECAPz/////////////////////////////////////////////
    ////////////////////////////////////////AAAAAAAAAAAAAAAAAAAA
    AAADAAAAAAAAAAAAAAAAAAI=


    =====================================================


    edit this as you need and save this text with .rsf extension like XXXXX.rsf




    Step 5.

    Using makerom, finally you can make your own GBC VC rom.

    > makerom -f cci -o NAME.3ds -rsf XXXXX.rsf -alignwr -target d -exheader exh.bin -code exefs/code.bin -icon exefs/icon.bin -banner exefs/banner.bin





    If you are interested in making fancy banner or icons, use this :

    http://filetrip.net/3ds-downloads/utilities/download-3dsbannermaker-2-0-f32839.html
     
    Margen67 and octopus like this.


  2. PhoenixWrightX

    PhoenixWrightX GBAtemp Regular

    Member
    219
    130
    Jun 11, 2014
    United States
    In Summary (I assume)

    This allows to take any GBC Rom and replace it with an official 3ds gbc vc and Run it?
     
    Margen67 likes this.
  3. Dean_
    OP

    Dean_ GBAtemp Advanced Fan

    Member
    651
    374
    Sep 11, 2014

    Yes. Injecting GBC roms into 3ds VC roms.

    Some VC roms have specific patches inside (like The Lezend of Zelda : Link's Awakening DX), so I cannot guarantee that any GBC roms work properly.

    But I think many of them will work.
     
  4. alexenochs

    alexenochs GBAtemp Fan

    Member
    422
    71
    Aug 30, 2010
    United States
    lol seems easy enough someone needs to make a .bat file that automatically uses the programs to make the rom for us noobs
     
    Margen67, Enigma Hall and laurorual like this.
  5. PhoenixWrightX

    PhoenixWrightX GBAtemp Regular

    Member
    219
    130
    Jun 11, 2014
    United States
    I can't seem to get ctrtool to even run. I double click it and it exits.

    What am i missing?
     
  6. octopus

    octopus Member New

    Member
    296
    107
    Sep 6, 2013
    Somalia
    Command line skills. :)

    UPD: Thanks for the tutorial, but makerom fails to read xxx.rsf because it’s not formatted properly if you copy it from the forum. You should include a link to a .txt with proper formatting.
    Like this: https://gist.githubusercontent.com/3DSGuy/83e12e0ae3dcccb9827f/raw/sample0.rsf

    NVM, I’ll use https://github.com/44670/patchrom/blob/master/gw_workaround.rsf


    Majestic! It’s alive works!

    [​IMG]
     
    Margen67, idunoe and kyogre123 like this.
  7. Nic333

    Nic333 GBAtemp Regular

    Member
    146
    70
    May 3, 2014
    Brazil
    Ok, the homebrew makerom seems to work simlar as the ctr_makerom32 of Nintendo CTR SDK, so the RomFS dir must to be in RSF, i will provide my rsf, just change the title and the Product Code
    In your makerom directory, create a folder named "romfs" and paste your romfs content there, look an example:

    [​IMG]
    [​IMG]
    And just rebuild the .3ds using my RSF in Makerom and tada!, You will got a Working edited RomFS.bin in your .3ds
     

    Attached Files:

    • RSF.rar
      File size:
      3.1 KB
      Views:
      144
    Margen67 and piratesephiroth like this.
  8. kyogre123

    kyogre123 Mexican Pride

    Member
    2,919
    1,261
    Sep 23, 2013
    Mexico
    In my case, it's still not working.

    Could someone help me via PM or something?
     
  9. Nic333

    Nic333 GBAtemp Regular

    Member
    146
    70
    May 3, 2014
    Brazil
    What are you trying to do, are you using the last makerom? What are the Error?
     
  10. Reecey

    Reecey Mario 64 (favorite game of all time)

    Member
    4,274
    1,109
    Mar 7, 2010
    At Home :)
    Please could some kind soul PM me with some details cause I dont know where to get the bits from or I am just a lazy sod ;) I cant find the files etc.. also will this work with GBA VC games as well? has anyone tried yet?
     
  11. hundshamer

    hundshamer GBAtemp Advanced Maniac

    Blacklisted Trader
    1,810
    806
    May 22, 2009
    United States
    Im having problems with the code.bin, banner.bin, and icon.bin not extracting. Maybe I don't have the right ctr tool?
     
  12. kyogre123

    kyogre123 Mexican Pride

    Member
    2,919
    1,261
    Sep 23, 2013
    Mexico
    I'm using the latest makerom (the one at github) that was uploaded on the "romfs generator" thread (so I didn't compiile it by myself).

    Following your instructions, I changed this:

    HostRoot : "romfs"

    And used this command with makerom:
    makerom.exe -f cci -o Test_icles.3ds -rsf RSF.rsf -alignwr -target d -exheader exh.bin -code code.bin -icon icon.bin -banner banner.bin

    And finally, when I open the new rom, the 3DS gets stuck in the Nintendo 3DS logo.
     
  13. Nic333

    Nic333 GBAtemp Regular

    Member
    146
    70
    May 3, 2014
    Brazil
    GBA VC do not use RomFS, I can inject games in AGB_Firm (GBA VC) but it crashes thanks to GW Emunand
    Anyway, send me a PM...
     
    Margen67 and Reecey like this.
  14. octopus

    octopus Member New

    Member
    296
    107
    Sep 6, 2013
    Somalia
    You should leave it be, don’t change it.
     
  15. kyogre123

    kyogre123 Mexican Pride

    Member
    2,919
    1,261
    Sep 23, 2013
    Mexico
    Why? All of the contents of the romfs are extracted and contained in a folder called "romfs", so I think that would be right in the .rsf file.
     
  16. hundshamer

    hundshamer GBAtemp Advanced Maniac

    Blacklisted Trader
    1,810
    806
    May 22, 2009
    United States
    ctrtool -t exefs --decompresscode --exefsdir=exefs exefs.bin keeps giving me "unknown option -- decrompresscode".
     
  17. kyogre123

    kyogre123 Mexican Pride

    Member
    2,919
    1,261
    Sep 23, 2013
    Mexico
    lol, maybe that's the problem?
     
    paulyd likes this.
  18. Reecey

    Reecey Mario 64 (favorite game of all time)

    Member
    4,274
    1,109
    Mar 7, 2010
    At Home :)
    Thanks m8 sent you a PM anything would help me but the easier the better for me :)
     
  19. octopus

    octopus Member New

    Member
    296
    107
    Sep 6, 2013
    Somalia
    I think you’ll only need to alter that if you’ll change the location of \rom\vc_rom.bin
    You’re using outdated ctrtool.
     
  20. Nic333

    Nic333 GBAtemp Regular

    Member
    146
    70
    May 3, 2014
    Brazil
    The romfs folder are in the makerom.exe dir? If not, it needs to be there, and don't edit the rsf, just change the Title and the product code, i don't know as more edits will work fine