Prophet 600: A Classic Synthesizer Gets Processor Upgrade

proph-600

We love classic synthesizers here at Hackaday. So does [gligli], but he didn’t like the processor limitations of the Prophet 600. That’s why he’s given it a new brain in the form of a Teensy++. The Sequential Circuits Prophet 600 was a big deal when it was released back in 1982/1983. The 600 was the first commercially available synthesizer to include a MIDI interface. The original design of the 600 could be called a hybrid. A Zilog Z80 microprocessor controlled modular analog voice chips. The Z80 was a bit stressed in this configuration though, and a few limitations were evident. An 8 bit processor just wasn’t quite enough for software driven envelopes and a Low Frequency Oscillator (LFO) control. This was further exacerbated by the fact that everything was driven through a 14 bit DAC.

[gligli] discovered most of the limitations in the 600 were due to the processor. By beefing up the processing power he could really unlock the potential within 600. Since he didn’t actually have a Prophet 600, he started with the schematic. [gligli] created a PC based emulator for the digital circuits, learning the whole system as he worked. With that phase complete, [gligli] bought a used Prophet and started hacking. The Teensy++ required a few hardware mods to fill the Z80′s shoes, including cutting off a pin and adding a few jumper wires. We really like the fact that no changes to the Prophet 600 itself are required. Pull out the Teensy++, drop in the Z80, and you’re ready to party like it’s 1982 again.

The new processor interfaces directly with the Z80′s 8 bit bus. Since the AVR on the Teensy has built-in RAM and ROM, it simply ignores the ROM and RAM address spaces of the original system. Interfacing a fast micro with older parts like an 8253 timer and a 68B50 UART does have its pitfalls though. The system bus had to run slow enough to not violate timing requirements of the various peripheral chips. To handle this, [gligli] added a number of wait statements in his firmware. Once the system was working, [gligli] was free to start adding new features. He began by smoothing out the stepped envelope and filter generators, as well as adding new exponential modes. From there he added new keyboard polyphony modes as well as pitch and mod wheel changes. The full lineup of new features are listed in the instruction manual (PDF link). Since this is an open source project, adding a feature is as simple as cracking open your favorite editor and writing it up.

Continue reading “Prophet 600: A Classic Synthesizer Gets Processor Upgrade”

Reverse Engineering the Z80′s 16-bit Increment/Decrement Circuit

z80

Increment and decrement. They sound like simple functions. But even the simplest functions can get quite complex in a microprocessor design. Ken Shirriff has written up a great blog post about his reverse engineering of the Z80′s 16-bit increment/decrement circuit. The Zilog Z80 was one of the most popular microprocessors of the 70’s and 80’s. It was used in many classic computers such as the Osborne 1. These machines would often use the Z80 to run the popular CP/M operating system.

The increment/decrement circuit is responsible for updating the program counter register during normal (non branch) operations. The increment/decrement circuit also handles the stack pointer register during stack operations, as well as several other functions. One might wonder why a separate adder would be used when the microprocessor has a big ALU available to it. The answer is twofold. First the ALU is already in use handling user math operations. Secondly the increment/decrement circuit has to be fast. A generic ALU just won’t be fast enough.

One classic adding circuit is a Ripple Carry Adder. Ripple Carry Adders get the job done, but they are slow. Note slow is measured in nanoseconds here – there are no clocks involved in the circuit. The whole thing becomes a classic combinational logic optimization problem. Each layer of logic adds a gate delay to the circuit. As the carry has to ripple through all 16 bits, there are 16 gate delays before the final result is available at the outputs. Delays like these are what limits the maximum clock speed for a given circuit.

The Z80 uses some tricks in its increment/decrement circuit. The first is Carry-lookahead. A carry-lookahead circuit will calculate the carry values directly from the inputs. This reduces the gate delays significantly, but it requires more real estate on the die. A second trick is the carry-skip circuit. Carry-skip calculates the result for groups of bits rather than each bit individually. Again, it will reduce gate delays, at the cost of real estate. The actual Z80 implementation uses a mix of both circuits. Several other “helper” circuits are also used. Surprisingly the Z80 has specific logic just to check for 1 (0×0001) on the internal address bus. This circuit is used during memory move loops to inform other parts of the chip that a loop is about to complete.