Welcome, Guest. Please login or register.

Author Topic: MP3 Playback on a stock A1200?!  (Read 3316 times)

Description:

0 Members and 1 Guest are viewing this topic.

Offline Karlos

  • Sockologist
  • Global Moderator
  • Hero Member
  • *****
  • Join Date: Nov 2002
  • Posts: 16882
  • Country: gb
  • Thanked: 6 times
    • Show all replies
Re: MP3 Playback on a stock A1200?!
« on: March 27, 2004, 03:33:00 PM »
For a low-end (ie stock) A1200, there is simply nothing to rival the parallel port MAS player doofer.

Your basic A1200 can send easily 16K/s (kilobytes, that is) through the parallel port (roughly what a 128kbps mp3 uses) to the litttle decoder chip inside. Better still, you get clean 16-bit stereo audio out, uncontaminated by blitter noise etc. that paula tends to suffer from.

If you have any kind of accelerator, CPU drain is zip ;-)
int p; // A
 

Offline Karlos

  • Sockologist
  • Global Moderator
  • Hero Member
  • *****
  • Join Date: Nov 2002
  • Posts: 16882
  • Country: gb
  • Thanked: 6 times
    • Show all replies
Re: MP3 Playback on a stock A1200?!
« Reply #1 on: March 27, 2004, 03:37:05 PM »
Quote

NightShade737 wrote:

I would have thought that a 160mhz PPC would have been able to do better than 35% load on a 192Kb/s MP3 =/


Well, the all infamous context switch comes into play. If your'e gonna do mp3 playback using PPC under WarpOS or PowerUP, you need a good length playback / load buffer to minimise the number of CPU switches between the 680x0 and PPC.
int p; // A
 

Offline Karlos

  • Sockologist
  • Global Moderator
  • Hero Member
  • *****
  • Join Date: Nov 2002
  • Posts: 16882
  • Country: gb
  • Thanked: 6 times
    • Show all replies
Re: MP3 Playback on a stock A1200?!
« Reply #2 on: March 27, 2004, 04:12:36 PM »
In 2 words

Copyback Cache

First of all, the external FPU only accesses memory via the cpu itself (AFAIR), that is, when it wants to fetch some data from memory, it signals the CPU, which gets the data and then sends it to the FPU. It doesn't access memory by itself. This is part of the reason "on chip" FPUs are so much faster than external ones.

To the 680x0/PPC combo

Essentially, neither CPU was particularly designed for multiprocessing. Both the 68040/68060 and 603/604 implement copyback caches, so whenever they write to an area that is cacheable, it doesn't necessarily go to that area immediately. Instead it goes into an area of on-chip cache and will be pushed when it's most optimal to do so. Disabling this cache cripples both cpus (if you can turn off your copyback on an 040 or 060 card, you will see what I mean).
So, for peak performance, both CPUs have their copybacks enabled. Now, as long as they arent using the same memory area (like two totally different programs), things are fine. However, a ppc task and a mirror 680x0 task that are part of the same application obviously do need to share the same memory.

The context switch comes in when the PPC has to call the 680x0 (or vice versa). The PPC particularly needs the 680x0 to do OS calls on its behalf (eg reading files, putting things on screen etc). Anyway, when this happens, its quite possible the memory they are sharing and the caches of each chip are out of sync due to pending writebacks. So each CPU has to purge its cache, resyncing all the data.

It sounds bad, and indeed it is, but frankly there isn't much you can do about it. Disabling the copybacks cripples performance all of the time, cache flushing only cripples when it occurs. So the latter is generally better.
int p; // A
 

Offline Karlos

  • Sockologist
  • Global Moderator
  • Hero Member
  • *****
  • Join Date: Nov 2002
  • Posts: 16882
  • Country: gb
  • Thanked: 6 times
    • Show all replies
Re: MP3 Playback on a stock A1200?!
« Reply #3 on: March 27, 2004, 05:44:17 PM »
AmigaAMP/WOS, graphic equalizer enabled on my A1200 040+603 240, playing via AHI/paula from the motherboard IDE doesnt use more than 20% max.

It just comes down to finding the right balance of decode / playback length. Also, never use AHI5 on any 680x0 system! It murders the cpu...
int p; // A