Files
libretro/emulators/xm6typeg.yml
T
Abdessamad Derraz b66471538c fix: trace xm6g.exe startup to the ROM loader
The step from the frame's create handler down to Memory::Init was
inferred from the error message. Refs now give the chain through
AfxWinMain, InitInstance, the message map, VM::Init and the device
vtable, and the notes say where the SRAM machine index is set.
2026-11-10 14:21:38 +01:00

468 lines
27 KiB
YAML

emulator: "XM6 TypeG"
type: standalone
core_classification: enhanced_fork
source: "http://retropc.net/pi/xm6/index.html"
upstream: closed-source
version_source:
url: "http://retropc.net/pi/xm6/index.html"
pattern: '\(version [0-9.]+ \S+ version ([0-9.]+)\)'
based_on: "XM6 v2.06 by PI."
profiled_date: "2026-11-10"
core_version: "3.38"
version_basis:
kind: package
url: "http://retropc.net/pi/xm6/index.html"
pattern: 'xm6_typeg_(\d)(\d+)_\d+\.zip'
format: "{1}.{2}"
artifact: "xm6_typeg_338_20260223.zip"
display_name: "XM6 TypeG (Sharp X68000)"
mode: standalone
cores:
- xm6typeg
- XM6TYPEG
- XM6TYPEG-WINDOWS
systems:
- sharp-x68000
notes: |
Closed-source Windows fork of XM6 v2.06 by GIMONS, maintained again by PI.
Distributed from PI's XM6 page as one archive, xm6_typeg_338_20260223.zip
(sha256 71c2b3429163128f...), holding an x64 xm6g.exe (sha256
3d50aab23ce6c8ae1677b1ca8adaa8b0c6c9dabb1c06b98d0f2ea10fe44ac5de), the Visual
C++ 2015-2019 runtime it imports (mfc140u.dll, msvcp140.dll, vcruntime140.dll,
vcruntime140_1.dll, loader-resolved) and xm6g.pdf. No source is published.
Every address below is a virtual address in that xm6g.exe, function bounds taken
from its .pdata. ES-DE launches it through the XM6TYPEG and XM6TYPEG-WINDOWS find
rules with the working directory set to the emulator folder, on Linux under Wine
or Proton.
System files sit in a twenty-entry pointer table at 0x140592350 (IPLROM.DAT
first, STATE.XM6 last). Filepath::SysFile at 0x1404e76d0 indexes it, copies the
name, splits it and jumps to 0x1404e7950, which refills drive and directory from
GetModuleFileNameW, so every system file is read beside xm6g.exe and no
configured directory takes part. LoadROM inlines the same sequence for index 0
(0x1404fca8d-0x1404fcb52). Fileio::Open is 0x1404e7390 (CreateFileW) and
Fileio::Load 0x1404e7200 (ReadFile, success only when the full count is read).
LoadROM (0x1404fc990) takes a memory type set by Memory::ApplyCfg
(0x1404fe390): types 1 to 3 are the base X68000 with no SCSI, internal SCSI or
external SCSI, 4 is XVI, 5 Compact, 6 X68030 and 7 X68030 with the expansion ROM
option on. It reads the IPL ROM, then the CG ROM, then the SCSI ROM, and a short
ReadFile count fails the load, so every min_size below is a floor and a longer
file loads with its tail ignored.
The startup path to LoadROM(1). The CRT calls wWinMain at 0x1405767ad, a thunk
at 0x1405776fc to AfxWinMain (mfc140u.dll 14.42.34433.0 ordinal 2370), which
calls InitInstance through vtable offset 0xb0 (0x1802b2ba7-0x1802b2bae in that
DLL). The application object at 0x14084db20 is built by the static initializer
0x140425b90 (initializer table entry 0x14057e990) with vtable 0x14057ec20, whose
slot 22 (+0xb0) is InitInstance 0x140425e30. InitInstance allocates the frame
window (0x140425fb0), sets its vtable 0x1405aed50 (0x140425fd4) and creates it
through slot 91 (+0x2d8, 0x14042614d-0x140426186). WM_CREATE reaches OnCreate
0x140470ef0 through the frame message map 0x1405acf78 (GetMessageMap slot 12,
0x140470eb0, entry 0x1405acf90). OnCreate allocates the 0x208c0-byte VM
(0x140471135), stores it at 0x140822790 (0x14047120e) and calls VM::Init
0x140565f60 at 0x140471218. VM::Init constructs the memory device at
0x140566443 (constructor 0x1404fc3d0 sets vtable 0x1405c0830 at 0x1404fc3f9, and
the device constructor 0x1404c1270 appends it to the device list at VM+0x20040),
then walks that list calling vtable slot 1 (+0x8) at 0x14056762a. Slot 1 of the
memory vtable (0x1405c0838) is Memory::Init 0x1404fc5d0, which calls LoadROM(1)
at 0x1404fc669 and returns 0 on failure (0x1404fc97f). A zero clears the result
at 0x140567631, VM::Init returns it at 0x140567640, and OnCreate sets error state
1 at 0x140471221 and posts message 0x8000 at 0x14047123b. Message map entry
0x1405ad110 routes 0x8000 to 0x1404737a0, which for state 1 (0x1404737d6) loads
string 47002 or 42002, "XM6 requires two ROM files, IPLROM.DAT file and
CGROM.DAT(or CGROM.TMP) file", shows it with MB_ICONSTOP (0x14047383e) and posts
WM_CLOSE (0x140473853).
Memory::Reset (0x1404fd610)
loads any other type on demand: type 7 falls back to 6 (0x1404fd682), and any
failure falls back to type 1 (0x1404fd6bc), so a missing model ROM only loses
that machine.
SRAM::Reset picks its file from the machine index at VM+0x2002c (0x1405565f7).
The index is the [Basic] ModelType setting of xm6g.ini, 0 to 3 for the base
machine, XVI, Compact and X68030: INI table entry 0x140581240 binds that key to
configuration offset 0x2bfc (0x14082539c), read by the INI loader 0x1404270a0
(0x1404270fe), the field Memory::ApplyCfg reads at 0x1404fe3b8. The configuration apply at 0x140473630 copies it to VM+0x20028
(0x14047367f), and VM::Reset 0x140567660 copies VM+0x20028 to VM+0x2002c at
0x14056768e. OnCreate runs the two at 0x14047148e and 0x14047149a. When
Memory::Reset falls back to the base machine, VM::Reset finds the loaded type at
Memory+0xcbc outside the model (0x1405676b2-0x1405676e8) and zeroes the index at
0x1405676f3 before the devices reset, so SRAM.DAT is read. A saved state
restores the index (0x140567c11).
The options page (0x140428f80) offers XVI, Compact and X68030 only when
IPLROMXV.DAT, IPLROMCO.DAT and IPLROM30.DAT have GetFileSizeEx exactly 0x20000.
Three startup checks run from 0x1404738b5 through 0x140472860, each skippable by
its option. The IPL check (0x140472a99) reads the IOCS date bytes at 0x1000a,
0x1000c and 0x1000d of the base IPL and warns unless they spell 87/05/07. The CG
check (0x14047296e) sums and XORs 0x1000 bytes at 0x3a800 of the font and warns
unless they give 0xec and 0x84. The SCSI check (0x140501290) reads 0x2000 bytes of
SCSIINROM.DAT (0x14050142d) and SCSIEXROM.DAT (0x140501599) and warns when
0x1ff8 holds "XM6 ", the stamp of the XM6 Utility replacements (0x14050147c,
0x1405015da). Each warning dialog (0x140487730) continues on OK and closes XM6 on
Cancel. No genuine ROM is hashed anywhere in the executable.
XM6 Utility, published separately at the same address, synthesises CGROM.TMP
from the installed Windows fonts and SCSIINROM.DAT or SCSIEXROM.DAT from the
Human68k version 3.02 disk image HUMAN302.XDF, which it requires at 0x134000
bytes (XM6Util scsirom.cpp:86-90), and stamps "XM6 " at offset 0x1ff8 and a
version at 0x1ffc (XM6Util scsirom.cpp:243-245).
The Mercury Unit OPN (YMF288) samples its rhythm section from files. The fmgen
and X68Sound engines read six WAV files named from a table at 0x1405c0090
(0x1404ed610), and the ymfm engine reads ym2608_adpcm_rom.bin instead
(0x140574eb0).
xm6g.ini and the state file STATE.XM6, the twentieth table entry, are written by
the program and are not listed below. RTC.DAT and the SRAM files are listed
because they are battery-backed images with hardware counterparts that preload
settings when supplied. XM6 TypeG writes them back on exit (SRAM 0x140556498,
RTC 0x1405321a9), so it creates them when they are absent.
files:
# -- IPL ROMs, one per emulated model, read at 0x20000 bytes and byte-swapped --
- name: IPLROM.DAT
system: sharp-x68000
required: true
size: 131072
validation: [size]
description: "X68000 boot ROM version 1.0, base models"
source_ref: "xm6g.exe 3.38 LoadROM 0x1404fc990: 0x1404fca8d-0x1404fcb52 (table entry 0 joined to the module directory), 0x1404fcb90 (Fileio::Open), 0x1404fcbb7-0x1404fcbc4 (ReadFile 0x20000, short count exits through 0x1404fd159), 0x1404fcc00 (16-bit swap), Memory::Init 0x1404fc5d0 (memory vtable 0x1405c0830 slot 1) 0x1404fc669 (LoadROM(1), failure returns 0 at 0x1404fc97f), VM::Init 0x140565f60 0x14056762a (device Init through vtable slot 1), 0x140567631 (failure kept), OnCreate 0x140470ef0 0x140471218 (VM::Init call), 0x140471221 (error state 1), 0x14047123b (posts 0x8000), handler 0x1404737a0 0x1404737d6, 0x14047383e (MB_ICONSTOP message 47002 or 42002), 0x140473853 (WM_CLOSE), options page 0x140428f80 0x14042920a (GetFileSizeEx == 0x20000)"
note: >-
Memory types 1 to 3, the first model, ACE, EXPERT, PRO and SUPER. Memory::Init
loads it first and the program closes when it fails. The IPL check at
0x140472a99 warns when the IOCS date is not 87/05/07 and does not reject the
file. The options page requires exactly 131072 bytes, while the loader only
needs at least that many.
- name: IPLROMXV.DAT
system: sharp-x68000
required: false
size: 131072
validation: [size]
description: "X68000 XVI boot ROM version 1.1"
source_ref: "xm6g.exe 3.38 LoadROM 0x1404fc990: jump table 0x1404fd4f4 case 4, 0x1404fcb5a (index 1), 0x1404fcb77 (Filepath::SysFile 0x1404e76d0), 0x1404fcbb7 (ReadFile 0x20000), options page 0x140428f80 0x140429279 (table entry 1), 0x1404293de (GetFileSizeEx == 0x20000)"
note: >-
Memory type 4. The options page offers the XVI machine only when this file
is exactly 131072 bytes, and Memory::Reset falls back to the base machine
when it fails to load.
- name: IPLROMCO.DAT
system: sharp-x68000
required: false
size: 131072
validation: [size]
description: "X68000 Compact boot ROM version 1.2"
source_ref: "xm6g.exe 3.38 LoadROM 0x1404fc990: jump table 0x1404fd4f4 case 5, 0x1404fcb5f (index 2), 0x1404fcb77 (Filepath::SysFile 0x1404e76d0), 0x1404fcbb7 (ReadFile 0x20000), options page 0x140428f80 0x140429468 (table entry 2), 0x1404295cd (GetFileSizeEx == 0x20000)"
note: >-
Memory type 5, offered and loaded under the same rules as IPLROMXV.DAT.
- name: IPLROM30.DAT
system: sharp-x68000
required: false
size: 131072
validation: [size]
description: "X68030 boot ROM version 1.3, $FE0000-$FFFFFF half"
source_ref: "xm6g.exe 3.38 LoadROM 0x1404fc990: jump table 0x1404fd4f4 case 6, 0x1404fcb66 (index 3), 0x1404fcb77 (Filepath::SysFile 0x1404e76d0), 0x1404fcbb7 (ReadFile 0x20000), options page 0x140428f80 0x140429657 (table entry 3), 0x1404297bc (GetFileSizeEx == 0x20000)"
note: >-
Memory type 6, the X68030, paired with ROM30.DAT. Its SCSI ROM is
ROM30.DAT, so SCSIINROM.DAT and SCSIEXROM.DAT are not read for this
machine.
- name: ROM30.DAT
system: sharp-x68000
required: false
min_size: 131072
validation: [size]
description: "X68030 boot ROM version 1.3, $FC0000-$FDFFFF half"
source_ref: "xm6g.exe 3.38 LoadROM 0x1404fc990: jump table 0x1404fd510 case 6, 0x1404fd1f5 (table entry 12), 0x1404fd304 (Fileio::Open), 0x1404fd327-0x1404fd334 (ReadFile 0x20000), 0x1404fd354-0x1404fd35b (types 6 and 7 fail on a short read)"
note: >-
Loaded into the SCSI ROM slot and the only file of that slot that must
deliver the full 0x20000 bytes. Without it LoadROM(6) fails and
Memory::Reset falls back to the base machine.
The copy here is the X68000 Firmware set's ROM30.DAT (SCSIIN, ROM Human 2.x, ROM FLOAT and the SCSI-IOCS binary), read out of an X68030 by the XM6 2.06 utility, which stamps its name at the tail of the image.
- name: IPLROM30S.DAT
system: sharp-x68000
required: false
min_size: 131072
validation: [size]
description: "Expansion boot ROM, $FE0000-$FEFFFF"
source_ref: "xm6g.exe 3.38 Memory::ApplyCfg 0x1404fe390 0x1404fe3d1-0x1404fe3ff (X68030 with the expansion ROM flag gives type 7), LoadROM 0x1404fc990: jump table 0x1404fd4f4 case 7, 0x1404fcb6d (index 4), 0x1404fcb77 (Filepath::SysFile 0x1404e76d0, table entry 4 at 0x140592370), 0x1404fcbb7 (ReadFile 0x20000), Memory::Reset 0x1404fd610 0x1404fd672-0x1404fd694 (type 7 failure retries type 6)"
note: >-
Read in place of IPLROM30.DAT when the X68030 expansion ROM option is on,
the setting stored as EXTROM. Paired with ROM30S.DAT. When either fails,
Memory::Reset loads the plain X68030 instead.
The copy here is XEIJIPLROM30.DAT written by XEiJ 0.26.08.08 with -model=X68030 -iplrom16=on -memory=12 -cgrom=CGROM30.DAT: IPLROM 1.6 of 2025-08-03, the patched IPL its documentation names for the 060turbo, since no dump of the Mankai replacement ROM circulates.
- name: ROM30S.DAT
system: sharp-x68000
required: false
min_size: 131072
validation: [size]
description: "Expansion boot ROM, lower half"
source_ref: "xm6g.exe 3.38 LoadROM 0x1404fc990: jump table 0x1404fd510 case 7, 0x1404fd1fe (table entry 13), 0x1404fd304 (Fileio::Open), 0x1404fd327-0x1404fd334 (ReadFile 0x20000), 0x1404fd354-0x1404fd35b (short read fails type 7)"
note: >-
The other half of the expansion pair, loaded into the SCSI ROM slot and
read at the same size as ROM30.DAT.
The copy here is XEIJROM30.DAT from the same XEiJ run: SCSIINROM 16, ROM Human 2.60, ROM FLOAT 2.03 and ROM Debugger 3.60.
# -- CG ROMs, read at 0xc0000 bytes, model specific first then CGROM.DAT then CGROM.TMP --
- name: CGROM.DAT
system: sharp-x68000
required: true
min_size: 786432
validation: [size]
description: "X68000 character generator ROM"
source_ref: "xm6g.exe 3.38 LoadROM 0x1404fc990: 0x1404fcf0e (table entry 5), 0x1404fcfed (Fileio::Open), 0x1404fd013-0x1404fd023 (ReadFile 0xc0000), 0x1404fd03e (falls back to CGROM.TMP), 0x1404fd1a0 (16-bit swap), Memory::Init 0x1404fc5d0 (memory vtable 0x1405c0830 slot 1) 0x1404fc669 (LoadROM(1), failure returns 0 at 0x1404fc97f), VM::Init 0x140565f60 0x14056762a (device Init through vtable slot 1), 0x140567631 (failure kept), OnCreate 0x140470ef0 0x140471218 (VM::Init call), 0x140471221 (error state 1), 0x14047123b (posts 0x8000), handler 0x1404737a0 0x1404737d6, 0x14047383e (MB_ICONSTOP message 47002 or 42002), 0x140473853 (WM_CLOSE), CG check 0x14047296e"
note: >-
Supplies the glyphs the X68000 renders, mapped at $F00000-$FBFFFF. Used by
the base models and as the fallback for every machine whose own CG ROM is
absent. LoadROM(1) fails when neither this file nor CGROM.TMP loads, and
the program closes. The startup CG check only warns.
- name: CGROMXV.DAT
system: sharp-x68000
aliases:
- CGROM.DAT
required: false
min_size: 786432
validation: [size]
description: "X68000 XVI character generator ROM"
source_ref: "xm6g.exe 3.38 LoadROM 0x1404fc990: 0x1404fcd90-0x1404fcd96 (type 4, table entry 6), 0x1404fce88 (Fileio::Open), 0x1404fceb8-0x1404fcec8 (ReadFile 0xc0000, a short read continues at CGROM.DAT 0x1404fcf0e)"
note: >-
Preferred when the XVI machine is selected. CGROM.DAT is used when it is
missing or short.
- name: CGROMCO.DAT
system: sharp-x68000
aliases:
- CGROM.DAT
required: false
min_size: 786432
validation: [size]
description: "X68000 Compact character generator ROM"
source_ref: "xm6g.exe 3.38 LoadROM 0x1404fc990: 0x1404fcd9f-0x1404fcda9 (type 5, table entry 7), 0x1404fce88 (Fileio::Open), 0x1404fceb8-0x1404fcec8 (ReadFile 0xc0000, fallback to CGROM.DAT 0x1404fcf0e)"
note: >-
Preferred when the Compact machine is selected, with the same fallback to
CGROM.DAT.
- name: CGROM30.DAT
system: sharp-x68000
required: false
min_size: 786432
validation: [size]
description: "X68030 character generator ROM"
source_ref: "xm6g.exe 3.38 LoadROM 0x1404fc990: 0x1404fcc23-0x1404fcc33 (types 6 and 7, table entry 8), 0x1404fcd12 (Fileio::Open), 0x1404fcd42-0x1404fcd52 (ReadFile 0xc0000, fallback through 0x1404fcd90 to CGROM.DAT)"
note: >-
Preferred for the X68030 with or without the expansion ROM, with the same
fallback to CGROM.DAT.
- name: CGROM.TMP
system: sharp-x68000
required: false
unsourceable: "synthesised from the fonts installed on the host, no canonical file"
min_size: 786432
validation: [size]
description: "Synthesised font ROM, fallback when no CG ROM is present"
source_ref: "xm6g.exe 3.38 LoadROM 0x1404fc990: 0x1404fd03e (table entry 9, reached only after CGROM.DAT fails), 0x1404fd11d (Fileio::Open, failure exits LoadROM), 0x1404fd147-0x1404fd157 (ReadFile 0xc0000, short read exits LoadROM)"
note: >-
Read at the same size, only after CGROM.DAT fails. XM6 Utility builds it
from the fonts installed on the machine that generated it, so no hash is
declared. A synthesised font fails the CG sum and XOR check at
0x14047296e, which raises the startup warning.
# -- SCSI ROMs, tried at 0x20000 then 0x2000, external also at 0x1fe0 --
- name: SCSIINROM.DAT
system: sharp-x68000
required: false
min_size: 8192
validation: [size]
description: "Internal SCSI interface ROM, SUPER and later"
source_ref: "xm6g.exe 3.38 LoadROM 0x1404fc990: jump table 0x1404fd510 cases 2, 4 and 5, 0x1404fd1ec (table entry 10), 0x1404fd327 (ReadFile 0x20000), 0x1404fd361-0x1404fd391 and 0x1404fd442-0x1404fd44f (type 2 reopens and must read 0x2000), 0x1404fd39a (types 4 and 5 continue without the file), SCSI check 0x140501290 0x14050131e, 0x14050142d, 0x14050147c"
note: >-
Read for the internal SCSI option on the base machine (memory type 2),
where a missing file or a read under 0x2000 bytes fails the load and
Memory::Reset falls back to the plain base machine. XVI and Compact read it
with one 0x20000-byte ReadFile whose count is not checked, so a shorter
file still fills the slot, and without the file those machines start with
the slot left at 0xff.
- name: SCSIEXROM.DAT
system: sharp-x68000
required: false
min_size: 8160
validation: [size]
description: "External SCSI interface ROM, CZ-6BS1 board"
source_ref: "xm6g.exe 3.38 LoadROM 0x1404fc990: jump table 0x1404fd510 case 3, 0x1404fd207 (table entry 11), 0x1404fd327 (ReadFile 0x20000), 0x1404fd3a0-0x1404fd3ea (ReadFile 0x2000), 0x1404fd401-0x1404fd44f (retry 0x1fe0 bytes at buffer offset 0x20, a short read fails the load), SCSI check 0x140501290 0x14050148a, 0x140501599, 0x1405015da"
note: >-
Read only for the external SCSI option on the base machine (memory type
3). After 0x20000 and 0x2000 the loader retries at 0x1fe0 bytes into buffer
offset 0x20, the WinX68k layout, so 8160 is the real floor. Missing, the
load fails and Memory::Reset falls back to the plain base machine.
# -- Battery-backed images, read at startup, written on exit when changed --
- name: SRAM.DAT
unsourceable: "written by the emulator on exit, no canonical file"
system: sharp-x68000
required: false
size: [16384, 65536]
description: "SRAM image for EXPERT and the other base models"
source_ref: "xm6g.exe 3.38 SRAM::Init 0x140556320: 0x140556373-0x14055637c (Filepath::SysFile index 14), 0x140556397 (Fileio::Load 0x10000, result ignored), SRAM::Reset 0x140556510 (SRAM vtable 0x1405c2728 slot 3) 0x1405565f7 (machine index VM+0x2002c, ModelType copied at 0x14056768e), 0x14055662a (index 0), 0x140556667 (ReadFile 0x10000, count not checked), SRAM cleanup 0x140556420 0x140556498 (writes the configured size in KB)"
note: >-
Holds the boot device and memory switch settings for the base models. The
buffer is filled with 0xff first and up to 64 KB is read with no size
check. The program writes the configured SRAM size back, 16 KB as standard
and 64 KB with the 62C256 SRAM option.
- name: SRAMXVI.DAT
system: sharp-x68000
required: false
unsourceable: "written by the emulator on exit, no canonical file"
size: [16384, 65536]
description: "SRAM image for XVI"
source_ref: "xm6g.exe 3.38 SRAM::Reset 0x140556510: 0x1405565f3-0x140556623 (machine index VM+0x2002c, ModelType 1, gives Filepath::SysFile index 15), 0x140556632 (Filepath::SysFile 0x1404e76d0), 0x140556643 (Fileio::Open), 0x140556667 (ReadFile 0x10000)"
note: >-
Per-model SRAM introduced by XM6 TypeG, which keeps one image per machine
instead of the single SRAM.DAT of XM6 v2.06.
- name: SRAMCMP.DAT
system: sharp-x68000
required: false
unsourceable: "written by the emulator on exit, no canonical file"
size: [16384, 65536]
description: "SRAM image for Compact"
source_ref: "xm6g.exe 3.38 SRAM::Reset 0x140556510: 0x1405565f7 (machine index VM+0x2002c), 0x14055661c (ModelType 2 gives Filepath::SysFile index 16), 0x140556632 (Filepath::SysFile 0x1404e76d0), 0x140556643 (Fileio::Open), 0x140556667 (ReadFile 0x10000)"
note: >-
Read when the Compact machine is selected.
- name: SRAM030.DAT
system: sharp-x68000
required: false
unsourceable: "written by the emulator on exit, no canonical file"
size: [16384, 65536]
description: "SRAM image for X68030"
source_ref: "xm6g.exe 3.38 SRAM::Reset 0x140556510: 0x1405565f7 (machine index VM+0x2002c), 0x140556615 (ModelType 3 gives Filepath::SysFile index 17), 0x140556632 (Filepath::SysFile 0x1404e76d0), 0x140556643 (Fileio::Open), 0x140556667 (ReadFile 0x10000)"
note: >-
Read when the X68030 machine class is selected, with or without the
expansion ROM.
- name: RTC.DAT
system: sharp-x68000
required: false
unsourceable: "written by the emulator on exit, no canonical file"
size: 120
description: "RTC alarm settings for timer start"
source_ref: "xm6g.exe 3.38 RTC::Init 0x140531ee0: 0x14053210b-0x140532117 (Filepath::SysFile index 18), 0x140532132 (Fileio::Load 0x78 bytes, result ignored), RTC cleanup 0x140532170 0x1405321a9 (writes 0x78 bytes)"
note: >-
Alarm registers of the battery-backed clock, applying to every machine.
The program reads and writes 120 bytes and runs with defaults when the file
is absent.
# -- Mercury Unit rhythm samples, read by the OPN (YMF288) section --
- name: ym2608_adpcm_rom.bin
system: sharp-x68000
required: false
size: 8192
description: "YM2608 ADPCM-A rhythm ROM, ymfm engine"
source_ref: "xm6g.exe 3.38 0x140574eb0: 0x140574fac-0x140574fbe (clears the 0x2000-byte buffer), 0x140574fdb-0x140574fec (wcscat_s of the name onto the directory argument), 0x14057506e (Fileio::Open, failure skips the read), 0x140575095 (ReadFile 0x2000, count not checked)"
note: >-
Rhythm source for the Mercury Unit OPN when the FM engine is ymfm. When it
is absent the buffer stays zeroed, the rhythm section is silent and the
emulator runs.
- name: 2608_BD.WAV
system: sharp-x68000
required: false
description: "Mercury Unit rhythm sample, bass drum"
source_ref: "xm6g.exe 3.38 0x1404ed610: 0x1404ed677 (name table 0x1405c0090 entry 0), 0x1404ed6fa-0x1404ed76d (directory + 2608_ + name + .WAV), 0x1404ed7af (CreateFileW), 0x1404ed7cf-0x1404ed7d8 (ERROR_FILE_NOT_FOUND handled), 0x1404ed950 (ReadFile)"
note: >-
One of the six rhythm samples the fmgen and X68Sound engines read for the
Mercury Unit OPN. A missing file is handled through ERROR_FILE_NOT_FOUND
and leaves that instrument silent.
- name: 2608_SD.WAV
system: sharp-x68000
required: false
description: "Mercury Unit rhythm sample, snare drum"
source_ref: "xm6g.exe 3.38 0x1404ed610: name table 0x1405c0090 entry 1, 0x1404ed6fa-0x1404ed76d (name built), 0x1404ed7af (CreateFileW)"
- name: 2608_TOP.WAV
system: sharp-x68000
required: false
description: "Mercury Unit rhythm sample, top cymbal"
source_ref: "xm6g.exe 3.38 0x1404ed610: name table 0x1405c0090 entry 2, 0x1404ed6fa-0x1404ed76d (name built), 0x1404ed7af (CreateFileW)"
- name: 2608_HH.WAV
system: sharp-x68000
required: false
description: "Mercury Unit rhythm sample, hi-hat"
source_ref: "xm6g.exe 3.38 0x1404ed610: name table 0x1405c0090 entry 3, 0x1404ed6fa-0x1404ed76d (name built), 0x1404ed7af (CreateFileW)"
- name: 2608_TOM.WAV
system: sharp-x68000
required: false
description: "Mercury Unit rhythm sample, tom-tom"
source_ref: "xm6g.exe 3.38 0x1404ed610: name table 0x1405c0090 entry 4, 0x1404ed6fa-0x1404ed76d (name built), 0x1404ed7af (CreateFileW)"
- name: 2608_RIM.WAV
system: sharp-x68000
aliases:
- 2608_RYM.WAV
required: false
description: "Mercury Unit rhythm sample, rim shot"
source_ref: "xm6g.exe 3.38 0x1404ed610: name table 0x1405c0090 entry 5, 0x1404ed7af (CreateFileW of 2608_RIM.WAV), 0x1404ed808 (entry 5 not found), 0x1404ed841-0x1404ed8bf (CreateFileW of 2608_RYM.WAV)"
note: >-
Last of the six. This entry alone has a second accepted name,
2608_RYM.WAV, opened when 2608_RIM.WAV is not found.
# -- Libraries looked up by name at runtime, absent from the import directory --
- name: X68Sound.dll
system: sharp-x68000
required: false
description: "FM synthesis engine by m_puusan"
source_ref: "xm6g.exe 3.38 0x140488a50: 0x140488df4-0x140488dfb (LoadLibraryW), 0x140488e0d-0x140488e65 (absent: stub entry points), 0x140488e6a-0x140488e74 (GetProcAddress X68Sound_Reset and the rest)"
note: >-
One of the three FM engines, alongside the built-in fmgen and ymfm. Not
shipped in the archive. Without it the engine object is wired to internal
stubs and the emulator continues.
- name: c86ctl.dll
system: sharp-x68000
required: false
description: "Control library for external OPM hardware"
source_ref: "xm6g.exe 3.38 0x1404b2d60: 0x1404b2da3-0x1404b2daa (GetFileVersionInfoSizeW, absent exits at 0x1404b3057), 0x1404b2e62-0x1404b2e69 (LoadLibraryW), 0x1404b2e89 (GetProcAddress CreateInstance)"
note: >-
Loaded by name to drive a real YM2151 through a C86BOX class device
instead of software synthesis. The executable reads its file version
before loading it.
- name: pcidebug.dll
system: sharp-x68000
required: false
description: "PCI bus bridge library, used to reach a ROMEO sound board"
source_ref: "xm6g.exe 3.38 0x1404fa2e0: 0x1404fa2f5 (FreeLibrary of the previous handle), 0x1404fa31a-0x1404fa344 (LoadLibraryW), 0x1404fa354 (absent skips the setup)"
note: >-
Loaded on demand and freed again. Absent, the ROMEO output is unavailable
and the emulator continues.
- name: SOUND Canvas VA.dll
system: sharp-x68000
required: false
path: "%ProgramFiles%/Roland/Sound Canvas VA/SOUND Canvas VA.dll"
description: "Roland Sound Canvas VA plugin used as MIDI output"
source_ref: "xm6g.exe 3.38 0x140484170: 0x140484181-0x14048418e (empty VstSCVA setting gives the default path), 0x14048421e (ExpandEnvironmentStringsW), 0x1404823d0 0x14048249e (PathFileExistsW), 0x14048258a and 0x140482891 (VST host 0x1404aea40), 0x1404afd30 0x1404afd6c (LoadLibraryW)"
note: >-
Hosted as the MIDI output device when the VSTi option is selected. The
path defaults to the Roland installation directory and the setting is
stored as VstSCVA.
The plugin does not synthesise on its own: the Roland installer places SCCore.dll and eleven data files (GM, GM2 and SC-VSC .drk, .tnf and .drf sets, parameter1.dat to parameter3.dat) beside it, and the DLL loads them from its own directory.