HEARO
> Music player for vintage DOS PCs.
NetISA suite app. 286 minimum. 24 audio devices, MDA through SVGA. Trackers, MIDI, WAV, and chiptunes play on the host. Compressed formats and streaming go through the NetISA card’s ESP32 in v1.1. Foundation phase done; nothing built yet because Watcom is not installed on this machine.
Status
2026-04-24. Source tree complete in hearo/. Not compiled. Open Watcom V2 install is the next step.
What is in the tree:
- Eight detection modules: CPU, FPU, video, audio, memory, NetISA, input, orchestrator.
- Unlock matrix, around 70 rules, data driven.
- Boot screen with the layout below.
- Four-pane text-mode UI: file browser, playlist, now playing, ASCII spectrum. Pull-down menus, settings panel, Hall viewer.
- Math: 24-iteration adaptive CORDIC, 4 KB bipartite sin/cos/log/exp tables, 256-bit fixed-point accumulator.
HEARO.CFGreader/writer,HEARO.HALpersistent log.- Six test programs.
- Watcom
wmakeMakefile. - Real-iron probes staged in
src/platform/probes.c(Watcom inline asm + INT 86h calls). Gated behind-dHEARO_NOASM; default build leaves the gate on. - DOSBox-X screenshot script in
hearo/scripts/.
Boot screen
One line per detected component, status word right justified, unlocked features indented under the component that enabled them. Last line: feature count.
Unlock matrix
Each detected expansion enables specific features. Around 70 rules. Each rule is one row in a table: name, description, requirement string, pure-function check against hw_profile_t. Adding a feature is one line.
- FPU (16): 256-bin FFT, sinc resampling, 16+ channel tracker mixing, plasma, tunnel, particles, fire, wireframe, karaoke, 10-band parametric EQ, convolution reverb, stereo widening, gamma-correct dithering, software quire, adaptive CORDIC, log-domain effects.
- Audio (33): RealSound PWM, Tandy/PCjr PSG, Covox, Disney Sound Source, OPL2 / OPL3 MIDI, AWE64 CQM, SB PCM tiers (mono, auto-init, stereo, 16-bit, ASP, full duplex on DSP 4.13+), GUS hardware mixing + DRAM tier + GUS MAX line-in + CS4231 codec, Ensoniq wavetable + DAC + filters, AWE SoundFont + EMU8000 DSP + 32 voices + SIMM RAM, MT-32 LA, SoundCanvas (SC-55+), Yamaha XG, AdLib Gold DAC + surround, MPU-401 + WaveBlaster, Pro Audio Spectrum 16, ESS AudioDrive, Turtle Beach 56001 DSP.
- Video (6): SVGA 1024 / 800 / 640, 256-color art, hi-res art at 1MB+ VRAM, chipset blits.
- Memory (2): full library index at 4MB+ XMS, all visualizers preloaded at 8MB+ XMS.
- Network (5, NetISA): streaming, scrobbling, cloud library, Bluetooth out, AirPlay.
- FPU-less (2): stochastic-computing particles, 64-bin bipartite-table FFT.
Detection
Eight modules, each one self-contained so a misbehaving probe can be turned off in one place.
- CPU. FLAGS bit walk classifies 8086/186/286/386+.
CPUIDwhen available. PIT-channel-2 timing measures actual core clock against the period nominal list. Anything >10% above nearest nominal flagged as overclocked. - FPU.
FNINIT/FNSTSWpresence. Control-word width separates 287 from 387+. IIT 2C87 brand probe at port 0E0Ch. Cyrix FasMath via CCR3 at 22h/23h. Integrated FPUs follow the CPU vendor. - Video. MDA at 3B4h, CGA at 3D4h. Hercules via 3BAh status toggle. EGA via INT 10h AH=12h BL=10h. VGA via INT 10h AX=1A00h. VESA via INT 10h AX=4F00h with VBE2 prestamp. Chipset probes for S3 (CR30 after 38h/39h unlock), Cirrus (3C4h:06=12h), Trident (3C4h:0Bh), Tseng ET4000 (3CDh write/readback), Paradise (3CEh:0Fh=05h), Oak (3DEh sentinel), Chips & Tech (3D6h sentinel).
- Audio. PC Speaker always set. Tandy via BIOS sig at F000:FFFEh + port C0h. LPT1 walked for Disney FIFO then Covox loopback. AdLib via OPL timer test at 388h, OPL3 mirror at base+02h/03h, AdLib Gold via CT1703 mixer at 38Ch. Sound Blaster: parse BLASTER, reset DSP, read version: 1.x / 2.x / 3.x (Pro vs Pro 2 by OPL3) / 4.x (SB16 vs ASP vs AWE32 vs AWE64). GUS: parse ULTRASND, reset GF1 reg 4Ch at base+103h, walk DRAM, probe CS4231 codec at base+10Ch for MAX. MPU-401 reset/UART handshake at 330h/300h/320h/340h. Ensoniq SoundScape via OTTO chip ID. PAS-16 via mixer signature 0x50. ESS AudioDrive via DSP cmd E7h. Turtle Beach via 56001 host port at 250h/260h/290h/320h.
- Memory. Conventional via INT 12h. XMS via INT 2Fh AX=4300h then 4310h then AH=08h. EMS via INT 67h AH=42h.
- NetISA. Read base ports 300h/320h/340h/280h, look for
NI./STUBNETsynthesises a present card. - Input. Mouse via INT 33h AX=0000h. Joystick via port 0x201.
- Orchestrator. Runs modules in dependency order. Computes 32-bit FNV-1a fingerprint over stable parts of the profile. Stamps detection date.
Per-device probe protocols: docs/hearo-soundcard-reference.md.
Video tiers
Text-mode tier (Minimal) is what shipped in v1.0. Graphical tiers are scaffolded only; real Mode 13h / VESA framebuffer code is v1.3.
Hall of Recognition
Plain text file (HEARO.HAL). Hardware first-seen dates, lifetime stats. Editable with any text editor.
Install an FPU, the next boot says it is new. A year later the boot screen says so on the same calendar day. No achievements or scores.
Format support
Host: MIDI (SMF), WAV (PCM 8/16/24), MOD/S3M/XM/IT, SID, AY, NSF, GBS, SPC.
ESP32 (v1.1+): MP3, FLAC, Opus, Vorbis, AAC, WMA, ALAC.
Streaming (v1.1+): Icecast/SHOUTcast, Bandcamp, SomaFM, Internet Archive, Nectarine Demoscene Radio, ModArchive.
Compressed formats decode on the ESP32 because real-time MP3 decode below a fast 486 does not work. Without the NetISA card those extensions are greyed out in the file browser.
Math
- Adaptive CORDIC. Iteration count varies with screen size and frame budget. 320x200 plasma at 30 fps on a 386SX = 8 iterations. 1024x768 on a 486DX2 = 24.
- Software quire. 256-bit fixed-point accumulator. Eight 32-bit words, two’s-complement, full carry. Posit Standard 2022 quire concept adapted to fixed-point.
- Bipartite tables. sin/cos/log/exp from two table lookups + add. ~8 bits accuracy in ~4 KB. Fast enough for a 286.
- Stochastic particles. Probability bits + counters. No multiplications.
- Log-domain effects. Compressor/limiter/EQ in log domain (Takum 2024). Avoids many multiplies.
- 8087 silicon fingerprint.
FPATANandFYL2Xbit patterns differ per vendor (IIT, Cyrix, ULSI, AMD, Intel). Used to identify the FPU brand without CPUID.
Roadmap
- v1.0: Foundation. Native formats, unlock matrix, boot screen, Hall, text UI. Compilation pending Watcom install.
- v1.1: Streaming. ESP32 path live, internet radio, Bandcamp, ModArchive.
- v1.2: Library. MusicBrainz tags, scrobbling, cover art, lyrics, ReplayGain, smart playlists.
- v1.3: Visuals. Demoscene visualizers, skins, karaoke, EQ, graphical tiers (320, 640, 800, 1024).
- v1.4: Network audio. Bluetooth out, AirPlay, Chromecast, DLNA, multi-room.
- v1.5: Services. Spotify Connect target, YouTube Music, podcasts, audiobooks.
Suite
HEARO is one of nine NetISA suite apps. Shared INI config grammar, Hall file format, boot-screen layout, command-line conventions (/SAFE, /REDETECT, /STUBNET).
Hardware
286 is the floor. V20 + 8087 + 640K + CGA/EGA + AdLib/SB gets a degraded path that still plays trackers and MIDI. RADIO is the lighter sibling for true XT-class machines.
Technical
HEARO.EXE: real mode, large model, 286+. HEAROXM.EXE: 32-bit flat, DOS/4GW, 386+. Both ship together; 32-bit preferred when available, 16-bit is the universal fallback.
Layout: docs/hearo-design.md, docs/hearo-soundcard-reference.md. hearo/src/ (35 modules: detect, unlock, ui, math, config, platform, stub). hearo/test/ (six test programs). hearo/data/unlocks.def. hearo/scripts/ (DOSBox-X screenshot toolkit). hearo/Makefile.
FAQ
- Will it run on my 286?
- Yes. 286 + 1 MB + MDA + PC Speaker is the floor. Text-mode UI works on every adapter from MDA up.
- What audio devices are supported?
- Twenty-four. PC Speaker, Tandy/PCjr PSG, Covox, Disney Sound Source, AdLib (OPL2), AdLib Gold (OPL3 + 12-bit DAC), Sound Blaster 1.x / 2.0 / Pro / Pro 2 / 16 / 16 ASP / AWE32 / AWE64, Gravis UltraSound Classic / MAX / ACE / PnP, MPU-401 with SysEx-identified MT-32 / CM-32L / SC-55 / SC-55mkII / SC-88 / SC-88 Pro / DB50XG / SCB-55, Ensoniq SoundScape, Pro Audio Spectrum 16, ESS AudioDrive, Turtle Beach MultiSound. Probe protocols in the soundcard reference.
- Does HEARO play MP3 / FLAC / Opus?
- Yes, on the ESP32. Compressed formats decode on the NetISA card and arrive at the host as PCM. Native formats decode on the host. Without a NetISA card, compressed extensions are greyed out. v1.0 ships native-only; v1.1 turns on the ESP32 path.
- How does the Hall of Recognition work?
- Plain text file. Each boot, HEARO compares detection against the previous fingerprint and appends new components with their first-seen date. Stats accumulate (hours played, tracks, boot count, peak features). Just a record.
- What unlocks the FFT spectrum analyzer?
- Any FPU. Without an FPU, you get a 64-bin bipartite-table FFT. Fast enough for a 286.
- What does the NetISA card do for HEARO?
- Streaming and compressed-format decode. v1.0 native-only; v1.1 turns on Internet radio (Icecast/SHOUTcast), Bandcamp, SomaFM, Internet Archive, ModArchive, plus MP3/FLAC/Opus/Vorbis/AAC.
- Does it work in DOSBox-X, 86Box, PCem?
- Yes. Standard BIOS calls + direct VRAM. Audio detection works in DOSBox-X with the standard SB + GUS emulation.
- License?
- MIT. Same as the rest of the suite.
- Where is the source?
- tonyuatkins-afk/NetISA/hearo