diff --git a/emulators/quasi88kai.yml b/emulators/quasi88kai.yml new file mode 100644 index 00000000..2f6fa558 --- /dev/null +++ b/emulators/quasi88kai.yml @@ -0,0 +1,241 @@ +emulator: "QUASI88kai" +type: standalone +core_classification: enhanced_fork +source: "https://github.com/winterheart/quasi88" +profiled_date: "2026-10-20" +source_commit: "0d4e171415cad7ac19ae4ff0dcf8cdcfd825947b" +core_version: "0.7.1" +display_name: "NEC - PC-8800 series (QUASI88kai)" +mode: standalone +cores: [] +systems: + - nec-pc-88 + - nec-pc-80 + +notes: | + Continuation of Showzoh Fukunaga's QUASI88, version 0.7.1 at the pinned + commit (CMakeLists.txt:3). It reads every ROM, the OPNA rhythm samples and + the floppy drive sound samples from one ROM directory. + + The ROM directory is $QUASI88_ROM_DIR when set, else the rom folder under the + QUASI88 home (src/file-op.cpp:444-464,521). The home is the working + directory when it holds quasi88.ini, else $HOME/.quasi88 (src/file-op.cpp: + 494-516). The -romdir option replaces it (src/getconf.cpp:282-290,529). The + CMake ROMDIR setting becomes the ROM_DIR macro (CMakeLists.txt:31,38), which + only fills the help text (src/help.h:214) and does not move the search. + Paths below are relative to the QUASI88 home. + + load_rom tries each name of an entry in order inside the ROM directory and + stops at the first that opens (src/memory.cpp:175-219). A missing ROM is + filled with 0xFF, and a short one is padded with 0xFF, so the emulator starts + with any ROM missing. The machine model comes from byte 0x79D7 of N88.ROM + (src/memory.h:44, src/memory.cpp:503), and BASIC_AUTO, the default, boots V2 + when that byte is "4" or higher and V1S otherwise (src/initval.h:53, + src/pc88main.cpp:2755-2761). + + -compatrom FILE loads every main and sub ROM from one P88SR.EXE image + instead of the separate files (src/getconf.cpp:535, src/memory.cpp:341-369). + There is no default name. + + With -samples (off by default, src/snddrv/quasi88/mame-quasi88.cpp:506-510, + src/snddrv/quasi88/SDL/audio.cpp:91-94) the drive sounds motoron.wav, + motoroff.wav, headdown.wav, headup.wav and seek.wav are read from the ROM + directory (src/snddrv/quasi88/mame-quasi88.cpp:101-108,1085-1127). Any mono + WAV is accepted (src/snddrv/quasi88/mame-quasi88.cpp:92). QUASI88 names no + particular recording. + +files: + - name: "N88.ROM" + system: nec-pc-88 + path: "rom/N88.ROM" + aliases: ["n88.rom"] + required: true + size: 32768 + source_ref: "src/memory.cpp:87-88,317" + note: > + N88-BASIC main ROM, read into main_rom (0x8000 bytes). Without it the + Z80 runs from 0xFF filled memory and nothing boots. Its byte 0x79D7 + selects the machine model. + + - name: "N88EXT0.ROM" + system: nec-pc-88 + path: "rom/N88EXT0.ROM" + aliases: ["n88ext0.rom", "N88_0.ROM", "n88_0.rom"] + required: true + size: 8192 + source_ref: "src/memory.cpp:89,318, src/pc88main.cpp:268-274" + note: > + N88-BASIC extension ROM bank 0, mapped at 0x6000-0x7FFF when port 0x71 + selects the extension ROM. Bank 0 holds the N88-BASIC V2 code that + BASIC_AUTO boots on SR and later models. + + - name: "N88EXT1.ROM" + system: nec-pc-88 + path: "rom/N88EXT1.ROM" + aliases: ["n88ext1.rom", "N88_1.ROM", "n88_1.rom"] + required: false + size: 8192 + source_ref: "src/memory.cpp:90,319" + note: "N88-BASIC extension ROM bank 1, mapped at 0x6000-0x7FFF when selected." + + - name: "N88EXT2.ROM" + system: nec-pc-88 + path: "rom/N88EXT2.ROM" + aliases: ["n88ext2.rom", "N88_2.ROM", "n88_2.rom"] + required: false + size: 8192 + source_ref: "src/memory.cpp:91,320" + note: "N88-BASIC extension ROM bank 2, mapped at 0x6000-0x7FFF when selected." + + - name: "N88EXT3.ROM" + system: nec-pc-88 + path: "rom/N88EXT3.ROM" + aliases: ["n88ext3.rom", "N88_3.ROM", "n88_3.rom"] + required: false + size: 8192 + source_ref: "src/memory.cpp:92,321" + note: "N88-BASIC extension ROM bank 3, mapped at 0x6000-0x7FFF when selected." + + - name: "N88N.ROM" + system: nec-pc-80 + path: "rom/N88N.ROM" + aliases: ["n88n.rom", "N80.ROM", "n80.rom"] + required: false + size: 32768 + source_ref: "src/memory.cpp:93,322, src/pc88main.cpp:264-266" + note: > + N-BASIC ROM, mapped at 0x0000-0x7FFF in N mode, the PC-8001 compatible + mode. + + - name: "N88SUB.ROM" + system: nec-pc-88 + path: "rom/N88SUB.ROM" + aliases: ["n88sub.rom", "DISK.ROM", "disk.rom"] + required: true + size: [2048, 8192] + source_ref: "src/memory.cpp:94,324-339,371-372" + note: > + Disk subsystem ROM run by the sub CPU. 2048 bytes is the 2D type and is + mirrored to fill 8 KB, 8192 bytes is the 2HD type. Without it the sub + CPU runs 0xFF and no floppy image boots. + + - name: "N88KNJ1.ROM" + system: nec-pc-88 + path: "rom/N88KNJ1.ROM" + aliases: ["n88knj1.rom", "KANJI1.ROM", "kanji1.rom"] + required: false + size: 131072 + source_ref: "src/memory.cpp:95,376-383" + note: > + Kanji ROM level 1. A file of exactly 0x20000 bytes sets has_kanji_rom. + Otherwise the menu falls back to English and the ANK font comes from the + built-in table. + + - name: "N88KNJ2.ROM" + system: nec-pc-88 + path: "rom/N88KNJ2.ROM" + aliases: ["n88knj2.rom", "KANJI2.ROM", "kanji2.rom"] + required: false + size: 131072 + source_ref: "src/memory.cpp:96,385" + note: "Kanji ROM level 2." + + - name: "N88JISHO.ROM" + system: nec-pc-88 + path: "rom/N88JISHO.ROM" + aliases: ["n88jisho.rom", "JISYO.ROM", "jisyo.rom"] + required: false + size: 524288 + source_ref: "src/memory.cpp:26,97,560-578, src/initval.h:57, src/getconf.cpp:377-378" + note: > + Dictionary ROM, 32 banks of 16 KB. Read only with -jisho, off by + default. + + - name: "FONT.ROM" + system: nec-pc-88 + path: "rom/FONT.ROM" + aliases: ["font.rom"] + required: false + hle_fallback: true + size: 2048 + source_ref: "src/memory.cpp:98,388-424" + note: > + ANK font. When it is missing or not 2048 bytes the font is taken from + the kanji ROM, or from the built-in table without one. -nofont skips the + file (src/getconf.cpp:583). + + - name: "FONT2.ROM" + system: nec-pc-88 + path: "rom/FONT2.ROM" + aliases: ["font2.rom"] + required: false + hle_fallback: true + size: [2048, 4096] + source_ref: "src/memory.cpp:99,426-459" + note: > + Second font. 4096 bytes carries its own semigraphic half. Missing, the + built-in ANH table is used. + + - name: "FONT3.ROM" + system: nec-pc-88 + path: "rom/FONT3.ROM" + aliases: ["font3.rom"] + required: false + hle_fallback: true + size: [2048, 4096] + source_ref: "src/memory.cpp:100,461-490" + note: "Third font. Missing, it is left transparent." + + - name: "2608_BD.WAV" + system: nec-pc-88 + path: "rom/2608_BD.WAV" + aliases: ["2608_bd.wav"] + required: false + source_ref: "src/fmgen/opna.cpp:1264-1279,1344-1461" + note: > + OPNA rhythm bass drum sample. The six rhythm samples are read in the + order BD, SD, TOP, HH, TOM, RIM, the uppercase name first, and loading + stops at the first one missing or not mono PCM. They are read only by + the fmgen OPNA, used with -fmgen and sound board II (-sd2), both off by + default (src/snddrv/quasi88/mame-quasi88.cpp:32,529-536, + src/initval.h:56). Without them the fmgen rhythm channel is silent. + + - name: "2608_SD.WAV" + system: nec-pc-88 + path: "rom/2608_SD.WAV" + aliases: ["2608_sd.wav"] + required: false + source_ref: "src/fmgen/opna.cpp:1264-1279,1344-1461" + note: "OPNA rhythm snare drum sample, read with the bass drum sample." + + - name: "2608_TOP.WAV" + system: nec-pc-88 + path: "rom/2608_TOP.WAV" + aliases: ["2608_top.wav"] + required: false + source_ref: "src/fmgen/opna.cpp:1264-1279,1344-1461" + note: "OPNA rhythm top cymbal sample, read with the bass drum sample." + + - name: "2608_HH.WAV" + system: nec-pc-88 + path: "rom/2608_HH.WAV" + aliases: ["2608_hh.wav"] + required: false + source_ref: "src/fmgen/opna.cpp:1264-1279,1344-1461" + note: "OPNA rhythm hi-hat sample, read with the bass drum sample." + + - name: "2608_TOM.WAV" + system: nec-pc-88 + path: "rom/2608_TOM.WAV" + aliases: ["2608_tom.wav"] + required: false + source_ref: "src/fmgen/opna.cpp:1264-1279,1344-1461" + note: "OPNA rhythm tom sample, read with the bass drum sample." + + - name: "2608_RIM.WAV" + system: nec-pc-88 + path: "rom/2608_RIM.WAV" + aliases: ["2608_rim.wav"] + required: false + source_ref: "src/fmgen/opna.cpp:1264-1279,1344-1461" + note: "OPNA rhythm rim shot sample, read with the bass drum sample."