3.2 KiB
3.2 KiB
| 1 | # The Legend of Zelda: Tears of the Kingdom (Switch, base game v0 + update 1.4.3 = v720896). In bring-up | |||||
|---|---|---|---|---|---|---|
| 2 | # Nintendo EPD's engine (sead / agl / gsys, NintendoWare G3d2 / Ui2d / Vfx2, Havok), SDK 20.5.22, NVN; modules main + subsdk0 (NintendoSDK_movie) + sdk. | |||||
| 3 | # subsdk0 and sdk are the same builds as Breath of the Wild 1.9.0's. Most RomFS files are zstd with dictionaries (*.zs; the dictionaries are Pack/ZsDic.pack.zs). | |||||
| 4 | # Shaders: Shader/*.bfsha.zs (BNSH; material.bfsha holds most) and the layout shaders in Shader/ApplicationPackage.Nin_NX_NVN.release.sarc.zs. | |||||
| 5 | # ---- Identity ---- | |||||
| 6 | title_id | 0100F2C0115B6000 | ||||
| 7 | program_id | 0100F2C0115B6000 | ||||
| 8 | # ---- App ---- | |||||
| 9 | name | The Legend of Zelda: Tears of the Kingdom | ||||
| 10 | ipa | ZeldaTearsOfTheKingdom.ipa | ||||
| 11 | app_category | public.app-category.adventure-games | ||||
| 12 | # the virtual gamepad starts in the 3D layout (D-pad, right stick, L3 / R3): the right stick turns the camera | |||||
| 13 | pad_layout | full | ||||
| 14 | # ---- Versions ---- | |||||
| 15 | build | v720896 | 1.4.3 | main=277178b7dba1b6d4949a84778d4abc58 | subsdk0=f39f4c431234c72eb520cfdd1001bbcf | sdk=574284b40c06cf1821a44857939083be |
| 16 | package | v720896 | ||||
| 17 | shader_versions | v720896 | ||||
| 18 | # ---- Files ---- | |||||
| 19 | modules | main subsdk0 sdk | ||||
| 20 | romfs_marker | Pack/ZsDic.pack.zs | ||||
| 21 | zip_store | .zs:.bwav:.mc:.webm:.metallib | ||||
| 22 | # ---- Memory ---- | |||||
| 23 | # The NPDM declares 24 MB of system resource, so IsVirtualAddressMemoryEnabled is true and the game's memory lives in the alias region (as Engage's, see 0100A6301214E000/game.tsv). | |||||
| 24 | # The game also calls SetHeapSize(0x86000000) in nninitStartup (2.1 GB of the pool as its heap; a 2 GB heap region aborts there with 0xd401). | |||||
| 25 | # What it can map is bounded by the pool less the heap (1.1 GB). The sdk build's node area is cut from ~1 GB to 62 MB (dm/tools/sdk_patches.py): measured on the Mac, the alias region is then used | |||||
| 26 | # up to +1.75 GB on the Great Sky Island with 1.0 GB mapped. Without the cut it reached +2.25 GB at the first descent and the game took a memory shortage (MSF, a Blood Moon that puts Link back, issue #70). | |||||
| 27 | # So 5 GB, the total proven on a phone (one reservation of at most 6 GB without the extended virtual addressing entitlement): 256 MB in front + 2.375 GB alias region + 256 MB stack region + 2.125 GB heap region | |||||
| 28 | mem_reserve | 0x140000000 | ||||
| 29 | mem_alias | 0x98000000 | ||||
| 30 | mem_stack | 0x10000000 | ||||
| 31 | app_pool | 0xCD500000 | ||||
| 32 | # ---- Graphics ---- | |||||
| 33 | # Streamed textures are written by the CPU straight into pool memory (already in GPU layout) and published with nvnMemoryPoolFlushMappedRange (hle_nvn.c ft_add) | |||||
| 34 | tex_flush_upload | on | ||||
| 35 | render_cond | on | ||||
| 36 | tex_dirty_upload | on | ||||
| 37 | # 60 fps (30 on the Switch): the host decides each frame's step in whole vsyncs and holds the frame that long (rewriter stubs at FPSLocker's sites, patches.py FRAME_STEP); | |||||
| 38 | # 30 when 60 does not hold, game time = real time. DM_FPS_TARGET=30 (Documents/env.txt on the iPhone) saves power, 0 = the game's own step. Until the host has decided a step | |||||
| 39 | # (the first frames) the stub steps by the measured frame time | |||||
| 40 | fps_target | 60 | ||||
| 41 | # ---- Shader split (shader_split.py) ---- | |||||
| 42 | shader_groups | /Shader/ApplicationPackage=layout /Shader/=shader /Effect/=effect /UI/=layout | ||||
| 43 | shader_note | Tears of the Kingdom shaders |