[hatari-devel] Suggested patch to fix problem handling STOP when DSP is active

[ Thread Index | Date Index | More lists.tuxfamily.org/hatari-devel Archives ]

As you probably know, I'm currently investigating differences in behaviour of 
some programs between EmuTOS and Atari TOS.  The programs in question use the 
DSP to process audio, and the audio output is worse on EmuTOS than Atari TOS.

Because of the actual symptoms, it occurred to me that perhaps the biggest 
difference in basic processing between TOS4 and EmuTOS is the latter's use of 
the STOP instruction to lighten processor load on emulators.  I built a copy of 
EmuTOS that doesn't use the STOP instruction (it's just a simple config option 
to disable it), but alas my poor underpowered Linux box could not cope with the 
additional load.

So I thought about the Hatari side of things and wondered how the DSP was run 
in parallel with the 680x0.  If I understand things correctly, it's the job of 
DSP_Run() to make sure that it gets the right number of cycles, on a regular 
basis.  However, when the 680x0 is stopped, Hatari runs through a while() loop 
in do_specialties(), waiting for a matching interrupt, and during this period, 
DSP_Run() is NOT called.

I added some debugging code and discovered that the STOP typically lasts around 
60000 680x0 cycles (@ 16MHz), long enough for up to 60000 DSP instructions.  
The way the code is written, the DSP will eventually get those cycles, but they 
will be delayed, and the DSP processing will not be overlapped with the STOP 
state (unlike under TOS4, when it *will* be overlapped with the busy-waiting).
Apart from affecting the DSP, this also affects the 680x0, since the host will 
not run 680x0 code until the DSP has 'caught up'.

So I made the attached small patch to Hatari 2.2.1, to call DSP_Run() on a 
regular basis within the 'STOP is active' loop.  With this patch, the sound 
quality from EmuTOS is now better than that from Atari TOS (identical 
configurations), although it's still not perfect - that underpowered Linux box 

Please consider this patch (or something equivalent) for incorporation in 

Roger Burrows
Cross-posted to emutos-devel since it's relevant there too.
The following section of this message contains a file attachment
prepared for transmission using the Internet MIME message format.
If you are using Pegasus Mail, or any other MIME-compliant system,
you should be able to save it or view it from within your mailer.
If you cannot, please ask your system administrator for assistance.

   ---- File information -----------
     File:  hat_dsp.patch
     Date:  28 Oct 2020, 21:59
     Size:  519 bytes.
     Type:  Unknown

Attachment: hat_dsp.patch
Description: Binary data

Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/