Sunday, March 7, 2010

My 1990's hand made co-processor for my Amiga



Yet another prehistoric thing I took out from my boxes...
In 1990, when working as a student in my "engineering school" in Paris (EFrEI), someone managed to grab a bunch of Motorola DSP56001 Micro-controllers. I bought one in the hope to do something with it.
I was lucky at this time : I was part of a Club in Melun (France) where lots of people were joining the group to share their passions. I managed to get the whole equipment to perform the job in my bedroom : I borrowed a signal analyzer so that I could make sure that data and address bus were properly synchronized; I borrowed the whole stuff to wrap thing by hand and to make sure signals weren't bothered too much by any electrical noise...
At the same time, the good thing with Amiga was that lots of literature was available in order to understand how the motherboard was made and how the chips were working.

But nothing would have been possible if I didn't get the chance to get the whole development kit from Motorola. It is indeed one thing to wrap thing together. But it is another story to write assembly code; check it; simulate it; send it to the card and finally trigger the DSP to run the whole stuff.
In fact I am not sure it is only about luck. At this time I had lots of passion in anything related to computers. So I just picked-up the phone and tried many times to call Motorola until someone accepted to listen to me. I guess I convinced the guy (or he was desperate to get rid of me at any cost ;-) because he broke the rules by sending me the whole package for free, so I could work with this DSP. I am very grateful to him. It was wonderful to see that some people in such big groups are still willing to help young guys in their adventure.

The board is made of 3 parts: static memory (this was easier because, although fragile, it doesn't require any sort of special refresh system...); address mapper and a bus switch so that I could expose the memory to the Amiga computer in order to upload the programs and read/write some data; and of course the DSP.

So, When the whole stuff was connected, I started to trigger some basic operations that I knew how to identify on the data bus and address bus. This allowed me to correct the signals on the wires.

When everything went alright, I started to write more fancy things. In fact I confess I didn't do so much but the few I did was very cool.
The way I used this micro-controller was as follow: write my code; compile it; simulate it; then an application written in assembly was running in fullscreen to send the compiled code to the memory; send some data to another area; trigger the DSP with an interupt signal; then read back some memory that you can now consider as an offscreen buffer (renderbuffer...) and display the result on screen.
This DSP was running at 16Mhz if I recall correctly. Which wasn't much. But this was way better than the Amiga, especially when you know that a DSP has some specialized opcodes that helped for some computations.

The main application I wrote was a realtime Mandelbrot fractal generator. In fact I could scroll in reatime (~15fps) into Mandelbrot set by computing new upcoming lines depending on the scroll. But even the whole set didn't take much time (few seconds). This was amazing when you know that, at this time, people got the same result in ~25 minutes (!) when using the computer only.
At the same time I was demoing the 3d demo (discussed in my previous post). I took the opportunity to show the board. But first, I had fun by hiding the board and by showing the perfs to some other fellows who were demoing the same Mandelbrot set computation with their Amiga computer.

The second test I wrote was a... rasterizer ! I could render shaded triangles (no texture...) in my offscreen buffer. So I could really speed-up the rendering of some of my assembly tests in filled triangles... I confess that I started the rasterizer from a reverse-engineering work of a game that I hacked : Starglider 2 (this game was a reference for me and I spent lots of energy to take out the whole rendering path to reproduce it on my DSP... I was a bit of a nerd at this time...)

Then time passed and I switched to other topics... but this was fun. I didn't want to make money out from this thing (although I received some offers to develop the idea). I just wanted to make this happen as a challenging experience. This was during my 2nd year of a 5 year school program. My teachers were quite amazed to see how I could make this thing work : some parts were quite clunky. Furthermore, students often try this kind of project even after their 5 years study...

No comments:

Post a Comment