mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-20 10:23:16 -05:00
6.1.12 no longer bundles ROOT.chts and its seven cheat sets: the cheat browser reads the home folder, then unpacks Downloads/iNES-Cheats.zip. The seven sets are collected from the author-signed 6.1.4 package, each file covered by its signature. Controls.png and the backdrop pictures the app reads are documented.
308 lines
17 KiB
YAML
308 lines
17 KiB
YAML
emulator: iNES
|
|
type: standalone
|
|
core_classification: other
|
|
source: "https://fms.komkon.org/iNES/"
|
|
upstream: closed-source
|
|
version_source:
|
|
url: "https://play.google.com/store/apps/details?id=com.fms.ines.free&hl=en"
|
|
pattern: '\[\[\["([^"]+)"\]\],\[\[\[\d+'
|
|
author: "Marat Fayzullin (Garage Research)"
|
|
profiled_date: "2026-10-20"
|
|
core_version: "6.1.12"
|
|
display_name: "Nintendo - NES / Famicom (iNES)"
|
|
cores:
|
|
- ines
|
|
systems:
|
|
- nintendo-nes
|
|
- nintendo-fds
|
|
mode: standalone
|
|
|
|
notes: |
|
|
NES and Famicom emulator by Marat Fayzullin, covering cartridges, the Famicom
|
|
Disk System and the VS System. The build read here is the free Google Play
|
|
package com.fms.ines.free, the package ES-DE launches, versionName 6.1.12
|
|
versionCode 6112, taken as the Play app bundle drop, xapk sha256
|
|
cddeedef6440eda7f18a389a7a5ea67e33fb8be21593aab93ab6b0fe10992496, base apk
|
|
sha256 17577eced1829e0fe60ac128d94683d4bc1988c3ac627208e7de0e1e49a9abd8,
|
|
native split config.armeabi_v7a sha256
|
|
c7076c05aca28e38d0343fbea4c1b904e6d197e7d8fcbdc4e29c0278fef0f0db. Both splits
|
|
are signed by the author's own key, CN=Marat Fayzullin O=Garage Research
|
|
issued 2011, fingerprint
|
|
d09469e9b550cbc9005d3bd089f3df5f0ba89cba71cdd3b33736a0382d6f9848, as the v1
|
|
META-INF/BNDLTOOL.RSA and as the v2 and v3 signer, beside a Play distribution
|
|
source stamp. The author's site still serves 6.1.4 as iNES-Android-6104.apk
|
|
under package com.fms.ines, signed by the same key, and Google Play also
|
|
carries the emulator inside VGBAnext as com.fms.ng, the author recording that
|
|
Play removed the original com.fms.ines listing over its built-in cheats. The
|
|
drop carries one native split, armeabi-v7a, whose libmain.so keeps its
|
|
dynamic symbol table, so the readings below cite Thumb-2 offsets in that
|
|
slice and Java lines in a jadx 1.5.6 decompile of the base apk. The free iNES
|
|
6.1 builds for Windows and Ubuntu were read beside it and open the same files
|
|
under the same names. No source has ever been published: the author releases
|
|
ColEm and fMSX as source archives, while every iNES download on the same site,
|
|
from 0.7 for AIX and SunOS through 6.1, is a binary package.
|
|
ref: com.fms.ines.free.apk META-INF/BNDLTOOL.RSA, APK Signing Block,
|
|
https://fms.komkon.org/iNES/, iNES61-Windows-bin.zip,
|
|
iNES61-Ubuntu-x86-bin.tgz
|
|
|
|
One directory holds everything the emulator reads. MainActivity hands
|
|
EMULib.m to jniStart, which copies it into the buffer GetHomeDir returns and
|
|
passes that same buffer to SetPrivateDir. Every open goes through mopen, which
|
|
calls OpenRealFile: the name is tried as given and again as
|
|
<PrivateDir>/<basename>, and when both open the larger of the two is kept. That
|
|
directory is <ExternalStorage> joined with the application label up to its first
|
|
whitespace, so iNES, falling back to getExternalFilesDirs(null) when the path is
|
|
not a writable directory. mopen layers gzdopen over the result, so any of these
|
|
files also opens gzipped, and a content:// name is routed to the Android storage
|
|
framework instead.
|
|
ref: MainActivity.java:1092-1105, EMULib.java:178, 315-361, 363-373,
|
|
libmain.so jniStart 0x178b4-0x178f6, GetHomeDir 0x15490,
|
|
libmain.so OpenRealFile 0x2fc94-0x2fdf3, libmain.so mopen 0x2fdf4-0x2fed7
|
|
|
|
DISKSYS.ROM is the only filename compiled into the emulator. LoadFDS reads the
|
|
disk image first, taking a bare *NINTENDO-HVC* header or the 16 byte FDS wrapper
|
|
ahead of it, then opens DISKSYS.ROM and reads 0x2000 bytes into RAM at 0xE000. A
|
|
failed open leaves the status at NOT FOUND and a short read at FAILED, and
|
|
either makes LoadFDS return zero, so the disk never starts. Nothing about the
|
|
image is checked past the length of that read. Cartridge titles never reach this
|
|
path.
|
|
ref: libmain.so LoadFDS 0x3a188-0x3a523, open 0x3a414-0x3a41c,
|
|
read 0x3a438-0x3a45a, status 0x3a2a0-0x3a2ae,
|
|
iNES61-Ubuntu-x86-bin ines 0x38165-0x381a9
|
|
|
|
The startup palette is <HomeDir>/iNES.pal, assembled in Application from
|
|
GetHomeDir and held in PalName, which StartNES loads when it is set. LoadPAL
|
|
reads the first 256 bytes: exactly 192 is taken as 64 RGB triples fed to
|
|
SetColor one at a time, anything else is parsed as text. A missing file leaves
|
|
the built-in palette in place. The desktop distribution ships twenty candidates
|
|
under Palettes/ to copy into that single name, the Android package none.
|
|
ref: libmain.so Application 0x3818c-0x381b0, StartNES 0x38d9a-0x38da6,
|
|
LoadPAL 0x38f6c-0x391f3 (read 0x38f94-0x38f9e, length 0x38faa),
|
|
iNES61-Windows-bin.zip Palettes/
|
|
|
|
LoadNES derives five companion names from the ROM path through MakeFileName:
|
|
.sav, .ips, .cht, .pal and .sta. Started with no ROM name at all, Application
|
|
substitutes CART.NES.
|
|
ref: libmain.so LoadNES 0x39f5e, 0x39ff4, 0x3a05e, 0x3a094, 0x3a0ac,
|
|
libmain.so Application 0x38278-0x38286
|
|
|
|
Two package resources are read at runtime. assets/memfs.mp3 is passed whole to
|
|
jniStart and mounted as an in-memory filesystem carrying one entry, CART.NES.
|
|
assets/names.dat fills the title lookup and is then extended by
|
|
<HomeDir>/names.dat, whose entries win on collision. The cheat browser asks the
|
|
package assets for ROOT.chts first, and this build ships none, so Cheatopedia
|
|
looks for it in the home directory and its subdirectories, then unpacks
|
|
iNES-Cheats.zip from the Downloads directory into <HomeDir>/Cheats. A set that
|
|
ROOT.chts names by a relative path is read from the directory where ROOT.chts
|
|
was found, and a File= path starting with /sdcard/ has that prefix replaced by
|
|
the home directory. The author publishes no iNES-Cheats.zip. The 6.1.4 package
|
|
carried ROOT.chts and seven sets in its assets, and those are the files listed
|
|
below.
|
|
ref: MainActivity.java:1092-1105, libmain.so jniStart 0x17684-0x176a2,
|
|
bi.java:183-213, Cheatopedia.java:195-202, 270-300, 335-344, 477,
|
|
CheatHelper.java:16-49, iNES-Android-6104.apk assets/
|
|
|
|
files:
|
|
- name: DISKSYS.ROM
|
|
system: nintendo-fds
|
|
required: true
|
|
min_size: 8192
|
|
validation: [size]
|
|
description: "Famicom Disk System BIOS"
|
|
note: "Opened by bare name, so it resolves against the working directory and then against the home directory. Read as 0x2000 bytes into RAM at 0xE000. A missing file reports NOT FOUND and a short read FAILED, and either aborts the disk load. Only the length of that read is checked, so a longer file passes on its first 8192 bytes and no hash is compared. The open is gzip transparent, so a compressed copy answers too."
|
|
source_ref: "libmain.so LoadFDS 0x3a188-0x3a523 (open 0x3a414-0x3a41c, read 0x3a438-0x3a45a), iNES61-Ubuntu-x86-bin ines 0x38165-0x381a9"
|
|
|
|
- name: iNES.pal
|
|
system: nintendo-nes
|
|
required: false
|
|
unsourceable: "any 64 colour palette the user picks, under the one name the code builds"
|
|
description: "startup colour palette"
|
|
note: "Built as <HomeDir>/iNES.pal and loaded at startup when present, otherwise the built-in palette stands. Exactly 192 bytes is read as 64 RGB triples, any other length as text. No single file answers to this name: the desktop distribution ships twenty palettes under other names for the user to copy over."
|
|
source_ref: "libmain.so Application 0x3818c-0x381b0, StartNES 0x38d9a-0x38da6, LoadPAL 0x38f6c-0x391f3"
|
|
|
|
- name: CART.NES
|
|
system: nintendo-nes
|
|
required: false
|
|
bundled: true
|
|
category: game_data
|
|
size: 24592
|
|
md5: c1db31a2aa8a12432705fc8bd3c1156a
|
|
sha1: 486eede1bb748d95efc8a2a3d46ef1a530100559
|
|
crc32: "2e03cb7f"
|
|
description: "sample ROM image started when no game is given"
|
|
note: "The only entry in assets/memfs.mp3, which MainActivity reads whole and jniStart mounts as an in-memory filesystem. A 16 byte header plus one 16 KB PRG bank and one 8 KB CHR bank. Application passes this name to StartNES when it is invoked without a ROM, so launching through ES-DE never reaches it."
|
|
source_ref: "MainActivity.java:1092-1105, libmain.so jniStart 0x17684-0x176a2, libmain.so Application 0x38278-0x38286"
|
|
|
|
- name: names.dat
|
|
required: false
|
|
bundled: true
|
|
category: game_data
|
|
size: 21390
|
|
description: "title database keyed by system and CRC32"
|
|
note: "Parsed from assets as lines of key colon title, keys reading NES-4C629A95. The copy at <HomeDir>/names.dat is read straight afterwards into the same map, so user entries extend and override the packaged ones."
|
|
source_ref: "bi.java:183-213"
|
|
|
|
- name: ROOT.chts
|
|
required: false
|
|
category: game_data
|
|
size: 27447
|
|
md5: f8a3b82f873132e312764807346182c6
|
|
sha1: dbbaa1e149d1e3bbf62b1b16c9e23ecf5924636d
|
|
crc32: "d2814640"
|
|
description: "cheat database read by the Cheatopedia browser"
|
|
note: "This build ships no cheat set in its assets. Cheatopedia looks for the file in the home directory and its subdirectories, and otherwise unpacks iNES-Cheats.zip from the Downloads directory into <HomeDir>/Cheats, an archive the author does not publish. The directory where it is found becomes the cheat directory for every set it names. The copy here is the one 6.1.4 carried in its assets, and its File= lines pull in the seven sets below and /sdcard/iNES/custom.chts."
|
|
source_ref: "Cheatopedia.java:195-202, 477, 527-547, CheatHelper.java:16-49, iNES-Android-6104.apk assets/ROOT.chts"
|
|
|
|
- name: battle-toads.chts
|
|
required: false
|
|
category: game_data
|
|
size: 2768
|
|
md5: 579c461a0060eae90c4f350e32dc6e56
|
|
sha1: fc59b7662bdf8b888e4de42f788ac989fe6fab2a
|
|
crc32: "d8b4ca90"
|
|
description: "cheat set reached from ROOT.chts"
|
|
note: "Named by a File= line in ROOT.chts and read from the same cheat directory. Carried in the assets of 6.1.4 and absent from this build."
|
|
source_ref: "Cheatopedia.java:270-300, 335-344, iNES-Android-6104.apk assets/battle-toads.chts"
|
|
|
|
- name: dragon-warrior.chts
|
|
required: false
|
|
category: game_data
|
|
size: 1617
|
|
md5: 9dcd487b3c3c0b18a5264285e3c9868c
|
|
sha1: 47767cd5557c166b2bd5255a9a2857a4a1288e03
|
|
crc32: "56462991"
|
|
description: "cheat set reached from ROOT.chts"
|
|
note: "Named by a File= line in ROOT.chts and read from the same cheat directory. Carried in the assets of 6.1.4 and absent from this build."
|
|
source_ref: "Cheatopedia.java:270-300, 335-344, iNES-Android-6104.apk assets/dragon-warrior.chts"
|
|
|
|
- name: dragon-warrior-2.chts
|
|
required: false
|
|
category: game_data
|
|
size: 5596
|
|
md5: 3231f15a1434d039aeb101801a9ab807
|
|
sha1: c7199183d8f392bda14a8f8765bc6b3dd1951475
|
|
crc32: "1d7327b8"
|
|
description: "cheat set reached from ROOT.chts"
|
|
note: "Named by a File= line in ROOT.chts and read from the same cheat directory. Carried in the assets of 6.1.4 and absent from this build."
|
|
source_ref: "Cheatopedia.java:270-300, 335-344, iNES-Android-6104.apk assets/dragon-warrior-2.chts"
|
|
|
|
- name: fceu.chts
|
|
required: false
|
|
category: game_data
|
|
size: 2295
|
|
md5: 80ba1e0d24df2ae8a334492fcdf80ac9
|
|
sha1: 7eac0cb88829e5d89645803fd6256049348ab593
|
|
crc32: "8a6d479b"
|
|
description: "cheat set reached from ROOT.chts"
|
|
note: "Named by a File= line in ROOT.chts and read from the same cheat directory. Carried in the assets of 6.1.4 and absent from this build."
|
|
source_ref: "Cheatopedia.java:270-300, 335-344, iNES-Android-6104.apk assets/fceu.chts"
|
|
|
|
- name: final-fantasy-2.chts
|
|
required: false
|
|
category: game_data
|
|
size: 1399
|
|
md5: 9f5604c53f5e61611e0f5fc86bd12eda
|
|
sha1: 5d467c4da5bd62051b1732351ecb1bfb8ad2bf69
|
|
crc32: "0b26c1d3"
|
|
description: "cheat set reached from ROOT.chts"
|
|
note: "Named by a File= line in ROOT.chts and read from the same cheat directory. Carried in the assets of 6.1.4 and absent from this build."
|
|
source_ref: "Cheatopedia.java:270-300, 335-344, iNES-Android-6104.apk assets/final-fantasy-2.chts"
|
|
|
|
- name: final-fantasy-3.chts
|
|
required: false
|
|
category: game_data
|
|
size: 6189
|
|
md5: d5e68a35ac2d17b48bf1604d03e4602d
|
|
sha1: a76c50557b35cf28b2f7456ac9f282ab3a0af3ae
|
|
crc32: "f1060bef"
|
|
description: "cheat set reached from ROOT.chts"
|
|
note: "Named by a File= line in ROOT.chts and read from the same cheat directory. Carried in the assets of 6.1.4 and absent from this build."
|
|
source_ref: "Cheatopedia.java:270-300, 335-344, iNES-Android-6104.apk assets/final-fantasy-3.chts"
|
|
|
|
- name: super-mario-brothers.chts
|
|
required: false
|
|
category: game_data
|
|
size: 1999
|
|
md5: 51beb6f9722b3c8a22f9d97c1401622c
|
|
sha1: c1116b7e520541cf2925b30053106d85a4bae62e
|
|
crc32: "42e09138"
|
|
description: "cheat set reached from ROOT.chts"
|
|
note: "Named by a File= line in ROOT.chts and read from the same cheat directory. Carried in the assets of 6.1.4 and absent from this build."
|
|
source_ref: "Cheatopedia.java:270-300, 335-344, iNES-Android-6104.apk assets/super-mario-brothers.chts"
|
|
|
|
- name: custom.chts
|
|
required: false
|
|
category: game_data
|
|
unsourceable: "cheat codes the user writes, in the format the documentation prints"
|
|
description: "user cheat sets added to the Cheatopedia menu"
|
|
note: "Pulled in by the File= line that ROOT.chts carries, written out as /sdcard/iNES/custom.chts. The browser swaps the leading /sdcard/ for the home directory, so the set is opened as <HomeDir>/iNES/custom.chts, an absolute path read straight from storage."
|
|
source_ref: "Cheatopedia.java:270-300, 335-341"
|
|
|
|
- name: Controls.png
|
|
required: false
|
|
category: game_data
|
|
size: 22587
|
|
md5: d10635cb6f101ed733f3d1133bc78f61
|
|
sha1: 14c4ab8ccc8ecb81ebf99fec336a3e872c13aabc
|
|
crc32: "dc9da322"
|
|
description: "virtual joystick skin"
|
|
note: "Read as <HomeDir>/Controls.png by the overlay button loader when the custom skin is selected, and by the layout editor. A built-in drawable stands in when the file does not load. The author publishes the template to draw over at fms.komkon.org/EmuAndroid/Controls.png."
|
|
source_ref: "MainActivity.java:1589-1600, LayoutEditor.java:226"
|
|
|
|
- name: Backdrop.png
|
|
required: false
|
|
category: game_data
|
|
unsourceable: "any picture the user places behind the emulated screen"
|
|
description: "backdrop drawn around the emulated screen"
|
|
note: "Read as <HomeDir>/Backdrop.png while the decorum option is on. A built-in drawable stands in when the file is absent."
|
|
source_ref: "MainActivity.java:1720-1745"
|
|
|
|
- name: "<game>.back.png"
|
|
required: false
|
|
category: game_data
|
|
unsourceable: "any picture the user places behind one title"
|
|
description: "backdrop for one title"
|
|
note: "Named from the loaded ROM path and preferred over the shared backdrop for that game."
|
|
source_ref: "MainActivity.java:1734-1736"
|
|
|
|
- name: "<game>.ips"
|
|
required: false
|
|
unsourceable: "a patch the user supplies for one title"
|
|
category: game_data
|
|
description: "IPS patch applied to the loaded ROM"
|
|
note: "Named from the ROM path by MakeFileName and applied by ApplyIPS when present. A file chosen by hand that starts with the PATCH signature goes to LoadIPS from LoadFile."
|
|
source_ref: "libmain.so LoadNES 0x39ff4 (ApplyIPS 0x3a02c), LoadFile 0x392ac-0x392c4"
|
|
|
|
- name: "<game>.cht"
|
|
required: false
|
|
unsourceable: "cheat codes the user writes or collects per title"
|
|
category: game_data
|
|
description: "cheat codes for one title"
|
|
note: "Named from the ROM path by MakeFileName and read by LoadCHT when present. Distinct from the .chts sets of the Cheatopedia browser. A file picked by hand whose name ends in .CHT reaches the same loader through LoadFile, and so does the menu handler."
|
|
source_ref: "libmain.so LoadNES 0x3a05e (LoadCHT 0x3a06a), LoadFile 0x392e2-0x392ec, Joystick 0x388d2"
|
|
|
|
- name: "<game>.pal"
|
|
required: false
|
|
unsourceable: "any 64 colour palette the user picks for one title"
|
|
category: game_data
|
|
description: "colour palette for one title"
|
|
note: "Named from the ROM path by MakeFileName and read by LoadPAL when present, taking precedence over the startup palette for that game. A file picked by hand whose name ends in .PAL reaches the same loader through LoadFile."
|
|
source_ref: "libmain.so LoadNES 0x3a094 (LoadPAL 0x3a09e), LoadFile 0x392ce-0x392d8"
|
|
|
|
exclusion_note: >
|
|
Left out are the files iNES writes and reads back itself, which are emulator
|
|
state rather than anything a user obtains: <game>.sav holding battery backed
|
|
cartridge RAM, <game>.sta and the desktop builds' DEFAULT.STA holding saved
|
|
emulation state, and LOG.MID, the soundtrack the emulator records when the MIDI
|
|
log is toggled on. libOpenSLES.so is left out as the Android audio library the
|
|
system provides, dlopen'd by name from InitAudio and the only other literal
|
|
filename in the binary. The twenty palettes under Palettes/ in the Windows and
|
|
Ubuntu distributions are left out as the shipped candidates for iNES.pal, which
|
|
the emulator never opens under those names. Four of them are the VS System
|
|
chip palettes, RP2C04-001, RP2C04-002, RP2C04-003 and RP2C05-004, and they
|
|
reach the emulator through the palette entries above rather than a path of
|
|
their own. Neither the VS System nor the FamilyBASIC keyboards need a file:
|
|
DISKSYS.ROM is the only image the binary names.
|
|
ref: libmain.so LoadNES 0x39f5e, 0x3a0ac, libmain.so InitAudio 0x18250-0x18252,
|
|
iNES61-Ubuntu-x86-bin ines DEFAULT.STA, iNES61-Windows-bin.zip Palettes/
|