ZPU – Programmable ZOIA Computer!

ZOIA’s modules being turing complete, I couldn’t help myself trying out a microprocessor implementation.

It was supposed to be an afternoon project, but after the initial prototype I got more into it, and decided it needed to be programmable over midi, and needed to have some kind of interesting program written for it.
This led to a fair bit of problems sorting out the details and making it actually usable, and the afternoon turned into a week…

I hacked up a programmer, and a small example program here: https://github.com/ggVGc/zpu_programmer

Since the ZOIA only speaks floating point, it’s not exactly easy to program this thing, and memory indexing is still somewhat broken. I am however quite sick of this project now, and have no intention of fixing that.

In earlier iterations I experimented with using In-switchers as memory, which allows for more storage space for instructions, as well as more detailed (manual) control of values.
But all programs need to be entered tediously by hand, just like in the early days.
So, I got tired of that rather quickly.

As a bonus I have now found out what happens when you go over 100% CPU usage. Turns out it’s okay and things keep running!
I did to my best to try to stay within limits, but in the end I seem to have gone up to 105%…

4 comments on “ZPU – Programmable ZOIA Computer!
  • Rob Flax on said:

    Whaaaaat!! Legendary. I have absolutely no reason to ever use this but… wow. How did you determine the modules were Turing complete?

  • ggVGc on said:

    Haha… yeah, it’s not really useful for anyone (including me), and as my friend put it “It’s impressive how much effort you put into making your music things not play music”.
    Looking at the logic modules it’s obvious they are turing complete since we have equivalents of the fundamental building blocks of a modern computer, just with different names.
    – Memory cell (sample and hold)
    – Muxer and Demuxer (in/out switches)
    – Branching logic (comparator)
    – Addition through connections. (Connecting two to the same input is addition)
    – And the most important of all, a transistor, which lets us control one signal by another one. (multiplier, or comparator)

    With these things we can index locations, modify stored data, control operations based on other signals, and take actions based on conditions. And that’s all that’s needed to be turing complete.

    There are some things that a “normal” CPU can do that can’t really be implemented easily, and it’s basically any binary operations. This is also why there are problems with indexing in various ways since everything is “kind of fuzzy” because of ZOIA being all floating point.
    It also messes with addition, since we can’t easily add “exactly X” to something.

    It would have been possible to make everything binary for this project, but then I could never have gotten the whole thing running, or there would have been maybe 4 bits of memory and a program size of a few instructions. And addition etc. would have to be implemented from scratch. And the whole project would have been a lot more boring since it would just have been a bunch of sample-and-hold’s and in/out switches.

    Glad you took the time to check it out and leave a comment anyway!

  • dantahoua on said:

    But in the end, did you crack Enigma code? ;)

  • Loop_Ventitre on said:

    This is sick! (in a good way)

  • Leave a Reply

    • Platform:
    • Category: Other Utility
    • Revision: 1.0
    • License: MIT License
    • Modified: 4 years ago
    • Views: 306
      Likes: 5
      Downloads: 779
    Download