Skip to content

Releases: madscient/openMSX_Y8960

openMSX Y8960 21.0-y8960.4

Pre-release

Choose a tag to compare

@madscient madscient released this 26 Oct 14:40

An unofficial fork of openMSX that emulates the Y8960 Cartridge, a sound cartridge for the MSX designed by HRA! (hra1129).

The cartridge itself is still a work in progress, and this emulation follows it, so expect behaviour to change between releases. Please report problems in this repository, not to the openMSX developers.

This release follows Y8960 Cartridge v0.9.4 (2026-10-26): its FPGA design and its specification sheet. The previous release was based on v0.9.2. The differences that remain are listed under "Differences from Y8960 Cartridge v0.9.4" below.

Download

openmsx-21.0-y8960.4-windows-vc-x64-bin.zip: Windows x64. Unzip it and run openmsx.exe. No installer is provided.

The executable reports its version as 21.0-unknown. It is built on openMSX development sources from after 21.0.

Using the cartridge

openmsx -machine <machine> -ext HRA_Y8960

It works with the bundled C-BIOS machines, for example -machine C-BIOS_MSX2+.

The cartridge does not feed its sound back into the MSX, so by default you hear only the cartridge. The setting y8960-mixer_output switches between y8960, msx and mix.

Changes since 21.0-y8960.3

  • I/O Enabler2 (7FFFh) can be read, as in v0.9.4. While the memory-mapped registers are shown, reading 7FFFh returns which ports are open: bit 0 OPL2, bit 1 SSG, bit 2 OPM, bit 7 MSX-TIMER, and 0 in bits 3-6. The other memory-mapped registers stay write-only.
  • RAM banks can be read outside RAM mode. With RAM mode off, selecting bank openMSX#16-openMSX#31 shows the contents of that RAM bank, read-only, as the cartridge does. It used to show ROM bank #0-openMSX#15.
  • Bank numbers from 32 up mirror the lower ones, as the cartridge does: openMSX#32-openMSX#47 are ROM banks #0-openMSX#15 and openMSX#48-openMSX#62 are RAM banks openMSX#16-openMSX#30; any number whose low 6 bits are 63 is the SCC. In RAM mode such numbers used to reach outside the 128KB of RAM.

The two bugs in v0.9.2 that the previous release listed as differences are fixed in the cartridge's v0.9.3, which now behaves as this emulation already did: the memory-mapped registers are hidden in RAM mode while BANK1 selects a RAM bank, and every I/O port starts closed after reset.

What is emulated

  • OPLL (YM2413) with a preset tone bank and a pan per channel
  • OPL2 (YM3812) with waveform select and a pan per channel, and an ADPCM-B with its own pan and 256KB of sample memory
  • SSGS: two YM2149-compatible SSGs with a volume and a pan per channel
  • OPM (YM2151)
  • SCC with a pan per channel, the cartridge's mapper, the I/O enablers, and memory-mapped access to the sound chips
  • MSX-TIMER
  • The digital mixer (a volume per sound block and a master volume) and the output switch between the cartridge and the MSX

Differences from Y8960 Cartridge v0.9.4

  • Where the SCC registers appear. v0.9.4 shows them in 8000h-9FFFh when BANK2 selects bank openMSX#63, and in RAM mode also in 6000h-7FFFh when BANK1 selects openMSX#63, with that window's pans at 7900h-7904h. Here bank openMSX#63 shows the SCC registers in whichever bank selects it (except 4000h-5FFFh in RAM mode), and the pans are only at 9900h-9904h.
  • Memory-mapped registers (7FF0h-7FFFh) with BANK1 on bank openMSX#63. Outside RAM mode, v0.9.4 shows them whatever BANK1 selects. Here they are hidden while BANK1 selects bank openMSX#63, because 6000h-7FFFh then shows the SCC registers (the item above). Otherwise they appear under the same conditions as on the cartridge.
  • Other addresses in bank openMSX#63. The specification leaves them undefined and reserved. v0.9.4 reads FFh there; here they read as a ROM bank. Software should not use them.
  • Reading the SSGs. v0.9.4 lets the second SSG's registers be read back from A2h. Here the cartridge never answers reads on A0h-A2h; the MSX's own PSG does.
  • OPM busy. v0.9.4 queues writes to the OPM, holds the CPU with /WAIT when the queue is full, and shows the queue in the busy bit of the status. Here writes take effect at once and the busy bit stays 0. Software that waits for busy to clear works either way.
  • System Controller. The I/O ports 40h-4Fh, which Y8960UPD uses to update the FPGA and the BIOS, are not emulated, and no BIOS ROM is included.
  • Sound. The sound chips are emulated by openMSX's own cores, not by the IP cores in the FPGA, and the loudness of the sound blocks relative to each other is not taken from the cartridge's mixer.

Known limitations

  • The emulation has not been compared against a real cartridge. The behaviour follows the specification and the FPGA sources as they were read.

Credits and license

  • The Y8960 emulation started from the work of buppu3 on the y8960 branch.
  • The hardware and its specification are by HRA! (hra1129). Nothing from that repository is copied into this one.
  • The OPLL-X, OPLL-P and VRC7 preset tone data comes from "Copyright free OPLL(x) ROM patches" by David Viens and Hubert Lamontagne, licensed under CC BY-SA.
  • openMSX is licensed under the GNU General Public License version 2, and so is this fork. The source code for this build is the tagged commit.

openMSX Y8960 21.0-y8960.3

Pre-release

Choose a tag to compare

@madscient madscient released this 20 Oct 16:55

An unofficial fork of openMSX that emulates the Y8960 Cartridge, a sound cartridge for the MSX designed by HRA! (hra1129).

The cartridge itself is still a work in progress, and this emulation follows it, so expect behaviour to change between releases. Please report problems in this repository, not to the openMSX developers.

This release is based on Y8960 Cartridge v0.9.2 (2026-10-20): its FPGA design and its specification sheet. The differences are listed under "Differences from Y8960 Cartridge v0.9.2" below.

Download

openmsx-21.0-y8960.3-windows-vc-x64-bin.zip: Windows x64. Unzip it and run openmsx.exe. No installer is provided.

The executable reports its version as 21.0-unknown. It is built on openMSX development sources from after 21.0.

Using the cartridge

openmsx -machine <machine> -ext HRA_Y8960

It works with the bundled C-BIOS machines, for example -machine C-BIOS_MSX2+.

The cartridge does not feed its sound back into the MSX, so by default you hear only the cartridge. The setting y8960-mixer_output switches between y8960, msx and mix.

Changes since 21.0-y8960.2

  • OPM (YM2151). I/O ports 7Eh (address) and 7Fh (data), opened by bit 2 of I/O Enabler2 (7FFFh) and closed after reset. Reading 7Fh returns the status. Its timer interrupt reaches the CPU. The memory-mapped registers 7FFBh (address) and 7FFCh (data) reach it whether the ports are open or not, and 7FFDh is its mixer volume.
  • A pan per channel on the SCC, at 9900h-9904h for channels A-E, while the SCC registers are shown in 8000h-9FFFh. Writes there go to the pan and not to the SCC. This works in RAM mode too.
  • Pan value 0 is now hard left, the same as 1, on every block (OPLL, OPL2, ADPCM-B, SSGs, SCC). It used to be the centre.

What is emulated

  • OPLL (YM2413) with a preset tone bank and a pan per channel
  • OPL2 (YM3812) with waveform select and a pan per channel, and an ADPCM-B with its own pan and 256KB of sample memory
  • SSGS: two YM2149-compatible SSGs with a volume and a pan per channel
  • OPM (YM2151)
  • SCC with a pan per channel, the cartridge's mapper, the I/O enablers, and memory-mapped access to the sound chips
  • MSX-TIMER
  • The digital mixer (a volume per sound block and a master volume) and the output switch between the cartridge and the MSX

Differences from Y8960 Cartridge v0.9.2

The first two follow the specification where v0.9.2 does not; the designer has confirmed both as bugs in v0.9.2, to be fixed in the hardware.

  • Memory-mapped registers (7FF0h-7FFFh). v0.9.2 always shows them. Here they are hidden while 6000h-7FFFh shows the SCC registers or, in RAM mode, a RAM bank.
  • I/O ports after reset. v0.9.2 starts with the OPLL ports (7Ch-7Dh) and the SSG ports (A0h-A2h) open. Here every port starts closed until it is opened through I/O Enabler1 or I/O Enabler2.
  • Where the SCC registers appear. v0.9.2 shows them in 8000h-9FFFh when BANK2 selects bank openMSX#63, and in RAM mode also in 6000h-7FFFh when BANK1 selects openMSX#63, with that window's pans at 7900h-7904h. Here bank openMSX#63 shows the SCC registers in whichever bank selects it (except 4000h-5FFFh in RAM mode), and the pans are only at 9900h-9904h.
  • Other addresses in bank openMSX#63. The specification leaves them undefined and reserved. v0.9.2 reads FFh there; here they read as a ROM bank. Software should not use them.
  • Reading the SSGs. v0.9.2 lets the second SSG's registers be read back from A2h. Here the cartridge never answers reads on A0h-A2h; the MSX's own PSG does.
  • OPM busy. v0.9.2 queues writes to the OPM, holds the CPU with /WAIT when the queue is full, and shows the queue in the busy bit of the status. Here writes take effect at once and the busy bit stays 0. Software that waits for busy to clear works either way.
  • Memory. The mapper keeps ROM (banks 0-15) and 128KB of RAM (banks 16-31) as separate spaces, whereas v0.9.2 has one 256KB space.
  • System Controller. The I/O ports 40h-4Fh, which Y8960UPD uses to update the FPGA and the BIOS, are not emulated, and no BIOS ROM is included.
  • Sound. The sound chips are emulated by openMSX's own cores, not by the IP cores in the FPGA, and the loudness of the sound blocks relative to each other is not taken from the cartridge's mixer.

Known limitations

  • The emulation has not been compared against a real cartridge. The behaviour follows the specification and the FPGA sources as they were read.

Credits and license

  • The Y8960 emulation started from the work of buppu3 on the y8960 branch.
  • The hardware and its specification are by HRA! (hra1129). Nothing from that repository is copied into this one.
  • The OPLL-X, OPLL-P and VRC7 preset tone data comes from "Copyright free OPLL(x) ROM patches" by David Viens and Hubert Lamontagne, licensed under CC BY-SA.
  • openMSX is licensed under the GNU General Public License version 2, and so is this fork. The source code for this build is the tagged commit.

openMSX Y8960 21.0-y8960.2

Pre-release

Choose a tag to compare

@madscient madscient released this 17 Oct 17:58

An unofficial fork of openMSX that emulates the Y8960 Cartridge, a sound cartridge for the MSX designed by HRA! (hra1129).

The cartridge itself is still a work in progress, and this emulation follows it, so expect behaviour to change between releases. Please report problems in this repository, not to the openMSX developers.

Download

openmsx-21.0-y8960.2-windows-vc-x64-bin.zip: Windows x64. Unzip it and run openmsx.exe. No installer is provided.

The executable reports its version as 21.0-unknown. It is built on openMSX development sources from after 21.0.

Using the cartridge

openmsx -machine <machine> -ext HRA_Y8960

It works with the bundled C-BIOS machines, for example -machine C-BIOS_MSX2+.

The cartridge does not feed its sound back into the MSX, so by default you hear only the cartridge. The setting y8960-mixer_output switches between y8960, msx and mix.

Changes since 21.0-y8960.1

The cartridge's specification was revised in October 2026, and this release follows the revision. Software written for 21.0-y8960.1 needs to be updated: the set of sound chips and the memory-mapped register addresses have changed.

  • One OPLL and one OPL2 instead of two of each. The DCSG is gone.
  • The OPL2's ADPCM-B has the whole 256KB of sample memory to itself.
  • A pan per channel on the OPLL, the SSGs and the OPL2, and a pan for the ADPCM-B.
  • A volume per channel on the SSGs.
  • The digital mixer now changes the gains: a volume per sound block (SSG, OPLL, OPL2, SCC) at 7FF7h-7FFAh and a master volume at 7FFEh. It is reached only through the memory-mapped registers; the I/O ports B6h-B7h are gone.
  • The rhythm sounds of the OPLL and the OPL2 are mixed at the same level as the melody.

What is emulated

  • OPLL (YM2413) with a preset tone bank and a pan per channel
  • OPL2 (YM3812) with waveform select and a pan per channel, and an ADPCM-B with its own pan and 256KB of sample memory
  • SSGS: two YM2149-compatible SSGs with a volume and a pan per channel
  • SCC and the cartridge's mapper, the I/O enablers, and memory-mapped access to the sound chips
  • MSX-TIMER
  • The digital mixer and the output switch between the cartridge and the MSX

Known limitations

  • The mapper keeps ROM (banks 0-15) and 128KB of RAM (banks 16-31) as separate spaces, whereas the FPGA design has one 256KB space.
  • There is no real hardware to compare with. The behaviour follows the specification as it was read.

Credits and license

  • The Y8960 emulation started from the work of buppu3 on the y8960 branch.
  • The hardware and its specification are by HRA! (hra1129). Nothing from that repository is copied into this one.
  • The OPLL-X, OPLL-P and VRC7 preset tone data comes from "Copyright free OPLL(x) ROM patches" by David Viens and Hubert Lamontagne, licensed under CC BY-SA.
  • openMSX is licensed under the GNU General Public License version 2, and so is this fork. The source code for this build is the tagged commit.

openMSX Y8960 21.0-y8960.1

Pre-release

Choose a tag to compare

@madscient madscient released this 14 Sep 22:56

An unofficial fork of openMSX that emulates the Y8960 Cartridge, a sound cartridge for the MSX designed by HRA! (hra1129).

The cartridge itself is still a work in progress, and this emulation follows it, so expect behaviour to change between releases. Please report problems in this repository, not to the openMSX developers.

Download

openmsx-21.0-y8960.1-windows-vc-x64-bin.zip: Windows x64. Unzip it and run openmsx.exe. No installer is provided.

The executable reports its version as 21.0-unknown. It is built on openMSX development sources from after 21.0.

Using the cartridge

openmsx -machine <machine> -ext HRA_Y8960

It works with the bundled C-BIOS machines, for example -machine C-BIOS_MSX2+.

The cartridge does not feed its sound back into the MSX, so by default you hear only the cartridge. The setting y8960-mixer_output switches between y8960, msx and mix.

What is emulated

  • 2× OPLL (YM2413) with a preset tone bank selectable per channel
  • 2× OPL2 (YM3812) with waveform select, each with an ADPCM-B, sharing 256KB of sample memory
  • SSGS: two YM2149-compatible SSGs with 4-bit panpots
  • 2× DCSG (SN76489-compatible)
  • SCC and the cartridge's mapper, the I/O enablers, and memory-mapped access to the sound chips
  • MSX-TIMER
  • The output switch between the cartridge and the MSX

Known limitations

  • The mixer registers (B6h-B7h) keep the values written to them but do not change the gains yet, because their layout is not specified.
  • The mapper keeps ROM (banks 0-15) and 128KB of RAM (banks 16-31) as separate spaces, whereas the FPGA design has one 256KB space.
  • There is no real hardware to compare with. The behaviour follows the specification and the FPGA sources as they were read.

Credits and license

  • The Y8960 emulation started from the work of buppu3 on the y8960 branch.
  • The hardware and its specification are by HRA! (hra1129). Nothing from that repository is copied into this one.
  • The OPLL-X, OPLL-P and VRC7 preset tone data comes from "Copyright free OPLL(x) ROM patches" by David Viens and Hubert Lamontagne, licensed under CC BY-SA.
  • openMSX is licensed under the GNU General Public License version 2, and so is this fork. The source code for this build is the tagged commit.