Sometimes I’m bored while watching bad Netflix B movies... and this stuff happens...
In the Logic environment you can use transformer maps to store and manipulate incoming MIDI data in real-time.. but you’re limited to 128 locations per map. So it got me thinking of ways to work around it. I was reading about general computer architecture and people making simple computers out of relays when it struck me that I could almost model core memory out of MIDI objects! So after reading a little more research how RAM operates in general - it seamed feasible that something similar could be built.
Here’s my 16 x 16 “RAM” matrix. X and Y coords can be dialed in from a slider and you can then push a data value to the exact position with a value of 0 to 127. So now, you have 256 addressable storage areas! Because MIDI only moves in one direction, there’s a secondary MIDI event trigger that pushes that selected position data to the output bus.
Then I thought - why not take this into 3 dimensions with a X, Y and Z addressing like the old memory cubes! So, by rigging up a 16ch switch acting as Z axis, you can now read and write on up to 16 layers of X and Y memory positions. It looks like a mess - but it’s the same thing sandwiched on top of itself x 16. Blue cables are the Z addressing.
So there you have it, From an initial map limit of saving 128 values.. to now being able to store and recall up to 4096 values in any order!! Nuts!!
Currently each one of these ‘Ram’ addresses is a MIDI fader storing a value.
Then - I took it a step beyond. Instead of using a MIDI fader to store a value, what if transformer map was used instead? Then things get really interesting as each ‘Ram’ address can have a further 128 internal positions that you can store and recall a 0-127 value!
Now data storage jumps from 4096 to 32768 locations PER Z slice. So if each 16 x 16 x 256 slice was arrayed in a stack of 16 (Z) you have 524288 memory locations! That’s a ton of addressable information! Maybe I can feed it punch card style programming and make space invaders - in Logic Audio. Here's a single Z slice - each one of these can be fully packed into a macro.
Below are some examples of fully working modules:
CLOCK: This is just a general sequential clock that Advances each additional variable on rollover - so perfect for skimming through all those memory addresses quickly. It flip-flops between a Switch set and data push clock. This way, there's no chance of timing errors as Logic has a chance to set all the switches correctly before read/writing information.
MEMORY ACCESS: This controls which MAP/X/Y/Z position in the memory is being read or written to.
TEXT PROGRAMMER: By defining some memory values that equal i.e.: Display Text, the data in memory can be used to save text information. Suitable for a display. Using this simple programmer is the equivalent of programming using a keypad vs. manual drawing map values within a transformer (like punch cards! Ewe!)
DISPLAY DRIVER: This is an example of a subroutine. If a certain memory value is read (in my case, I defined value 80 as TEXT) the memory data further read will be redirected to this display driver. It basically decodes the map data and enters it as text on that little 3 row display! I've defined numbers 0-9, a -z, A - Z and 'blank' as options and these can be freely written to any row/position. As soon as the display driver reads 127, that's my universal value for "EXIT' subroutine and read memory data is directed back on to the main midi pathway.
BCD COUNTER: This will read a clock pulse and count.
As the stored data can represent anything that can further control anything, I did some further experiments and created code-equivelent subroutine control, if/then loops, switch control, text decoders, counters and so on. Take super small chunks of these memory systems can be easily turned into small memory registers, ROM for creating programs and so on.
Honestly, I don't know the point of any of this stuff - but it was a good brain buster trying to figure out. So that's why I tried. The fact that it's running within Logic Pro is kinda neat.