Skip to content

vs-sr-dev/vis-synth

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VIS Synth

OPL3-driven polyphonic synthesizer for the Tandy/Memorex Video Information System (VIS) — a 1992 multimedia console running Modular Windows 3.1 on an Intel 80286 @ 12 MHz, with a Yamaha YMF262 (OPL3) and a 16-bit R-2R stereo DAC.

Three working modes, all running natively as Win16 NE applications on Modular Windows VIS via direct OPL3 port I/O at 0x388/0x389:

Version Mode Input Real-VIS portable?
v0 Hand-controller polyphonic instrument VIS hand controller (8 buttons → C major scale, octave/patch cycle)
v2 SMF MIDI file player .MID file from CD-ROM (format-0, single track, voice round-robin)
v3 LIVE MIDI from host hardware keyboard Custom MAME vis_midi_uart ISA card → host MIDI bridge ❌ (emulator-only)

Per-session granular log: see VIS_sessions_synth.md.

Status

Milestone What it proves Verdict
v0 (S19) OPL3 8-voice polyphony + DispDib direct A000 framebuffer + custom VGA palette "Funziona tutto, tutti e gli 8 tasti"
v2 (S19) SMF format-0 parser + voice allocator + PIT-µs scheduler "Da musicista, confermo I-IV-V-I corretta"
v3 (S19) Custom MAME ISA bridge (ROM-free, MPU-401-UART-compatible) + VIS-side MIDI driver "Mi stavo divertendo a suonare" (138-sec engaged-play session)

All three milestones built single-iteration zero-fix at the design level (recon-first methodology, see VIS_sessions_synth.md).

Repo layout

  • src/ — Watcom 16-bit C sources for the three versions, plus build batches, linker scripts, and ISO mkers
    • synth_v0.c / synth_v2.c / synth_v3.c — main sources (~480 / ~520 / ~360 LOC)
    • build_synth_v*.bat — Open Watcom V2 compile + link
    • link_synth_v*.lnk — NE EXE link scripts (Win16 IMPORTs)
    • mkiso_synth_v*.py — pycdlib ISO 9660 L1 builders
  • tools/ — utility Python scripts
    • make_test_mid.py — 8-second I-IV-V-I C major test SMF generator (used by v2)
  • mame-patch/vis.cpp patch + build instructions for the custom MAME-VIS bridge needed by v3
  • VIS_sessions_synth.md — granular session log (English)

Prerequisites

  • Open Watcom V2 (16-bit C compiler for Win16 NE targets): tools/OW/ in the parent VIS pipeline
  • Python 3 with pycdlib for ISO building: pip install pycdlib
  • MAME 0.287 for emulator testing: stock binary works for v0 and v2; v3 needs the custom build (see mame-patch/)
  • For v3 only: msys2 mingw64 + GCC ≥ 13 to build the patched MAME from source

A clone of CONTROL.TAT from a retail VIS disc is required to assemble each version's cd_root_v*/ directory (Tandy/Memorex IP, not redistributable here — sourced from the parent VIS pipeline).

Quick start

Build any version

cd src
build_synth_v0.bat   :: or v2, or v3
python mkiso_synth_v0.py

Output: build/SYNTHV0.EXE (Win16 NE), build/synth_v0.iso (VIS-bootable CD).

Run on MAME

v0 and v2 (stock MAME)

mame -rompath <vis_bios_dir> vis -cdrom build\synth_v0.iso -window -nomax -skip_gameinfo

v3 (requires custom MAME build)

custom-mame.exe -rompath <vis_bios_dir> vis -cdrom build\synth_v3.iso -window -nomax -skip_gameinfo -midiin "<host MIDI device name>"

Host MIDI device name as listed by mame -listmidi under "MIDI input ports".

License

MIT for all VIS-side code, build scripts, Python utilities, and documentation in this repo (see LICENSE).

The MAME patch under mame-patch/ is BSD-3-Clause (inherited from the upstream vis.cpp file's individual-file license, copyright-holders: Carl). The MAME project as a whole is GPLv2; do NOT redistribute the built mame.exe binary without GPL-compliant source-bundle obligations. See mame-patch/README.md for full details.

Acknowledgements

  • MAME team and "Carl" for the upstream src/mame/trs/vis.cpp driver that we patched and built upon. Without that prior reverse-engineering of the VIS hardware in MAME, none of this synth project would have been feasible.
  • id Software / Apogee — patterns reused from this project's sibling W3D port (which itself draws on the open-sourced Wolf3D codebase) include the OPL3 init sequence and AdLib instrument register layout.

About

OPL3 polyphonic synth for the Tandy/Memorex VIS (1992) — pad-driven instrument, SMF MIDI file player, and live MIDI from host hardware via custom MAME bridge

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors