Files
libretro/emulators/pokemini.yml
T
Abdessamad Derraz e7aa9e870b fix: state libretro core versions from their code
Each libretro profile records version_basis and core_version is read
there at its pin. snes9x states 1.63 in snes9x.h, nestopia 2.0.0, mgba
0.11.0, vice 3.10, atari800's libretro tree 7.0.0. Cores whose build
takes its version from git carry the nearest tag in describe form
(flycast v2.7-90-ge88b0ce, ppsspp, duckstation, gearcoleco), placeholders
copied from .info files (Git, SVN) are replaced by the code's statement,
and a code that states none is null with kind none.
2026-10-27 19:21:27 +01:00

98 lines
3.8 KiB
YAML

emulator: PokeMini
type: libretro
core_classification: community_fork
source: "https://github.com/libretro/PokeMini"
upstream: "https://sourceforge.net/projects/pokemini/"
profiled_date: "2026-03-24"
source_commit: "132111b76343559860532a1ccc094f93f1ed5650"
core_version: "v0.60"
version_basis:
kind: file
path: "libretro/libretro.c"
pattern: 'info->library_version\s+=\s+"([^"]+)'
display_name: "Nintendo - Pokemon Mini (PokeMini)"
cores:
- pokemini
systems:
- nintendo-pokemon-mini
notes: |
PokeMini is a Pokemon Mini handheld emulator ported to libretro.
The core has an embedded FreeBIOS (open-source replacement) compiled
directly into the binary from freebios/freebios.c. This means the
real BIOS is never strictly required -- games will run with FreeBIOS
alone, though compatibility may differ from the original firmware.
BIOS loading sequence in the libretro port:
1. PokeMini_Create() clears PM_BIOS (4096 bytes at $000000-$000FFF),
then loads FreeBIOS into it via memcpy (source/PokeMini.c:116).
PokeMini_FreeBIOS is set to 1.
2. retro_load_game() calls PokeMini_Reset(0) after loading the ROM.
3. PokeMini_Reset() checks forcefreebios (hardcoded to 0 in the
libretro port, libretro.c:499). Since FreeBIOS is currently loaded
and forcefreebios is 0, it enters the real-BIOS path
(source/PokeMini.c:503-508):
- Reloads FreeBIOS as a safety fallback
- Checks if CommandLine.bios_file exists on disk
- If found, overwrites PM_BIOS with the real BIOS via
PokeMini_LoadBIOSFile(), sets PokeMini_FreeBIOS to 0
4. If bios.min is missing, FreeBIOS stays loaded and emulation
proceeds normally.
File path construction (libretro.c:565):
sprintf(CommandLine.bios_file, "%s%cbios.min", g_system_dir, slash)
The core looks for bios.min directly in the system directory root,
no subdirectory.
There is no core option to toggle FreeBIOS in the libretro port.
The standalone PokeMini has a forcefreebios setting, but the libretro
wrapper hardcodes it to 0 (always prefer real BIOS when available).
FreeBIOS (freebios/freebios.min) is 4096 bytes, a clean-room
reimplementation. It is NOT the official Nintendo Pokemon Mini BIOS.
files:
- name: "bios.min"
system: nintendo-pokemon-mini
description: "Pokemon Mini official BIOS"
required: false
hle_fallback: true
size: 4096
source_ref: "source/PokeMini.c:189-206 (PokeMini_LoadBIOSFile), libretro/libretro.c:565 (path)"
note: "Mapped at $000000-$000FFF (4 KB). Read via Hardware.c:144-145. Falls back to embedded FreeBIOS if missing."
platform_details:
bios_mapping:
target: "$000000-$000FFF in Pokemon Mini address space (4 KB)"
source_ref: "source/PokeMini.h:38, source/Hardware.c:144-145"
note: |
PM_BIOS is a 4096-byte array. CPU reads from address range
$000000-$000FFF are served directly from this buffer. The BIOS
handles interrupt vectors, hardware init, and the startup logo.
freebios_fallback:
source_ref: "freebios/freebios.c, source/PokeMini.c:209-214"
note: |
FreeBIOS is a 4096-byte open-source replacement embedded in the
binary as a C array. It provides basic interrupt vectors and
startup code. Loaded by default at PokeMini_Create() and used
as fallback when bios.min is not found on disk.
freebios_hashes:
md5: "d6c3ff5abc88f7c42f1a5edd6889f9cf"
sha1: "b40421defb005e836913e4e39dc1a18aa3b8887e"
size: 4096
load_priority:
source_ref: "source/PokeMini.c:500-509"
note: |
During PokeMini_Reset(), the core first reloads FreeBIOS as a
safe baseline, then attempts to load bios.min from disk. If
the file exists and is exactly 4096 bytes, it replaces FreeBIOS.
The forcefreebios flag (hardcoded 0 in libretro) controls this:
when 0, the core always prefers real BIOS over FreeBIOS.