Negative Charge

@negativecharge.bsky.social

Retro-musician, 8-Bit, 6502. Mainly creating music drivers, players and conversion tools from 8 & 16-bit sound chips to the BBC Micro’s SN76489 and Acorn Electron’s ULA. ⎍∧∿⩘

A little more work on SoftSID for the BBC Micro. More SID files are working now once I realised several want to unpack into memory between &c000 and &8000, so I page in a writeable SWRAM bank if available. Also fixed VBI track playback speed (correcting Out Run) and implemented NTSC support. 🔊

SoftSID 0.0.6 for the BBC Micro Added ability to specify the .sid file and track number on the command line. Many optimizations to bring the cycle count down too. Should be ready for a preview release soon once I've chased a few more cycles and relocated some more example SIDs. 🔊

SoftSID v0.02 for the BBC Micro This is a bit more like it. Upped the audio rate to 6.1 kHz to match the VIC-20 version. Also re-located the SID to &1100 which was the cause of the random hangs and inability to playback on the Model B due to a DFS clash. I need to relocate a different SID now 😊🔉

Ever wanted to play Commodore 64 SID tunes on a BBC Micro without needing additional hardware? Having seen similar attempts on the VIC-20, Atari 800 and ZX Spectrum I thought I'd give it a go. Early days, unstable, and sound fidelity needs to be improved, but it works! (sort of...). SoftSID v0.01 🔊

I previously had a go at converting Tim Follin's 1-bit ZX Spectrum beeper routine for Agent X II to the BBC Micro's SN76489. Here's a follow up attempt with Chronos. The percussion isn't quite right, but the melody is perfectly recognisable. 🔊

Negative Charge@negativecharge.bsky.social · 3mo ago

Putting the BBC Micro compressed VGM to the side for now as I can't get it to work at the required speed. Instead, I've been looking at some of the Tim Follin archives posted by @breakintoprogram.co.uk to GitHub to see if I can get any of the classic beeper music playing back on the SN76489: 🔊

I haven't posted any demos for a long while, so here's a version of 2D Pipes in Mode 2 which works as quite a good screensaver for the BBC Micro. No music on this one as I waste 20kb just on the screen mode. No random teapots at the moment either. It might look better in Mode 1 with square pixels.

I've replaced the compression with zx02 from lzss, which on average is giving 2kb smaller files. I've also implemented a new SID converter to handle some of the trickier tunes. Doesn't look any different, but I can now squeeze a few extra tracks onto the BBC Micro music disks. 🔊

Some progress! I now have compressed VGM files (.VGZ) streaming from disk and decompressing on the fly. How do I know it's working? At the very end of the clip you can make out the GD3 strings. Very close to having a streaming, decompressing, SN76489 VGM playback engine. 14KB expanding to 95KB.

Buffer size reduced to 2kb which leaves plenty of memory for vgz decompression. 8271 floppy disk controller support fixed. 60Hz VGM playback fine. So now I'll work on a basic streaming decompressor to a ring buffer for VGZ. The window should be 32kb (which I don't have free) but we won't need that.

This took a lot more effort than I thought it would, but after three rewrites I finally have the VGM files streaming directly from disk, being parsed and played back with no noticeable stalling. This is a 125kb VGM that wouldn't fit in the BBC Micro's standard 32kb. Next... on the fly .vgz inflate.

This might not look like much, but it's 149KB of uncompressed VGM data streaming from disk on a BBC Micro with a total of 32KB of memory. Next I'll add the inflate decompression to the streaming and hopefully playback to the SN76489. 🤞

Something I've wanted to do for a while is create a generic .VGM / .VGZ player for the BBC Micro. Here's stage 1... deflate the .vgz file in memory, read the VGM header and GD3, setup interrupt based on playback speed and send to the SN76489. Next step is to look into streaming playback and SWRAM.

My universal converter for the BBC Micro SN76489 now contains support for over 15 PSGs and 20+ different input file formats. Most of the converters have been rewritten from scratch. Here's the latest addition... the .sndh converter that shares code with the .ym and .ay converters now. 🔊

I've been working on a universal music converter, and revisiting some older tools to include. Here's a much improved SAA1099 to SN76489 converter that I'm integrating (Any glitches are my rudimentary player). All my converters use an intermediate format before I compress to 3 tone/1 noise channel.

As converting NES .nsf files is very similar to converting .hes files, it didn't take much to add this to the converter. As a bonus I added VRC6 support too so I could convert some of the tracks from Castlevania 3 - Dracula's Curse JP. Need to find a good source of new modern .nsf files now. 🔊

Continuing my PC Engine HuC6280 to BBC Micro SN76489 converter. I've added support for .HES / .m3u files as input which expands the available content for conversion. It also tries to intelligently compress the channels down to three tone and one noise. Not too bad so far. 🔊

Trying out some visualisation effects in the player, making better use of the space and moving the track metadata into the scroll text. Broken a few things along the way, but so far working okay even with the software bass active. Now to reduce the number of cycles it takes to display. 🔊

I thought I'd give the Acorn Electron port of the Squeeker Plus 1-bit engine a go, not expecting much considering the demands on the faster BBC Micro. However, venturing into the murky realms of illegal NMOS 6502 op codes, it's playing!.... badly, but it's at least recognisable with its issues.