Diver Firmware 2021

What’s an ESD? Sorry, I’m not familiar with that TLI.

Sorry, that should’ve been ESG. Typo. :wink:

1 Like

So you’re saying you can only capture some format that ESG3 can’t generate? :thinking:

No, there’s a different problem - discussed in another thread.

As requested, I have archived the project and source files in their existing states for Diver & Escher Sketch in the public facing repository here:

The next step for this repository would be to convert the projects to remove dependencies on VisualGDB and document a more open build toolchain. Additionally, instructions for debugger access to the hardware should be documented.


@csboling Time to get hacking! :slight_smile:


Thank you Lars!
It’s officially a race now, who can get the next firmware update out first, Lars or the community?
With X amount of other firmwares priority in Lar’s queue before this one, my bet could be on community
:horse_racing: :vulcan_salute:

Looking forward to future updates for Diver

1 Like

Is this where we soon see someone playing Doom on a Diver?


Doom on Escher would actually be pretty amazing. stylus to aim, buttons to move, reload, shoot :fire::fire::fire:


Thank you Lars! This is awesome. I’m pretty happy with Diver as-is, but having a programmable experimentation platform that already outputs synchronized 1V video is transformative for the more software-minded DIYers out there.

Armed with some prior STM32 experience, I was able to set up the VisualGDB toolchain (with the 30-day trial), build the firmware, and flash it to the hardware successfully.

During this process I took some notes and screenshots. If it would be helpful, I’d be more than happy to edit those into a draft build guide and make a PR.

I’ve used VS Code + PlatformIO for some AVR and ESP32 projects, I believe their STM32 support is also good. If that is the kind of open build toolchain you had in mind, I don’t think it would be hard to get that conversion rolling.


Way to go Dewb! I’m in the same boat. I have two divers and use at least one in most patches. Diver is a really exciting platform and it’s capable of some serious fun above and beyond its current time-domain mutation task. Even relatively simple spins like assigning one of the scroll inputs to something like buffer stride are going to be a blast! I can’t wait to get a “devDiver” up and running! @Dewb I’d love to see your notes.


Nice work! The code is messy, but not too big – at least can get you started with a synchronous output buffer. A line buffer based rasterizer may be possible to implement, for real time graphics. I’ll try to provide more of a development kit style release after porting in more recent software library classes.


That sounds awesome!

When you get a chance could you share the pinout of the 6-pin connector? I assume there are JTAG and/or SWD pins on there (or somewhere else on the board?)

1 Like

Diver JTAG
Diver JTAG2

J8 Pin1(GND) as it corresponds to the actual board connections is the bottom most pad and is square


Awesome, thanks so much! <3

If you’ve got it building/uploading and just want to mess with the waveform generation, that’s all done on line 1029 of main.cpp:

void GenerateLUT(uint8_t waveform)
	for (uint32_t i = 0; i < vres; i++)
		float a = float(i) / float(vres);
		float b = (a*a) * 1023.0;
		float c = (a * 1023.0 * 2.0) - (b);

		switch (waveform)
			case 0: lut[i] = ((i*DAC_MAX_VALUE) / vres) & 1023; break;
			case 1: lut[i] = uint16_t(c) & 1023; break;
			case 2: lut[i] = uint16_t(b) & 1023; break;		
			case 3: lut[i] = ((i*DAC_MAX_VALUE) / vres) & 0b1111000000; break;
			case 4: lut[i] = ((i*DAC_MAX_VALUE) / vres) & 0b1110000000; break;
			case 5: lut[i] = ((i*DAC_MAX_VALUE) / vres) & 0b1100000000; break;


@CountFunkula Here are my draft notes on building with VisualGDB and building with PlatformIO, which is still a work in progress (the firmware builds and loads, but the GPIO controls don’t work yet.) which now works!

Later this afternoon (maybe 4:30 ET?) I’ll be on Discord working on getting a debugger running, and investigating what’s going on with the PlatformIO build, if anyone wants to follow along.


Debugging with a ST-Link V2 clone or an official V2-ISOL works!

A couple other folks have now successfully built, modified, and loaded Diver firmware with the PlatformIO branch, and I’ve fixed a few issues and updated the documentation a bit: BUILDING-PlatformIO.md


this is really dope but have no idea how to use it. have to dive into the documantion. did you already did some new modes or is this still a “open to play” programming thing (which is way over my capabilities)

1 Like

Awesome! Y’all are getting me excited to open source TBC2 and other projects.