Homebrew Converting .elf to .cia? How?

xXDungeon_CrawlerXx

Well-Known Member
OP
Member
Joined
Jul 29, 2015
Messages
2,092
Trophies
1
Age
28
Location
Liverpool
XP
3,720
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

daxtsu

Well-Known Member
Member
Joined
Jun 9, 2007
Messages
5,627
Trophies
2
XP
5,194
Country
Antarctica
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

daxtsu

Well-Known Member
Member
Joined
Jun 9, 2007
Messages
5,627
Trophies
2
XP
5,194
Country
Antarctica
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,

xXDungeon_CrawlerXx

Well-Known Member
OP
Member
Joined
Jul 29, 2015
Messages
2,092
Trophies
1
Age
28
Location
Liverpool
XP
3,720
Country
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!
 

elhobbs

Well-Known Member
Member
Joined
Jul 28, 2008
Messages
1,044
Trophies
1
XP
3,030
Country
United States
D

Deleted User

Guest
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...)
 

Logan Pockrus

Knawledge is key.
Member
Joined
Jan 1, 2016
Messages
1,338
Trophies
0
XP
1,062
Country
United States
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?
 

daxtsu

Well-Known Member
Member
Joined
Jun 9, 2007
Messages
5,627
Trophies
2
XP
5,194
Country
Antarctica
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

General chit-chat
Help Users
    K3Nv2 @ K3Nv2: Look at you holding tiny things