[sdiy] Analysis of the TB-303 CPU timing

rsdio at audiobanshee.com rsdio at audiobanshee.com
Tue Mar 21 01:37:52 CET 2017

Impressive work, G (is it Grant or Greg?).

That wave table circuit reminds me of Hal Chamberlin's 1973(?) Masters Thesis that I discovered in the library stacks of NCSU while I was studying EE there. He outlined a digital wave table based synthesizer and the design ended up in a hard-bound volume that was available to students. It was light years ahead of what we were doing in the labs, but that's not really saying much. It really only included simple analog synth oscillator periods - not any specialized attack waves.

Are you sure that's a sequencer and not actually a full wave table synth with VCF and VCA? Why does it say Greg's Wave Table?

While I'm reminiscing, I recall that Hal's Micro Technology Unlimited had an office across the street from NCSU, and I remember seeing a crazy sample playback system there with two 5" floppy drives. The thing would record or play digital audio so fast that you had to constantly swap floppies in and out of the two drives. While one was recording or playing, the operator had to replace the floppy in the other drive, and this had to be done fairly promptly because the system would quickly exhaust the entire memory of a floppy before you could blink. This was before 1988 and probably before he was involved with Kurzweil.

Meanwhile, your comments on disassemblers are quite correct. I fine that it's usually useful to develop a two-pass disassembler. The first pass looks for standard code entry points and expands the list to include all accessible subroutines (usually starting from the Reset vector and one or more Interrupt vectors). After that first pass has made a map of executable versus data sections of the ROM, the second pass can create a listing of opcodes interspersed with hex dumps of the data sections.

I disassembled the Williams arcade sound board - based on the 6809 (I think) and used in various pinball and CRT-based games - and found interesting data tables. There was signed sine, DC-offset sine, and dirac delta / impulse data. I think someone else did a complete emulation as part of MAME. I really want the thunder synthesizer from that! It's so realistic, especially considering that a wimpy 8-bit processor is synthesizing the spark and multi-tap delay in limited memory.

Brian Willoughby
Sound Consulting

On Mar 20, 2017, at 3:08 PM, MTG <grant at musictechnologiesgroup.com> wrote:
> I would guess though, at least for the 8-bitter's, that the code for synths and such was 100% assembler. Maybe even a little bit of hand assembled stuff thrown in during edits. It's quite possible that some of the very early synth were done by hand rather then with an assembler -- mainly because you needed a decent PC to run an assembler (though an Apple II had an assembler for 6502 and maybe some of the other early 8-bit PCs did too). That would explain gaps and nonsense in the code as edits were done.
> The unreachable code may very well be the fault of improper interpretation of the disassembled code. If you get out of step with opcode or operand, or try and interpret constant data as executable you will find you way into the weeds quite quickly.
> Whenever I have done this, I have taken the disassembled result and reassembled it back to the binary image for comparison. Then as you start to fill in the "holes" with addresses or labels, you can reassemble and verify you haven't messed up. I can't say I've done it a lot, but I did spend some time on the JX3P (8051) and DX7 (6303 ~ 6800) and a few others I've since forgotten about.
> Probably Terry can chime in here with an inside perspective. Myself, I did a sequencer for the Roland SH3A using a 6809 assembler on a mainframe (1982) at school. Here is a link to a Decwriter printout (you have to flip it to read it) from 1983 for the 6809:
> http://musictechnologiesgroup.com/images/GregsWaveTable.jpg

More information about the Synth-diy mailing list