ProjectXG revisited

robinsonb5

New member
AmiBayer
Joined
Jul 27, 2011
Posts
842
Country
England
Region
Norfolk
Anyone remember CU Amiga Magazine's ProjectXG feature many years ago? They published a parts list and instructions in the magazine for interfacing a Yamaha DB50XG WaveBlaster MIDI daughterboard, intended for use with a PC soundcard, to an Amiga.

There were some major flaws in the project, not least that the project box in the parts list had screw pillars in the corners so the board didn't quite fit! (On the mailing list people were advocating getting around this by snapping the corners off the board! :eek: )

The article also advocated wiring it up as a "rats nest", rather than using any kind of circuit board.

Having dug out my Amiga gear recently, and having seen an EBay seller selling similar cards (NEC XR385, rebadged DB60XG) really cheap, I couldn't resist revisiting the old project and making another ProjectXG!

(I sold my original box to VidChick on here, and she suggested / requested the useful addition of a MIDI pass-thru. I'd already added a MIDI-In socket, but she wanted a MIDI-Out socket so events from OctaMED could be sent to a drum machine as well as the XG card. I've included both MIDI ports in the new box.)

Firstly, here's the MIDI sockets and reset button:
DSC_5915.JPG
DSC_5915.jpg

Then the circuit board itself. (Yes, I fed the wrong wire through the wrong hole - but it was all soldered up by the time I realised! :Doh: )
DSC_5912.JPG
DSC_5912.jpg

The cable is an old 40-conductor IDE cable, cut down and the wired I don't need removed. I know from the first time round that soldering directly to a freestanding header is a *nightmare* job - the plastic melts *so* easily, allowing the pins to fall off. So instead I used the original socket from the IDE cable, and plugged a 26-pin length of right-angle header into that, giving me a 26-way header wired and ready to plug into the XG board. (The IDE plug needs to be one that *doesn't* have a key pin blocked.) One nice thing about this is that the odd numbered pins on the Waveblaster header are (nearly) all grounds, so all the signal wires in the ribbon cables are separated by at least one ground wire.
DSC_5913.jpg

The card plugged onto the header and sitting diagonally in the box. It actually fits very nicely diagonally, and the cable has enough spring in it to hold the card nice and tight against the lid when it's closed. Even with no anchoring, nothing rattles around in the box once it's closed.
DSC_5914.JPG
DSC_5914.jpg

The finished box with audio in and out, and a 10K linear mixer pot attached to the lid. The two cables go to the serial port (for +/-12v and serial in/out) and the disk drive port (for +5v power) (The blue hood has only one support pillar because it's a DB25 hood on a DB23 connector!)
DSC_6016.JPG
DSC_6016.jpg

Stripboard layout, in case anyone else wants to have a go at this: The red blobs indicate a strip cut. Not shown are more cuts between opposite pins of each chip, which are obviously also required!
XGBoard.jpg


A few recordings, made using the box I sold to VidChick, and my Amiga 4000. (One track played using OctaMED SoundStudio, the others with my B5MIDI DeliPlayer which can be found on Aminet.)

http://retroramblings.net/XGDemos/
 
Last edited:
@robinsonb5

My sincere thanks for sharing this wonderfull (and lesser known) bit of hackery for the Amiga.

I have here two NEC DB60XG wave table cards and a KORG unit as well. Interestingly the DB60XG's have a Audio LINE IN that can have panning effects added, the DB50XG doens't have this feature, thus you can add the Amiga Audio input into the unit and auto-mix and pan that LINE input.

I have stickied this post, mainly for sheer awesome! but also so we can add some special bits (like an auto reset switch) and the Audio LINE in (input mod) for the DB60XG units.

It would be cool to add some links to software (from AmiNet or Public Domain) to edit / play and track MIDI files =)

Its a great start to what willbe a great thread! keep up the good work robinsonb5(y)
 
I have here two NEC DB60XG wave table cards and a KORG unit as well. Interestingly the DB60XG's have a Audio LINE IN that can have panning effects added, the DB50XG doens't have this feature, thus you can add the Amiga Audio input into the unit and auto-mix and pan that LINE input.

Yup, I was aware of the added Line In on the DB60XG - it can do way more than panning, too - in theory you can apply reverb, chorus, flange, even guitar-amp simulation! I've not had a chance to try it yet, though - have you?

I think it needs some SysEx messages sent to the card to enable the audio in. This page details the commands for the very similar SW60XG (same thing on a standalone ISA card, I believe.) http://www.studio4all.de/htmle/main96.html

I have stickied this post, mainly for sheer awesome! but also so we can add some special bits (like an auto reset switch) and the Audio LINE in (input mod) for the DB60XG units.
Cool - though C6 and the 10K resistor alongside already provide an auto reset switch :) (The button's there to shut the thing up if a software glitch leaves it sounding some sustained notes! Also useful if an XG file leaves the effects set up in such a way that a "notes-only" song with no reset command at the start sounds bad!)

It would be cool to add some links to software (from AmiNet or Public Domain) to edit / play and track MIDI files =)
Also true :) The king of MIDI sequencing software for the Amiga is undoubtedly Bars and Pipes Pro: http://www.amigau.com/c-music/barsandpipes.htm (Hope that's within the rules here - they've made efforts to make sure they're not treading on toes in distributing that - if the mods feel it's a bit dodgy, then by all means remove it - it's easy enough to find with a Google search! ;) )

For a MIDI playroutine, command-line player and DeliTracker player, try this: http://aminet.net/package/mus/midi/B5MIDI
 
@phipsy

these are very hackable internal in an amiga ;)

I am thinking getting the DB60XG extra bits and building a smalle *sound fusion board* that takes audio IN from the Amiga, Optical Drive and MP3@64, it will have internal MIDI provided from an internal *clockport* Serial card.
 
@phipsy

these are very hackable internal in an amiga ;)

I am thinking getting the DB60XG extra bits and building a smalle *sound fusion board* that takes audio IN from the Amiga, Optical Drive and MP3@64, it will have internal MIDI provided from an internal *clockport* Serial card.

Oh - nice idea! One question, though - can a clockport serial card support the MIDI baud rate of 31250? (As I understand it the standard UARTs used on PCs can't.)

Another nice trick would be to make the interface compatible with the Triple Play Plus 3-port MIDI interface, routing the first port into the XG card and the other two to MIDI-Out sockets.

Incidentally, a few years ago I experimented briefly with some DS1802 digital potentiometers, to try and build a software-controlled mixing desk for the Amiga and XG audio. I didn't get very far with it, due to lack of knowledge of op-amps and lack of time, but I did at least get the needle on a multimeter moving in response to an on-screen slider. I'll dig out and post my notes from back then. :)
 
@robinsonb5

Interestingly the clock port silver surfer can handle a baud rate of 460,800 bps transfer speed (it even says on the box that its MIDI compatible) - obviously one need to take the TTL levels to MIDI, thats where either the Maxim 232 or the Moto 1406B will do =)

Another nice trick would be to make the interface compatible with the Triple Play Plus 3-port MIDI interface, routing the first port into the XG card and the other two to MIDI-Out sockets.

Incidentally, a few years ago I experimented briefly with some DS1802 digital potentiometers, to try and build a software-controlled mixing desk for the Amiga and XG audio. I didn't get very far with it, due to lack of knowledge of op-amps and lack of time, but I did at least get the needle on a multimeter moving in response to an on-screen slider. I'll dig out and post my notes from back then. :smile:
Now this sounds very interesting, and I would love to help out where I can... perhaps even make some valve state sound processing happening ;)
 
Interestingly the clock port silver surfer can handle a baud rate of 460,800 bps transfer speed (it even says on the box that its MIDI compatible)

Ah, that's good. As I understand it, the "standard" PC UART has a clock of about 1.8MHz which is divided by 16 to give 115,200 baud, and all other rates have to be an integer division of that, thus 31250 baud is unavailable. Since register-level compatibility isn't an issue for the Silver Surfer I guess they used a faster clock to give finer-grained control over baud rate?

obviously one need to take the TTL levels to MIDI, thats where either the Maxim 232 or the Moto 1406B will do =)
Yup, (unless you feel like trying to steal the TTL signal before it reaches the card's line driver!)

Now this sounds very interesting, and I would love to help out where I can... perhaps even make some valve state sound processing happening ;)
LOL nice idea - steampunk MIDI box, anyone?

Anyhow, here's the software I put together for the mixing desk project. (Built with VBCC. And, wow, this project goes back to 1999!)

http://npandd.co.uk/Amiga/MixingDesk.lzx

I wrote a "driver" for both DS1802 and SSM2163, but didn't have much success with either. I forget now what the problem was with the SSM2163, but I think the issue with the DS1802 was that the signal has to remain strictly within the 0-5v range of the chip, whereas of course both the Amiga and the XG card's sound output ran on split rails. At the time I had no clue how to solve that!

My notes from the project were as follows:

Code:
Software controllable audio mixer:

I have my Amiga hooked up to a hi-fi, and I also have a Yamaha DB50XG MIDI
card attached to my serial port.  Mixing these two sound sources is pretty
easy, but I've just bought a CD-Rom drive, so I now need three stereo audio
streams to be mixed and sent to the hi-fi.  Since the volume of each audio
source depends heavily on what is being played, it would be really nice if
the relative levels of the sound sources could be adjusted, and better still
if they could be adjusted through software.

The Dallas Semiconductor DS1802 Dual Digital Log Pot looks like the perfect
chip for this application.  It can handle software control of balance and volume
of a stereo audio channel, and can be controlled either by push-buttons or by a
3-wire serial port which could be controlled very easily from a spare port on
the Amiga.

Initially I thought about attaching the digital pots to the joystick port, but
while the three lines on this port which can be configured as outputs should
be sufficient to drive the mixer, it would be useful if it could be used in
conjunction with AIRLink, which already uses this port.

The disk-drive port is the obvious one to choose, since in these times of
hard-drives, CD-ROM drives and catweazles, four standard floppy drives aren't
really that useful any more.  With judicious use of the /SEL1B line to select
the pots, the mixer could use one of the disk-drive slots, without interfering
with other drives in the system.  All that will be required is software which
can access the disk resources without tripping up the trackdisk.device!

Signals available at the disk-drive port:
Odd CIA-A Port A  (PR: $bfe001  DDR: $bfe201)
Bit 5   RDY*    Disk Ready (* Active Low)
Bit 4   TK0*    Track 0
Bit 3   WPRO*   Write Protect
Bit 2   CHNG*   Disk Changed

Even CIA-B Port B (PR: $bfd100  DDR: $bfd300)
Bit 7   MTR*    Disk motor
Bit 6   SEL3*   Select DF3:
Bit 5   SEL2*   Select DF2:
Bit 4   SEL1*   Select DF1:
Bit 3   SEL0*   Select DF0:
Bit 2   SIDE*   Side Select
Bit 1   DIR     Direction
Bit 0   STEP    Step the head  (Probably best to avoid this one!)

F  (interrupt flag)  INDEX*


These lines appear as follows on the External Disk Connector:

 1              /RDY    (CIA-A PRA Bit 5)
 2              /DKRD
 3-7            GND
 8      OC      /MTRXD  (CIA-B PRB Bit 7)
 9      OC      /SEL2B  (CIA-B PRB Bit 5)
10      OC      /DRESB  System reset line
11              /CHNG   (CIA-A PRA Bit 2)
12              +5v
13              /SIDEB  (CIA-B PRB Bit 2)
14              /WPRO   (CIA-A PRA Bit 3)
15              /TK0    (CIA-A PRA Bit 4)
16      OC      /DKWE
17      OC      /DKWD
18      OC      /STEPB  (CIA-B PRB Bit 0)
19      OC      DIRB    (CIA-B PRB Bit 1)
20      OC      /SEL3B  (CIA-B PRB Bit 6) (n/c on A2/3/4000!)
21      OC      /SEL1B  (CIA-B PRB Bit 4) (First external drive)
22              /INDEX
23              +12v
(Pins marked OC require external pull-ups of 1kOhm.)

When the Amiga boots, it uses the Motor and RDY lines to grab an ID from disk
drives in an attempt to find out what kind they are.  The Motor line is used
as a clock, while the RDY line carries data.  Since we don't want garbage to
be loaded into the pots when the machine boots, It would be wise to avoid using
the motor line as the clock!

I will use the following bits from the CIAs:

CIA-B PRB bit 1 (DIRB) as clock
CIA-B PRB bit 7 (/MTRXD) as data

CIA-B PRB bit 4, 5 or 6 (/SEL1B, /SEL2B or /SEL3B) will be used as the select
line, depending on the number of drives in the system.
[Depending on the pot used, this could need inverting, so a 7404 Hex Invertor
will be needed.]

If electrical noise from the drives causes interference, a 4066 chip could be
used to isolate the data lines when not in use, but an inverter might be needed
for the control pin.

If reading capabilities are not considered important, the clock and data lines
of the pot can be connected directly to the DIRB & /MTRXD lines, respectively.
Both pins on the pot are inputs, and are ignored while _RST isn't asserted, so
the operation of other drives won't cause problems.

The following sequence of events will be needed to set the levels on the pots:

»  Clock Low    Clear $bfd100 bit 1
»  Assert /CS   Clear bit 4,5 or 6 in $bfd100
 16 times for each pot:
 »  Set Data     bit 7 of $bfd100
 »  Brief pause  (~10µs)
 »  Clock High   Set $bfd100 bit 1
 »  Pause        (~10µs)
 »  Clock Low    Clear $bfd100 bit 1
 »  Pause
»  Clear /CS    Set bit 4,5 or 6 in $bfd100

The mixer will need to be configured using ToolTypes for the multiple pots:
something like:
UNIT=1
NAME0=Amiga
LEFT0=63
RIGHT0=63
NAME1=CD Audio
LEFT1=63
RIGHT1=63
NAME2=XG MIDI
LEFT2=63
RIGHT2=63

This scheme will allow a maximum of 10 pots to be used.

A list of nodes will be built and hung off a semaphore which will be made
public under the name of "B5Mixer".  An ARexx port must also be made public under the same name, to allow other programs to control the pots.

To allow for some kind of coherence between different systems, Mixer 0 must be
the Amiga's audio, and Mixer 1 must be the CD Audio.  Other mixers can be
whatever you want; XG MIDI, other MIDI gear, 16 bit soundcards (though if you've
got a 16 bit soundcard, why do you need this?), etc.

The codes will be transmitted in reverse order - pot 0's code will be sent
last.  This will mean that pot 0 will be the pot nearest to the control
lines, and the highest numbered pot will be the one at the end of the
daisy chain.

The UNIT tooltype simply controls which disk-drive unit the mixer will replace.
In most cases this will be 1,2 or 3, depending on how many external drives you
have.  (Please note, the mixer can only be used on machines which don't have
the maximum number of 4 drives connected!

Each pot in the chain has two 8-bit registers, which are set by transmitting a
16-bit word over the serial link, the upper 8 bits of which are for pot 1, while
the lower 8 bits are for pot 0.
The upper bit of each byte is ignored.  The next bit is a mute bit, and the
lower 6 bits take the value to be transmitted, in the range 0 - 63.

At position 0, the wiper will be close to the H pin, while at position 63, the
wiper will be close to the L pin.

The six outputs must be connected via 1K resistors to a pair of phono
sockets (or whatever).
 
Since the domain that used to host images in this thread is now defunct, I've just replaced them with images from my blog site. Since I'm not 100% sure this won't cause referrer issues that I can't see from my own machine, could someone confirm that they're visible, please?
 
Last edited:
Since the domain that used to host images in this thread is now defunct, I've just replaced them with images from my blog site. Since I'm not 100% sure this won't cause referrer issues that I can't see from my own machine, could someone confirm that they're visible, please?

I can see them too, thanks for updating them. :)
 
Back
Top Bottom