[comp.sys.amiga.audio] CIA B problems

torkell@ifi.uio.no (Torkel Lodberg) (02/10/91)

My problems are still not solved. I now use a patched version
of MED V2.13, that uses the CIA B timer. I want to use this
program while running a multinode high-speed (19200/38400 baud)
BBS, but that's impossible. The CIA B timer causes characters
to get lost even at 9600 baud?
 
So: Why the heck did Commodore remove the CIA A timer in 2.0?
Can this problem be fixed, somehow? I thought the Amiga was
a *multitasking* machine, right? It is really unbelieveable
that a 25Mhz A3000 machine can not transfer at 9600 baud
while using a music program???
 
T.Lodberg

ridder@elvira.enet.dec.com (Hans Ridder) (02/15/91)

In article <CMM.0.88.666180488.torkell@kvart.ifi.uio.no> torkell@ifi.uio.no (Torkel Lodberg) writes:
>My problems are still not solved. I now use a patched version
>of MED V2.13, that uses the CIA B timer. I want to use this
>program while running a multinode high-speed (19200/38400 baud)
>BBS, but that's impossible. The CIA B timer causes characters
>to get lost even at 9600 baud?
>
>So: Why the heck did Commodore remove the CIA A timer in 2.0?

They didn't.  Although there's been some confusion, it's been well
publicized that both CIA A timers are used by the system.  If you mess
with them, things will break.  The 1.3 RKM's document this clearly, and
they've been available for quite a while now.

>Can this problem be fixed, somehow?

If you mean can we ever use CIA A, then probably not.  But MED can be
fixed.

>I thought the Amiga was a *multitasking* machine, right? It is really
>unbelieveable that a 25Mhz A3000 machine can not transfer at 9600 baud
>while using a music program???

Yes, the Amiga is a multitasking machine.  But we're talking about
interrupt routines here, not tasks.  Interrupts essentially block/bypass
multitasking, so multitasking has nothing to do with it.

The problem is that *any* interrupt blocks lower level interrupts (sorta
like Disable().)  The CIA B timers are at a higher interrupt priority
than the serial port receive (RBF) interrupt, so they can cause data to
be lost, while CIA A interrupts at a lower level than serial port
receiver.

The most probable reason you have trouble with CIA B and not CIA A is
that when using CIA A the serial port interrupt routine is fairly quick
so it doesn't block lower priority interrupts for too long.  If it did,
then you'd probably see problems with MED like glitches and pops in the
sound.

When using CIA B, MED probably spends too much time in its interrupt
routine, blocking the serial port interrupt and data is lost.  The
serial port receiver doesn't have any buffering in hardware, so its
interrupts must be serviced as quickly as possible.

I don't know what MED is using the timer interrupt for, but if its using
it to reload the audio hardware, then there are probably better ways to
do that without losing serial port data, or having glitches in the
sound.

>T.Lodberg

-hans
------------------------------------------------------------------------
  Hans-Gabriel Ridder			Digital Equipment Corporation
  ridder@elvira.enet.dec.com		Customer Support Center
  ...decwrl!elvira.enet!ridder		Colorado Springs, CO