Homebrew Converting .elf to .cia? How?

xXDungeon_CrawlerXx

Well-Known Member
Member
Joined
Jul 29, 2015
Messages
2,094
Reaction score
1,447
Trophies
2
Age
30
Location
Liverpool
XP
3,942
Country
Hey Guys,

I want to convert some .elf files to .cia files by myself and I know that I have to use makerom for it.
But I really don't know how to use it :/

Someone who can explain me how to build a .cia (with own Banner, Name and sound)?
would be awesome!
 
  • Like
Reactions: Momoro
If nobody beats me to it, I'll write up a mini-tutorial later (probably leaving soon for the night, so I can't do it now). It's not really difficult, just a bit tedious.
 
  • Like
Reactions: JJTapia19
Note: this post assumes you use a very recent version of makerom (makerom 0.14 should suffice: https://github.com/profi200/Project_CTR/releases). Do not copy and paste the commands you see here, read what this post says, and substitute in your own named files.

To make your own banner (only a 2D one will be covered here), make or get a PNG file that's 256x128 in dimensions, and make or get a WAV file that's 3 seconds in length, or less, if you want a banner with sound. Then you'll want to get bannertool (https://github.com/Steveice10/bannertool, or grab the binary from https://github.com/Steveice10/citrus/tree/master/tools), and run it as follows:

Code:
bannertool.exe makebanner -i nameofyourpngfile.png -a nameofyourwavfile.wav -o banner.bnr

If you don't want sound, I believe you can omit the -a argument (need to verify this though).

To make your own icon, it's pretty much the same process: get a PNG file that's 48x48 in dimensions, then just run bannertool again:

Code:
bannertool.exe makesmdh -s "Your Game Name Here" -l "Your Game Name Here" -p "Author Name Here" -i nameofyouricon.png  -o icon.icn


Then to combine it all into a CIA, you need to use makerom. You'll need an RSF file, which tells the 3DS what sort of services the program can access, what to name the game, and things like that. Here's an example one that will probably work for most homebrew programs (if the program you're trying to make a cia for already has an rsf, you might want to use that instead; it might require services that this example doesn't provide, though you could just edit this example too).

Code:
BasicInfo:
  Title                   : "Your Game Name Here"
  ProductCode             : "CTR-P-EDIT" # You can make this whatever you want, it doesn't have to follow the Nintendo standard
  Logo                    : Nintendo # Nintendo / Licensed / Distributed / iQue / iQueForSystem

#RomFs:
  # Specifies the root path of the read only file system to include in the ROM.
#  RootPath                : $(APP_ROMFS)

TitleInfo:
  Category                : Application
  UniqueId                : 0x1337 #Something like 0x1337, but you can make it whatever you want, as long as it's a hexadecimal number (probably best to make it something actually unique though!)

Option:
  UseOnSD                 : true # true if App is to be installed to SD
  FreeProductCode         : true # Removes limitations on ProductCode
  MediaFootPadding        : false # If true CCI files are created with padding
  EnableCrypt             : $(APP_ENCRYPTED) # Enables encryption for NCCH and CIA
  EnableCompress          : true # Compresses where applicable (currently only exefs:/.code)
AccessControlInfo:
  CoreVersion                   : 2

  # Exheader Format Version
  DescVersion                   : 2
  # Minimum Required Kernel Version (below is for 4.5.0)
  ReleaseKernelMajor            : "02"
  ReleaseKernelMinor            : "33"

  # ExtData
  UseExtSaveData                : false # enables ExtData
  #ExtSaveDataId                : 0x300 # only set this when the ID is different to the UniqueId

  # FS:USER Archive Access Permissions
  # Uncomment as required
  FileSystemAccess:
   #- CategorySystemApplication
   #- CategoryHardwareCheck
   - CategoryFileSystemTool
   #- Debug
   #- TwlCardBackup
   #- TwlNandData
   #- Boss
   - DirectSdmc
   #- Core
   #- CtrNandRo
   #- CtrNandRw
   #- CtrNandRoWrite
   #- CategorySystemSettings
   #- CardBoard
   #- ExportImportIvs
   #- DirectSdmcWrite
   #- SwitchCleanup
   #- SaveDataMove
   #- Shop
   #- Shell
   #- CategoryHomeMenu

  # Process Settings
  MemoryType                    : Application # Application/System/Base
  SystemMode                    : 64MB # 64MB(Default)/96MB/80MB/72MB/32MB
  IdealProcessor                : 0
  AffinityMask                  : 1
  Priority                      : 16
  MaxCpu                        : 0x9E # Default
  HandleTableSize               : 0x200
  DisableDebug                  : false
  EnableForceDebug              : false
  CanWriteSharedPage            : true
  CanUsePrivilegedPriority      : false
  CanUseNonAlphabetAndNumber    : true
  PermitMainFunctionArgument    : true
  CanShareDeviceMemory          : true
  RunnableOnSleep               : false
  SpecialMemoryArrange          : true

  # New3DS Exclusive Process Settings
  SystemModeExt                 : Legacy # Legacy(Default)/124MB/178MB  Legacy:Use Old3DS SystemMode
  CpuSpeed                      : 256MHz # 256MHz(Default)/804MHz
  EnableL2Cache                 : true # false(default)/true
  CanAccessCore2                : true

  # Virtual Address Mappings
  IORegisterMapping:
   - 1ff00000-1ff7ffff   # DSP memory
  MemoryMapping:
   - 1f000000-1f5fffff:r # VRAM

  # Accessible SVCs, <Name>:<ID>
  SystemCallAccess:
    ArbitrateAddress: 34
    Backdoor: 123
    Break: 60
    CancelTimer: 28
    ClearEvent: 25
    ClearTimer: 29
    CloseHandle: 35
    ConnectToPort: 45
    ControlMemory: 1
    ControlProcessMemory: 112
    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

  # Service List
  # Maximum 34 services (32 if firmware is prior to 9.6.0)
  ServiceAccessControl:
   - APT:U
   - ac:u
   - am:net
   - boss:U
   - cam:u
   - cecd:u
   - cfg:nor
   - cfg:u
   - csnd:SND
   - dsp::DSP
   - frd:u
   - fs:USER
   - gsp::Gpu
   - hid:USER
   - http:C
   - ir:rst
   - ir:u
   - ir:USER
   - mic:u
   - ndm:u
   - news:u
   - nwm::UDS
   - ptm:u
   - pxi:dev
   - soc:U
   - ssl:C
   - y2r:u


SystemControlInfo:
  SaveDataSize: 0KB # Change if the app uses savedata
  RemasterVersion: 2
  StackSize: 0x40000

  # Modules that run services listed above should be included below
  # Maximum 48 dependencies
  # <module name>:<module titleid>
  Dependency:
    ac: 0x0004013000002402
    #act: 0x0004013000003802
    am: 0x0004013000001502
    boss: 0x0004013000003402
    camera: 0x0004013000001602
    cecd: 0x0004013000002602
    cfg: 0x0004013000001702
    codec: 0x0004013000001802
    csnd: 0x0004013000002702
    dlp: 0x0004013000002802
    dsp: 0x0004013000001a02
    friends: 0x0004013000003202
    gpio: 0x0004013000001b02
    gsp: 0x0004013000001c02
    hid: 0x0004013000001d02
    http: 0x0004013000002902
    i2c: 0x0004013000001e02
    ir: 0x0004013000003302
    mcu: 0x0004013000001f02
    mic: 0x0004013000002002
    ndm: 0x0004013000002b02
    news: 0x0004013000003502
    #nfc: 0x0004013000004002
    nim: 0x0004013000002c02
    nwm: 0x0004013000002d02
    pdn: 0x0004013000002102
    ps: 0x0004013000003102
    ptm: 0x0004013000002202
    #qtm: 0x0004013020004202
    ro: 0x0004013000003702
    socket: 0x0004013000002e02
    spi: 0x0004013000002302
    ssl: 0x0004013000002f02

Anyway, now you're ready to build the cia. Use makerom:

Code:
makerom -f cia -o install-me.cia -DAPP_ENCRYPTED=false -rsf rsffilename.rsf -target t -exefslogo -elf yourelffilename.elf -icon icon.icn -banner banner.bnr

If you want to spit out a .3ds file instead, it's more or less the same:
Code:
makerom -f cci -o runme.3ds -DAPP_ENCRYPTED=true -rsf rsffilename.rsf -target t -exefslogo -elf yourelffilename.elf -icon icon.icn -banner banner.bnr

That's about it.
 
Last edited by daxtsu,
Note: this post assumes you use a very recent version of makerom (makerom 0.14 should suffice: https://github.com/profi200/Project_CTR/releases). Do not copy and paste the commands you see here, read what this post says, and substitute in your own named files.

To make your own banner (only a 2D one will be covered here), make or get a PNG file that's 256x128 in dimensions, and make or get a WAV file that's 3 seconds in length, or less, if you want a banner with sound. Then you'll want to get bannertool (https://github.com/Steveice10/bannertool, or grab the binary from https://github.com/Steveice10/citrus/tree/master/tools), and run it as follows:

Code:
bannertool.exe makebanner -i nameofyourpngfile.png -a nameofyourwavfile.wav -o banner.bnr

If you don't want sound, I believe you can omit the -a argument (need to verify this though).

To make your own icon, it's pretty much the same process: get a PNG file that's 48x48 in dimensions, then just run bannertool again:

Code:
bannertool.exe makesmdh -s "Your Game Name Here" -l "Your Game Name Here" -p "Author Name Here" -i nameofyouricon.png  -o icon.icn


Then to combine it all into a CIA, you need to use makerom. You'll need an RSF file, which tells the 3DS what sort of services the program can access, what to name the game, and things like that. Here's an example one that will probably work for most homebrew programs (if the program you're trying to make a cia for already has an rsf, you might want to use that instead; it might require services that this example doesn't provide, though you could just edit this example too).

Code:
BasicInfo:
  Title                   : "Your Game Name Here"
  ProductCode             : "CTR-P-EDIT" # You can make this whatever you want, it doesn't have to follow the Nintendo standard
  Logo                    : Nintendo # Nintendo / Licensed / Distributed / iQue / iQueForSystem

#RomFs:
  # Specifies the root path of the read only file system to include in the ROM.
#  RootPath                : $(APP_ROMFS)

TitleInfo:
  Category                : Application
  UniqueId                : 0x1337 #Something like 0x1337, but you can make it whatever you want, as long as it's a hexadecimal number (probably best to make it something actually unique though!)

Option:
  UseOnSD                 : true # true if App is to be installed to SD
  FreeProductCode         : true # Removes limitations on ProductCode
  MediaFootPadding        : false # If true CCI files are created with padding
  EnableCrypt             : $(APP_ENCRYPTED) # Enables encryption for NCCH and CIA
  EnableCompress          : true # Compresses where applicable (currently only exefs:/.code)
AccessControlInfo:
  CoreVersion                   : 2

  # Exheader Format Version
  DescVersion                   : 2
  # Minimum Required Kernel Version (below is for 4.5.0)
  ReleaseKernelMajor            : "02"
  ReleaseKernelMinor            : "33"

  # ExtData
  UseExtSaveData                : false # enables ExtData
  #ExtSaveDataId                : 0x300 # only set this when the ID is different to the UniqueId

  # FS:USER Archive Access Permissions
  # Uncomment as required
  FileSystemAccess:
   #- CategorySystemApplication
   #- CategoryHardwareCheck
   - CategoryFileSystemTool
   #- Debug
   #- TwlCardBackup
   #- TwlNandData
   #- Boss
   - DirectSdmc
   #- Core
   #- CtrNandRo
   #- CtrNandRw
   #- CtrNandRoWrite
   #- CategorySystemSettings
   #- CardBoard
   #- ExportImportIvs
   #- DirectSdmcWrite
   #- SwitchCleanup
   #- SaveDataMove
   #- Shop
   #- Shell
   #- CategoryHomeMenu

  # Process Settings
  MemoryType                    : Application # Application/System/Base
  SystemMode                    : 64MB # 64MB(Default)/96MB/80MB/72MB/32MB
  IdealProcessor                : 0
  AffinityMask                  : 1
  Priority                      : 16
  MaxCpu                        : 0x9E # Default
  HandleTableSize               : 0x200
  DisableDebug                  : false
  EnableForceDebug              : false
  CanWriteSharedPage            : true
  CanUsePrivilegedPriority      : false
  CanUseNonAlphabetAndNumber    : true
  PermitMainFunctionArgument    : true
  CanShareDeviceMemory          : true
  RunnableOnSleep               : false
  SpecialMemoryArrange          : true

  # New3DS Exclusive Process Settings
  SystemModeExt                 : Legacy # Legacy(Default)/124MB/178MB  Legacy:Use Old3DS SystemMode
  CpuSpeed                      : 256MHz # 256MHz(Default)/804MHz
  EnableL2Cache                 : true # false(default)/true
  CanAccessCore2                : true

  # Virtual Address Mappings
  IORegisterMapping:
   - 1ff00000-1ff7ffff   # DSP memory
  MemoryMapping:
   - 1f000000-1f5fffff:r # VRAM

  # Accessible SVCs, <Name>:<ID>
  SystemCallAccess:
    ArbitrateAddress: 34
    Backdoor: 123
    Break: 60
    CancelTimer: 28
    ClearEvent: 25
    ClearTimer: 29
    CloseHandle: 35
    ConnectToPort: 45
    ControlMemory: 1
    ControlProcessMemory: 112
    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

  # Service List
  # Maximum 34 services (32 if firmware is prior to 9.6.0)
  ServiceAccessControl:
   - APT:U
   - ac:u
   - am:net
   - boss:U
   - cam:u
   - cecd:u
   - cfg:nor
   - cfg:u
   - csnd:SND
   - dsp::DSP
   - frd:u
   - fs:USER
   - gsp::Gpu
   - hid:USER
   - http:C
   - ir:rst
   - ir:u
   - ir:USER
   - mic:u
   - ndm:u
   - news:u
   - nwm::UDS
   - ptm:u
   - pxi:dev
   - soc:U
   - ssl:C
   - y2r:u


SystemControlInfo:
  SaveDataSize: 0KB # Change if the app uses savedata
  RemasterVersion: 2
  StackSize: 0x40000

  # Modules that run services listed above should be included below
  # Maximum 48 dependencies
  # <module name>:<module titleid>
  Dependency:
    ac: 0x0004013000002402
    #act: 0x0004013000003802
    am: 0x0004013000001502
    boss: 0x0004013000003402
    camera: 0x0004013000001602
    cecd: 0x0004013000002602
    cfg: 0x0004013000001702
    codec: 0x0004013000001802
    csnd: 0x0004013000002702
    dlp: 0x0004013000002802
    dsp: 0x0004013000001a02
    friends: 0x0004013000003202
    gpio: 0x0004013000001b02
    gsp: 0x0004013000001c02
    hid: 0x0004013000001d02
    http: 0x0004013000002902
    i2c: 0x0004013000001e02
    ir: 0x0004013000003302
    mcu: 0x0004013000001f02
    mic: 0x0004013000002002
    ndm: 0x0004013000002b02
    news: 0x0004013000003502
    #nfc: 0x0004013000004002
    nim: 0x0004013000002c02
    nwm: 0x0004013000002d02
    pdn: 0x0004013000002102
    ps: 0x0004013000003102
    ptm: 0x0004013000002202
    #qtm: 0x0004013020004202
    ro: 0x0004013000003702
    socket: 0x0004013000002e02
    spi: 0x0004013000002302
    ssl: 0x0004013000002f02

Anyway, now you're ready to build the cia. Use makerom:

Code:
makerom -f cia -o install-me.cia -DAPP_ENCRYPTED=false -rsf rsffilename.rsf -target t -exefslogo -elf yourelffilename.elf -icon icon.icn -banner banner.bnr

If you want to spit out a .3ds file instead, it's more or less the same:
Code:
makerom -f cci -o runme.3ds -DAPP_ENCRYPTED=true -rsf rsffilename.rsf -target t -exefslogo -elf yourelffilename.elf -icon icon.icn -banner banner.bnr

That's about it.
THANK YOU!
 
Okay, got a little problem.
Tried to use a sound for my built cia (.wav file, size: 380kb, length: 3sec, bitrate: 1024kbit/s).
But I only hear a few beeps when using it.
here's the wav I use: http://www.xup.in/dl,13612937/audio.wav/

is it possible to get it to work?
 
Last edited by xXDungeon_CrawlerXx,
Usually, the wav files have to consist of the following properties to actually work on a 3DS:
  • It needs to be stereo.
  • It needs to be no more than 3 seconds long.
  • The frequency has to be 32000Hz.
  • And the bitrate need to be 32-bit float.
(These are my findings from a couple of months back, anyway...)
 
Note: this post assumes you use a very recent version of makerom (makerom 0.14 should suffice: https://github.com/profi200/Project_CTR/releases). Do not copy and paste the commands you see here, read what this post says, and substitute in your own named files.

To make your own banner (only a 2D one will be covered here), make or get a PNG file that's 256x128 in dimensions, and make or get a WAV file that's 3 seconds in length, or less, if you want a banner with sound. Then you'll want to get bannertool (https://github.com/Steveice10/bannertool, or grab the binary from https://github.com/Steveice10/citrus/tree/master/tools), and run it as follows:

Code:
bannertool.exe makebanner -i nameofyourpngfile.png -a nameofyourwavfile.wav -o banner.bnr

If you don't want sound, I believe you can omit the -a argument (need to verify this though).

To make your own icon, it's pretty much the same process: get a PNG file that's 48x48 in dimensions, then just run bannertool again:

Code:
bannertool.exe makesmdh -s "Your Game Name Here" -l "Your Game Name Here" -p "Author Name Here" -i nameofyouricon.png  -o icon.icn


Then to combine it all into a CIA, you need to use makerom. You'll need an RSF file, which tells the 3DS what sort of services the program can access, what to name the game, and things like that. Here's an example one that will probably work for most homebrew programs (if the program you're trying to make a cia for already has an rsf, you might want to use that instead; it might require services that this example doesn't provide, though you could just edit this example too).

Code:
BasicInfo:
  Title                   : "Your Game Name Here"
  ProductCode             : "CTR-P-EDIT" # You can make this whatever you want, it doesn't have to follow the Nintendo standard
  Logo                    : Nintendo # Nintendo / Licensed / Distributed / iQue / iQueForSystem

#RomFs:
  # Specifies the root path of the read only file system to include in the ROM.
#  RootPath                : $(APP_ROMFS)

TitleInfo:
  Category                : Application
  UniqueId                : 0x1337 #Something like 0x1337, but you can make it whatever you want, as long as it's a hexadecimal number (probably best to make it something actually unique though!)

Option:
  UseOnSD                 : true # true if App is to be installed to SD
  FreeProductCode         : true # Removes limitations on ProductCode
  MediaFootPadding        : false # If true CCI files are created with padding
  EnableCrypt             : $(APP_ENCRYPTED) # Enables encryption for NCCH and CIA
  EnableCompress          : true # Compresses where applicable (currently only exefs:/.code)
AccessControlInfo:
  CoreVersion                   : 2

  # Exheader Format Version
  DescVersion                   : 2
  # Minimum Required Kernel Version (below is for 4.5.0)
  ReleaseKernelMajor            : "02"
  ReleaseKernelMinor            : "33"

  # ExtData
  UseExtSaveData                : false # enables ExtData
  #ExtSaveDataId                : 0x300 # only set this when the ID is different to the UniqueId

  # FS:USER Archive Access Permissions
  # Uncomment as required
  FileSystemAccess:
   #- CategorySystemApplication
   #- CategoryHardwareCheck
   - CategoryFileSystemTool
   #- Debug
   #- TwlCardBackup
   #- TwlNandData
   #- Boss
   - DirectSdmc
   #- Core
   #- CtrNandRo
   #- CtrNandRw
   #- CtrNandRoWrite
   #- CategorySystemSettings
   #- CardBoard
   #- ExportImportIvs
   #- DirectSdmcWrite
   #- SwitchCleanup
   #- SaveDataMove
   #- Shop
   #- Shell
   #- CategoryHomeMenu

  # Process Settings
  MemoryType                    : Application # Application/System/Base
  SystemMode                    : 64MB # 64MB(Default)/96MB/80MB/72MB/32MB
  IdealProcessor                : 0
  AffinityMask                  : 1
  Priority                      : 16
  MaxCpu                        : 0x9E # Default
  HandleTableSize               : 0x200
  DisableDebug                  : false
  EnableForceDebug              : false
  CanWriteSharedPage            : true
  CanUsePrivilegedPriority      : false
  CanUseNonAlphabetAndNumber    : true
  PermitMainFunctionArgument    : true
  CanShareDeviceMemory          : true
  RunnableOnSleep               : false
  SpecialMemoryArrange          : true

  # New3DS Exclusive Process Settings
  SystemModeExt                 : Legacy # Legacy(Default)/124MB/178MB  Legacy:Use Old3DS SystemMode
  CpuSpeed                      : 256MHz # 256MHz(Default)/804MHz
  EnableL2Cache                 : true # false(default)/true
  CanAccessCore2                : true

  # Virtual Address Mappings
  IORegisterMapping:
   - 1ff00000-1ff7ffff   # DSP memory
  MemoryMapping:
   - 1f000000-1f5fffff:r # VRAM

  # Accessible SVCs, <Name>:<ID>
  SystemCallAccess:
    ArbitrateAddress: 34
    Backdoor: 123
    Break: 60
    CancelTimer: 28
    ClearEvent: 25
    ClearTimer: 29
    CloseHandle: 35
    ConnectToPort: 45
    ControlMemory: 1
    ControlProcessMemory: 112
    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

  # Service List
  # Maximum 34 services (32 if firmware is prior to 9.6.0)
  ServiceAccessControl:
   - APT:U
   - ac:u
   - am:net
   - boss:U
   - cam:u
   - cecd:u
   - cfg:nor
   - cfg:u
   - csnd:SND
   - dsp::DSP
   - frd:u
   - fs:USER
   - gsp::Gpu
   - hid:USER
   - http:C
   - ir:rst
   - ir:u
   - ir:USER
   - mic:u
   - ndm:u
   - news:u
   - nwm::UDS
   - ptm:u
   - pxi:dev
   - soc:U
   - ssl:C
   - y2r:u


SystemControlInfo:
  SaveDataSize: 0KB # Change if the app uses savedata
  RemasterVersion: 2
  StackSize: 0x40000

  # Modules that run services listed above should be included below
  # Maximum 48 dependencies
  # <module name>:<module titleid>
  Dependency:
    ac: 0x0004013000002402
    #act: 0x0004013000003802
    am: 0x0004013000001502
    boss: 0x0004013000003402
    camera: 0x0004013000001602
    cecd: 0x0004013000002602
    cfg: 0x0004013000001702
    codec: 0x0004013000001802
    csnd: 0x0004013000002702
    dlp: 0x0004013000002802
    dsp: 0x0004013000001a02
    friends: 0x0004013000003202
    gpio: 0x0004013000001b02
    gsp: 0x0004013000001c02
    hid: 0x0004013000001d02
    http: 0x0004013000002902
    i2c: 0x0004013000001e02
    ir: 0x0004013000003302
    mcu: 0x0004013000001f02
    mic: 0x0004013000002002
    ndm: 0x0004013000002b02
    news: 0x0004013000003502
    #nfc: 0x0004013000004002
    nim: 0x0004013000002c02
    nwm: 0x0004013000002d02
    pdn: 0x0004013000002102
    ps: 0x0004013000003102
    ptm: 0x0004013000002202
    #qtm: 0x0004013020004202
    ro: 0x0004013000003702
    socket: 0x0004013000002e02
    spi: 0x0004013000002302
    ssl: 0x0004013000002f02

Anyway, now you're ready to build the cia. Use makerom:

Code:
makerom -f cia -o install-me.cia -DAPP_ENCRYPTED=false -rsf rsffilename.rsf -target t -exefslogo -elf yourelffilename.elf -icon icon.icn -banner banner.bnr

If you want to spit out a .3ds file instead, it's more or less the same:
Code:
makerom -f cci -o runme.3ds -DAPP_ENCRYPTED=true -rsf rsffilename.rsf -target t -exefslogo -elf yourelffilename.elf -icon icon.icn -banner banner.bnr

That's about it.
I constantly get:


[EXHEADER ERROR] Invalid cpu speed: 0x256MHz
[EXHEADER ERROR] Failed to create ExHeader
[NCCH ERROR] NCCH Build Process Failed
[RESULT] Failed to build outfile

Any fix?
 
I constantly get:


[EXHEADER ERROR] Invalid cpu speed: 0x256MHz
[EXHEADER ERROR] Failed to create ExHeader
[NCCH ERROR] NCCH Build Process Failed
[RESULT] Failed to build outfile

Any fix?

Should be 268Mhz now, if you're using the latest makerom, and no need for the "0x" part, it's not a hexadecimal number.
 

Site & Scene News

Popular threads in this forum