Apple II Chiptune Player

Playing chiptune files on a 1977 vintage 1MHz processor with only 48k of RAM and a sound card from 1981.


This is an attempt to play some complex chiptune files on an old Apple II with a Mockingboard card. The Mockingboard, introduced around 1981, was a sound card for the Apple II series of computers. It has dual AY-3-8910 chips on it, providing a total of 6 channels of square-wave sound, plus noise and envelope effects.

This player plays recompressed 3-channel YM5 files, most of them made in the 90s for the Spectrum and Atari machines.

This was possibly already done in much superior fashion in the Pure Noise Demo by French Touch.

You should also see my Raspberry Pi-Chiptune player page; I developed that board (which is essentially a Mockingboard for the Raspberry Pi) while waiting to buy one for my Apple II.

Some more technical details can be found here: README.chiptune

There's also now a FAQ

Also feel free to vote on this at pouet



Sample screenshot:

Earlier prototype before I realized the full rainbow rasterbar took too long to draw:


Apple II Code/Disk Images

Where did I find these chiptune files? A lot come from ZX Art

Development Log

21 December 2019
Uploaded a new version that should make the sound less glitchy.

19 November 2018
Change to use qkumba's RTS disk routine which makes loading the files from disk much faster.

4 September 2018
Fix interrupt handler bug where older Apple IIs wouldn't work.

13 June 2018
Still trying to track down the mockingboard glitch problem. It goes deep.

6 April 2018
Started a page here where I try to get to the bottom of the various sound quality issues with the player.

11 March 2018
Optimized the time taken to write to the AY-3-8910 registers. Released as version 1.1.

27 February 2018
You can now disable the rasterbars by pressing R.

26 February 2018
Finally got everything together and working!
This includes reduced rasterbars and minimal keyboard support.

25 February 2018
Got it playing multiple songs back-to-back. Wasted hours tracking down DOS33 load bug which was actually my page copy code over-writing the DOS buffers by accident.

23 February 2018
Solved the truncation problem, was an off by one error when wrapping to next chunk.

22 February 2018
Got a full length song playing! But there are glitches in the audio when it gets to a chunk boundary and decompresses. Going to need to double-buffer the audio, but that's going to hurt the compression ratio.

21 February 2018
LZ4 bug reported upstream and fixed.

20 February 2018
Found bug in qkumba's LZ4 implementation when copying blocks of exactly 256 bytes.

19 February 2018
Got the visualization going, more or less. Now time to get LZ4 working.

18 February 2018
Tried implementing starfield in background, but I forgot it involved 4k of multiply and plotting code. Maybe we'll do rasterbars instead.

17 February 2018
Have it playing 14k worth of uncompressed data.

15 February 2018
Spent much of the week getting LZ4 decompression working, as well as trying to figure out how to fit 120k of uncompressed ym5 data into a form suitable for playing on the II.

Interleaving and compressing with LZ4 is amazing (gets it down to 4k) but uncompressing in 40k of RAM, not to mention un-interleaving, makes things tricky.
Other Apple2 Projects
Back to the VMW Software Productions Page