Files
libretro/emulators/xm7.yml
T
Abdessamad Derraz 0a62f065b8 feat: collect the xm7 drive sound effects
XM7 plays fddseek.wav, relay_on.wav and relayoff.wav from its data
directory (linux-sdl/sdl/api_snd2.cpp:155-159, 213-267). The three come
from Win32/ of the XM7 V3.4L77SX+z09 final release archive by PI. and
Ryu Takegami, archived on archive.org as xm7tr_3477sxz09.
2026-11-09 17:44:16 +01:00

168 lines
7.0 KiB
YAML

emulator: XM7
display_name: "Fujitsu - FM-7 (XM7/SDL)"
type: standalone
core_classification: other
source: "https://github.com/nakatamaho/XM7-for-SDL"
upstream: "http://retropc.net/ryu/xm7/"
profiled_date: "2026-10-20"
source_commit: "2a48dceaf8a3a0de92cf369b039ac5fab2bb351a"
core_version: "V3.4 L61a SDL/Agar 0.3.2pre2"
version_basis:
kind: file
path: "linux-sdl/vm/xm7.h"
pattern: '#if XM7_VER >= 3\n#define\s+VERSION\s+"(V[^"]+)"[\s\S]*?#else\n#define\s+LEVEL\s+"([^"]+)"[\s\S]*?#else\n#define\s+LOCALVER\s+"(SDL/Agar [^"]+)"'
format: "{1} {2} {3}"
cores:
- xm7
systems:
- fm7
- fm77av
mode: standalone
notes: |
K.Ohta's SDL and Agar port of PI.'s XM7, an FM-7, FM-77 and FM77AV series
emulator. The CMake build sets XM7_VERSION 3 (linux-sdl/CMakeLists.txt:23,
linux-sdl/cmake/config_xm7.cmake:20), the FM77AV40EX/SX level, so every ROM
path below is the XM7_VER >= 3 branch. RetroPie builds this repository with
OpenGL and OpenCL off.
ROMs are read by file_load (linux-sdl/sdl/sdl_file.c:21-59), which prepends
ModuleDir and reads a fixed byte count. A file shorter than that count is
refused and anything past it is ignored. main sets ModuleDir to $HOME/.xm7/,
or ./.xm7/ when HOME is unset (linux-sdl/sdl/windows_main.cpp:79-94). No hash
or checksum of any ROM is computed.
system_init stops at the first device whose init returns FALSE
(linux-sdl/vm/system.c:124-127, 171, 203). MainLoop then sets error code 1
and shows "Error init VM. Please check ROMS and system-memory."
(linux-sdl/ui-agar/agar_main.cpp:166-168, 546-548), and no machine runs. A
ROM whose absence makes its init return FALSE is required below.
The three drive sound effects are read with SDL_LoadWAV from RSSDIR, which
defaults to SHAREDIR, /usr/local/share/xm7/ (linux-sdl/sdl/build_config.h:76-86,
linux-sdl/sdl/api_snd2.cpp:660). The name is appended to that directory
without a separator, and each name is tried in lower case, upper case,
capitalized and as written (linux-sdl/sdl/api_snd2.cpp:213-267). A missing
WAV leaves its slot silent. HEADUP.WAV and HEADDOWN.WAV are compiled out
(linux-sdl/sdl/api_snd2.cpp:160-163).
USERDIC.DAT is the FM77-211 learning RAM. It is filled with 0xFF when absent
and written back by the emulator (linux-sdl/vm/jcard.c:77-82), so it is not
listed. JSUBMON.ROM, SUBSYS_8.ROM, SUBSYSL4.ROM, ANKCG16.ROM, the FM-8 and
FM-7 boot ROMs and FBASIC10.ROM are only read when XM7_VER is 1.
files:
- name: FBASIC30.ROM
description: "F-BASIC V3.0 ROM"
required: true
min_size: 31744
validation: [size]
source_ref: "linux-sdl/vm/xm7.h:240, linux-sdl/vm/mainmem.c:211-217"
- name: INITIATE.ROM
description: "FM77AV initiator ROM"
required: true
min_size: 8192
validation: [size]
source_ref: "linux-sdl/vm/xm7.h:241, linux-sdl/vm/mainmem.c:225-227"
note: "Patched in memory after loading to skip the boot delay of the old and new boot sequences (linux-sdl/vm/mainmem.c:229-262)."
- name: BOOT_MMR.ROM
description: "FM-77 MMR boot ROM"
required: false
min_size: 512
validation: [size]
source_ref: "linux-sdl/vm/xm7.h:246, linux-sdl/vm/mainmem.c:287-290, linux-sdl/vm/jcard.c:100-108"
note: "Without it the hidden boot area of the extended ROM is filled from INITIATE.ROM offset 0x1a00."
- name: SUBSYS_C.ROM
description: "FM-7 sub system ROM"
required: true
min_size: 10240
validation: [size]
source_ref: "linux-sdl/vm/xm7.h:252, linux-sdl/vm/submem.c:212-218"
- name: SUBSYS_A.ROM
description: "FM77AV type A sub system ROM"
required: true
min_size: 8192
validation: [size]
source_ref: "linux-sdl/vm/xm7.h:255, linux-sdl/vm/submem.c:220-222"
- name: SUBSYS_B.ROM
description: "FM77AV type B sub system ROM"
required: true
min_size: 8192
validation: [size]
source_ref: "linux-sdl/vm/xm7.h:256, linux-sdl/vm/submem.c:223-225"
- name: SUBSYSCG.ROM
description: "FM77AV character generator and sub system ROM"
required: true
min_size: 8192
validation: [size]
source_ref: "linux-sdl/vm/xm7.h:257, linux-sdl/vm/submem.c:226-228"
- name: KANJI1.ROM
description: "JIS83 first standard kanji ROM"
required: true
min_size: 131072
validation: [size]
source_ref: "linux-sdl/vm/xm7.h:259, linux-sdl/vm/kanji.c:85-87"
unsourceable: "XM7 checks no hash and its upstream distributes no dump. The KANJI1.ROM the collection holds is the PC-88 kanji ROM, another machine's font."
- name: KANJI2.ROM
description: "JIS83 second standard kanji ROM"
required: true
min_size: 131072
validation: [size]
source_ref: "linux-sdl/vm/xm7.h:263, linux-sdl/vm/kanji.c:98-102"
unsourceable: "XM7 checks no hash and its upstream distributes no dump. The KANJI2.ROM the collection holds is the PC-88 second level kanji ROM, another machine's font."
- name: KANJI.ROM
description: "JIS78 first standard kanji ROM"
required: false
min_size: 131072
validation: [size]
source_ref: "linux-sdl/vm/xm7.h:260, linux-sdl/vm/kanji.c:71-81, 128-133"
unsourceable: "XM7 checks no hash and its upstream distributes no dump. The collection holds no JIS78 table. The KANJI.ROM files are MSX and FPseNG fonts, and the Fujitsu kanji ROM inside fm7.zip and fm77av.zip (MAME kanji.rom, crc32 62402ac9) draws the JIS83 forms at the codes linux-sdl/vm/kanji.c:353-380 swaps (0x3646, 0x445B, 0x4768)."
note: "Without it a JIS78 table is generated from KANJI1.ROM."
- name: DICROM.ROM
description: "FM77-101/FM77-211 dictionary ROM"
required: true
min_size: 262144
validation: [size]
source_ref: "linux-sdl/vm/xm7.h:264, linux-sdl/vm/jcard.c:66-68"
- name: EXTSUB.ROM
description: "FM77AV40EX/SX extended sub system ROM"
required: true
min_size: 49152
validation: [size]
source_ref: "linux-sdl/vm/xm7.h:266, linux-sdl/vm/jcard.c:92-94"
- name: relay_on.wav
description: "Cassette relay on sound"
required: false
sha1: "85c43404f3f701e87f5c3b30bb2624465feb537c"
md5: "6233f2d067d775cd7a5951e7f56044c7"
source_ref: "linux-sdl/sdl/api_snd2.cpp:155-157, 213-267, 660"
note: "Hashes of the copy in Win32/ of the XM7 V3.4L77SX+z09 final release archive (xm7_3477sxz09.zip, PI. and Ryu Takegami, retropc.net/ryu/xm7), dated 2003-01-23."
- name: relayoff.wav
description: "Cassette relay off sound"
required: false
sha1: "ab06b4ce5ab88da51a6d0223dfcf7402e83cf965"
md5: "58f696bffef634819e0769a5c6e7c95f"
source_ref: "linux-sdl/sdl/api_snd2.cpp:155-158, 213-267, 660"
note: "Hashes of the copy in Win32/ of the XM7 V3.4L77SX+z09 final release archive (xm7_3477sxz09.zip, PI. and Ryu Takegami, retropc.net/ryu/xm7), dated 2003-01-23."
- name: fddseek.wav
description: "Floppy drive seek sound"
required: false
sha1: "bb36a2980975f6c469a861d64dbfdaacbf8c7f00"
md5: "b56fa2df7681a97190804f67f3e6900b"
source_ref: "linux-sdl/sdl/api_snd2.cpp:155-159, 213-267, 660"
note: "Hashes of the copy in Win32/ of the XM7 V3.4L77SX+z09 final release archive (xm7_3477sxz09.zip, PI. and Ryu Takegami, retropc.net/ryu/xm7), dated 2003-01-23."