An emulator for the PC-8001, PC-8801, PC-88VA, PC-9801 and PC-9821 written in Rust.
Neetan emulates three distinct families, selected through the --machine option:
- PC-9801 / PC-9821 line (six idealized targets).
- PC-8001 / PC-8801 line (one idealized target).
- PC-88VA line (one idealized target).
We aim to support all 16-bit era DOS games and emulate them accurately for 6 idealized machine targets:
| Machine | CPU | CPU Speed | FPU (x87) | Extended RAM | Graphics | Interface | CD-ROM |
|---|---|---|---|---|---|---|---|
| PC-9801F | 8086 | 5 / 8 MHz | No | None | GDC | SASI | No |
| PC-9801VM | V30 | 8 / 10 MHz | No | None | GRCG | SASI | No |
| PC-9801VX | 80286 | 8 / 10 MHz | No | 4 MiB | EGC | SASI | No |
| PC-9801RA | 80386DX | 16 / 20 MHz | Yes | 12 MiB | EGC | SASI | No |
| PC-9821AS | 80486DX | 33 MHz | Yes | 14 MiB | PEGC | IDE | Yes |
| PC-9821AP | 80486DX2 | 66 MHz | Yes | 14 MiB | PEGC | IDE | Yes |
All targets have the full 640 KiB conventional RAM. The 8086 and V30 are cycle-count accurately emulated. The emulated 286 is calibrated to run at the same speed as the original 286 using trace data. The 386 and the 486 are optimized for emulation speed and most likely run a bit fast compared to their real counterparts.
The default for the CLI is the PC-9801RA machine with the PC-9801-86 + PC-9801-26k combo soundboards. See PC-9801 / PC-9821 systems for the sound cards and platform-specific options.
Games of the PC-98 normally do not require any ROM files, with the rare exception of games that used the PC-98's N88 (86) BASIC ROM.
Neetan emulates a single PC-8801 target, the PC-8801MC. Through its --boot-mode
setting (the equivalent of the machine's DIP switches) it also takes on the
personalities of the earlier PC-8001 family. Unlike the PC-98 line, the PC-8801MC
requires a real ROM set supplied via --pc88-roms, since of the deep integration
of the NEC BASIC variants (N, N80, N80 SR and N88).
See PC-8001 / PC-8801 systems for the boot modes, their hardware mapping and compatibility caveats, the ROM set, and platform-specific options.
Neetan emulates a single PC-88VA target, the PC-88VA2: an NEC V30 running at roughly
8 MHz with 512 KiB of main RAM, a built-in OPNA, and a custom graphics chipset with
the Super Graphic Processor (SGP) blitter. A Z80 sub-CPU at 4 MHz drives the floppy
unit. Like the PC-8801MC it has no HLE firmware and requires a real ROM set,
supplied via --pc88va-roms.
See PC-88VA systems for the ROM set and platform-specific options.
neetan [OPTIONS]
neetan <COMMAND>The System column shows where an option applies: All (every family), PC-98
(PC-9801 / PC-9821 only), PC-9821 (PC-9821 only), PC-88 (PC-8001 / PC-8801
only), or PC-88VA (PC-88VA only). Options that apply to one family are ignored on
the others.
| Option | System | Description | Default |
|---|---|---|---|
-c, --config <PATH> |
All | Load configuration from file | - |
--machine <TYPE> |
All | PC9801F, PC9801VM, PC9801VX, PC9801RA, PC9821AS, PC9821AP, PC8801MC, PC88VA2 |
PC9801RA |
--cpu-mode <MODE> |
All | CPU speed mode: low or high (PC-88 default derives from the boot mode) |
high (PC-98) |
--boot-mode <MODE> |
PC-88 | BASIC boot mode: v1s, v1h, v2, n, n80, n80sr |
v2 |
--pc88-monitor <MODE> |
PC-88 | Monitor timing: auto, 15k, 24k |
auto |
--pc88-memory-wait <MODE> |
PC-88 | Memory wait: fast or compatible |
derives from mode |
--pc88-8mhz-wait <MODE> |
PC-88 | 8 MHz wait: fast or compatible |
fast |
--pc88-roms <PATH> |
PC-88 | Directory with the PC-8801MC ROM set (required for PC8801MC) |
- |
--pc88va-roms <PATH> |
PC-88VA | Directory with the PC-88VA2 ROM set (required for PC88VA2) |
- |
--fdd1 <PATH> |
All | Floppy disk image for drive 1 (repeatable) | - |
--fdd2 <PATH> |
All | Floppy disk image for drive 2 (repeatable) | - |
--hdd1 <PATH> |
All | Hard disk image for hard disk drive 1 | - |
--hdd2 <PATH> |
All | Hard disk image for hard disk drive 2 | - |
--cdrom <PATH> |
PC-9821 | CD-ROM disc image .cue or .ccd file (repeatable) | - |
--audio-volume <FLOAT> |
All | Audio volume 0.0-1.0 | 1.0 |
--aspect-mode <MODE> |
All | Display aspect mode: 4:3 or 1:1 |
4:3 |
--crt <on|off> |
All | Enable the CRT effect. Not available when using the legacy backend. | on |
--scaling <MODE> |
All | Scaling method: nearest, bilinear, pixelart |
pixelart |
--backend <BACKEND> |
All | Rendering backend: modern or legacy |
modern |
--window-mode <MODE> |
All | Window mode: windowed or fullscreen |
windowed |
--force-gdc-clock <2.5|5> |
PC-98 | Force GDC clock to 2.5 or 5 MHz. VX and later only | auto |
--graphicboard <TYPE> |
PC-98 | Graphics accelerator board: none, ga1280a |
none |
--bios-rom <PATH> |
PC-98 | Path to BIOS ROM file | HLE BIOS |
--font-rom <PATH> |
PC-98 | Path to font ROM file | Built-in |
--soundboard <TYPE> |
PC-98 | Sound board: none, 14, 26k, 86, 86+26k, sb16, sb16+26k |
86+26k |
--adpcm-ram <on|off> |
PC-98 | ADPCM RAM option for the PC-9801-86 | on |
--ems <on|off> |
PC-98 | Enable EMS expanded memory | on |
--xms <on|off> |
PC-98 | Enable XMS extended memory | on |
--midi <DEVICE> |
PC-98 | MIDI device: none, mt32, sc55 |
none |
--mt32-roms <PATH> |
PC-98 | Path to MT-32 ROM directory (requires mt32 feature) |
- |
--sc55-roms <PATH> |
PC-98 | Path to SC-55 ROM directory (requires sc55 feature) |
- |
--boot-device <DEVICE> |
All | Boot device: auto, fdd1, fdd2, hdd1, hdd2, dos |
auto |
--printer <PATH> |
All | Output file for printer (must exist) | - |
--enable-extractor |
All | Copy on-screen Japanese text to the system clipboard, one line at a time | off |
-h, --help |
All | Print help | - |
-V, --version |
All | Print version | - |
create-fdd <PATH> [OPTIONS] - Create an empty floppy disk image (D88 format).
| Option | Description | Default |
|---|---|---|
--type <TYPE> |
2hd (1232 KB), 2dd (640 KB) or 2d (320 KB) |
2hd |
create-hdd <PATH> [OPTIONS] - Create an empty hard disk image (HDI format).
| Option | Description |
|---|---|
--type <TYPE> |
SASI: sasi5, sasi10, sasi15, sasi20, sasi30, sasi40. IDE: ide40, ide80, ide120, ide200, ide500 |
convert-hdd <INPUT> <OUTPUT> - Convert a hard disk image between SASI and IDE formats.
The conversion direction is auto-detected from the input image's sector size (256 bytes = SASI, 512 bytes = IDE). The smallest compatible target geometry is chosen automatically. Output is always in HDI format.
SASI to IDE conversion always succeeds (all SASI sizes fit within ide40). IDE to SASI conversion will fail if the IDE image exceeds the largest SASI capacity (sasi40 at ~40 MB).
Select a PC-98 machine with --machine; the default is PC9801RA. See the
PC-9801 / PC-9821 table above for the per-target hardware
summary.
We support the following sound cards via --soundboard:
- PC beeper
- PC-9801-14 Music Generator (TMS3631 8-channel synth)
- PC-9801-26k
- PC-9801-86
- PC-9801-86 + PC-9801-26k combo
- Sound Blaster 16
- Sound Blaster 16 + PC-9801-26k combo
- Roland MT-32 using the MPU-PC98II interface
- Roland SC-55 using the MPU-PC98II interface
The MT-32 and SC-55 modules are configured separately via --midi; see
MIDI sound modules.
| Option | Description | Default |
|---|---|---|
--soundboard <TYPE> |
Sound board: none, 14, 26k, 86, 86+26k, sb16, sb16+26k |
86+26k |
--adpcm-ram <on|off> |
ADPCM RAM option for the PC-9801-86 | on |
--ems <on|off> |
Enable EMS expanded memory | on |
--xms <on|off> |
Enable XMS extended memory | on |
--force-gdc-clock <2.5|5> |
Force GDC clock to 2.5 or 5 MHz (VX and later only) | auto |
--graphicboard <TYPE> |
Graphics accelerator board: none, ga1280a |
none |
--bios-rom <PATH> |
Path to BIOS ROM file | HLE BIOS |
--font-rom <PATH> |
Path to font ROM file | Built-in |
CD-ROM disc images (--cdrom) are supported on the PC-9821 targets only.
neetan can emulate the I-O DATA GA-1280A graphics accelerator board, the high-end variant to the GA-1024A. All GA-1024A software is compatible with the GA-1280A.
The board is primarily useful for Windows 3.1, where it unlocks higher resolutions than the stock EGC/PEGC video paths (up to 1600x1024 pixel).
Enable it on the CLI with --graphicboard ga1280a, or in a configuration file
with graphicboard = ga1280a. The default is none.
Official I-O DATA drivers for MS-DOS, Windows 3.1, and Windows 95 are still available from the manufacturer: https://www.iodata.jp/lib/software/g/106.htm#MS-DOS
Select the PC-88 family with --machine PC8801MC. The emulated machine is always
the PC-8801MC; the --boot-mode option chooses which BASIC personality it powers up
with, which is how the earlier PC-8001 family is emulated. Unlike the PC-98 targets,
the PC-8801MC has no HLE firmware and requires a real ROM set (see
ROM set).
Sound is provided by the machine's built-in OPNA (Sound Board II, which should be fully compatible to the Sound Board I).
The boot mode is selected with --boot-mode and defaults to v2. The v1s, v1h
and v2 modes are the PC-8801's own modes; the n, n80 and n80sr
modes emulate the three generations of the PC-8001 line:
--boot-mode |
Alias | BASIC dialect | Emulated machine |
|---|---|---|---|
v1s |
- | N88-BASIC V1 (standard speed) | PC-8801 |
v1h |
- | N88-BASIC V1 (high speed) | PC-8801 |
v2 |
- | N88-BASIC V2 (default) | PC-8801 |
n |
- | N-BASIC | PC-8001 |
n80 |
n80v1 |
N80-BASIC | PC-8001mkII |
n80sr |
n80v2 |
N80SR-BASIC | PC-8001mkIISR |
The three N-family modes correspond to three different generations of real hardware:
n- the original PC-8001 (1979) running plain N-BASIC.n80- the PC-8001mkII (1983) running N80-BASIC.n80sr- the PC-8001mkIISR (1985) running N80SR-BASIC.
While each generation broadly builds on the previous one, they are not a clean superset chain and are not fully compatible with each other. Pick the boot mode that matches the machine the software was written for.
The PC-8801 modes (v1s, v1h, v2) are a separate modes again and are
not compatible with the N-family modes. The vast majority of PC-88 games will
target the v2 mode, which is the default config value.
| Option | Description | Default |
|---|---|---|
--boot-mode <MODE> |
Boot mode: v1s, v1h, v2, n, n80, n80sr |
v2 |
--pc88-roms <PATH> |
Directory with the PC-8801MC ROM set (required) | - |
--pc88-monitor <MODE> |
Monitor timing: auto, 15k (200-line), 24k (400-line) |
auto |
--pc88-memory-wait <MODE> |
Memory wait states: fast or compatible |
derives from mode |
--pc88-8mhz-wait <MODE> |
8 MHz wait mode: fast or compatible |
fast |
--cpu-mode <MODE> |
CPU speed: low or high |
derives from mode |
The defaults of --cpu-mode and --pc88-memory-wait derive from the boot mode: the
v1s and N-family modes (n, n80, n80sr) default to the slower, compatible
behavior of the machines they emulate, while v1h and v2 keep the fast defaults.
Pass the flags explicitly to override.
The PC-8801MC needs a real ROM set, pointed to by --pc88-roms. ROMs are identified
by their BLAKE3 content hash rather than by file name, so any dump layout works
regardless of how the files are named.
These ROMs are always required:
| Slot | Size | Contents | BLAKE3 |
|---|---|---|---|
n88 |
32 KiB | N88-BASIC main ROM | 40457b507b82dd57cce0fcecf6bc65543a60bd46558ca947b0f69dd3658cdad8 |
n88_ext0 |
8 KiB | N88-BASIC extension bank 0 | 6a50a88231062ec871c65f63266fa7062a303ab870aed81c49f1f333f594a518 |
n88_ext1 |
8 KiB | N88-BASIC extension bank 1 | d5583fcce4eabf078d17666a1fddefa6a0d8bdc7f56d4499d526818728777252 |
n88_ext2 |
8 KiB | N88-BASIC extension bank 2 | ca200799765cb02a001bd55215b0daaf6d0593118a05e8d85754bddd92e5e8f7 |
n88_ext3 |
8 KiB | N88-BASIC extension bank 3 | ac31c1fbabfada9890669bebd471d60fac0be0e88ddfde81f17c600d5b0a1757 |
n_basic |
32 KiB | N-BASIC ROM (PC-8001, 1979) | 652eacc1ed6073bc3da1856c9c4f74ac14abef3f966f0d0fc89c40386de3d1a1 |
jisyo |
512 KiB | Kanji dictionary ROM | 283dcd1c4a69f8049d19021d34d1cc2094f10de8b4e1ddf85da6a4b258dd8d12 |
kanji1 |
128 KiB | Level-1 kanji ROM | 10fd26424ae9e28be721846491d2d7b10e946da2d2ff39542248e819bc2339ba |
kanji2 |
128 KiB | Level-2 kanji ROM | f528e78bbe43e3d36c3def6ef30140e22ba9e69f422736605c2c4570c7d3fbe7 |
disk |
8 KiB | PC80S31K disk sub-CPU ROM | 081d2ca8ad7066de207b7360e45b5d6f3bab01769aefb9057141becbbaec5aa5 |
cdbios |
64 KiB | PC-8801-31 CD-ROM interface BIOS | de4d49437344806850b22356f9e5537e413e6113902fb8fbc803f902a5728827 |
These ROMs are required only when the matching boot mode is selected:
| Slot | Size | Required by boot mode | BLAKE3 |
|---|---|---|---|
n80_mkii |
32 KiB | n80 |
9e4ec9c53f4432a88583dccd04ae3186f4d7849f80ea7774ac1efbdb93c992f2 |
n80_mkiisr |
32 KiB | n80sr |
56406a79fd664a197c458cb3feeeb6994c34266a1e02728877b6ea5ef86e15ba |
n80sr |
40 KiB | n80sr |
7b81e27b831ad00f264170d1d98c645298fa688b07d5a9f0c19c1d6a73fe4273 |
Select the PC-88VA family with --machine PC88VA2. The emulated machine is the
PC-88VA2: an NEC V30 at roughly 8 MHz with 512 KiB of main RAM and a Z80 sub-CPU at
4 MHz for the floppy unit. Sound is provided by the machine's built-in OPNA.
Only the V3 graphic mode is emulated. This target is not backwards compatible with the PC-8801 software. The original could run V1 and V2 BASIC games, since it's CPU had an integrated Z80. We don't implement th hybrid nature and if you need to run PC-8801 games, then please use the PC-8801MC target.
Like the PC-8801MC, it has no HLE firmware and requires a real ROM set (see ROM set).
| Option | Description | Default |
|---|---|---|
--pc88va-roms <PATH> |
Directory with the PC-88VA2 ROM set (required) | - |
The PC-88VA2 needs a real ROM set, pointed to by --pc88va-roms. ROMs are identified by their
BLAKE3 content hash rather than by file name, so any dump layout works regardless of how the
files are named. All slots are required:
| Slot | Size | Contents | BLAKE3 |
|---|---|---|---|
rom00 |
512 KiB | ROM0 low image (varom00) | bba5011412fb266b3c15ff08d2508716ba2ac54fec3aa172b59e441486807eab |
rom08 |
128 KiB | ROM0 high image (varom08) | 4cdf3da9a1423e874f9618a8d8859107fa5e3d20a91f4dcf908e042763c41bbb |
rom1 |
128 KiB | ROM1 image (varom1) | 1239bf390d444ff205f70c700527cb50bc90107904050fa8713a415a17bf0e42 |
font |
320 KiB | Kanji / font ROM | b47ec9f55ff199ac71f453385aec0f370afbb958fd47ad9bb5161bdf4e2bb3ee |
dictionary |
512 KiB | Dictionary (jisyo) ROM | 21fcd88c97b881e55f015f22d62002022189572e171f1c5e485b751c84379b30 |
subsys |
8 KiB | Floppy sub-CPU (Z80) ROM | 531ab2aa2c7d7c4deb2ddd8303c6637ea7e273648825fb51e17c8660d7496565 |
Instead of passing all options on the command line, you can use a configuration file with -c:
neetan -c my_game.cfgThe file uses a simple key = value format. Lines starting with # or ; are comments.
See configuration/default.conf for a complete reference with all
options and their defaults.
# Example configuration
machine = PC9801RA
soundboard = 86+26k
force-gdc-clock = 2.5
audio-volume = 0.8
aspect-mode = 4:3
crt = on
scaling = pixelart
fdd1 = /path/to/disk_a.d88
fdd1 = /path/to/disk_b.d88
fdd2 = /path/to/save_game.d88
hdd1 = /path/to/harddrive.hdi
cdrom = /path/to/game.cue
midi = mt32
mt32-roms = /path/to/mt32_romsCommand-line arguments override values from the configuration file.
neetan automatically loads a global configuration file from the OS data directory if it exists.
This is useful for setting persistent defaults like your preferred machine type, sound card, or keyboard mapping
without needing to pass --config or CLI flags every time.
The global config file uses the same key = value format as regular configuration files.
| OS | Path |
|---|---|
| Linux | ~/.local/share/neetan/neetan/global.conf |
| Windows | C:\Users\<user>\AppData\Roaming\neetan\neetan\global.conf |
| macOS | ~/Library/Application Support/neetan/neetan/global.conf |
The directory is created automatically. The configuration file must be created manually.
Settings are applied in this order, with later layers overriding earlier ones:
- Built-in defaults
- Global configuration file (
global.confin OS data directory) - Per-invocation configuration file (
--config) - Command-line arguments
For example, if your global config sets machine = PC9801RA and you run
neetan --config game.cfg --soundboard sb16, the machine will be PC9801RA
(from global config) unless game.cfg or CLI args override it.
| Key | Action |
|---|---|
| Right Ctrl | Toggle mouse capture |
| GUI + Alt + Enter | Toggle fullscreen |
| GUI + Alt + Escape | Quit the emulator |
| GUI + Alt + F1 | Toggle CRT effect |
| GUI + Alt + F2 | Cycle scaling method |
| GUI + Alt + F9 | Open floppy selector for drive 1 |
| GUI + Alt + F10 | Open floppy selector for drive 2 |
| GUI + Alt + F11 | Open CD-ROM selector |
| GUI + Alt + F12 | Log HLE DOS memory overview |
(GUI is the Windows / Command key)
You can remap keys in the configuration file using key.<HostKey> = <PC-98 Key> entries.
See configuration/default.conf for a complete reference of all
available host key names, PC-98 key names, and the default mappings.
| Format | Extensions | Writable | Description |
|---|---|---|---|
| D88 | .d88, .d98, .88d, .98d |
Yes | Standard PC-98 disk image with per-sector metadata |
| HDM | .hdm |
No | Headerless raw sector image (2HD only) |
| NFD | .nfd |
No | T98Next format with per-sector metadata |
Only D88 images preserve modifications written by the emulated software. HDM and NFD images are currently read-only.
CD-ROM discs apply to the PC-8801 and PC-9821 targets.
| Format | Extensions | Description |
|---|---|---|
| CUE/BIN | .cue |
CUE sheet referencing a raw BIN image |
| CloneCD | .ccd |
CloneCD control file with sibling .img (raw 2352-byte sectors) and optional .sub subchannel data |
Many games ship on multiple floppy disks and ask you to swap disks during gameplay. Some CD-ROM games also come as multiple disc images. neetan handles this by letting you assign several disk images to each drive up front, then swap between them at runtime.
Use the --fdd1 / --fdd2 / --cdrom flags more than once to register all images for a drive:
neetan --fdd1 floppy_disk1.d88 --fdd1 floppy_disk2.d88 --fdd1 floppy_disk3.d88
neetan --cdrom disc1.cue --cdrom disc2.cueOr equivalently in a configuration file:
fdd1 = floppy_disk1.d88
fdd1 = floppy_disk2.d88
fdd1 = floppy_disk3.d88
cdrom = disc1.cue
cdrom = disc2.cueThe first image in each list is automatically inserted at startup.
Press GUI + Alt + F9 (drive 1), GUI + Alt + F10 (drive 2), or GUI + Alt + F11 (CD-ROM)
to open the image selector and swap disks at runtime.
neetan can emulate MIDI sound modules connected via the MPU-PC98II interface. Two modules are supported:
- Roland MT-32 - using a Rust port of munt
- Roland SC-55 - using a Rust port of Nuked-SC55
Both features are optional, but enabled by default and require external ROM files to work.
The munt code is licensed under LGPL 2.1, and the Nuked-SC55 code is licensed under the original MAME license (non-commercial use only). See the License section for details. Distributions that cannot comply with these licenses can disable one or both at build time:
cargo build --release --no-default-features # neither
cargo build --release --no-default-features --features mt32 # MT-32 only
cargo build --release --no-default-features --features sc55 # SC-55 onlyWhen built without a feature, the corresponding --midi option is still accepted but the
emulator will print a warning and continue without audio for that module.
Place your MT-32 ROM files (.rom extension) into a single directory and point --mt32-roms
at it. The emulator identifies ROMs by BLAKE3 hash, so filenames do not matter. You need one
control ROM and one PCM ROM. Split ROM pairs (two halves) are also supported and merged
automatically.
| Model | Control ROM versions |
|---|---|
| MT-32 | v1.04, v1.05, v1.06, v1.07, BlueRidge |
| MT-32 (new / "old" v2) | v2.04, v2.06, v2.07 |
| CM-32L / LAPC-I | v1.00, v1.02 |
| CM-32LN / CM-500 / LAPC-N | v1.00 |
It seems that currently the control ROM version v1.04, v1.05, v1.06 and v1.07 of the MT-32 have the best compatibility.
Place the ROM files for your device model into a single directory and point --sc55-roms at it.
The emulator auto-detects the model from the filenames present.
| Model | Required files |
|---|---|
| SC-55mk2 / SC-155mk2 | rom1.bin, rom2.bin, rom_sm.bin, waverom1.bin, waverom2.bin |
| SC-55st | rom1.bin, rom2_st.bin, rom_sm.bin, waverom1.bin, waverom2.bin |
| SC-55 (mk1) | sc55_rom1.bin, sc55_rom2.bin, sc55_waverom1.bin, sc55_waverom2.bin, sc55_waverom3.bin |
| CM-300 / SCC-1 / SCC-1A | cm300_rom1.bin, cm300_rom2.bin, cm300_waverom1.bin, cm300_waverom2.bin, cm300_waverom3.bin |
| JV-880 | jv880_rom1.bin, jv880_rom2.bin, jv880_waverom1.bin, jv880_waverom2.bin |
| SCB-55 / RLP-3194 | scb55_rom1.bin, scb55_rom2.bin, scb55_waverom1.bin, scb55_waverom2.bin |
| RLP-3237 | rlp3237_rom1.bin, rlp3237_rom2.bin, rlp3237_waverom1.bin |
| SC-155 | sc155_rom1.bin, sc155_rom2.bin, sc155_waverom1.bin, sc155_waverom2.bin, sc155_waverom3.bin |
Set the MIDI device and provide the path to the ROM directory:
neetan --midi mt32 --mt32-roms /path/to/mt32_roms [other options...]
neetan --midi sc55 --sc55-roms /path/to/sc55_roms [other options...]Or in a configuration file:
midi = mt32
mt32-roms = /path/to/mt32_romsmidi = sc55
sc55-roms = /path/to/sc55_romsBoth ROM paths can be set in the global configuration file so they only need to be specified once.
MIDI emulation is only activated when both the --midi device and the corresponding ROM path are
set, so you can keep ROM paths in your global config and toggle per-game by changing only --midi.
When started with --enable-extractor (or enable-extractor = on in a
configuration file), Neetan observes glyph fetches from the CGROM and
copies on-screen text to the system clipboard, one completed line at a time.
This is intended for use with external machine-translation tools such as
Textractor, Translator++, or other translation tools that watch
the clipboard.
Limitations:
- Only supported by the PC-98 targets only.
- This covers games that render text by reading the CGROM (visual novels and similar engines). Titles that draw text solely from the text VRAM (most DOS prompts and menus) are not captured yet.
- Characters that the JIS-to-Unicode conversion cannot map (custom user-defined glyphs, etc.) are silently dropped.
It depends on the emulated family:
- PC-9801 / PC-9821: none. If you have the correct ROM files you CAN use them, but there is no particular reason to, since our HLE BIOS has very good compatibility. We also include a self-created open source font ROM and provide the tools to re-create / change it. With these systems in place we can run the vast majority of PC-98 games and applications. There are some BIOS extensions, mainly the sound API and LIO API that we currently haven't implemented, but outside some odd BASIC-based games they should not be used by titles that interface with the hardware I/O ports directly.
- PC-8001 / PC-8801: a full ROM set is required and must be supplied via
--pc88-roms. The ROMs are matched by content hash, so file names do not matter; see ROM set for the list of required ROMs and the extra ROMs that then80/n80srboot modes need. - PC-88VA: a full ROM set is required and must be supplied via
--pc88va-roms. The ROMs are matched by content hash, so file names do not matter; see ROM set for the list of required ROMs.
The optional MT-32 and SC-55 MIDI modules, also need ROM files to function correctly, as described in the MIDI sound modules section.
In games that support a mouse, you first need to capture the mouse pointer via the right CTRL key. You can release the mouse pointer by clicking the right CTRL key again.
もちろん!IssueやPRの作成には日本語をご利用いただけますが、ソースコードのコメントについては英語での記述を推奨しております。
- Rust 1.95
- SDL3 (See sdl3_sys descriptio)
Following projects provided references for our implementation and test vectors. They were invaluable for developing neetan:
We ported the Yamaha OPN and OPL emulation from the amazing YMFM project to our own Rust port:
We ported the Roland SC-55 emulator from the incredible Nuked SC55 project to our own Rust port:
We ported the Roland MT-32 emulator from the outstanding munt project to our own Rust port:
AI agents MUST NOT add Signed-off-by tags. Only humans can legally certify the origin of the source code. AI agents are only tools and do not absolve the human submitter of their responsibility:
- Reviewing all AI-generated code
- Ensuring compliance with licensing requirements
- Taking full responsibility for the contribution
An Assisted-by tag MUST NOT be added, since that information is irrelevant to the contribution of the human
contributor.
This project is licensed under the 3-clause BSD license.
When optional features are enabled, the license terms of the resulting binary change:
| Build configuration | Binary license |
|---|---|
| Default (no optional features) | BSD 3-Clause |
sc55 feature enabled |
BSD 3-Clause + non-commercial |
mt32 feature enabled |
LGPL 2.1 |
sc55 + mt32 enabled |
LGPL 2.1 + non-commercial |
The sc55 feature links the Nuked-SC55 port, which is licensed under the original MAME license
(non-commercial use only). The mt32 feature links the munt port, which is licensed under
LGPL 2.1.
The source code of the BSD 3-Clause licensed components remains available under BSD 3-Clause regardless of the build configuration.