Love the creativity on this thread!
I’ve been working (in another thread) on a couple of expanders for the Teletype that connect over the II bus. The first one is an output expander (Telex-O). I’ve put a little extra CPU horsepower and DAC resolution than the job calls for in the hopes that I can go a little beyond the current command set. I’ve also designed in some jumpers that can be used to have more than one expander connected to a single Teletype. To these ends, I’d like to propose a few enhancements to the Teletype as a part of this thread:
1) Separate the II address spaces for module address and for commands. That is, rather than drawing everything from one address space (see ii.h in the skeleton), I suggest that we have one space for device addresses and individual spaces for each module and their commands. (I also have a fantasy that these could also be imported at run time from the USB drive, but I’m a realist in why this could also be a bit of a disaster and am not advocating for it.)
2) Enable organic addressing of multiple devices of the same type on the II bus. For this, we add the concept of channel for an II device. Channel is used in two ways. First, it is explicitly set and operates on an undecorated device designation like this:
II TO.CHANNEL 2
II TO.CV1 V 5
II TO.CHANNEL 1
II TO.CV1 V 1
This method eats a line to change channels, but allows for some fun as the channel # can be dynamically altered. The second way is to explicitly call the channel in the device designation:
II TO2.CV1 V 5
II TO1.CV1 V 1
Much more compact when you don’t want to dynamically vary the device’s channel.
3) For the expander, I’m planning to add some oscillation capabilities on its four CV outputs. Ideally this for LFOs, but the hardware should also be capable of driving things up into the audio range. The outputs are also bipolar, if one wants to use them that way. Here is what I am thinking:
To address the bipolar nature of the expander and its high-resolution DACs, MIN and MAX flexibly set a scaling range for the CV output (they could even be inverted):
MIN - sets the minimum voltage for the CV’s scaled range (default: 0V; range: -10V to +10V)
MAX - sets the minimum voltage for the CV’s scaled range (default: +10V; range: -10V to +10V)
To handle oscillation in the expander, these three settings address the rate of oscillation (and would override each other):
FREQ - sets the oscillation frequency of the CV output in HZ (default: 0 Hz - no oscillation; range: 0 Hz - ? kHz)
PERIOD - sets the oscillation frequency of the CV output in ms
CYCLE - sets the oscillation frequency of the CV output in seconds (enabling really long-ass cycles which make me happy)
RESET - starts the oscillation over from the beginning
To control the waveform of the oscillation in the expander:
WAVE - sets the waveform for the oscillation (e.g. square, triangle, ramp/saw, sine, pulse(s), random, …)
SHAPE - a wave shaper that goes from logarithmic to neutral to exponential
NOTE: The existing SLEW command would still have an effect on the waveform as well if it is oscillating on a PERIOD or CYCLE.
This LFO implementation is primarily expander-specific would not replace what has been proposed by @trickyflemming and @Galapagoose (and the awesome RAMP concept above). I do think, however, that some of the functionality could come back into the Teletype within its hardware imposed limits (0V floor and max frequency) if people were interested.
4) Bi-Directional II is very interesting to me, as is polling via II. The second expander that I’m thinking about has four CV inputs and four independent knobs. I had been planning the latter (polling) to keep it in tune with the TT’s existing CV read metaphor and to also keep the II bus relatively uncluttered. (I only hope that it is fast enough and doesn't bog down the execution loop - would still need to do R&D to see.)
On a related note, I would love to be able to share the metronome across the bus and sync external devices to it - thereby saving a trigger output. Not that I’m planning to use it for anything in the expanders (initially).
Thx for letting me chime in!