Files
libretro/emulators/nicaiemu.yml
T
Abdessamad Derraz bbd778b390 fix: file nicaiemu and coolbaremu as one system
The buildbot serves nicaiemu_libretro (frozen at 4c9b73f7, last built
2026-10-16 05:15) beside coolbaremu_libretro. They are two builds: each
reads its own orientation list from the system directory, so both
profiles stay, each with its own core name. Both read the same .cbe
archives from the same workspace, which builds a standalone binary at
both revisions: one system id and one build type for the two.
2026-10-21 06:55:42 +02:00

57 lines
3.1 KiB
YAML

emulator: NicaiEmu
type: standalone + libretro
core_classification: frozen_snapshot
source: "https://github.com/AloysHF/CoolbarEmu"
upstream: "https://github.com/AloysHF/CoolbarEmu"
profiled_date: "2026-10-21"
source_commit: "4c9b73f7213b1537d2361a8b1d438857bdcdc798"
pin_frozen: "the nicaiemu core is this revision, the last one whose .gitlab-ci.yml sets CORENAME: nicaiemu. The next master commit, 7496d513 (PR #78, 2026-10-16), renames the project and its crates to CoolbarEmu and the buildbot recipe to CORENAME: coolbaremu, so later commits build the coolbaremu core, described by coolbaremu.yml."
core_version: "0.1.0"
display_name: "MStar - Nicai (NicaiEmu)"
cores:
- nicaiemu
systems:
- coolbar
notes: |
Emulator for Nicai/MStar CBE (Cool Bar Engine) phone games written in
Rust by AloysHF. The libretro core and the nicaiemu standalone binary
share the nicaiemu-core crate, and the workspace builds the libretro
core by default (Cargo.toml:13). The repository was renamed from
AloysHF/NicaiEmu to AloysHF/CoolbarEmu with PR #78.
A .cbe archive is read whole from its full path (need_fullpath = true,
crates/nicaiemu-libretro/src/libretro/api.rs:181, then load_machine,
crates/nicaiemu-libretro/src/libretro/api.rs:359-363, then
CbeArchive::load, crates/nicaiemu-core/src/cbe/archive.rs:68-94). Files
next to the .cbe (pay kernels, save records, update data) are indexed as
the guest filesystem (crates/nicaiemu-core/src/machine/mod.rs:1022-1024,
crates/nicaiemu-core/src/machine/virtual_fs.rs:58-88), and they belong
to the game.
Phone services are implemented in Rust
(crates/nicaiemu-core/src/machine/services/). Text is decoded as GBK and
rasterised from the unifont crate compiled into the core (Cargo.toml:35,
crates/nicaiemu-core/src/machine/drawing.rs:1886). MIDI resources are
synthesised as decaying sine tones without a sound bank
(crates/nicaiemu-core/src/audio_engine.rs:270-275), while WAV and MP3 are
decoded with symphonia.
The only system directory read is nicaiemu_orientation.csv, an optional
user list of CRC32, size and orientation for landscape titles missing
from the built-in table (crates/nicaiemu-libretro/src/libretro/api.rs:45,
crates/nicaiemu-libretro/src/libretro/api.rs:365-399,
crates/nicaiemu-core/src/orientation_profile.rs:132-140). A missing file
is logged and the built-in table applies. The standalone binary reads
and writes only the files named on its command line, --orientation-profile,
--screenshot, --save-state and --load-state
(crates/nicaiemu/src/main.rs:104-107, crates/nicaiemu/src/main.rs:152-166,
crates/nicaiemu/src/main.rs:185-186).
The buildbot publishes nicaiemu_libretro next to coolbaremu_libretro, and
the two cores read different system files: nicaiemu_orientation.csv here,
coolbaremu_orientation.csv in the coolbaremu core built after the rename.
exclusion_note: "The firmware services are reimplemented in the core, glyphs come from the unifont crate and MIDI is synthesised without a bank. The system directory holds only an optional user-written orientation list, and the .info declares firmware_count = 0."
files: []