Archive of the former Yahoo!Groups mailing list: Discussion about the Korg PolySix synthesizer

previous by date index next by date
previous in topic topic list next in topic

Subject: Re: [PolySix] Re: Adding a Sustain Pedal

From: Johannes Hausensteiner <johau@gmx.net>
Date: 2013-07-11

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
>