Re: [hatari-devel] 8 runes of aerillion doesn't have sound

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


Le 10/03/2024 à 21:45, Nicolas Pomarède a écrit :
Le 10/03/2024 à 08:32, Laurent Sallafranque a écrit :
Maybe this can help.

I use a variable : "music_sequence_index" to keep the current sample index. I've traced my code and I see that "music_sequence_index" goes from 0(*8) to 2(*8) immediately at the beginning of the music, which means there's an interrupt played immediately after the beginning of the music.

The VHS intro plays a sample without interrupts.
I stop the music between the VHS screen and the intro of the demo.
The sample is bigger than the effect length, so, I stop it, load the 1st music sample into memory and start to play the music.


In the music_start code, I add #8 to "music_sequence_index" because I read this value at the beginning of the interrupt code to load the next sample. I also increment by #8 this variable during each interrupt in the interrupt code.

The traced value of 2(*8) for the variable means that there's a first interrupt triggered.


Hi

thanks for the information.

What Hatari does at the moment is that it triggers an interrupt (TAI or GPIP7) when sample start playing (this is because SNDINT signal goes from idle to playing). And optionaly it triggers an interrupt when reaching the end of the sample buffer (if value is set at $FF8901)

I thought signal always goes from idle to playing when starting a sound, but from what you describe it seems it's not the case, because this extra interrupt at start explains why sample 1 is not played and it "jumps" directly to sample 2.

That would mean DMA sound triggers an interrupt at start only if FF8901 is not enabled to trigger an interrupt at the end (Hatari allows both at the moment)

I need to write a small test program for falcon that would check the different cases (loop yes/no and interrupt at end yes/no), because so far the lack of real documentation from Atari makes it difficult to emulate.

Hi

looking at the demo, I see that the 1st sample is skipped because when you stop the music after the vhs-like / blue screen then dma sound channel goes to idle (=1) and this trigger the un-wanted gpip7 interrupt because bit 7 in MFP's Active edge register is set to 1 (so 0->1 transition on GPIP7 will give an interrupt)

This is not the TOS default value, usually AER's bit 7 = 0 (transition on 1->0 on gpip7)

I see that at the start of the demo you save MFP content and you also do this :

0001fd14 0838 0007 fa01           btst.b #$0007,$fffffa01.w
0001fd1a 6608                     bne.b #$08 == $0001fd24 (T)
0001fd1c 08b8 0007 fa03           bclr.b #$0007,$fffffa03.w
0001fd22 6006                     bra.b #$06 == $0001fd2a (T)
0001fd24 08f8 0007 fa03           bset.b #$0007,$fffffa03.w
0001fd2a 08b8 0007 fa0b           bclr.b #$0007,$fffffa0b.w
0001fd30 08f8 0007 fa13           bset.b #$0007,$fffffa13.w

It checks bit7 of of GPIP7 (dma sound status) and depending on that it changes AER bit7. And in this case it sets AER bit7=1 insted of leaving it to 0 (because dma sound is idle when starting the demo from tos)

Why is this needed, can you tell what's the purpose of changing AER ?

Nicolas




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