Files
libretro/emulators/nuance.yml
T

175 lines
7.6 KiB
YAML

emulator: Nuance
type: libretro
core_classification: official_port
source: "https://github.com/WizzardSK/nuance-libretro"
upstream: "https://github.com/andkrau/NuanceResurrection"
profiled_date: "2026-09-03"
source_commit: "daf3ca642756a559ecce91e10da0e73cbad180ff"
upstream_commit: "700d28553f3a06b16385ed9e48f194377e131b03"
core_version: "0.6.7"
display_name: "VM Labs - NUON (Nuance)"
cores: [nuance]
systems: [vm-labs-nuon]
notes: |
NUON emulator written by Mike Perry (2002-2007) and continued as
NuanceResurrection by Carsten Waechter from the source archive released
after the author's death. The Linux and libretro ports were merged into the
upstream tree in 2026 (pull request 75), so the port and the upstream share
the same revision.
The three BIOS files are not firmware dumps. bios.cof, minibios.cof and
minibiosX.cof are Aries assembly implementations of BIOS routines,
assembled from bios.s, minibios.s and minibiosX.s in the source tree; every
other BIOS call is handled in C++ through BiosJumpTable (src/bios.cpp:395-547).
The entries left to the assembly code are the comm bus calls, TimeToSleep,
MPEWait and BiosGetInfo.
retro_load_game looks for <system>/nuance/bios.cof and changes the working
directory to <system>/nuance when it exists, else to the directory of the
core library when bios.cof sits beside it (src/libretro.cpp:332-371). Every
data file is then opened by bare name from the working directory. InitBios
loads bios.cof into MPE3 and MediaInitMPE loads minibios.cof into MPE0
(minibiosX.cof on MPEs 1 to 3). A failed load prints "Missing File!" and
emulation continues without the routines. LoadCoffFile checks the COFF magic
0x0120 and copies the sections to their physical addresses; no size or hash
is checked (src/coff.cpp:47-176).
Two builds of bios.cof exist. The source tree carries the NuanceExperimental
build (23938 bytes, 12 sections, with commrecv_vars and commrecv_queues);
the 0.6.6 and 0.6.7 release archives ship the 2007 build (19410 bytes, 10
sections). Both carry the same biosvars, haltab, biosinfo, halstub,
biosdata, halts and controllerdata sections and the C++ side references
neither extra section.
nuance.cfg is read from the working directory, then from the directory of
the running executable (src/NuonEnvironment.cpp:547-563); without it the
values set in NuonEnvironment::Init apply. The GLSL shaders are opened from
the working directory and fall back to the copies compiled into the binary
(src/ShaderProgram.cpp:94-144, src/embedded_shaders.h). FlashEEPROM.bin is
read by the FlashEEPROM constructor and written by the destructor, both
relative to the process working directory at load and unload of the core
(src/FlashEEPROM.h:36-51). Game data (nuon.run, nuon.dat) is read from the
loaded disc image or directory; no other fixed file is opened.
files:
- name: "bios.cof"
path: "nuance/bios.cof"
description: "BIOS routines for MPE3, Aries COFF assembled from bios.s"
size: 23938
sha1: "515a3d9a9e43b7902d161ba27bf67aecee922e41"
md5: "23bf80c259f182f582beeb368aba98f5"
required: true
bundled: true
source_ref: "src/libretro.cpp:332-371, src/NuonEnvironment.cpp:595, src/NuonEnvironment.cpp:617-619, src/bios.cpp:566-582"
note: >
Loaded into MPE3 by InitBios through LoadCoffFile, which rejects a file
whose magic is not 0x0120 (src/coff.cpp:47-71). The 2007 build shipped in the release
archives (19410 bytes, sha1 4f42ed8f5e171cc79112d1c1e201381e83b1fc0d)
loads the same way.
- name: "minibios.cof"
path: "nuance/minibios.cof"
description: "Media MPE minibios for MPE0, assembled from minibios.s"
size: 7873
sha1: "5265dbc871ada59dbd384104c578d807438af4c7"
md5: "1abc7f6265b82742154be881cff2cd3f"
required: true
bundled: true
source_ref: "src/media.cpp:243-321, src/bios.cpp:661, src/Bios.h:29-33"
note: >
Loaded by MediaInitMPE when the media MPE is MPE0, which InitBios does at
every BIOS initialisation. Entry point and interrupt vectors come from
the fixed addresses in Bios.h.
- name: "minibiosX.cof"
path: "nuance/minibiosX.cof"
description: "Media MPE minibios for MPEs 1 to 3, addresses shifted down by 4 KB"
size: 7873
sha1: "e45a96ce18486573c4d30efbc01658ce1ff8cd55"
md5: "ceb37f4e78c1f396b49bb6372c83fd7c"
required: true
bundled: true
source_ref: "src/media.cpp:277-296, src/Bios.h:35-38"
note: >
Loaded by MediaInitMPE when a program installs the minibios on an MPE
other than MPE0.
- name: "nuance.cfg"
path: "nuance/nuance.cfg"
description: "Emulator configuration (compiler options, audio interrupts, controller mappings)"
size: 3369
sha1: "dfbac2a22f17cf82c7cd40f3727eecf31b013d15"
md5: "20becfdb932042f8ab47c098e92a12ed"
required: false
bundled: true
source_ref: "src/NuonEnvironment.cpp:547-563, src/NuonEnvironment.cpp:931-1070"
note: >
Read from the working directory, then beside the running executable.
Absent file leaves the defaults of NuonEnvironment::Init in place.
- name: "video_generic.vs"
path: "nuance/video_generic.vs"
description: "GLSL vertex shader"
size: 491
sha1: "92fca43b92298d308e88edada93453a9ef21adbd"
md5: "5944fea1ff20645f10aecdda06235fb7"
required: false
bundled: true
has_builtin: true
source_ref: "src/video.cpp:129, src/ShaderProgram.cpp:94-144, src/embedded_shaders.h:31-52"
note: >
Opened from the working directory; the copy compiled into the binary is
used when the file is absent. The release archives ship the file without
the EMBED_HLSL guards (413 bytes).
- name: "video_m32_o32.fs"
path: "nuance/video_m32_o32.fs"
description: "GLSL fragment shader, YCrCb to RGB conversion"
size: 6168
sha1: "d0477bd73ba524bb74c1faf30fd8f32bd254f924"
md5: "e23f4668fea649cb14feab840fd8377f"
required: false
bundled: true
has_builtin: true
source_ref: "src/video.cpp:130, src/ShaderProgram.cpp:94-144, src/embedded_shaders.h:31-52"
note: >
Selected when UseCRTshader is disabled in nuance.cfg. Same lookup and
fallback as video_generic.vs; the release copy is 6090 bytes.
- name: "video_m32_o32_crt.fs"
path: "nuance/video_m32_o32_crt.fs"
description: "GLSL fragment shader with CRT post-processing"
size: 8130
sha1: "e57671f844c3bf96f0bf77ea4d550e13e077b0d2"
md5: "2e1335cd9b14165897eac031504abf8e"
required: false
bundled: true
has_builtin: true
source_ref: "src/video.cpp:130, src/ShaderProgram.cpp:94-144, src/embedded_shaders.h:31-52"
note: >
Selected when UseCRTshader is enabled, the shipped default. Same lookup
and fallback as video_generic.vs; the release copy is 8052 bytes.
- name: "FlashEEPROM.bin"
description: "Atmel AT49BV162A flash ROM image, 2 MB at 0xF0000000"
size: 2097152
required: false
bundled: true
source_ref: "src/FlashEEPROM.h:36-51, src/FlashEEPROM.cpp:273-292, src/dma.cpp:679-693"
note: >
Read by the FlashEEPROM constructor from the process working directory
when the core is loaded, truncated to 2 MB, and written back by the
destructor. The release archives ship one; its content is the flash
state of the session that produced it.
- name: "breakpoint.txt"
description: "Single breakpoint address, first line in hexadecimal"
required: false
mode: standalone
source_ref: "src/NuanceMain_linux.cpp:124, src/NuanceMain.cpp:446"
note: >
Read from the working directory by the standalone executables only;
NuanceMain.cpp and NuanceMain_linux.cpp are excluded from the libretro
build (CMakeLists.txt:214).