Advertisement
Guest User

Untitled

a guest
Jan 26th, 2016
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 55.47 KB | None | 0 0
  1. $ ../Project_CTR/ctrtool/ctrtool -i Animal\ Crossing\ New\ Leaf.cci
  2. Header: NCSD
  3. Signature: 693B0DD5D77CBCFD027DB4035B8B7DC03A603A2E1ED2DF24C411C763C06928FF
  4. 3CD2190657F653C730CA87500E1B0A7986F815D19EB60D9FE539C55BD63FFD88
  5. 69351AD5341AD1D7B95417245B1B05987308962487D5316F82DF985BBE83E178
  6. 8CAFC64411135D155094F71A0D9D22C2497F1E2903E98C7979A5638CD048058D
  7. D938FD10A4E1C6EFBC0A19608A0E89B26CEE118B131E1C92698C4E465EFE57B8
  8. D13685C2A40B6ADAE955CDB20A2036A44C785C89247E19E9E1210C4A69A565F4
  9. 6E6CDF0CD0F39923DB3298B6934F2D65FABFC713268F89F2EE81121BF6272971
  10. 3A00D20942253DE087650BC843AC5ECD2AC21B17EF0103911E692E7753735C17
  11. Media size: 0x00200000
  12. Media id: 0004000000086300
  13.  
  14. Partition 0
  15. Id: 0063080000000400
  16. Area: 0x00004000-0x2E21B000
  17. Filesystem: 00
  18. Encryption: 00
  19.  
  20. Partition 1
  21. Id: 0063080000000500
  22. Area: 0x2E21B000-0x2E3B9000
  23. Filesystem: 00
  24. Encryption: 00
  25.  
  26. Partition 7
  27. Id: 0063080000005010
  28. Area: 0x2E3B9000-0x301DE200
  29. Filesystem: 00
  30. Encryption: 00
  31.  
  32. Extended header hash: 0000000000000000000000000000000000000000000000000000000000000000
  33. Additional header size: 00000000
  34. Sector zero offset: 00000000
  35. Flags: 0000000201020000
  36. > Mediaunit size: 0x200
  37. > Mediatype: Card2
  38. > Card Device: None
  39.  
  40. NCCH:
  41. Header: NCCH
  42. Signature: E84881480B99482B8E0CE47D1E5011C1ED1FD4C0AB78F37F274B4090BAA5633A
  43. 1981D906FB3F759DC84892660C5F076CCA2D3995F9F17116FDE16F4CE91F46E7
  44. E8DE2B26E13139A6476C208ACBC132D57580970E18D4F5A2161E6CF3EF47049E
  45. D5E106C54683C5C4B3AD2AF058DC175EFD0F27D43E245F379F9874894A18E2A5
  46. A9C55CD41217B70E1FB338A801CD5A67110FF5926CAA01318E7201FE6EFD18A8
  47. 32BBFC7B1B113E5799AC58B0C350E8803EC6C6E6A369A8BB88E777316D6668C3
  48. 20037219FF8B26BF2ED35896C385A68D0F539B6441C3EE76EC28BB37158500CD
  49. 423DE991168D11EA4B560B5404C9071A4A9DB8F79798D3948804F099407D3111
  50. Content size: 0x2e217000
  51. Partition id: 0004000000086300
  52. Maker code: 01
  53. Version: 2
  54. Title seed check: 00000000
  55. Program id: 0004000000086300
  56. Logo hash: 0000000000000000000000000000000000000000000000000000000000000000
  57. Product code: CTR-P-EGDE
  58. Exheader size: 00000400
  59. Exheader hash: FAAB6E8A7DF201F8EB76CF85CCD28445087810853FDB263EFA45FF26A6602869
  60. Flags: 0000030100000000
  61. > Mediaunit size: 0x200
  62. > Crypto key: Secure (0)
  63. > Form type: Executable content
  64. > Content type: Application
  65. > Content platform: CTR
  66. Plain region offset: 0x00004a00
  67. Plain region size: 0x00000200
  68. Logo offset: 0x00000000
  69. Logo size: 0x00000000
  70. ExeFS offset: 0x00004c00
  71. ExeFS size: 0x0093c000
  72. ExeFS hash region size: 0x00000200
  73. RomFS offset: 0x00941000
  74. RomFS size: 0x2d8da000
  75. RomFS hash region size: 0x00000200
  76. ExeFS Hash: E56E528883D121143223B37D3D2EF81BA78DC62153FA0EC8B9D7F50DCE6910CA
  77. RomFS Hash: 1C9FC48D72A41ABB12759776A09C33B151DEC74E34EF5693D5E4683CDBEB55AC
  78.  
  79. Extended header:
  80. Signature: 85AE5B21E943694DEC4DBDCA4ED65CD8A88E16A4574CADE9CABDA5A173287A39
  81. 516CCE01B0A13E68FBB57C79343474A6FD2BC0CFA240D52A9DF48C49A4EA958C
  82. 4A6E592FA25C50FF888C34FBECCFA0EC70CA1CA6EBD3E68BE4DA87275CED0605
  83. 653218D75875016CCC422A86EB974DAAA5255959AC0971493906158715860BE7
  84. A88C017917BEA0397CC003ED8667F5BFB7700B13967B18CDCDD1A5BF5B3A6A0F
  85. C2D0545E3B26531886799F840AA693EA59930D9C0A9F30C022232FFFEE8E0D5E
  86. BD66BAC8F915B30A83EFAAF38B065C4FD93AD31C044E3C4511184CA47322D909
  87. 75AA080598E235442CAAEBC778CAC4398BDC43260786F0C1A1E3A4564041A7DC
  88.  
  89. NCCH Hdr RSA Modulus: F684CAC0FC4DED1F5F4DA89F1F147C10FAD3FFAD88ED097C9DF818C5163615A8
  90. 564160A249B50F9120E49C1361D8B7B4610D1EEB3F37039F885166213530A94B
  91. 0CA21F25625F4D8153FCA7E30C3C07499C27A131430E87C0A4BE6B3B50A48DA7
  92. 4AD93CE4975D60E11DF19BF1B59B5BE53D8DFB4526E13DD7EDD0AD3E6084F31C
  93. 7EEE146702367B23D87005B1666D162F618CA74717A93356EBE35DDE8BB33C6E
  94. 398466B8E77B0F3D9660735ADA88C7C70C08D43A109C927D16E0FCE182644381
  95. 6441BB3D894C16078E91391F2FBBBFC87688BF4E64FD55FAD32B1795832B7710
  96. D3BAA26AD590F85BA23EA72061A5D6B1A51157E6A5BC07EBD41B1EAAB7F5CEF3
  97. Name: GARDEN
  98. Flag: 00
  99. Remaster version: 0003
  100. Code text address: 0x00100000
  101. Code text size: 0x007B92D8
  102. Code text max pages: 0x000007BA (0x007BA000)
  103. Code ro address: 0x008BA000
  104. Code ro size: 0x0010FE34
  105. Code ro max pages: 0x00000110 (0x00110000)
  106. Code data address: 0x009CA000
  107. Code data size: 0x00036100
  108. Code data max pages: 0x00000037 (0x00037000)
  109. Code bss size: 0x0016E28C
  110. Code stack size: 0x00040000
  111. Dependency: 0004013000002402
  112. Dependency: 0004013000001502
  113. Dependency: 0004013000003402
  114. Dependency: 0004013000001602
  115. Dependency: 0004013000002602
  116. Dependency: 0004013000001702
  117. Dependency: 0004013000001802
  118. Dependency: 0004013000002702
  119. Dependency: 0004013000002802
  120. Dependency: 0004013000001a02
  121. Dependency: 0004013000003202
  122. Dependency: 0004013000001b02
  123. Dependency: 0004013000001c02
  124. Dependency: 0004013000001d02
  125. Dependency: 0004013000002902
  126. Dependency: 0004013000001e02
  127. Dependency: 0004013000003302
  128. Dependency: 0004013000001f02
  129. Dependency: 0004013000002002
  130. Dependency: 0004013000002b02
  131. Dependency: 0004013000003502
  132. Dependency: 0004013000002c02
  133. Dependency: 0004013000002d02
  134. Dependency: 0004013000002102
  135. Dependency: 0004013000003102
  136. Dependency: 0004013000002202
  137. Dependency: 0004013000003702
  138. Dependency: 0004013000002e02
  139. Dependency: 0004013000002302
  140. Dependency: 0004013000002f02
  141. Savedata size: 10M
  142. Jump id: 0004000000086300
  143. Program id: 0004000000086300
  144. Core version: 0x2
  145. System mode: 64MB
  146. System mode (New3DS): 64MB
  147. CPU Speed (New3DS): 268MHz
  148. Enable L2 Cache: NO
  149. Ideal processor: 0
  150. Affinity mask: 1
  151. Main thread priority: 48
  152. Ext savedata id: 0x863
  153. System savedata id 1: 0x0
  154. System savedata id 2: 0x0
  155. OtherUserSaveDataId1: 0x0
  156. OtherUserSaveDataId2: 0x0
  157. OtherUserSaveDataId3: 0x0
  158. Accessible Savedata Ids:
  159. Other Variation Saves: Inaccessible
  160. Access info: 0x80
  161. > Direct SDMC
  162. Mapping static address: 0x1FF50000 (RW)
  163. Mapping static address: 0x1FF58000 (RW)
  164. Mapping static address: 0x1FF70000 (RW)
  165. Mapping static address: 0x1FF78000 (RW)
  166. Mapping static address: 0x1F000000 (RO)
  167. Mapping static address: 0x1F600000 (RO)
  168. Kernel flags:
  169. > Allow debug: YES
  170. > Force debug: NO
  171. > Allow non-alphanum: NO
  172. > Shared page writing: NO
  173. > Privilege priority: NO
  174. > Allow main() args: NO
  175. > Shared device mem: NO
  176. > Runnable on sleep: NO
  177. > Special memory: NO
  178. > Access Core 2: NO
  179. > Memory type: APPLICATION
  180. Handle table size: 0x200
  181. Kernel release version: 2.32
  182. Allowed systemcalls: 0x01, 0x02, 0x03, 0x06, 0x08, 0x09, 0x0A, 0x0B
  183. 0x0C, 0x0F, 0x11, 0x13, 0x14, 0x15, 0x16, 0x17
  184. 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F
  185. 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x27, 0x28
  186. 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30
  187. 0x31, 0x32, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A
  188. 0x3B, 0x3C, 0x3D
  189. Allowed interrupts: none
  190. ARM9 Desc. version: 0x2
  191. Mount NAND fs: NO
  192. Mount NAND RO write fs: NO
  193. Mount NAND TWL fs: NO
  194. Mount NAND W fs: NO
  195. Mount CARD SPI fs: NO
  196. Use SDIF3: NO
  197. Create seed: NO
  198. Use CARD SPI: NO
  199. SD Application: NO
  200. Use Direct SDMC: YES
  201. Service access:
  202. > APT:U
  203. > $hioFIO
  204. > $hostio0
  205. > $hostio1
  206. > ac:u
  207. > boss:U
  208. > cam:u
  209. > cecd:u
  210. > cfg:u
  211. > dlp:FKCL
  212. > dlp:SRVR
  213. > dsp::DSP
  214. > frd:u
  215. > fs:USER
  216. > gsp::Gpu
  217. > hid:USER
  218. > http:C
  219. > mic:u
  220. > ndm:u
  221. > news:u
  222. > nwm::UDS
  223. > ptm:u
  224. > pxi:dev
  225. > soc:U
  226. > ssl:C
  227. > y2r:u
  228. > ldr:ro
  229. > ir:USER
  230. > nim:aoc
  231. > am:app
  232. Reslimit category: 00
  233.  
  234. ExeFS:
  235. Section name: .code
  236. Section offset: 0x00000200
  237. Section size: 0x00901000
  238. Section hash: 1CA065692824C8B95C57CC7DFDCB99A517302139B5BEAB0BCB4415DB2DE36B04
  239. Section name: banner
  240. Section offset: 0x00901200
  241. Section size: 0x00035570
  242. Section hash: 44B43A9F6C6167EABA45C3013D944F25F277D29D14F575F2079ECC9DCE02E1E2
  243. Section name: icon
  244. Section offset: 0x00936800
  245. Section size: 0x000036c0
  246. Section hash: 5C3C12FC2E5A4DB49D47D78143BDCF5F681E3A881B83386862513965944F371E
  247. Section name: logo
  248. Section offset: 0x0093a000
  249. Section size: 0x00002000
  250. Section hash: 2A98C49D919E254E15DC213CAB47A800ED63B248DCD43119E8FB82D9E62AE51C
  251.  
  252. IVFC:
  253. Header: IVFC
  254. Id: 00010000
  255.  
  256. Level 0:
  257. Data offset: 0x2dc68000
  258. Data size: 0x0000c000
  259. Hash offset: 0x00941060
  260. Hash block size: 0x00001000
  261.  
  262. Level 1:
  263. Data offset: 0x2dc74000
  264. Data size: 0x005a7000
  265. Hash offset: 0x2dc68000
  266. Hash block size: 0x00001000
  267.  
  268. Level 2:
  269. Data offset: 0x00942000
  270. Data size: 0x2d326000
  271. Hash offset: 0x2dc74000
  272. Hash block size: 0x00001000
  273.  
  274. RomFS:
  275. Header size: 0x00000028
  276. Section 0 offset: 0x00942028
  277. Section 0 size: 0x00000F1C
  278. Section 1 offset: 0x00942F44
  279. Section 1 size: 0x0000A6D8
  280. Section 2 offset: 0x0094D61C
  281. Section 2 size: 0x0000CA64
  282. Section 3 offset: 0x0095A080
  283. Section 3 size: 0x000E5CEC
  284. Data offset: 0x00A3FD70
  285.  
  286.  
  287. $ ../Project_CTR/ctrtool/ctrtool -i Animal\ Crossing\ New\ Leaf.cxi
  288.  
  289. NCCH:
  290. Header: NCCH
  291. Signature: C4078BE08D324B316ADA335679A147B7AD5CA4F132BC47CA3AF917561D78DAB5
  292. B91977767319CB0DC62A7C8056D97D4D391B783B20FB09C6CBAB65B5BA32F618
  293. 871CAB3DF271F14DC0F02355C98E37B20439143E035AF4F144A1A3A2C9385E4A
  294. CA32586EFE85E4EF35E50F1E22B3194EFA4370AB74E498A1C418C9EB9DF48979
  295. 6B537AA59137BA93FBC5F87B7D4D11B759B323061637EE0CCEBE3643FB2F8FA6
  296. C25B21589B3E1695F29B5814B8019E0D60B02F1C32FEEE74DF6AEE9DF47CEA6C
  297. 8B29124BF135C7A397B978F0F60D12D1342A1BD93B80C827BAE04E1F1286A2F6
  298. 16710A69F77CA8EFEA198D8263B15E7C6F6FCD6AC15B0F3770AB44515242E6A0
  299. Content size: 0x2de14000
  300. Partition id: 0004000000086300
  301. Maker code: 01
  302. Version: 2
  303. Title seed check: 00000000
  304. Program id: 0004000000086300
  305. Logo hash: 2A98C49D919E254E15DC213CAB47A800ED63B248DCD43119E8FB82D9E62AE51C
  306. Product code: CTR-P-EGDE
  307. Exheader size: 00000400
  308. Exheader hash: E2586BAD440E31D41B6B3D4771ACD502EDC42D433252ACE40120D760A6588062
  309. Flags: 0500030100000000
  310. > Mediaunit size: 0x200
  311. > Crypto key: None
  312. > Form type: Executable content
  313. > Content type: Application
  314. > Content platform: CTR
  315. Plain region offset: 0x00002a00
  316. Plain region size: 0x00000200
  317. Logo offset: 0x00000a00
  318. Logo size: 0x00002000
  319. ExeFS offset: 0x00002c00
  320. ExeFS size: 0x00536600
  321. ExeFS hash region size: 0x00000200
  322. RomFS offset: 0x0053a000
  323. RomFS size: 0x2d8da000
  324. RomFS hash region size: 0x00000200
  325. ExeFS Hash: F630BBD7B8B907A43865342F45400CCE6C91726BCE1C9CF1FEEC2A1799B573D2
  326. RomFS Hash: 1C9FC48D72A41ABB12759776A09C33B151DEC74E34EF5693D5E4683CDBEB55AC
  327.  
  328. Extended header:
  329. Signature: 27A07395C64DC7EEA919A2A563C4595694D69150FA77C15F5DBA18B5393717D1
  330. 727FE3937B30D7AED52E1A2FB94BD6C7260CCB63197A28C23FDC66F464A5EB76
  331. B3661FA1954DB8E21A010F0BE739A675F4190F2A1A41595108E9D6B624F7950A
  332. 9969256B0F6DB9C38FF64859F0189A6E6A9328E131E5C1C69230C5716B1CE0DD
  333. FB007A91E0AFE837210516B886535D9B7095030FCB6A56CFFA5F6A27E4262839
  334. 393586F57FF0330A0D42EAF08C9E9CBCA088C20BD29912E61ADD54D9A3839F48
  335. E6B1276C7FA5651B1CCB9662331509FFE64983CF3BFD78DB463EC2E1A3BD7F6C
  336. C8B431FB2A2DF9207E3BD01683CCBA0B8734BE6DFE49D640E2820FAE125E7592
  337.  
  338. NCCH Hdr RSA Modulus: CAC588C7F12A092B7649C0A835751082C2B5E5B2E9C81888F39889BF9DE6E40B
  339. 715DDD3F138271F2ED318699D947FEC57A7593E1F86DC63D9BE11599E1C2E05C
  340. 384B35A24D3EE2CEFBB308A3DD0C2631849227C88A8EC883A86CA7A339719EF1
  341. 349101DF114A9CF98BF92F46440A7238F38B6D233389BF6634A786E6ADF2DEF9
  342. AB16A140EED8F76CDC0092CB3149FC266424088FC660FF1EE3F0DDFB6D0D0F49
  343. 7CAD03EC9F6358FA46DFA2640ECC8557E72C617F59B8627D590EF684969942B0
  344. 398380B5522E073F92E39EF547EBA7D7D415F1228232BE2AD08C01CC30A91196
  345. F6E92BEA0EF82D0DB191D51A9451B98539B0AF9F549E99E146E56FE25F4B4E23
  346. Name: GARDEN
  347. Flag: 03 [compressed][sd app]
  348. Remaster version: 0003
  349. Code text address: 0x00100000
  350. Code text size: 0x007B92D8
  351. Code text max pages: 0x000007BA (0x007BA000)
  352. Code ro address: 0x008BA000
  353. Code ro size: 0x0010FE34
  354. Code ro max pages: 0x00000110 (0x00110000)
  355. Code data address: 0x009CA000
  356. Code data size: 0x00036100
  357. Code data max pages: 0x00000037 (0x00037000)
  358. Code bss size: 0x0016E28C
  359. Code stack size: 0x00040000
  360. Savedata size: 10M
  361. Jump id: 0004000000086300
  362. Program id: 0004000000086300
  363. Core version: 0x2
  364. System mode: 64MB
  365. System mode (New3DS): 64MB
  366. CPU Speed (New3DS): 268MHz
  367. Enable L2 Cache: NO
  368. Ideal processor: 0
  369. Affinity mask: 1
  370. Main thread priority: 48
  371. Ext savedata id: 0x863
  372. System savedata id 1: 0x0
  373. System savedata id 2: 0x0
  374. OtherUserSaveDataId1: 0x0
  375. OtherUserSaveDataId2: 0x0
  376. OtherUserSaveDataId3: 0x0
  377. Accessible Savedata Ids:
  378. Other Variation Saves: Inaccessible
  379. Access info: 0x80
  380. > Direct SDMC
  381. Mapping static address: 0x1FF50000 (RW)
  382. Mapping static address: 0x1FF51000 (RO)
  383. Mapping static address: 0x1FF58000 (RW)
  384. Mapping static address: 0x1FF59000 (RO)
  385. Mapping static address: 0x1FF70000 (RW)
  386. Mapping static address: 0x1FF71000 (RO)
  387. Mapping static address: 0x1FF78000 (RW)
  388. Mapping static address: 0x1FF79000 (RO)
  389. Mapping static address: 0x1F000000 (RO)
  390. Mapping static address: 0x1F001000 (RO)
  391. Mapping static address: 0x1F600000 (RO)
  392. Mapping static address: 0x1F601000 (RO)
  393. Kernel flags:
  394. > Allow debug: YES
  395. > Force debug: NO
  396. > Allow non-alphanum: NO
  397. > Shared page writing: NO
  398. > Privilege priority: NO
  399. > Allow main() args: NO
  400. > Shared device mem: NO
  401. > Runnable on sleep: NO
  402. > Special memory: NO
  403. > Access Core 2: NO
  404. > Memory type: APPLICATION
  405. Handle table size: 0x200
  406. Kernel release version: 2.32
  407. Allowed systemcalls: 0x01, 0x02, 0x03, 0x06, 0x08, 0x09, 0x0A, 0x0B
  408. 0x0C, 0x0F, 0x11, 0x13, 0x14, 0x15, 0x16, 0x17
  409. 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F
  410. 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x27, 0x28
  411. 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30
  412. 0x31, 0x32, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A
  413. 0x3B, 0x3C, 0x3D
  414. Allowed interrupts: none
  415. ARM9 Desc. version: 0x2
  416. Mount NAND fs: NO
  417. Mount NAND RO write fs: NO
  418. Mount NAND TWL fs: NO
  419. Mount NAND W fs: NO
  420. Mount CARD SPI fs: NO
  421. Use SDIF3: NO
  422. Create seed: NO
  423. Use CARD SPI: NO
  424. SD Application: YES
  425. Use Direct SDMC: YES
  426. Service access:
  427. > APT:U
  428. > $hioFIO
  429. > $hostio0
  430. > $hostio1
  431. > ac:u
  432. > boss:U
  433. > cam:u
  434. > cecd:u
  435. > cfg:u
  436. > dlp:FKCL
  437. > dlp:SRVR
  438. > dsp::DSP
  439. > frd:u
  440. > fs:USER
  441. > gsp::Gpu
  442. > hid:USER
  443. > http:C
  444. > mic:u
  445. > ndm:u
  446. > news:u
  447. > nwm::UDS
  448. > ptm:u
  449. > pxi:dev
  450. > soc:U
  451. > ssl:C
  452. > y2r:u
  453. > ldr:ro
  454. > ir:USER
  455. > nim:aoc
  456. > am:app
  457. Reslimit category: 00
  458.  
  459. ExeFS:
  460. Section name: .code
  461. Section offset: 0x00000200
  462. Section size: 0x004fb50c
  463. Section hash: F159FB07BF8CE7D6F28FDD995F5F749930CA396BB2D5BA3EB5D56EF929F43DF5
  464. Section name: banner
  465. Section offset: 0x004fb800
  466. Section size: 0x00035570
  467. Section hash: 44B43A9F6C6167EABA45C3013D944F25F277D29D14F575F2079ECC9DCE02E1E2
  468. Section name: icon
  469. Section offset: 0x00530e00
  470. Section size: 0x000036c0
  471. Section hash: 5C3C12FC2E5A4DB49D47D78143BDCF5F681E3A881B83386862513965944F371E
  472. Section name: logo
  473. Section offset: 0x00534600
  474. Section size: 0x00002000
  475. Section hash: 2A98C49D919E254E15DC213CAB47A800ED63B248DCD43119E8FB82D9E62AE51C
  476.  
  477. IVFC:
  478. Header: IVFC
  479. Id: 00010000
  480.  
  481. Level 0:
  482. Data offset: 0x2d861000
  483. Data size: 0x0000c000
  484. Hash offset: 0x0053a060
  485. Hash block size: 0x00001000
  486.  
  487. Level 1:
  488. Data offset: 0x2d86d000
  489. Data size: 0x005a7000
  490. Hash offset: 0x2d861000
  491. Hash block size: 0x00001000
  492.  
  493. Level 2:
  494. Data offset: 0x0053b000
  495. Data size: 0x2d326000
  496. Hash offset: 0x2d86d000
  497. Hash block size: 0x00001000
  498.  
  499. RomFS:
  500. Header size: 0x00000028
  501. Section 0 offset: 0x0053B028
  502. Section 0 size: 0x00000F1C
  503. Section 1 offset: 0x0053BF44
  504. Section 1 size: 0x0000A6D8
  505. Section 2 offset: 0x0054661C
  506. Section 2 size: 0x0000CA64
  507. Section 3 offset: 0x00553080
  508. Section 3 size: 0x000E5CEC
  509. Data offset: 0x00638D70
  510.  
  511.  
  512. $ cat ../makecia.sh
  513. #!/bin/sh
  514.  
  515. DIR=$(dirname "$1")
  516. BASENAME=${DIR}/$(basename -s .cci "$1")
  517. EXHEADERFILE=${DIR}/exheader.bin
  518. RSFFILE=${BASENAME}.rsf
  519. CXIFILE=${BASENAME}.cxi
  520. CIAFILE=${BASENAME}.cia
  521.  
  522. echo "Directory: ${DIR}"
  523. echo "Base name: ${BASENAME}"
  524. echo "ExHeader file: ${EXHEADERFILE}"
  525. echo "RSF File: ${RSFFILE}"
  526. echo "CXI File: ${CXIFILE}"
  527.  
  528. set -x
  529. python3 /home/paul/3ds/rsfgen.py "$1" "${EXHEADERFILE}" >"${RSFFILE}"
  530. /home/paul/3ds/Project_CTR/makerom/makerom -f ncch -icon "${DIR}/exefs/icon.bin" \
  531. -banner "${DIR}/exefs/banner.bin" -exefslogo -code "${DIR}/exefs/code.bin" \
  532. -exheader "${DIR}/exheader.bin" -plainrgn "${DIR}/plainrgn.bin" -romfs \
  533. "${DIR}/romfs.bin" -rsf "${RSFFILE}" -o "${CXIFILE}"
  534. /home/paul/3ds/Project_CTR/makerom/makerom -f cia -content "${CXIFILE}:0" \
  535. -o "${CIAFILE}"
  536. #rm "${RSFFILE}" "${CXIFILE}"
  537.  
  538.  
  539. $ cat ../rsfgen.py
  540. import struct
  541. import binascii
  542. import os
  543. import argparse
  544.  
  545. MEDIA_BLOCK_SIZE = 0x200
  546. KILOBYTE = 1024
  547. MEGABYTE = 1024**2
  548. GIGABYTE = 1024**3
  549.  
  550. spoof = 0
  551. i = 0
  552.  
  553. sysCalls = (
  554. 'Unknown',
  555. 'ControlMemory',
  556. 'QueryMemory',
  557. 'ExitProcess',
  558. 'GetProcessAffinityMask',
  559. 'SetProcessAffinityMask',
  560. 'SetProcessIdealProcessor',
  561. 'GetProcessIdealProcessor',
  562. 'CreateThread',
  563. 'ExitThread',
  564. 'SleepThread',
  565. 'GetThreadPriority',
  566. 'SetThreadPriority',
  567. 'GetThreadAffinityMask',
  568. 'SetThreadAffinityMask',
  569. 'GetThreadIdealProcessor',
  570. 'SetThreadIdealProcessor',
  571. 'GetCurrentProcessorNumber',
  572. 'Run',
  573. 'CreateMutex',
  574. 'ReleaseMutex',
  575. 'CreateSemaphore',
  576. 'ReleaseSemaphore',
  577. 'CreateEvent',
  578. 'SignalEvent',
  579. 'ClearEvent',
  580. 'CreateTimer',
  581. 'SetTimer',
  582. 'CancelTimer',
  583. 'ClearTimer',
  584. 'CreateMemoryBlock',
  585. 'MapMemoryBlock',
  586. 'UnmapMemoryBlock',
  587. 'CreateAddressArbiter',
  588. 'ArbitrateAddress',
  589. 'CloseHandle',
  590. 'WaitSynchronization1',
  591. 'WaitSynchronizationN',
  592. 'SignalAndWait',
  593. 'DuplicateHandle',
  594. 'GetSystemTick',
  595. 'GetHandleInfo',
  596. 'GetSystemInfo',
  597. 'GetProcessInfo',
  598. 'GetThreadInfo',
  599. 'ConnectToPort',
  600. 'SendSyncRequest1',
  601. 'SendSyncRequest2',
  602. 'SendSyncRequest3',
  603. 'SendSyncRequest4',
  604. 'SendSyncRequest',
  605. 'OpenProcess',
  606. 'OpenThread',
  607. 'GetProcessId',
  608. 'GetProcessIdOfThread',
  609. 'GetThreadId',
  610. 'GetResourceLimit',
  611. 'GetResourceLimitLimitValues',
  612. 'GetResourceLimitCurrentValues',
  613. 'GetThreadContext',
  614. 'Break',
  615. 'OutputDebugString'
  616. )
  617.  
  618. # An unknown attribute is documented but not supported by makerom
  619. FSAccessInfo = (
  620. 'CategorySystemApplication',
  621. 'CategoryHardwareCheck',
  622. 'CategoryFileSystemTool',
  623. 'Debug',
  624. 'TwlCardBackup',
  625. 'TwlNandData',
  626. 'Boss',
  627. 'DirectSdmc',
  628. 'Core',
  629. 'CtrNandRo',
  630. 'CtrNandRw',
  631. 'CtrNandRoWrite',
  632. 'CategorySystemSettings',
  633. 'CardBoard',
  634. 'ExportImportIvs',
  635. 'DirectSdmcWrite',
  636. 'SwitchCleanup',
  637. 'SaveDataMove',
  638. 'Shop',
  639. 'Shell',
  640. 'CategoryHomeMenu'
  641. )
  642.  
  643. # SD Application (8) is set by Options/UseOnSD
  644. # Mount sdmc:/ (9) is set by FileSystemAccess flags
  645. ARM9Access = (
  646. 'FsMountNand',
  647. 'FsMountNandRoWrite',
  648. 'FsMountTwln',
  649. 'FsMountWnand',
  650. 'FsMountCardSpi',
  651. 'UseSdif3',
  652. 'CreateSeed',
  653. 'UseCardSpi',
  654. )
  655.  
  656. rsffile = {
  657. 'Option': {
  658. 'UseOnSD': 'True',
  659. 'EnableCompress': 'True',
  660. 'FreeProductCode': 'True',
  661. 'EnableCrypt': 'False',
  662. 'MediaFootPadding': 'False'
  663. }, 'AccessControlInfo': {
  664. 'DisableDebug': '',
  665. 'EnableForceDebug': '',
  666. 'CanWriteSharedPage': '',
  667. 'CanUsePrivilegedPriority': '',
  668. 'CanUseNonAlphabetAndNumber': '',
  669. 'PermitMainFunctionArgument': '',
  670. 'CanShareDeviceMemory': '',
  671. 'RunnableOnSleep': '',
  672. 'SpecialMemoryArrange': '',
  673. 'UseOtherVariationSaveData': '',
  674. 'CanAccessCore2': '',
  675. 'UseExtSaveData': '',
  676. 'EnableL2Cache': '',
  677. 'IdealProcessor': '',
  678. 'Priority': '',
  679. 'MemoryType': 'Application',
  680. 'SystemMode': '',
  681. 'SystemModeExt': '',
  682. 'CpuSpeed': '',
  683. 'CoreVersion': '',
  684. 'HandleTableSize': '',
  685. 'SystemSaveDataId1': '',
  686. 'SystemSaveDataId2': '',
  687. 'OtherUserSaveDataId1': '',
  688. 'OtherUserSaveDataId2': '',
  689. 'OtherUserSaveDataId3': '',
  690. 'ExtSaveDataId': '',
  691. 'AffinityMask': '',
  692. 'DescVersion': '',
  693. 'ResourceLimitCategory': '',
  694. 'ReleaseKernelMajor': '',
  695. 'ReleaseKernelMinor': '',
  696. 'MaxCpu': '',
  697. 'MemoryMapping': [],
  698. 'IORegisterMapping': [],
  699. 'FileSystemAccess': [],
  700. 'IoAccessControl': [],
  701. 'InterruptNumbers': [],
  702. 'SystemCallAccess': [],
  703. 'ServiceAccessControl': [],
  704. 'AccessibleSaveDataIds': []
  705. }, 'SystemControlInfo': {
  706. 'StackSize': '',
  707. 'RemasterVersion': '',
  708. 'JumpId': '',
  709. 'SaveDataSize': '',
  710. 'Dependency': []
  711. }, 'BasicInfo': {
  712. 'Title': '',
  713. 'CompanyCode': '',
  714. 'ProductCode': '',
  715. 'ContentType': 'Application',
  716. 'Logo': 'Nintendo'
  717. }, 'RomFs': {
  718. 'RootPath': '',
  719. }, 'TitleInfo': {
  720. 'Category': 'Application',
  721. 'UniqueId': ''
  722. }
  723. }
  724.  
  725. # NOTE: TitleInfo is all from the Program ID field in the NCCH header
  726. # Version, ContentsIndex, Variation, ChildIndex and DemoIndex all are the
  727. # "Variation" byte in different contexts. None of them do anything for
  728. # Applications.
  729. # TargetCategory sets Category in the case of constructing an exheader. Not
  730. # sure about the specific details, but Category should always work.
  731. # CategoryFlags sets more specific flags. Category can't be set at the same
  732. # time.
  733.  
  734. # https://www.3dbrew.org/wiki/NCSD
  735.  
  736. # NCSD header
  737. # Offset Size Description
  738. # 0x000 0x100 RSA-2048 SHA-256 signature of the NCSD header (rsasig)
  739. # 0x100 4 Magic Number 'NCSD' (magic)
  740. # 0x104 4 Size of the NCSD image, in media units (1 media unit = 0x200 bytes) (mediasize)
  741. # 0x108 8 Media ID (mediaid)
  742. # 0x110 8 Partitions FS type (0=None, 1=Normal, 3=FIRM, 4=AGB_FIRM save) (type)
  743. # 0x118 8 Partitions crypt type (crypttype)
  744. # 0x120 0x40=(4+4)*8 Offset & Length partition table, in media units (offsets lenghts)
  745. # 0x160 0xA0 ...
  746.  
  747. # For carts,
  748. # Offset Size Description
  749. # 0x160 0x20 Exheader SHA-256 hash (exhdrhash)
  750. # 0x180 0x4 Additional header size (addhdrsize)
  751. # 0x184 0x4 Sector zero offset (zerooffset)
  752. # 0x188 8 Partition Flags (See Below) (flags)
  753. # 0x190 0x40=8*8 Partition ID table (partids)
  754. # 0x1D0 0x30 Reserved
  755. # 0x200 0xE Reserved?
  756. # 0x20E 0x1 Support for this was implemented with 9.6.0-X FIRM. Bit0=1 enables using bits 1-2, it's unknown what these two bits are actually used for(the value of these two bits get compared with some other value during NCSD verification/loading). This appears to enable a new, likely hardware-based, antipiracy check on cartridges. (exflags)
  757. # 0x20F 0x1 Support for this was implemented with 9.6.0-X FIRM, see below regarding save crypto. (savecrypto)
  758. ncsdHdrStruct = struct.Struct("<256s4sIQQQ16I32sIIQ8Q62xBB")
  759.  
  760. # https://www.3dbrew.org/wiki/NCCH
  761.  
  762. # NCCH Header
  763. # OFFSET SIZE DESCRIPTION
  764. # 0x000 0x100 RSA-2048 signature of the NCCH header, using SHA-256. (rsasig)
  765. # 0x100 4 Magic ID, always 'NCCH' (magic)
  766. # 0x104 4 Content size, in media units (1 media unit = 0x200 bytes) (mediasize)
  767. # 0x108 8 Partition ID (partitionid)
  768. # 0x110 2 Maker code (makercode)
  769. # 0x112 2 Version (version)
  770. # 0x114 4 When ncchflag[7] = 0x20 starting with FIRM 9.6.0-X, this is compared with the first output u32 from a SHA256 hash. The data used for that hash is 0x18-bytes: <0x10-long title-unique content lock seed> <programID from NCCH+0x118>. This hash is only used for verification of the content lock seed, and is not the actual keyY. (lockhash)
  771. # 0x118 8 Program ID (programid)
  772. # 0x120 0x10 Reserved
  773. # 0x130 0x20 Logo Region SHA-256 hash. (For applications built with SDK 5+) (Supported from firmware: 5.0.0-11) (logohash)
  774. # 0x150 0x10 Product code (productcode)
  775. # 0x160 0x20 Extended header SHA-256 hash (SHA256 of 2x Alignment Size, beginning at 0x0 of ExHeader) (exhdrhash)
  776. # 0x180 4 Extended header size (exhdrsize)
  777. # 0x184 4 Reserved
  778. # 0x188 8 Flags (See Below) (flags)
  779. # 0x190 4 Plain region offset, in media units (plainoffset)
  780. # 0x194 4 Plain region size, in media units (plainsize)
  781. # 0x198 4 Logo Region offset, in media units (For applications built with SDK 5+) (Supported from firmware: 5.0.0-11) (logooffset)
  782. # 0x19c 4 Logo Region size, in media units (For applications built with SDK 5+) (Supported from firmware: 5.0.0-11) (logosize)
  783. # 0x1A0 4 ExeFS offset, in media units (exefsoffset)
  784. # 0x1A4 4 ExeFS size, in media units (exefssize)
  785. # 0x1A8 4 ExeFS hash region size, in media units (exefshashsize)
  786. # 0x1AC 4 Reserved
  787. # 0x1B0 4 RomFS offset, in media units (romfsoffset)
  788. # 0x1B4 4 RomFS size, in media units (romfssize)
  789. # 0x1B8 4 RomFS hash region size, in media units (romfshashsize)
  790. # 0x1BC 4 Reserved
  791. # 0x1C0 0x20 ExeFS superblock SHA-256 hash - (SHA-256 hash, starting at 0x0 of the ExeFS over the number of media units specified in the ExeFS hash region size) (exefssuperhash)
  792. # 0x1E0 0x20 RomFS superblock SHA-256 hash - (SHA-256 hash, starting at 0x0 of the RomFS over the number of media units specified in the RomFS hash region size) (romfssuperhash)
  793. ncchHdrStruct = struct.Struct("<256s4sIQ2sHIQ16x32s16s32sI4xQIIIIIII4xIII4x32s32s")
  794.  
  795. # https://www.3dbrew.org/wiki/NCCH/Extended_Header
  796.  
  797. # System Control Info
  798. # Offset Size Description
  799. # 0x0 0x8 Application Title (title)
  800. # 0x8 0x5 Reserved
  801. # 0xD 0x1 Flag (Bit0: CompressExefsCode, Bit1: SDApplication) (flag)
  802. # 0xE 0x2 Remaster Version (remaster)
  803. # 0x10 0xC Text Code Set Info (textaddr textpages textsize)
  804. # 0x1C 0x4 Stack Size (stack)
  805. # 0x20 0xC ReadOnly Code Set Info (roaddr ropages rosize)
  806. # 0x2C 0x4 Reserved
  807. # 0x30 0xC Data Code Set Info (dataaddr datapages datasize)
  808. # 0x3C 0x4 BSS Size (bsssize)
  809. # 0x40 0x180 (48*8) Dependency Module (Program ID) List (dependencies)
  810. # 0x1C0 0x40 SystemInfo (savesize jumpid)
  811.  
  812. # Code Set Info
  813. # Offset Size Description
  814. # 0x0 0x4 Address
  815. # 0x4 0x4 Physical region size (in page-multiples)
  816. # 0x8 0x4 Size (in bytes)
  817.  
  818. # System Info
  819. # Offset Size Description
  820. # 0x0 0x8 SaveData Size
  821. # 0x8 0x8 Jump ID
  822. # 0x10 0x30 Reserved
  823. sysCtrlInfoStruct = struct.Struct("<8s5xBHIIIIIII4xIIII48QQQ48x")
  824.  
  825. # Access Control Info
  826. # Offset Size Description
  827. # 0x0 0x170 ARM11 Local System Capabilities
  828. # 0x170 0x80 ARM11 Kernel Capabilities
  829. # 0x1F0 0x10 ARM9 Access Control
  830.  
  831. # ARM11 Local System Capabilities
  832. # Offset Size Description
  833. # 0x0 0x8 Program ID (programid)
  834. # 0x8 0x4 Core Version (The Title ID low of the required FIRM) (corever)
  835. # 0xC 0x1 Flag1 (1b l2cache, 1b cpuspeed, 6b nothing) (flag1)
  836. # 0xD 0x1 Flag2 (4b sysmodeext 0='Legacy' 1='124MB' 2='178MB' (dev unit?)) (flag2)
  837. # 0xE 0x1 Flag0 (flag0)
  838. # 0xF 0x1 Priority (priority)
  839. # 0x10 0x20 (16*2) Resource Limit Descriptors (reslimits)
  840. # 0x30 0x20 Storage Info (extdataid syssaveid(1,2) storageid fsaccess otherattrib)
  841. # 0x50 0x100 (32*8) Service Access Control (services)
  842. # 0x150 0x10 (2*8) Extended Service Access Control, support for this was implemented with 9.3.0-X. (services)
  843. # 0x160 0xF Reserved
  844. # 0x16F 0x1 Resource Limit Category. (0 = APPLICATION, 1 = SYS_APPLET, 2 = LIB_APPLET, 3 = OTHER(sysmodules running under the BASE memregion)) (category)
  845.  
  846. # ARM11 Kernel Capabilities
  847. # Offset Size Description
  848. # 0x0 0x70 (28*4) Descriptors (kernelcaps)
  849. # 0x70 0x10 Reserved
  850.  
  851. # ARM9 Access Control
  852. # Offset Size Description
  853. # 0x0 0xF Descriptors (arm9caps)
  854. # 0xF 0x1 ARM9 Descriptor Version. Originally this value had to be >=2. Starting with 9.3.0-X this value has to be either value 2 or value 3. (arm9ver)
  855.  
  856. # Storage Info
  857. # Offset Size Description
  858. # 0x0 0x8 Extdata ID
  859. # 0x8 (2*4) System Save Data Ids
  860. # 0x10 0x8 Storage Accessable Unique Ids
  861. # 0x18 0x7 File System Access Info
  862. # 0x1F 0x1 Other Attributes
  863.  
  864. # I implemented ARM9 Access Control as 'I11xB' instead of the documented 15 bytes
  865. # field since this makes it easier, and makerom treats tha field as a 32 bit
  866. # value anyway.
  867. accCtrlInfoStruct = struct.Struct("<QIBBBB16HQQQQ272s15xB28I16xI11xB")
  868.  
  869. def makeNcsdHdrDictFromTuple(buffer):
  870. return({
  871. 'rsasig': buffer[0],
  872. 'magic': buffer[1],
  873. 'mediasize': buffer[2],
  874. 'mediaid': buffer[3],
  875. 'type': buffer[4],
  876. 'crypttype': buffer[5],
  877. 'offsets': tuple(buffer[6:22][x] for x in range(0, 16, 2)), # 6 + 16
  878. 'lengths': tuple(buffer[6:22][x] for x in range(1, 16, 2)),
  879. 'exhdrhash': buffer[22],
  880. 'addheadersize': buffer[23],
  881. 'zerooffset': buffer[24],
  882. 'flags': buffer[25],
  883. 'partids': range(26, 33), # 26 + 8
  884. 'exflags': buffer[34],
  885. 'savecrypto': buffer[35]
  886. })
  887.  
  888. def makeNcchHdrDictFromTuple(buffer):
  889. return({
  890. 'rsasig': buffer[0],
  891. 'magic': buffer[1],
  892. 'mediasize': buffer[2],
  893. 'partitionid': buffer[3],
  894. 'makercode': buffer[4],
  895. 'version': buffer[5],
  896. 'lockhash': buffer[6],
  897. 'programid': buffer[7],
  898. 'logohash': buffer[8],
  899. 'productcode': buffer[9],
  900. 'exhdrhash': buffer[10],
  901. 'exhdrsize': buffer[11],
  902. 'flags': buffer[12],
  903. 'plainoffset': buffer[13],
  904. 'plainsize': buffer[14],
  905. 'logooffset': buffer[15],
  906. 'logosize': buffer[16],
  907. 'exefsoffset': buffer[17],
  908. 'exefssize': buffer[18],
  909. 'exefshashsize': buffer[19],
  910. 'romfsoffset': buffer[20],
  911. 'romfssize': buffer[21],
  912. 'romfshashsize': buffer[22],
  913. 'exefssuperhash': buffer[23],
  914. 'romfssuperhash': buffer[24]
  915. })
  916.  
  917. def makeSysCtrlInfoDictFromTuple(buffer):
  918. return({
  919. 'title': buffer[0],
  920. 'flag': buffer[1],
  921. 'remaster': buffer[2],
  922. 'textaddr': buffer[3],
  923. 'textpages': buffer[4],
  924. 'textsize': buffer[5],
  925. 'stack': buffer[6],
  926. 'roaddr': buffer[7],
  927. 'ropages': buffer[8],
  928. 'rosize': buffer[9],
  929. 'dataaddr': buffer[10],
  930. 'datapages': buffer[11],
  931. 'datasize': buffer[12],
  932. 'bsssize': buffer[13],
  933. 'dependencies': buffer[14:62], # 14 + 48
  934. 'savesize': buffer[62],
  935. 'jumpid': buffer[63]
  936. })
  937.  
  938. def makeAccCtrlInfoDictFromTuple(buffer):
  939. return({
  940. 'programid': buffer[0],
  941. 'corever': buffer[1],
  942. 'flag1': buffer[2],
  943. 'flag2': buffer[3],
  944. 'flag0': buffer[4],
  945. 'priority': buffer[5],
  946. 'reslimits': buffer[6:22],
  947. 'extdataid': buffer[22],
  948. 'syssaveid1': buffer[23] >> 0 & 0xFFFFFFFF,
  949. 'syssaveid2': buffer[23] >> 32 & 0xFFFFFFFF,
  950. 'storageid': buffer[24],
  951. 'fsaccess': buffer[25] & 0xFFFFFFFFFFFFFF,
  952. 'otherattrib': buffer[25] >> 56 & 0xFF,
  953. 'services': tuple(buffer[26][x:x+8] for x in range(0, 272, 8)), # 34 entries of 8 bytes each
  954. 'category': buffer[27],
  955. 'kernelcaps': buffer[28:56], # 28 + 28
  956. 'arm9caps': buffer[56],
  957. 'arm9ver': buffer[57]
  958. })
  959.  
  960.  
  961. def warning(warning):
  962. print("WARNING: %s" % warning, file=sys.stderr)
  963.  
  964.  
  965. def populateRSFFile():
  966. # AccessControlInfo
  967.  
  968. # handle those annoying ARM11 Kernel Capabilities values
  969. for caps in accCtrlInfo['kernelcaps']:
  970. # InterruptNumbers
  971. # each has 4 interrupts packed in, 7 bits each
  972. if caps & 0xF0000000 == 0xE0000000:
  973. ints = (caps >> 0 & 0x7F, caps >> 7 & 0x7F, caps >> 14 & 0x7F, caps >> 21 & 0x7F)
  974. for intr in ints:
  975. if intr == 0:
  976. break
  977. rsffile['AccessControlInfo']['InterruptNumers'].append(intr)
  978. # SystemCallAccess
  979. # first 3 bits after the descriptor value indicate a group of 24 syscalls
  980. # the next 24 bits are a mask for this group.
  981. elif caps & 0xF8000000 == 0xF0000000:
  982. scstart = (caps >> 24 & 0x7) * 24
  983. for sc in enumerate(sysCalls[scstart:scstart+24]):
  984. if caps & (1 << sc[0]) != 0:
  985. rsffile['AccessControlInfo']['SystemCallAccess']\
  986. .append("%s: %d" % (sc[1], scstart + sc[0]))
  987. # ReleaseKernelMajor, ReleaseKernelMinor
  988. elif caps & 0xFE000000 == 0xFC000000:
  989. rsffile['AccessControlInfo']['ReleaseKernelMinor'] = caps >> 0 & 0xFF
  990. rsffile['AccessControlInfo']['ReleaseKernelMajor'] = caps >> 8 & 0xFF
  991. # HandleTableSize
  992. elif caps & 0xFF000000 == 0xFE000000:
  993. rsffile['AccessControlInfo']['HandleTableSize'] = caps & 0x7FFFF
  994. # DisableDebug, EnableForceDebug, CanWriteSharedPage, CanUsePrivilegedPriority,
  995. # CanUseNonAlphabetAndNumber, PermitMainFunctionArgument, CanShareDeviceMemory,
  996. # RunnableOnSleep, SpecialMemoryArrange
  997. elif caps & 0xFF800000 == 0xFF000000:
  998. if caps & 0x1 != 0:
  999. rsffile['AccessControlInfo']['DisableDebug'] = 'False'
  1000. else:
  1001. rsffile['AccessControlInfo']['DisableDebug'] = 'True'
  1002. if caps & 0x2 != 0:
  1003. rsffile['AccessControlInfo']['EnableForceDebug'] = 'True'
  1004. else:
  1005. rsffile['AccessControlInfo']['EnableForceDebug'] = 'False'
  1006. if caps & 0x4 != 0:
  1007. rsffile['AccessControlInfo']['CanUseNonAlphabetAndNumber'] = 'True'
  1008. else:
  1009. rsffile['AccessControlInfo']['CanUseNonAlphabetAndNumber'] = 'False'
  1010. if caps & 0x8 != 0:
  1011. rsffile['AccessControlInfo']['CanWriteSharedPage'] = 'True'
  1012. else:
  1013. rsffile['AccessControlInfo']['CanWriteSharedPage'] = 'False'
  1014. if caps & 0x10 != 0:
  1015. rsffile['AccessControlInfo']['CanUsePrivilegedPriority'] = 'True'
  1016. else:
  1017. rsffile['AccessControlInfo']['CanUsePrivilegedPriority'] = 'False'
  1018. if caps & 0x20 != 0:
  1019. rsffile['AccessControlInfo']['PermitMainFunctionArgument'] = 'True'
  1020. else:
  1021. rsffile['AccessControlInfo']['PermitMainFunctionArgument'] = 'False'
  1022. if caps & 0x40 != 0:
  1023. rsffile['AccessControlInfo']['CanShareDeviceMemory'] = 'True'
  1024. else:
  1025. rsffile['AccessControlInfo']['CanShareDeviceMemory'] = 'False'
  1026. if caps & 0x80 != 0:
  1027. rsffile['AccessControlInfo']['RunnableOnSleep'] = 'True'
  1028. else:
  1029. rsffile['AccessControlInfo']['RunnableOnSleep'] = 'False'
  1030. if caps & 0x800 != 0:
  1031. rsffile['AccessControlInfo']['SpecialMemoryArrange'] = 'True'
  1032. else:
  1033. rsffile['AccessControlInfo']['SpecialMemoryArrange'] = 'False'
  1034. if caps & 0x1000 != 0:
  1035. rsffile['AccessControlInfo']['CanAccessCore2'] = 'True'
  1036. else:
  1037. rsffile['AccessControlInfo']['CanAccessCore2'] = 'False'
  1038. # MemoryMapping
  1039. elif caps & 0xFFC00000 == 0xFF800000:
  1040. if caps & 0x100000 != 0: #read only
  1041. rsffile['AccessControlInfo']['MemoryMapping']\
  1042. .append("0x%0.1X%0.2X%0.2X000:r" % (caps >> 16 & 0xF, caps >> 8 & 0xFF, caps & 0xFF))
  1043. else: #read write
  1044. rsffile['AccessControlInfo']['MemoryMapping']\
  1045. .append("0x%0.1X%0.2X%0.2X000" % (caps >> 16 & 0xF, caps >> 8 & 0xFF, caps & 0xFF))
  1046. # IORegisterMapping
  1047. elif caps & 0xFFF00000 == 0xFFE00000:
  1048. rsffile['AccessControlInfo']['IORegisterMapping']\
  1049. .append("0x%0.1X%0.2X%0.2X000" % (caps >> 16 & 0xF, caps >> 8 & 0xFF, caps & 0xFF))
  1050. # Empty entry
  1051. elif caps == 0xFFFFFFFF:
  1052. pass
  1053. else:
  1054. warning("Unsupported ARM9 Kernel Capabilities Descriptor %0.8X!" % caps)
  1055.  
  1056. # UseExtSaveData, EXtSaveDataId, UseOtherVariationSaveData, AccessibleSaveDataIds
  1057. # makerom indicates a mask of 0xFFFFFF but only shifts 20 bits
  1058. if accCtrlInfo['otherattrib'] & 0x2 != 0:
  1059. ids = (accCtrlInfo['extdataid'] >> 0 & 0xFFFFF,
  1060. accCtrlInfo['extdataid'] >> 20 & 0xFFFFF,
  1061. accCtrlInfo['extdataid'] >> 40 & 0xFFFFF,
  1062. accCtrlInfo['storageid'] >> 0 & 0xFFFFF,
  1063. accCtrlInfo['storageid'] >> 20 & 0xFFFFF,
  1064. accCtrlInfo['storageid'] >> 40 & 0xFFFFF)
  1065.  
  1066. for id in ids:
  1067. if id != 0x00000:
  1068. rsffile['AccessControlInfo']['AccessibleSaveDataIds'].append(id)
  1069.  
  1070. del rsffile['AccessControlInfo']['OtherUserSaveDataId1']
  1071. del rsffile['AccessControlInfo']['OtherUserSaveDataId2']
  1072. del rsffile['AccessControlInfo']['OtherUserSaveDataId3']
  1073. else:
  1074. del rsffile['AccessControlInfo']['AccessibleSaveDataIds']
  1075.  
  1076. if accCtrlInfo['extdataid'] != 0:
  1077. rsffile['AccessControlInfo']['UseExtSaveData'] = 'True'
  1078. rsffile['AccessControlInfo']['ExtSaveDataId'] = accCtrlInfo['extdataid']
  1079.  
  1080. ids = (accCtrlInfo['storageid'] >> 0 & 0xFFFFF,
  1081. accCtrlInfo['storageid'] >> 20 & 0xFFFFF,
  1082. accCtrlInfo['storageid'] >> 40 & 0xFFFFF)
  1083. if ids[0] != 0:
  1084. rsffile['AccessControlInfo']['OtherUserSaveDataId1'] = ids[0]
  1085. else:
  1086. del rsffile['AccessControlInfo']['OtherUserSaveDataId1']
  1087. if ids[1] != 0:
  1088. rsffile['AccessControlInfo']['OtherUserSaveDataId2'] = ids[1]
  1089. else:
  1090. del rsffile['AccessControlInfo']['OtherUserSaveDataId2']
  1091. if ids[2] != 0:
  1092. rsffile['AccessControlInfo']['OtherUserSaveDataId3'] = ids[2]
  1093. else:
  1094. del rsffile['AccessControlInfo']['OtherUserSaveDataId3']
  1095.  
  1096. if accCtrlInfo['storageid'] & 0x1000000000000000 != 0:
  1097. rsffile['AccessControlInfo']['UseOtherVariationSaveData'] = 'True'
  1098. else:
  1099. rsffile['AccessControlInfo']['UseOtherVariationSaveData'] = 'False'
  1100.  
  1101. # SystemSaveDataId(1,2)
  1102. if accCtrlInfo['syssaveid1'] != 0:
  1103. rsffile['AccessControlInfo']['SystemSaveDataId1'] = accCtrlInfo['syssaveid1']
  1104. else:
  1105. del rsffile['AccessControlInfo']['SystemSaveDataId1']
  1106. if accCtrlInfo['syssaveid2'] != 0:
  1107. rsffile['AccessControlInfo']['SystemSaveDataId2'] = accCtrlInfo['syssaveid2']
  1108. else:
  1109. del rsffile['AccessControlInfo']['SystemSaveDataId2']
  1110.  
  1111. # EnableL2Cache, CpuSpeed
  1112. if accCtrlInfo['flag1'] & 0x1 != 0:
  1113. rsffile['AccessControlInfo']['EnableL2Cache'] = 'True'
  1114. else:
  1115. rsffile['AccessControlInfo']['EnableL2Cache'] = 'False'
  1116. # this is just a flag, makerom will not accept other values for this
  1117. if accCtrlInfo['flag1'] & 0x2 != 0:
  1118. rsffile['AccessControlInfo']['CpuSpeed'] = '804mhz'
  1119. else:
  1120. rsffile['AccessControlInfo']['CpuSpeed'] = '268mhz'
  1121.  
  1122. # IdealProcessor, AffinityMask, Priority, CoreVersion, DescVersion
  1123. # ResourceLimtCategory, MaxCpu
  1124. rsffile['AccessControlInfo']['IdealProcessor'] = accCtrlInfo['flag0'] >> 0 & 0x3
  1125. rsffile['AccessControlInfo']['AffinityMask'] = accCtrlInfo['flag0'] >> 2 & 0x3
  1126. rsffile['AccessControlInfo']['Priority'] = accCtrlInfo['priority'] - 32 # makerom increases this value by 32 for applications
  1127. rsffile['AccessControlInfo']['CoreVersion'] = accCtrlInfo['corever']
  1128. rsffile['AccessControlInfo']['DescVersion'] = accCtrlInfo['arm9ver']
  1129. rsffile['AccessControlInfo']['ResourceLimitCategory'] = accCtrlInfo['category']
  1130. rsffile['AccessControlInfo']['MaxCpu'] = accCtrlInfo['reslimits'][0]
  1131.  
  1132. # SystemMode
  1133. if accCtrlInfo['flag0'] >> 4 & 0xF == 0:
  1134. rsffile['AccessControlInfo']['SystemMode'] = '64MB'
  1135. elif accCtrlInfo['flag0'] >> 4 & 0xF == 1:
  1136. rsffile['AccessControlInfo']['SystemMode'] = 'UNK'
  1137. elif accCtrlInfo['flag0'] >> 4 & 0xF == 2:
  1138. rsffile['AccessControlInfo']['SystemMode'] = '96MB'
  1139. elif accCtrlInfo['flag0'] >> 4 & 0xF == 3:
  1140. rsffile['AccessControlInfo']['SystemMode'] = '80MB'
  1141. elif accCtrlInfo['flag0'] >> 4 & 0xF == 4:
  1142. rsffile['AccessControlInfo']['SystemMode'] = '72MB'
  1143. elif accCtrlInfo['flag0'] >> 4 & 0xF == 5:
  1144. rsffile['AccessControlInfo']['SystemMode'] = '32MB'
  1145. else:
  1146. warning("Invalid SystemMode, ignoring!")
  1147. del rsffile['AccessControlInfo']['SystemMode']
  1148.  
  1149. # SystemModeExt
  1150. # These are also just flags, they can't be set to any other value.
  1151. if accCtrlInfo['flag2'] & 0x4 == 0:
  1152. rsffile['AccessControlInfo']['SystemModeExt'] = 'Legacy'
  1153. elif accCtrlInfo['flag2'] & 0x4 == 1:
  1154. rsffile['AccessControlInfo']['SystemModeExt'] = '124MB'
  1155. elif accCtrlInfo['flag2'] & 0x4 == 2:
  1156. rsffile['AccessControlInfo']['SystemModeExt'] = '178MB'
  1157. else:
  1158. warning("Invalid SystemModeExt, ignoring!")
  1159. del rsffile['AccessControlInfo']['SystemModeExt']
  1160.  
  1161. # FileSystemAccess
  1162. for fsPerm in enumerate(FSAccessInfo):
  1163. if accCtrlInfo['fsaccess'] & (1 << fsPerm[0]) != 0:
  1164. rsffile['AccessControlInfo']['FileSystemAccess'].append(fsPerm[1])
  1165.  
  1166. # IoAccessControl
  1167. for cap in enumerate(ARM9Access):
  1168. if accCtrlInfo['arm9caps'] & (1 << cap[0]) != 0:
  1169. rsffile['AccessControlInfo']['IoAccessControl'].append(cap[1])
  1170.  
  1171. # ServiceAccessControl
  1172. # These need to be converted to real strings later
  1173. for service in accCtrlInfo['services']:
  1174. if service != b'\x00\x00\x00\x00\x00\x00\x00\x00':
  1175. rsffile['AccessControlInfo']['ServiceAccessControl'].append(service)
  1176.  
  1177.  
  1178. # SystemControlInfo
  1179.  
  1180. # StackSize, RemasterVersion, JumpId, SaveDataSize
  1181. rsffile['SystemControlInfo']['StackSize'] = sysCtrlInfo['stack']
  1182. rsffile['SystemControlInfo']['RemasterVersion'] = sysCtrlInfo['remaster']
  1183. rsffile['SystemControlInfo']['JumpId'] = sysCtrlInfo['jumpid']
  1184. rsffile['SystemControlInfo']['SaveDataSize'] = sysCtrlInfo['savesize'] # needs to be made "human readable" later
  1185.  
  1186. # Dependency
  1187. for dep in sysCtrlInfo['dependencies']:
  1188. if dep != 0:
  1189. rsffile['SystemControlInfo']['Dependency'].append(dep)
  1190.  
  1191.  
  1192. # BasicInfo
  1193.  
  1194. # Title, CompanyCode, ProductCode
  1195. # These all need to be made in to proper strings
  1196. rsffile['BasicInfo']['Title'] = sysCtrlInfo['title']
  1197. rsffile['BasicInfo']['CompanyCode'] = ncchHdr['makercode']
  1198. rsffile['BasicInfo']['ProductCode'] = ncchHdr['productcode']
  1199.  
  1200.  
  1201. # TitleInfo
  1202.  
  1203. # UniqueId
  1204. rsffile['TitleInfo']['UniqueId'] = ncchHdr['programid'] >> 8 & 0xFFFFFF
  1205.  
  1206.  
  1207. def reformatData():
  1208. # Reformat fields that need it
  1209. for i in range(len(rsffile['AccessControlInfo']['InterruptNumbers'])):
  1210. rsffile['AccessControlInfo']['InterruptNumbers'][i] =\
  1211. "0x%0.2X" % rsffile['AccessControlInfo']['InterruptNumbers'][i]
  1212.  
  1213. rsffile['AccessControlInfo']['HandleTableSize'] =\
  1214. "0x%0.2X" % rsffile['AccessControlInfo']['HandleTableSize']
  1215.  
  1216. # this is possibly removed
  1217. if 'AccessibleSaveDataIds' in rsffile['AccessControlInfo']:
  1218. for i in range(len(rsffile['AccessControlInfo']['AccessibleSaveDataIds'])):
  1219. rsffile['AccessControlInfo']['AccessibleSaveDataIds'][i] =\
  1220. "0x%0.6X" % rsffile['AccessControlInfo']['AccessibleSaveDataIds'][i]
  1221.  
  1222. if 'ExtSaveDataId' in rsffile['AccessControlInfo']:
  1223. rsffile['AccessControlInfo']['ExtSaveDataId'] =\
  1224. "0x%0.16X" % rsffile['AccessControlInfo']['ExtSaveDataId']
  1225.  
  1226. rsffile['AccessControlInfo']['CoreVersion'] =\
  1227. "0x%X" % rsffile['AccessControlInfo']['CoreVersion']
  1228.  
  1229. rsffile['AccessControlInfo']['DescVersion'] =\
  1230. "0x%X" % rsffile['AccessControlInfo']['DescVersion']
  1231.  
  1232. rsffile['AccessControlInfo']['ResourceLimitCategory'] =\
  1233. "%0.2X" % rsffile['AccessControlInfo']['ResourceLimitCategory']
  1234.  
  1235. rsffile['AccessControlInfo']['MaxCpu'] =\
  1236. "0x%X" % rsffile['AccessControlInfo']['MaxCpu']
  1237.  
  1238. if 'SystemSaveDataId1' in rsffile['AccessControlInfo']:
  1239. rsffile['AccessControlInfo']['SystemSaveDataId1'] =\
  1240. "0x%0.8X" % rsffile['AccessControlInfo']['SystemSaveDataId1']
  1241. if 'SystemSaveDataId2' in rsffile['AccessControlInfo']:
  1242. rsffile['AccessControlInfo']['SystemSaveDataId2'] =\
  1243. "0x%0.8X" % rsffile['AccessControlInfo']['SystemSaveDataId2']
  1244. if 'OtherUserSaveDataId1' in rsffile['AccessControlInfo']:
  1245. rsffile['AccessControlInfo']['OtherUserSaveDataId1'] =\
  1246. "0x%0.8X" % rsffile['AccessControlInfo']['OtherUserSaveDataId1']
  1247. if 'OtherUserSaveDataId2' in rsffile['AccessControlInfo']:
  1248. rsffile['AccessControlInfo']['OtherUserSaveDataId2'] =\
  1249. "0x%0.8X" % rsffile['AccessControlInfo']['OtherUserSaveDataId2']
  1250. if 'OtherUserSaveDataId3' in rsffile['AccessControlInfo']:
  1251. rsffile['AccessControlInfo']['OtherUserSaveDataId3'] =\
  1252. "0x%0.8X" % rsffile['AccessControlInfo']['OtherUserSaveDataId3']
  1253.  
  1254. for i in range(len(rsffile['AccessControlInfo']['ServiceAccessControl'])):
  1255. service = rsffile['AccessControlInfo']['ServiceAccessControl'][i]
  1256. endchar = service.find(0x00)
  1257. if endchar == -1:
  1258. rsffile['AccessControlInfo']['ServiceAccessControl'][i] =\
  1259. service.decode('ascii')
  1260. else:
  1261. rsffile['AccessControlInfo']['ServiceAccessControl'][i] =\
  1262. service[:endchar].decode('ascii')
  1263.  
  1264. rsffile['SystemControlInfo']['StackSize'] =\
  1265. "0x%0.8X" % rsffile['SystemControlInfo']['StackSize']
  1266.  
  1267. rsffile['SystemControlInfo']['RemasterVersion'] =\
  1268. "%0.4X" % rsffile['SystemControlInfo']['RemasterVersion']
  1269.  
  1270. rsffile['SystemControlInfo']['JumpId'] =\
  1271. "0x%0.16X" % rsffile['SystemControlInfo']['JumpId']
  1272.  
  1273. savesize = rsffile['SystemControlInfo']['SaveDataSize']
  1274. if savesize >= GIGABYTE and (savesize % GIGABYTE) == 0:
  1275. rsffile['SystemControlInfo']['SaveDataSize'] = "%dGB" % (savesize / GIGABYTE)
  1276. elif savesize >= MEGABYTE and savesize < GIGABYTE and (savesize % MEGABYTE) == 0:
  1277. rsffile['SystemControlInfo']['SaveDataSize'] = "%dMB" % (savesize / MEGABYTE)
  1278. elif savesize >= KILOBYTE and savesize < MEGABYTE and (savesize % KILOBYTE) == 0:
  1279. rsffile['SystemControlInfo']['SaveDataSize'] = "%dKB" % (savesize / KILOBYTE)
  1280. else: # This probably doesn't work but it shouldn't ever come up
  1281. rsffile['SystemControlInfo']['SaveDataSize'] = "%d" % savesize
  1282.  
  1283. for i in range(len(rsffile['SystemControlInfo']['Dependency'])):
  1284. rsffile['SystemControlInfo']['Dependency'][i] =\
  1285. "0x%0.16XL" % rsffile['SystemControlInfo']['Dependency'][i]
  1286.  
  1287. title = rsffile['BasicInfo']['Title']
  1288. endchar = title.find(0x00)
  1289. if endchar == -1:
  1290. rsffile['BasicInfo']['Title'] =\
  1291. title.decode('ascii')
  1292. else:
  1293. rsffile['BasicInfo']['Title'] =\
  1294. title[:endchar].decode('ascii')
  1295.  
  1296. rsffile['BasicInfo']['CompanyCode'] =\
  1297. rsffile['BasicInfo']['CompanyCode'].decode('ascii')
  1298.  
  1299. pcode = rsffile['BasicInfo']['ProductCode']
  1300. rsffile['BasicInfo']['ProductCode'] =\
  1301. pcode[:pcode.find(b'\x00')].decode('ascii')
  1302.  
  1303. rsffile['TitleInfo']['UniqueId'] =\
  1304. "0x%0.6X" % rsffile['TitleInfo']['UniqueId']
  1305.  
  1306.  
  1307. # Not much safeguarding in this, but it's only a problem if you're noodling around
  1308. # Very VERY simple YAML printer
  1309. def writeRSF():
  1310. for category in rsffile.keys():
  1311. print("%s:" % (category))
  1312. for item in rsffile[category].keys():
  1313. if type(rsffile[category][item]) is str:
  1314. print(" %s: %s" % (item, rsffile[category][item]))
  1315. elif type(rsffile[category][item]) is int:
  1316. print(" %s: %d" % (item, rsffile[category][item]))
  1317. elif type(rsffile[category][item]) is list:
  1318. print(" %s:" % (item))
  1319. if item == 'SystemCallAccess' or item == 'Dependency':
  1320. for value in rsffile[category][item]:
  1321. print(" %s" % (value))
  1322. else:
  1323. for value in rsffile[category][item]:
  1324. print(" - %s" % (value))
  1325.  
  1326.  
  1327. parser = argparse.ArgumentParser(description="Generate RSF file from 3DS ROM and exheader.")
  1328. parser.add_argument('rom', metavar="<ROM File>", type=str, help="ROM file to read data from.")
  1329. parser.add_argument('exheader', metavar="<ExHeader file>", type=str, help="File containing the ExHeader.")
  1330. parser.add_argument('--romfsdir', metavar="<RomFs dir>", type=str, help="Specify a RomFs path.")
  1331.  
  1332. args = parser.parse_args()
  1333.  
  1334. with open(args.rom, 'rb') as f:
  1335. ncsdHdr = makeNcsdHdrDictFromTuple(ncsdHdrStruct.unpack(f.read(ncsdHdrStruct.size)))
  1336. f.seek(ncsdHdr['offsets'][0] * MEDIA_BLOCK_SIZE)
  1337. ncchHdr = makeNcchHdrDictFromTuple(ncchHdrStruct.unpack(f.read(ncchHdrStruct.size)))
  1338.  
  1339. with open(args.exheader, 'rb') as f:
  1340. sysCtrlInfo = makeSysCtrlInfoDictFromTuple(sysCtrlInfoStruct.unpack(f.read(sysCtrlInfoStruct.size)))
  1341. accCtrlInfo = makeAccCtrlInfoDictFromTuple(accCtrlInfoStruct.unpack(f.read(accCtrlInfoStruct.size)))
  1342.  
  1343. populateRSFFile()
  1344. if args.romfsdir != None:
  1345. rsffile['RomFs']['RootPath'] = args.romfsdir
  1346. else:
  1347. del rsffile['RomFs']
  1348.  
  1349. reformatData()
  1350. writeRSF()
  1351.  
  1352.  
  1353. $ cat Animal\ Crossing\ New\ Leaf.rsf
  1354. TitleInfo:
  1355. Category: Application
  1356. UniqueId: 0x000863
  1357. BasicInfo:
  1358. ProductCode: CTR-P-EGDE
  1359. ContentType: Application
  1360. Title: GARDEN
  1361. CompanyCode: 01
  1362. Logo: Nintendo
  1363. AccessControlInfo:
  1364. IdealProcessor: 0
  1365. CanUsePrivilegedPriority: False
  1366. ReleaseKernelMajor: 2
  1367. EnableForceDebug: False
  1368. AffinityMask: 1
  1369. SystemMode: 64MB
  1370. SystemCallAccess:
  1371. ControlMemory: 1
  1372. QueryMemory: 2
  1373. ExitProcess: 3
  1374. SetProcessIdealProcessor: 6
  1375. CreateThread: 8
  1376. ExitThread: 9
  1377. SleepThread: 10
  1378. GetThreadPriority: 11
  1379. SetThreadPriority: 12
  1380. GetThreadIdealProcessor: 15
  1381. GetCurrentProcessorNumber: 17
  1382. CreateMutex: 19
  1383. ReleaseMutex: 20
  1384. CreateSemaphore: 21
  1385. ReleaseSemaphore: 22
  1386. CreateEvent: 23
  1387. SignalEvent: 24
  1388. ClearEvent: 25
  1389. CreateTimer: 26
  1390. SetTimer: 27
  1391. CancelTimer: 28
  1392. ClearTimer: 29
  1393. CreateMemoryBlock: 30
  1394. MapMemoryBlock: 31
  1395. UnmapMemoryBlock: 32
  1396. CreateAddressArbiter: 33
  1397. ArbitrateAddress: 34
  1398. CloseHandle: 35
  1399. WaitSynchronization1: 36
  1400. WaitSynchronizationN: 37
  1401. DuplicateHandle: 39
  1402. GetSystemTick: 40
  1403. GetHandleInfo: 41
  1404. GetSystemInfo: 42
  1405. GetProcessInfo: 43
  1406. GetThreadInfo: 44
  1407. ConnectToPort: 45
  1408. SendSyncRequest1: 46
  1409. SendSyncRequest2: 47
  1410. SendSyncRequest3: 48
  1411. SendSyncRequest4: 49
  1412. SendSyncRequest: 50
  1413. GetProcessId: 53
  1414. GetProcessIdOfThread: 54
  1415. GetThreadId: 55
  1416. GetResourceLimit: 56
  1417. GetResourceLimitLimitValues: 57
  1418. GetResourceLimitCurrentValues: 58
  1419. GetThreadContext: 59
  1420. Break: 60
  1421. OutputDebugString: 61
  1422. SystemModeExt: Legacy
  1423. EnableL2Cache: False
  1424. ResourceLimitCategory: 00
  1425. IoAccessControl:
  1426. PermitMainFunctionArgument: False
  1427. MaxCpu: 0x9E
  1428. RunnableOnSleep: False
  1429. CanUseNonAlphabetAndNumber: False
  1430. SpecialMemoryArrange: False
  1431. CanWriteSharedPage: False
  1432. CpuSpeed: 268mhz
  1433. IORegisterMapping:
  1434. CanShareDeviceMemory: False
  1435. CanAccessCore2: False
  1436. UseExtSaveData: True
  1437. UseOtherVariationSaveData: False
  1438. MemoryType: Application
  1439. FileSystemAccess:
  1440. - DirectSdmc
  1441. MemoryMapping:
  1442. - 0x1FF50000
  1443. - 0x1FF58000
  1444. - 0x1FF70000
  1445. - 0x1FF78000
  1446. - 0x1F000000:r
  1447. - 0x1F600000:r
  1448. ReleaseKernelMinor: 32
  1449. ServiceAccessControl:
  1450. - APT:U
  1451. - $hioFIO
  1452. - $hostio0
  1453. - $hostio1
  1454. - ac:u
  1455. - boss:U
  1456. - cam:u
  1457. - cecd:u
  1458. - cfg:u
  1459. - dlp:FKCL
  1460. - dlp:SRVR
  1461. - dsp::DSP
  1462. - frd:u
  1463. - fs:USER
  1464. - gsp::Gpu
  1465. - hid:USER
  1466. - http:C
  1467. - mic:u
  1468. - ndm:u
  1469. - news:u
  1470. - nwm::UDS
  1471. - ptm:u
  1472. - pxi:dev
  1473. - soc:U
  1474. - ssl:C
  1475. - y2r:u
  1476. - ldr:ro
  1477. - ir:USER
  1478. - nim:aoc
  1479. - am:app
  1480. DisableDebug: False
  1481. CoreVersion: 0x2
  1482. InterruptNumbers:
  1483. Priority: 16
  1484. DescVersion: 0x2
  1485. ExtSaveDataId: 0x0000000000000863
  1486. HandleTableSize: 0x200
  1487. Option:
  1488. EnableCrypt: False
  1489. UseOnSD: True
  1490. FreeProductCode: True
  1491. MediaFootPadding: False
  1492. EnableCompress: True
  1493. SystemControlInfo:
  1494. Dependency:
  1495. 0x0004013000002402L
  1496. 0x0004013000001502L
  1497. 0x0004013000003402L
  1498. 0x0004013000001602L
  1499. 0x0004013000002602L
  1500. 0x0004013000001702L
  1501. 0x0004013000001802L
  1502. 0x0004013000002702L
  1503. 0x0004013000002802L
  1504. 0x0004013000001A02L
  1505. 0x0004013000003202L
  1506. 0x0004013000001B02L
  1507. 0x0004013000001C02L
  1508. 0x0004013000001D02L
  1509. 0x0004013000002902L
  1510. 0x0004013000001E02L
  1511. 0x0004013000003302L
  1512. 0x0004013000001F02L
  1513. 0x0004013000002002L
  1514. 0x0004013000002B02L
  1515. 0x0004013000003502L
  1516. 0x0004013000002C02L
  1517. 0x0004013000002D02L
  1518. 0x0004013000002102L
  1519. 0x0004013000003102L
  1520. 0x0004013000002202L
  1521. 0x0004013000003702L
  1522. 0x0004013000002E02L
  1523. 0x0004013000002302L
  1524. 0x0004013000002F02L
  1525. SaveDataSize: 10MB
  1526. StackSize: 0x00040000
  1527. RemasterVersion: 0003
  1528. JumpId: 0x0004000000086300
  1529.  
  1530.  
  1531. $ ../makecia.sh Animal\ Crossing\ New\ Leaf.cci
  1532. Directory: .
  1533. Base name: ./Animal Crossing New Leaf
  1534. ExHeader file: ./exheader.bin
  1535. RSF File: ./Animal Crossing New Leaf.rsf
  1536. CXI File: ./Animal Crossing New Leaf.cxi
  1537. + python3 /home/paul/3ds/rsfgen.py 'Animal Crossing New Leaf.cci' ./exheader.bin
  1538. + /home/paul/3ds/Project_CTR/makerom/makerom -f ncch -icon ./exefs/icon.bin -banner ./exefs/banner.bin -exefslogo -code ./exefs/code.bin -exheader ./exheader.bin -plainrgn ./plainrgn.bin -romfs ./romfs.bin -rsf './Animal Crossing New Leaf.rsf' -o './Animal Crossing New Leaf.cxi'
  1539. + /home/paul/3ds/Project_CTR/makerom/makerom -f cia -content './Animal Crossing New Leaf.cxi:0' -o './Animal Crossing New Leaf.cia'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement