OBERHEIM SYNTH group photo

Yahoo Groups archive

OBERHEIM SYNTH

Index last updated: 2026-04-28 23:39 UTC

Thread

Faster CPU & firmware mod for the Oberheim Matrix 1000

Faster CPU & firmware mod for the Oberheim Matrix 1000

2014-08-15 by gligli.ml@...

Hello,

I'm working on a CPU / firmware mod for the Matrix 1000, I talk about it there:

http://gliglisynth.blogspot.fr/2014/08/new-synth-hacking-project-faster-cpu.html

For now, it includes version 1.1.3 changes and adds:

- Much faster MIDI processing.

- A "turbo" mode where the whole synth engine runs twice faster, that means faster envelopes, LFOs, ...

It's still in alpha stage and other improvements and fixes may still be done (eg: CC for all parameters) but if anyone wants to try it, it's free and uses only relatively common parts.

Re: Faster CPU & firmware mod for the Oberheim Matrix 1000

2014-08-15 by lists@...

Interesting. The 6309 idea was one I had a while back but I never got my hands on a M100 to test it.
Are you running the 6309 in emulation or native mode? Apparnty the latter increases a number of instruction cycle times. Since you're using a flag bit (great idea by the way) the cycle changes might not matter to timing.

Re: Faster CPU & firmware mod for the Oberheim Matrix 1000

2014-08-15 by gligli.ml@...

Yes, I run it in native mode. Timing isn't a problem as everything time-based is clocked by the timer IRQ, and the 10-15% speed increase is always good to take!
---In oberheim@yahoogroups.com, <lists@...> wrote :
Interesting. The 6309 idea was one I had a while back but I never got my hands on a M100 to test it.
Are you running the 6309 in emulation or native mode? Apparnty the latter increases a number of instruction cycle times. Since you're using a flag bit (great idea by the way) the cycle changes might not matter to timing.

R: [oberheim] Re: Faster CPU & firmware mod for the Oberheim Matrix 1000

2014-08-18 by F.Manduca

Well, what to say about it? It's still a joy for the heart to see that these old machines reveal this hidden potential, and also to see good will people that takes care of them.... Keep on developing the good work!!
--------------------------------------------
Ven 15/8/14, gligli.ml@... [oberheim] <oberheim@yahoogroups.com> ha scritto:

 Oggetto: [oberheim] Re: Faster CPU & firmware mod for the Oberheim Matrix 1000
 A: oberheim@...m
 Data: Venerdì 15 agosto 2014, 20:48
 
 
  
 
 
 
   
 
 
     
       
       
       Yes, I run it in native mode. Timing isn't a
 problem as everything time-based is clocked by the timer
 IRQ, and the 10-15% speed increase is always good to
 take!---In
 oberheim@yahoogroups.com, <lists@...> wrote :Interesting. The 6309
 idea was one I had a while back but I never got my hands on
 a M100 to test it.Are you running the 6309
 in emulation or native mode? Apparnty the latter increases a
 number of instruction cycle times. Since you're using a
 flag bit (great idea by the way) the cycle changes might not
 matter to timing.
 
     
      
 
     
     
 
 
 
 #yiv0637312381 #yiv0637312381 --

Re: [oberheim] Re: Faster CPU & firmware mod for the Oberheim Matrix 1000

2014-08-18 by Neil Hester

Yes please keep us updated on how things go, I'm very interested in performing these mods when they are ready for the public and also interested if it gets developed for the M6R

Neil Hester
Show quoted textHide quoted text
On 18 August 2014 15:12, 'F.Manduca' resistenzaaoltranza@... [oberheim] <oberheim@yahoogroups.com> wrote:

Well, what to say about it? It's still a joy for the heart to see that these old machines reveal this hidden potential, and also to see good will people that takes care of them.... Keep on developing the good work!!
--------------------------------------------
Ven 15/8/14, gligli.ml@... [oberheim] <oberheim@yahoogroups.com> ha scritto:

Oggetto: [oberheim] Re: Faster CPU & firmware mod for the Oberheim Matrix 1000
A: oberheim@yahoogroups.com
Data: Venerdì 15 agosto 2014, 20:48














Yes, I run it in native mode. Timing isn't a
problem as everything time-based is clocked by the timer
IRQ, and the 10-15% speed increase is always good to
take!---In
oberheim@yahoogroups.com, <;lists@...> wrote :Interesting. The 6309
idea was one I had a while back but I never got my hands on
a M100 to test it.Are you running the 6309

in emulation or native mode? Apparnty the latter increases a
number of instruction cycle times. Since you're using a
flag bit (great idea by the way) the cycle changes might not
matter to timing.









#yiv0637312381 #yiv0637312381 --
#yiv0637312381ygrp-mkp {
border:1px solid #d8d8d8;font-family:Arial;margin:10px
0;padding:0 10px;}

#yiv0637312381 #yiv0637312381ygrp-mkp hr {
border:1px solid #d8d8d8;}

#yiv0637312381 #yiv0637312381ygrp-mkp #yiv0637312381hd {
color:#628c2a;font-size:85%;font-weight:700;line-height:122%;margin:10px
0;}

#yiv0637312381 #yiv0637312381ygrp-mkp #yiv0637312381ads {
margin-bottom:10px;}

#yiv0637312381 #yiv0637312381ygrp-mkp .yiv0637312381ad {
padding:0 0;}

#yiv0637312381 #yiv0637312381ygrp-mkp .yiv0637312381ad p {
margin:0;}

#yiv0637312381 #yiv0637312381ygrp-mkp .yiv0637312381ad a {
color:#0000ff;text-decoration:none;}
#yiv0637312381 #yiv0637312381ygrp-sponsor
#yiv0637312381ygrp-lc {
font-family:Arial;}

#yiv0637312381 #yiv0637312381ygrp-sponsor
#yiv0637312381ygrp-lc #yiv0637312381hd {
margin:10px
0px;font-weight:700;font-size:78%;line-height:122%;}

#yiv0637312381 #yiv0637312381ygrp-sponsor
#yiv0637312381ygrp-lc .yiv0637312381ad {
margin-bottom:10px;padding:0 0;}

#yiv0637312381 #yiv0637312381actions {
font-family:Verdana;font-size:11px;padding:10px 0;}

#yiv0637312381 #yiv0637312381activity {
background-color:#e0ecee;float:left;font-family:Verdana;font-size:10px;padding:10px;}

#yiv0637312381 #yiv0637312381activity span {
font-weight:700;}

#yiv0637312381 #yiv0637312381activity span:first-child {
text-transform:uppercase;}

#yiv0637312381 #yiv0637312381activity span a {
color:#5085b6;text-decoration:none;}

#yiv0637312381 #yiv0637312381activity span span {
color:#ff7900;}

#yiv0637312381 #yiv0637312381activity span
.yiv0637312381underline {
text-decoration:underline;}

#yiv0637312381 .yiv0637312381attach {
clear:both;display:table;font-family:Arial;font-size:12px;padding:10px
0;width:400px;}

#yiv0637312381 .yiv0637312381attach div a {
text-decoration:none;}

#yiv0637312381 .yiv0637312381attach img {
border:none;padding-right:5px;}

#yiv0637312381 .yiv0637312381attach label {
display:block;margin-bottom:5px;}

#yiv0637312381 .yiv0637312381attach label a {
text-decoration:none;}

#yiv0637312381 blockquote {
margin:0 0 0 4px;}

#yiv0637312381 .yiv0637312381bold {
font-family:Arial;font-size:13px;font-weight:700;}

#yiv0637312381 .yiv0637312381bold a {
text-decoration:none;}

#yiv0637312381 dd.yiv0637312381last p a {
font-family:Verdana;font-weight:700;}

#yiv0637312381 dd.yiv0637312381last p span {
margin-right:10px;font-family:Verdana;font-weight:700;}

#yiv0637312381 dd.yiv0637312381last p
span.yiv0637312381yshortcuts {
margin-right:0;}

#yiv0637312381 div.yiv0637312381attach-table div div a {
text-decoration:none;}

#yiv0637312381 div.yiv0637312381attach-table {
width:400px;}

#yiv0637312381 div.yiv0637312381file-title a, #yiv0637312381
div.yiv0637312381file-title a:active, #yiv0637312381
div.yiv0637312381file-title a:hover, #yiv0637312381
div.yiv0637312381file-title a:visited {
text-decoration:none;}

#yiv0637312381 div.yiv0637312381photo-title a,
#yiv0637312381 div.yiv0637312381photo-title a:active,
#yiv0637312381 div.yiv0637312381photo-title a:hover,
#yiv0637312381 div.yiv0637312381photo-title a:visited {
text-decoration:none;}

#yiv0637312381 div#yiv0637312381ygrp-mlmsg
#yiv0637312381ygrp-msg p a span.yiv0637312381yshortcuts {
font-family:Verdana;font-size:10px;font-weight:normal;}

#yiv0637312381 .yiv0637312381green {
color:#628c2a;}

#yiv0637312381 .yiv0637312381MsoNormal {
margin:0 0 0 0;}

#yiv0637312381 o {
font-size:0;}

#yiv0637312381 #yiv0637312381photos div {
float:left;width:72px;}

#yiv0637312381 #yiv0637312381photos div div {
border:1px solid
#666666;height:62px;overflow:hidden;width:62px;}

#yiv0637312381 #yiv0637312381photos div label {
color:#666666;font-size:10px;overflow:hidden;text-align:center;white-space:nowrap;width:64px;}

#yiv0637312381 #yiv0637312381reco-category {
font-size:77%;}

#yiv0637312381 #yiv0637312381reco-desc {
font-size:77%;}

#yiv0637312381 .yiv0637312381replbq {
margin:4px;}

#yiv0637312381 #yiv0637312381ygrp-actbar div a:first-child {
margin-right:2px;padding-right:5px;}

#yiv0637312381 #yiv0637312381ygrp-mlmsg {
font-size:13px;font-family:Arial, helvetica, clean,
sans-serif;}

#yiv0637312381 #yiv0637312381ygrp-mlmsg table {
font-size:inherit;font:100%;}

#yiv0637312381 #yiv0637312381ygrp-mlmsg select,
#yiv0637312381 input, #yiv0637312381 textarea {
font:99% Arial, Helvetica, clean, sans-serif;}

#yiv0637312381 #yiv0637312381ygrp-mlmsg pre, #yiv0637312381
code {
font:115% monospace;}

#yiv0637312381 #yiv0637312381ygrp-mlmsg * {
line-height:1.22em;}

#yiv0637312381 #yiv0637312381ygrp-mlmsg #yiv0637312381logo {
padding-bottom:10px;}


#yiv0637312381 #yiv0637312381ygrp-msg p a {
font-family:Verdana;}

#yiv0637312381 #yiv0637312381ygrp-msg
p#yiv0637312381attach-count span {
color:#1E66AE;font-weight:700;}

#yiv0637312381 #yiv0637312381ygrp-reco
#yiv0637312381reco-head {
color:#ff7900;font-weight:700;}

#yiv0637312381 #yiv0637312381ygrp-reco {
margin-bottom:20px;padding:0px;}

#yiv0637312381 #yiv0637312381ygrp-sponsor #yiv0637312381ov
li a {
font-size:130%;text-decoration:none;}

#yiv0637312381 #yiv0637312381ygrp-sponsor #yiv0637312381ov
li {
font-size:77%;list-style-type:square;padding:6px 0;}

#yiv0637312381 #yiv0637312381ygrp-sponsor #yiv0637312381ov
ul {
margin:0;padding:0 0 0 8px;}

#yiv0637312381 #yiv0637312381ygrp-text {
font-family:Georgia;}

#yiv0637312381 #yiv0637312381ygrp-text p {
margin:0 0 1em 0;}

#yiv0637312381 #yiv0637312381ygrp-text tt {
font-size:120%;}

#yiv0637312381 #yiv0637312381ygrp-vital ul li:last-child {
border-right:none !important;
}
#yiv0637312381


Re: Faster CPU & firmware mod for the Oberheim Matrix 1000

2014-08-18 by lists@...

Great stuff.
This is super coincidental actually. I've been looking into modding the M1000 for a bit but realized it was a bit out of my league to do from scratch. (Not an 8bit ASM hacker). What I have been working in the mean time since it's more up my alley, is porting your prophet 600 firmware to my Six Trak.
I've made some early progress. I have some debugging questions which I'll shoot over to you in a direct e-mail sometime this week once I have done my own due diligence.

Re: Faster CPU & firmware mod for the Oberheim Matrix 1000

2014-08-19 by jan@...

Any luck rewriting the occasional multiply routine with the new 6309 instructions? ;) And does turbo mode mean you are switching to the faster CPU clock?
This is a fun project, and it's great. I had dreamt up something similar (I've already bought a couple of 6309s on Ebay), I only lacked the time and courage to try it. Discussing the idea with a guy who had taken a pretty deep look at the code, his opinion was that you'd have to do a very thorough rewrite, which would make the project cumbersome.

Another potential problem is that, strictly speaking, with the higher CPU clock some of the peripherals are accessed out of specification (AFAIK the 6850 and maybe even the timers, haven't looked it up again), so it might not work on any and all M1000s. But it's definitely worth trying, and I'll do that as soon as I get round to it. Once again, kudos for starting this brilliant hack.

Mind giving us a bit of geek porn, i.e. more descriptions on what you actually did and how it works code-wise?

Re: Faster CPU & firmware mod for the Oberheim Matrix 1000

2014-08-19 by jan@...

Incidentally, if anybody else wants to have a look at the M1000 code - or add his or her knowledge to the disassembly - I've started a small project collecting technical info on the M1000's hardware and software - as brief primer, most of it collected from other sources like Wolzow's page. I hope that it might serve as your basic Matrix-1000 wiki - so if you find errors or have some insight to add, please go ahead.
The hardware primer is here: Matrix-1000 Hardware Primer - Google Docs

With the firmware, I am working on a so-called info file; a text file with all the additional information a disassembler may use to produce code that humans can actually understand.

The info file is very much work in progress - still reorganising the labels I got - and can be found here:



The disassembly owes most of it to a generous code donation by one of the original M1000 reverse engineers, who asked to stay anonymous. (You'll guess who it is anyway;)

A ready-to-use-disassembled assembler code file of v1.13 can be found in my dropbox - but that may lag behind the info file.

Re: [oberheim] Faster CPU & firmware mod for the Oberheim Matrix 1000

2014-08-19 by Killian Darkwater

Holy cow, the father of the amazing p600fw has taken up the m1000 challenge.
I'm beyond excited to see this go forward!!

Show quoted textHide quoted text
On Aug 15, 2014 2:35 PM, "gligli.ml@... [oberheim]" <oberheim@yahoogroups.com> wrote:

Hello,I'm working on a CPU / firmware mod project for the Matrix 1000, It's still in alpha stage but I thought you might be interested.Here's a blog post about it: http://gliglisynth.blogspot.fr/2014/08/new-synth-hacking-project-faster-cpu.html

For now, the project includes changes from version 1.1.3 and adds:- Much faster MIDI processing.- A "turbo" mode where the whole synth runs twice faster, including LFOs and envelopes.With a bit more work, stuff like CC for all parameters could be added too I think.

Re: Faster CPU & firmware mod for the Oberheim Matrix 1000

2014-08-20 by gligli.ml@...

Hello, I made some more progress!First I wrote a basic M1000 emulator to ease further programming/hacking, see: http://gliglisynth.blogspot.fr/2014/08/matrix-1000-emulator.html

And second, I fixed NRPN support for the Matrix 1000, there was a silly bug that always added 128 to the "Param #". There's less than 128 parameters, so you could never edit anything!
Just write 0x00 instead of 0x80 and offset 0x4694 in the firmware and NRPN begins to work! (can be applied to 111 or 113)
Also, here's my modded version 124 with that fix: http://sfx.gligli.free.fr/zik/m1k/MATRIX_124.BIN

PS: voidtm, cool you want to port my code to the SixTrak! It won't be an easy task making it multitimbral tho.

Re: Faster CPU & firmware mod for the Oberheim Matrix 1000

2014-08-20 by lists@...

re: Six Trak.
Yeah, it's a challenging task. So far it boots and remains stable, but the I/O addressing must be different because the button scanner gives invalid results. Hardware and assembly aren't my strong points, I'm an iPhone developer by trade so I'm usually not having to decompile and trace asm much. That's why these projects are more of a learning experience. I e-mailed you with some questions directly under my real name, Joe. Not sure if they went through, I had a bounce back the first time I tried.


Since the Six Trak project is delayed while I learn more about the hardware, I have about a week until my Hawk EX-800 comes which I really want to make a Max for Live editor for. So that gives me a few days to make the M1000 sim OS X compatible (and Linux most likely).

Waste deep in synth projects suddenly.

R: [oberheim] Re: Faster CPU & firmware mod for the Oberheim Matrix 1000

2014-08-25 by F.Manduca

Ahhhh, You are really spoiling us, pal..... :-)

--------------------------------------------
Mer 20/8/14, gligli.ml@... [oberheim] <oberheim@yahoogroups.com> ha scritto:

 Oggetto: [oberheim] Re: Faster CPU & firmware mod for the Oberheim Matrix 1000
 A: oberheim@yahoogroups.com
 Data: Mercoledì 20 agosto 2014, 14:49
 
 
  
 
 
 
   
 
 
     
       
       
       Hello, I made some more progress!First I wrote a
 basic M1000 emulator to ease further programming/hacking,
 see: http://gliglisynth.blogspot.fr/2014/08/matrix-1000-emulator.html
 
 
 And second, I fixed NRPN
 support for the Matrix 1000, there was a silly 
 bug that always added 128 to the "Param #".
 There's less than 128 
 parameters, so you could never edit anything!
  Just write 0x00 instead of 0x80 and offset
 0x4694 in the firmware and NRPN begins to work! (can be
 applied to 111 or 113)
  Also, here's my
 modded version 124 with that fix: http://sfx.gligli.free.fr/zik/m1k/MATRIX_124.BIN
 
 PS: voidtm, cool you want to
 port my code to the SixTrak! It won't be an easy task
 making it multitimbral tho.
 
 
     
      
 
     
     
 
 
 
 #yiv1008768496 #yiv1008768496 --

Re: [oberheim] Re: Faster CPU & firmware mod for the Oberheim Matrix 1000

2014-09-10 by charlie midi gfa

from what i know this will strip the high bits off
leaving only values 127 or less

its been a while

chaz



----- Original Message ----- 
From: "jan@... [oberheim]" <oberheim@yahoogroups.com>
To: <oberheim@yahoogroups.com>
Sent: Wednesday, September 10, 2014 3:52 PM
Subject: [oberheim] Re: Faster CPU & firmware mod for the Oberheim Matrix 
1000
Show quoted textHide quoted text
> I'm not really that far into the disassembly yet, but what I find at that 
> point of the code is this:
>
>         ANDA    #$80                     *C693: 84 80          '..'
>
>
>
> So, no adding, rather an AND, so the patch value would rather have to be 
> 0x7F - or am I wrong there?
>
>
>

Re: [oberheim] Re: Faster CPU & firmware mod for the Oberheim Matrix 1000

2014-09-10 by eidorian@...

I haven't been following this thread but when I was an assembly 
programmer (back in the day) ANDA#$80 would zero out all bits other than 
bit 7.

i.e. binary XYZA BCDE => X000 00000

In C that would be "a = a & 128"

Cheers,
A.


On 2014-09-10 15:56, charlie midi gfa charles.copp@... 
[oberheim] wrote:
Show quoted textHide quoted text
> from what i know this will strip the high bits off
>  leaving only values 127 or less
>
>  its been a while
>
>  > I'm not really that far into the disassembly yet, but what I find 
> at that
>  > point of the code is this:
>  >
>  > ANDA #$80 *C693: 84 80 '..'
>  >
>  > So, no adding, rather an AND, so the patch value would rather have 
> to be
>  > 0x7F - or am I wrong there?

RE: [oberheim] Re: Faster CPU & firmware mod for the Oberheim Matrix 1000

2014-09-11 by chriswareham@chriswareham.demon.co.uk

Hi Jan,

The ANDA instruction will perform a logical and of the contents of register A with the immediate value argument. Register A being the eight most significant bits of register D. In your example, it's performing a logical and on the most significant bit of register A.

Cheers,

Chris

From: oberheim@yahoogroups.com [oberheim@yahoogroups.com]
Sent: 10 September 2014 20:52
To: oberheim@yahoogroups.com
Subject: [oberheim] Re: Faster CPU & firmware mod for the Oberheim Matrix 1000



I'm not really that far into the disassembly yet, but what I find at that point of the code is this:

ANDA #$80 *C693: 84 80 '..'

So, no adding, rather an AND, so the patch value would rather have to be 0x7F - or am I wrong there?



RE: [oberheim] Re: Faster CPU & firmware mod for the Oberheim Matrix 1000

2014-09-11 by jan@...

Gligli is absolutely right. I've figured it out now, sorry for posting first and thinking later.

Took me some time, my 8-bit coding times are long past, and they like to do things the hard way in the Matrix firmware code. So this may serve as a cautionary tale.

The buggy part of the routine deals with the low byte of a NRPN message (remember, in MIDI, there can be 16,384 NRPN controllers, so you need 2 bytes).

The routine expects the MIDI command byte in register A, and the value in register B. What is does is this:
- Read a variable where the NRPN controller value is stored into A - they seem to have expected up to 255.
- Take the MSB of this variable (by ANDing A with #$80).
- Remember, the NRPN_L value you just received now resides in register B.
- Now, add the MSB bit to the NRPN_L byte in a rather original way: Push B to the stack, then OR A with the byte indexed by the stack pointer, and post-increment. (Mnemonic: "ORA ,S+")

Unfortunately, the NRPN value in memory always seems to have its MSB set, so the routine always returns a NRPN parameter number greater than 127. Which is meaningless.

So yes, disabling the MSB setting should fix it. Kudos to Gligli.

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.