{
  "commit": "d38cd580364b2c788e633b9e51c15e1668f726c0",
  "count": 1,
  "generated_at": "2026-11-03T13:36:34Z",
  "items": [
    {
      "id": "nuance",
      "profile": {
        "core_classification": "official_port",
        "core_version": "0.6.7",
        "cores": [
          "nuance"
        ],
        "display_name": "VM Labs - NUON (Nuance)",
        "emulator": "Nuance",
        "files": [
          {
            "description": "BIOS routines for MPE3, Aries COFF assembled from bios.s",
            "md5": "23bf80c259f182f582beeb368aba98f5",
            "name": "bios.cof",
            "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.\n",
            "path": "nuance/bios.cof",
            "required": true,
            "sha1": "515a3d9a9e43b7902d161ba27bf67aecee922e41",
            "size": 23938,
            "source_ref": "source src/libretro.cpp:332-371, source src/NuonEnvironment.cpp:595, source src/NuonEnvironment.cpp:617-619, source src/bios.cpp:566-582"
          },
          {
            "description": "Media MPE minibios for MPE0, assembled from minibios.s",
            "md5": "1abc7f6265b82742154be881cff2cd3f",
            "name": "minibios.cof",
            "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.\n",
            "path": "nuance/minibios.cof",
            "required": true,
            "sha1": "5265dbc871ada59dbd384104c578d807438af4c7",
            "size": 7873,
            "source_ref": "source src/media.cpp:243-321, source src/bios.cpp:661, source src/Bios.h:29-33"
          },
          {
            "description": "Media MPE minibios for MPEs 1 to 3, addresses shifted down by 4 KB",
            "md5": "ceb37f4e78c1f396b49bb6372c83fd7c",
            "name": "minibiosX.cof",
            "note": "Loaded by MediaInitMPE when a program installs the minibios on an MPE other than MPE0.\n",
            "path": "nuance/minibiosX.cof",
            "required": true,
            "sha1": "e45a96ce18486573c4d30efbc01658ce1ff8cd55",
            "size": 7873,
            "source_ref": "source src/media.cpp:277-296, source src/Bios.h:35-38"
          },
          {
            "description": "Emulator configuration (compiler options, audio interrupts, controller mappings)",
            "md5": "20becfdb932042f8ab47c098e92a12ed",
            "name": "nuance.cfg",
            "note": "Read from the working directory, then beside the running executable. Absent file leaves the defaults of NuonEnvironment::Init in place.\n",
            "path": "nuance/nuance.cfg",
            "required": false,
            "sha1": "dfbac2a22f17cf82c7cd40f3727eecf31b013d15",
            "size": 3369,
            "source_ref": "source src/NuonEnvironment.cpp:547-563, source src/NuonEnvironment.cpp:931-1070"
          },
          {
            "description": "GLSL vertex shader",
            "has_builtin": true,
            "md5": "5944fea1ff20645f10aecdda06235fb7",
            "name": "video_generic.vs",
            "note": "Opened from the working directory, and 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).\n",
            "path": "nuance/video_generic.vs",
            "required": false,
            "sha1": "92fca43b92298d308e88edada93453a9ef21adbd",
            "size": 491,
            "source_ref": "source src/video.cpp:129, source src/ShaderProgram.cpp:94-144, source src/embedded_shaders.h:31-52"
          },
          {
            "description": "GLSL fragment shader, YCrCb to RGB conversion",
            "has_builtin": true,
            "md5": "e23f4668fea649cb14feab840fd8377f",
            "name": "video_m32_o32.fs",
            "note": "Selected when UseCRTshader is disabled in nuance.cfg. Same lookup and fallback as video_generic.vs. The release copy is 6090 bytes.\n",
            "path": "nuance/video_m32_o32.fs",
            "required": false,
            "sha1": "d0477bd73ba524bb74c1faf30fd8f32bd254f924",
            "size": 6168,
            "source_ref": "source src/video.cpp:130, source src/ShaderProgram.cpp:94-144, source src/embedded_shaders.h:31-52"
          },
          {
            "description": "GLSL fragment shader with CRT post-processing",
            "has_builtin": true,
            "md5": "2e1335cd9b14165897eac031504abf8e",
            "name": "video_m32_o32_crt.fs",
            "note": "Selected when UseCRTshader is enabled, the shipped default. Same lookup and fallback as video_generic.vs. The release copy is 8052 bytes.\n",
            "path": "nuance/video_m32_o32_crt.fs",
            "required": false,
            "sha1": "e57671f844c3bf96f0bf77ea4d550e13e077b0d2",
            "size": 8130,
            "source_ref": "source src/video.cpp:130, source src/ShaderProgram.cpp:94-144, source src/embedded_shaders.h:31-52"
          },
          {
            "description": "Atmel AT49BV162A flash ROM image, 2 MB at 0xF0000000",
            "name": "FlashEEPROM.bin",
            "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, and its content is the flash state of the session that produced it.\n",
            "required": false,
            "size": 2097152,
            "source_ref": "upstream src/FlashEEPROM.h:36-51, upstream src/FlashEEPROM.cpp:273-292, upstream src/dma.cpp:679-693"
          },
          {
            "description": "Single breakpoint address, first line in hexadecimal",
            "mode": "standalone",
            "name": "breakpoint.txt",
            "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).\n",
            "required": false,
            "source_ref": "upstream src/NuanceMain_linux.cpp:124, upstream src/NuanceMain.cpp:446"
          }
        ],
        "notes": "NUON emulator written by Mike Perry (2002-2007) and continued as\nNuanceResurrection by Carsten Waechter from the source archive released\nafter the author's death. The Linux and libretro ports were merged into the\nupstream tree in 2026 (pull request 75), and the port's last commit is part\nof the upstream history.\n\nThe three BIOS files are not firmware dumps. bios.cof, minibios.cof and\nminibiosX.cof are Aries assembly implementations of BIOS routines,\nassembled from bios.s, minibios.s and minibiosX.s in the source tree. Every\nother BIOS call is handled in C++ through BiosJumpTable (src/bios.cpp:395-547).\nThe entries left to the assembly code are the comm bus calls, TimeToSleep,\nMPEWait and BiosGetInfo.\n\nretro_load_game looks for <system>/nuance/bios.cof and changes the working\ndirectory to <system>/nuance when it exists, else to the directory of the\ncore library when bios.cof sits beside it (src/libretro.cpp:332-371). Every\ndata file is then opened by bare name from the working directory. InitBios\nloads bios.cof into MPE3 and MediaInitMPE loads minibios.cof into MPE0\n(minibiosX.cof on MPEs 1 to 3). A failed load prints \"Missing File!\" and\nemulation continues without the routines. LoadCoffFile checks the COFF magic\n0x0120 and copies the sections to their physical addresses. No size or hash\nis checked (src/coff.cpp:47-176).\n\nTwo builds of bios.cof exist. The source tree carries the NuanceExperimental\nbuild (23938 bytes, 12 sections, with commrecv_vars and commrecv_queues).\nThe 0.6.6 and 0.6.7 release archives ship the 2007 build (19410 bytes, 10\nsections). Both carry the same biosvars, haltab, biosinfo, halstub,\nbiosdata, halts and controllerdata sections and the C++ side references\nneither extra section.\n\nnuance.cfg is read from the working directory, then from the directory of\nthe running executable (src/NuonEnvironment.cpp:547-563). Without it the\nvalues set in NuonEnvironment::Init apply. The GLSL shaders are opened from\nthe working directory and fall back to the copies compiled into the binary\n(src/ShaderProgram.cpp:94-144, src/embedded_shaders.h). FlashEEPROM.bin is\nread by the FlashEEPROM constructor and written by the destructor, both\nrelative to the process working directory at load and unload of the core\n(src/FlashEEPROM.h:36-51). Game data (nuon.run, nuon.dat) is read from the\nloaded disc image or directory, and no other fixed file is opened.\n",
        "profiled_date": "2026-09-03",
        "source": "https://github.com/WizzardSK/nuance-libretro",
        "source_commit": "daf3ca642756a559ecce91e10da0e73cbad180ff",
        "systems": [
          "vm-labs-nuon"
        ],
        "type": "libretro",
        "upstream": "https://github.com/andkrau/NuanceResurrection",
        "upstream_commit": "daf3ca642756a559ecce91e10da0e73cbad180ff",
        "version_basis": {
          "kind": "file",
          "path": "src/libretro.cpp",
          "pattern": "info->library_version\\s+=\\s+\"([^\"]+)"
        }
      }
    }
  ],
  "kind": "emulators",
  "schema_version": 1
}
