mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-11-11 12:33:53 -06:00
264 lines
13 KiB
YAML
264 lines
13 KiB
YAML
emulator: WQXEmu
|
|
type: standalone + libretro
|
|
core_classification: official_port
|
|
source: "https://git.libretro.com/libretro/wqxemu"
|
|
upstream: "https://github.com/AloysHF/WQXEmu"
|
|
profiled_date: "2026-11-09"
|
|
source_commit: "44f492cfac4c47e9e2470144c972264779c5f9bf"
|
|
upstream_commit: "44f492cfac4c47e9e2470144c972264779c5f9bf"
|
|
core_version: "0.1.0"
|
|
version_basis:
|
|
kind: file
|
|
path: "Cargo.toml"
|
|
pattern: 'version\s+=\s+"([^"]+)'
|
|
display_name: "Wenquxing - Electronic Dictionary (WQXEmu)"
|
|
cores:
|
|
- wqxemu
|
|
systems:
|
|
- wenquxing-nc1020
|
|
- wenquxing-pc1000
|
|
- wenquxing-cc800
|
|
- wenquxing-nc2000
|
|
- wenquxing-nc3000
|
|
|
|
notes: |
|
|
Wenquxing electronic dictionary emulator written in Rust by AloysHF.
|
|
The libretro core and the wqx-emu standalone binary share the
|
|
wqxemu-core crate, which runs the original firmware of five models on
|
|
an emulated 6502 SoC: NC1020, PC1000, CC800, NC2000 and NC3000. The
|
|
git.libretro.com repository is a mirror of the GitHub one at the same
|
|
commit, and the buildbot consumes its .gitlab-ci.yml.
|
|
|
|
The core takes no content. retro_load_game ignores the game info it
|
|
is given and starts the machine, supports_no_game being set
|
|
(crates/wqxemu-libretro/src/lib.rs:776-793,
|
|
crates/wqxemu-libretro/src/lib.rs:608-612). The model comes from the
|
|
wqxemu_model core option, NC1020 when unset
|
|
(crates/wqxemu-libretro/src/lib.rs:325-345,
|
|
crates/wqxemu-libretro/src/lib.rs:1111-1129).
|
|
|
|
The firmware set is read from {system}/wqxemu/<model>/
|
|
(crates/wqxemu-libretro/src/lib.rs:310-323,
|
|
crates/wqxemu-libretro/src/lib.rs:389-407). The folder names and file
|
|
names are fixed and compared byte for byte against the directory
|
|
entries, so a folder or file that differs only in case is not found
|
|
(crates/wqxemu-core/src/machine.rs:111-131, model names in
|
|
crates/wqxemu-core/src/machine.rs:33-44). Each model reads only its own
|
|
files: obj_lu.bin and nc1020.fls for the NC1020, pc1000.rom and
|
|
pc1000.nor for the PC1000, obj.bin and cc800.fls for the CC800,
|
|
nc2000.nor, nc2000.nand and nc2000.nand0 for the NC2000, nc3000.nor,
|
|
nc3000.nand and an optional nc3000.nand0 for the NC3000
|
|
(crates/wqxemu-core/src/machine.rs:63-84,
|
|
crates/wqxemu-core/src/machine.rs:176-194). A missing folder or any
|
|
missing required file fails the start with a message listing every
|
|
missing name (crates/wqxemu-core/src/machine.rs:153-175,
|
|
crates/wqxemu-core/src/machine.rs:196-204), shown by the core before
|
|
retro_load_game returns false (crates/wqxemu-libretro/src/lib.rs:787-793).
|
|
Other files in the folder are ignored.
|
|
|
|
The Emscripten build used by EmulatorJS reads the same layout from the
|
|
root of the extracted firmware archive, and there the model is the only
|
|
wqxemu/<model>/ folder the archive holds. Several model folders stop
|
|
the start (crates/wqxemu-libretro/src/lib.rs:347-387).
|
|
|
|
Each machine reads its files whole with std::fs::read and checks their
|
|
size only: a ROM or NOR image must be at least as large as the window
|
|
it fills, the PC1000 ROM must be exactly 12 MiB or 16 MiB, and NAND
|
|
images are copied without any check. A file that fails the check makes
|
|
Emulator::new fail and retro_load_game returns false with the loader's
|
|
message (crates/wqxemu-libretro/src/lib.rs:806-812). No hash is
|
|
verified.
|
|
|
|
The firmware files are never written. The writable flash, NAND, RAM
|
|
and peripheral state of a session is serialized to
|
|
{save}/<model>/<fingerprint>.wqxs, a gzip file the core creates on
|
|
unload and reloads at the next start of the same model and firmware
|
|
set (crates/wqxemu-libretro/src/lib.rs:441-467,
|
|
crates/wqxemu-libretro/src/lib.rs:814-842,
|
|
crates/wqxemu-core/src/save.rs:46-96). The Emscripten build writes no
|
|
session file. The fingerprint is an FNV-1a over the slot layout and
|
|
the content of every file of the set
|
|
(crates/wqxemu-core/src/machine.rs:252-276). That file is created by
|
|
the core. retro_get_memory_data returns null for every memory id
|
|
(crates/wqxemu-libretro/src/lib.rs:1025-1032).
|
|
|
|
The standalone binary reads the same wqxemu/<model>/ layout below
|
|
--system-dir, ./system by default, and --model selects the machine,
|
|
nc1020 by default (crates/wqxemu/src/main.rs:27-42,
|
|
crates/wqxemu/src/main.rs:235-249). It keeps a session only in the file
|
|
named by --state-file (crates/wqxemu/src/main.rs:179-233). Its device
|
|
skin is drawn by code by default, or taken from include_bytes! PNGs
|
|
with --skin image (crates/wqxemu/src/main.rs:53-55,
|
|
crates/wqxemu/src/keypad.rs:72-91).
|
|
|
|
files:
|
|
- name: obj_lu.bin
|
|
path: wqxemu/nc1020/obj_lu.bin
|
|
system: wenquxing-nc1020
|
|
required: true
|
|
min_size: 25165824
|
|
validation: [size]
|
|
description: "NC1020 system ROM, three 8 MiB volumes"
|
|
note: >-
|
|
Read whole from {system}/wqxemu/nc1020/obj_lu.bin. The image must
|
|
be at least 0x8000 * 0x300 bytes or the loader fails, and a larger file
|
|
is kept whole. Each 32 KiB bank is stored with its 16 KiB halves
|
|
swapped and is swapped back on load, and the BBS pages are mapped
|
|
from it.
|
|
source_ref: "source crates/wqxemu-core/src/machine.rs:65-72, source crates/wqxemu-core/src/machine.rs:178-183, source crates/wqxemu-core/src/machines/nc1020.rs:61-98, source crates/wqxemu-core/src/memory.rs:24"
|
|
|
|
- name: nc1020.fls
|
|
path: wqxemu/nc1020/nc1020.fls
|
|
system: wenquxing-nc1020
|
|
required: true
|
|
min_size: 1048576
|
|
validation: [size]
|
|
description: "NC1020 NOR flash, 32 banks of 32 KiB"
|
|
note: >-
|
|
Read whole from {system}/wqxemu/nc1020/nc1020.fls. The image must
|
|
be at least 0x8000 * 0x20 bytes or the loader fails. Only the first
|
|
1 MiB is used, with the same 16 KiB half swap as the ROM. Writes go
|
|
to the in-memory copy and are persisted in the .wqxs session file,
|
|
never to this file.
|
|
source_ref: "source crates/wqxemu-core/src/machine.rs:76-84, source crates/wqxemu-core/src/machine.rs:178-183, source crates/wqxemu-core/src/machines/nc1020.rs:101-122, source crates/wqxemu-core/src/memory.rs:26"
|
|
|
|
- name: pc1000.rom
|
|
path: wqxemu/pc1000/pc1000.rom
|
|
system: wenquxing-pc1000
|
|
required: true
|
|
size: [12582912, 16777216]
|
|
validation: [size]
|
|
description: "PC1000 system ROM, obj1 + obj2 + obj3"
|
|
note: >-
|
|
Read whole from {system}/wqxemu/pc1000/pc1000.rom and stored
|
|
linearly. Exactly 12 MiB (obj1, obj2, obj3 back to back) or 16 MiB
|
|
(the PC1000EMUX and Android layout, obj3 at 12 MiB with 8 to 12 MiB
|
|
unused) is accepted. Any other size fails the loader. The volume
|
|
tables are rebuilt for the layout found.
|
|
source_ref: "source crates/wqxemu-core/src/machine.rs:65-72, source crates/wqxemu-core/src/machine.rs:178-183, source crates/wqxemu-core/src/machines/pc1000.rs:38-40, source crates/wqxemu-core/src/machines/pc1000.rs:236-283"
|
|
|
|
- name: pc1000.nor
|
|
path: wqxemu/pc1000/pc1000.nor
|
|
system: wenquxing-pc1000
|
|
required: true
|
|
min_size: 524288
|
|
validation: [size]
|
|
description: "PC1000 NOR flash, 16 banks of 32 KiB"
|
|
note: >-
|
|
Read whole from {system}/wqxemu/pc1000/pc1000.nor. The image must
|
|
be at least 0x80000 bytes or the loader fails. Only the first
|
|
512 KiB is used. A dump stored with swapped 16 KiB halves is
|
|
recognised by the info-block signature at bank 0 offset 0x4000 and
|
|
unswapped.
|
|
source_ref: "source crates/wqxemu-core/src/machine.rs:76-84, source crates/wqxemu-core/src/machine.rs:178-183, source crates/wqxemu-core/src/machines/pc1000.rs:42, source crates/wqxemu-core/src/machines/pc1000.rs:284-313"
|
|
|
|
- name: obj.bin
|
|
path: wqxemu/cc800/obj.bin
|
|
system: wenquxing-cc800
|
|
required: true
|
|
min_size: 16777216
|
|
validation: [size]
|
|
description: "CC800 system ROM, two volumes of 256 banks"
|
|
note: >-
|
|
Read whole from {system}/wqxemu/cc800/obj.bin. The image must be at
|
|
least 0x1000000 bytes or the loader fails. Only the first 16 MiB is
|
|
used. Each 32 KiB bank is stored with its 16 KiB halves swapped and
|
|
is swapped back on load. Volume 0 is banks 0 to 255, volume 1 banks
|
|
256 to 511.
|
|
source_ref: "source crates/wqxemu-core/src/machine.rs:65-72, source crates/wqxemu-core/src/machine.rs:178-183, source crates/wqxemu-core/src/machines/cc800.rs:38, source crates/wqxemu-core/src/machines/cc800.rs:229-251"
|
|
|
|
- name: cc800.fls
|
|
path: wqxemu/cc800/cc800.fls
|
|
system: wenquxing-cc800
|
|
required: true
|
|
min_size: 524288
|
|
validation: [size]
|
|
description: "CC800 NOR flash, 16 banks of 32 KiB"
|
|
note: >-
|
|
Read whole from {system}/wqxemu/cc800/cc800.fls. The image must be
|
|
at least 0x80000 bytes or the loader fails. Only the first 512 KiB
|
|
is used, with the same 16 KiB half swap as the ROM.
|
|
source_ref: "source crates/wqxemu-core/src/machine.rs:76-84, source crates/wqxemu-core/src/machine.rs:178-183, source crates/wqxemu-core/src/machines/cc800.rs:40, source crates/wqxemu-core/src/machines/cc800.rs:252-267"
|
|
|
|
- name: nc2000.nor
|
|
path: wqxemu/nc2000/nc2000.nor
|
|
system: wenquxing-nc2000
|
|
required: true
|
|
min_size: 524288
|
|
validation: [size]
|
|
description: "NC2000 NOR flash, 16 banks of 32 KiB"
|
|
note: >-
|
|
Read whole from {system}/wqxemu/nc2000/nc2000.nor in physical
|
|
order, no bank swap. The image must be at least 16 * 0x8000 bytes or the
|
|
loader fails. Only the first 512 KiB is used. Bank 0 is the fixed
|
|
BIOS page at 0xE000.
|
|
source_ref: "source crates/wqxemu-core/src/machine.rs:76-84, source crates/wqxemu-core/src/machine.rs:184-188, source crates/wqxemu-core/src/machines/nc2000.rs:20, source crates/wqxemu-core/src/machines/nc2000.rs:28, source crates/wqxemu-core/src/machines/nc2000.rs:265-277"
|
|
|
|
- name: nc2000.nand
|
|
path: wqxemu/nc2000/nc2000.nand
|
|
system: wenquxing-nc2000
|
|
required: true
|
|
size: 34603008
|
|
description: "NC2000 NAND flash main area, 65536 pages of 528 bytes"
|
|
note: >-
|
|
Read whole from {system}/wqxemu/nc2000/nc2000.nand and copied after
|
|
the 64-page first plane, up to 65536 pages of 512 data plus 16
|
|
spare bytes. No size check: bytes beyond that are ignored and a
|
|
shorter file leaves the remainder erased at 0xFF.
|
|
source_ref: "source crates/wqxemu-core/src/machine.rs:184-188, source crates/wqxemu-core/src/machines/nc2000.rs:22-26, source crates/wqxemu-core/src/machines/nc2000.rs:278-282, source crates/wqxemu-core/src/machines/nc2000.rs:292-296"
|
|
|
|
- name: nc2000.nand0
|
|
path: wqxemu/nc2000/nc2000.nand0
|
|
system: wenquxing-nc2000
|
|
required: true
|
|
size: 33792
|
|
description: "NC2000 NAND flash first plane, 64 pages of 528 bytes"
|
|
note: >-
|
|
Read whole from {system}/wqxemu/nc2000/nc2000.nand0 into the first
|
|
64 pages of the NAND array. No size check. The firmware set of this
|
|
model requires it in both frontends, so a missing file stops the
|
|
start.
|
|
source_ref: "source crates/wqxemu-core/src/machine.rs:184-188, source crates/wqxemu-core/src/machines/nc2000.rs:24, source crates/wqxemu-core/src/machines/nc2000.rs:283-288, source crates/wqxemu-core/src/machines/nc2000.rs:298-301"
|
|
|
|
- name: nc3000.nor
|
|
path: wqxemu/nc3000/nc3000.nor
|
|
system: wenquxing-nc3000
|
|
required: true
|
|
min_size: 1048576
|
|
validation: [size]
|
|
description: "NC3000 NOR flash, 32 banks of 32 KiB"
|
|
note: >-
|
|
Read whole from {system}/wqxemu/nc3000/nc3000.nor in physical
|
|
order, no bank swap. The image must be at least 32 * 0x8000 bytes or the
|
|
loader fails. Only the first 1 MiB is used. Bank 0 is the fixed
|
|
BIOS page at 0xE000.
|
|
source_ref: "source crates/wqxemu-core/src/machine.rs:76-84, source crates/wqxemu-core/src/machine.rs:189-193, source crates/wqxemu-core/src/machines/nc3000.rs:23, source crates/wqxemu-core/src/machines/nc3000.rs:33, source crates/wqxemu-core/src/machines/nc3000.rs:272-284"
|
|
|
|
- name: nc3000.nand
|
|
path: wqxemu/nc3000/nc3000.nand
|
|
system: wenquxing-nc3000
|
|
required: true
|
|
size: 69206016
|
|
storage: large_file
|
|
description: "NC3000 NAND flash, two planes of 65536 pages of 528 bytes"
|
|
note: >-
|
|
Read whole from {system}/wqxemu/nc3000/nc3000.nand and copied after
|
|
the 64-page first plane, up to 131072 pages of 512 data plus 16
|
|
spare bytes. No size check: bytes beyond that are ignored and a
|
|
shorter file leaves the remainder erased at 0xFF.
|
|
source_ref: "source crates/wqxemu-core/src/machine.rs:189-193, source crates/wqxemu-core/src/machines/nc3000.rs:25-29, source crates/wqxemu-core/src/machines/nc3000.rs:285-289, source crates/wqxemu-core/src/machines/nc3000.rs:336-340"
|
|
|
|
- name: nc3000.nand0
|
|
path: wqxemu/nc3000/nc3000.nand0
|
|
system: wenquxing-nc3000
|
|
required: false
|
|
size: 33792
|
|
description: "NC3000 NAND flash first plane, 64 pages of 528 bytes"
|
|
note: >-
|
|
Read whole from {system}/wqxemu/nc3000/nc3000.nand0 into the first
|
|
64 pages of the NAND array when the file exists. The firmware set of
|
|
this model does not require it. Without it the core writes the
|
|
marker "ggv nc3000" at offset 528 of an erased first plane and the
|
|
machine boots the same way.
|
|
source_ref: "source crates/wqxemu-core/src/machine.rs:189-193, source crates/wqxemu-core/src/machines/nc3000.rs:27-31, source crates/wqxemu-core/src/machines/nc3000.rs:290-297, source crates/wqxemu-core/src/machines/nc3000.rs:342-350"
|