Thanks so much for the detailed reply. I love this stuff!
It always amazes me what proper embedded programmers can do within the constraints of the hardware. Constrained stack pointer limiting to 16 bytes!?! That kind of stuff would KILL me. Not to mention UV-ROM...not the kind of thing that promotes trial-and-error as one's debugging approach. It's stuff like this that separates the pros from the enthusiasts.
Of course, I could have used a Raspberry Pi instead of an Arduino. Then I could have run a webserver on my Polysix and you could have played it in ∗my∗ living room directly from ∗your∗ web browser. Of course, then my Polysix would have been taken over by a botnet and become a spam factory. Oi! If I'm not man enough for the 8049, I'll just stick with the Arduino, I guess.
Thanks for the cool talk!
Chip
--- In PolySix@yahoogroups.com, Johannes Hausensteiner <johau@...> wrote:
>
> Hi,
>
> The 8048 MPU used for the Polysix Programmer has 64Bytes of RAM and
> 1K of ROM on chip. All code plus some lookup tables are inside this
> onchip ROM. All variables, etc. used by the firmware are located inside
> the onchip RAM. The external RAM chip is solely used for saving the
> patches (each patch has 16 bytes: 14 analog knobs and two bytes packed
> switches; 16 bytes x 32 patches = 512bytes RAM capacity; organized as
> 1024 x 4bits).
> The 8048 has a hardware stack, which means that the stack is fixed at
> certain RAM addresses and the stack pointer is managed by the HW and
> not visible for the SW. The stack pointer is 3bits wide thus setting the
> stack size effectively to 16 bytes; each stack entry occupies two
> bytes, the 12bit program counter (PC) plus the 4bit program status word
> (PSW). Thus the stack is 8 levels (subroutine calls) deep. There is
> no PUSH or PULL instruction (the PIC 5x series can only call one
> subroutine if remember correctly).
> The 8049 used for the Key Assigner has double amount of memory: 128Bytes
> RAM and 2K ROM (there used to be an 8050 with 4K of ROM, thus 12bit PC).
>
> The 8048 was quite popular at that time; it was the first single-chip
> microcontroller made by Intel. So it happened that it had been used
> at the company where I was working during the 1990s. So there were
> the development tools plus a number of (UV-erasable) chips available
> for me (remember, at this time you would not just go to the internet
> and download a compiler etc. for free ...). Btw. there is no C-compiler,
> it is all in assembler. Later on I purchased a license of the "Telemark
> Cross Assembler" (http://home.comcast.net/~tasm/) which due to its
> table-driven design is capable of assembling for a variety of CPUs.
>
> I was not sure whether I was capable of doing this "microprocessor
> stuff". So I made a little test project, a MIDI note separator,
> utilizing a 8748 (the UV-erasable variant of the mask-programmed 8048).
> It turned out that I was fine with programming and so I turned to the
> real project I had in mind: modifications to the Polysix firmware with
> possible MIDI capabilities. First step was that I had to make a
> disassembler and read the firmware. This was quite a project and took
> some time. I was through the programmer code and started working on the
> key assigner when I came across Ricard Wanderlöf's Polysix page who
> had re-engineered the whole Polysix control (programmer plus key
> assigner) with added MIDI into a Z80 design.
>
> The 1K program memory of the programmer is rather used up as well. There
> are some stray unused bytes here and there so I managed to make a
> slightly altered version to support my programmable bend wheel
> modification. It was not strictly necessary but added to the usability.
>
> Interestingly they used the same mask for the programmmer in the
> Trident MKII (8048-345) and the same key assigner in the Mono/Poly
> and Poly-61 (8049-217).
>
>
> I hope this satisfys everyone's curiosity...
>
> Johannes
>
>
> On 2013-07-10 13:02, chipaudette wrote:
> >
> >> I can tell you that the key assigner CPU program space is
> >> used up to the last byte. So probably they had to skip some
> >> functionality ...
> >>
> >> Johannes
> >
> > This comment really interests me!
> >
> > My own code (as reported by the Arduino IDE) is coming in around 24 kB.
> > Of course, my code has more functionality (some not yet blogged about),
> > which soaks up some program space. For example I still have some print
> > statements in there, and I've got a bunch of 32-bit accumulators, and I
> > do some floating point operations, which require floating point emulation
> > routines. So, sure, my code is bloated by comparison. But, even at its
> > slimmest, earliest existence, I still think that it was as around 12 kB
> > (again, as reported by the IDE...so is the Arduino boot loader part of
> > that?).
> >
> > How much ROM space did the Korg programmers have to work with? How can
> > you tell that it's full? Where you able to extract the code and
> > de-compile it in any way? Did you learn anything cool about how they
> > thought about the problem of running this thing?
> >
> > Chip
> >
>