Some audio interrupt problem on winaue with RollingThunder?
1 Attachment(s)
Hi,
I 'am working on Rolling Thunder whdload's patch . For patch was finished but: On several real amiga configuration i am not sound trouble: a1200+Blizzard 1260 a1200+Blizzard 1230 a1200+8Mo 60020 but on Winuae audio interrupt code can freeze or no sound are displayed except with 68000 CPU configuration. i test several configuration using following options it's all cases: - CPU: approcimate A500/a1200 or exact-cycle - Chipset: Wait for Blitter/AGA/Collision level=full/exact-cycle - Chipset extra/Generic, 1200 or 4000 interrupt code is curiously coded but it seems it works fine on all my real amiga. have you same problem with winaue or real configuration? HAve you solution to fix it? PS: attached installed version of both IPF version of Rolling Thunder for test. |
This is interesting and strictly related to this thread:
http://eab.abime.net/showthread.php?t=100442 I based my code snippet on how the IRQ4 system work on WinUAE. So sure the slave can be patched. But since the code of this slave works in every real Amiga tested (000 till 060 and also Vampire) it could be a WinUAE problem. Practically on WinUAE/020+ (not on bare 000!): - IRQ4 trigger and code execute - inside IRQ, DMA is stopped and INTREQ cleared - then DMA is reactivated - when Audio DMA fetch new data, INTREQ/AUDx bit is set - IRQ code exit and immediately a new IRQ4 start - IRQ storm :nervous Only Toni can help us :) |
I checked some old source code from RT. Warning there are some stupid comments - so omit it. Sorry but I don't remember about version of RT. As I checked the source right now, I see some my modifications like disabling sound routines (;A rts ;A)
Code:
; |
Quote:
But as so bad could be interesting for emulation oddity. |
Quote:
have you tested in on real amiga and Winuae to compare?IntLvlFourAudio: perhaps had you fixed curious behaviour of original audio code on Winuae? If it's the case, if so it might be interesting to include it in the Slave file? |
It hits hack in UAE that fixes very common problem of stupid CPU delays in "dma wait" routines if CPU is not slow enough.
If DMA gets switched off and then on again too soon: Assume software actually wanted to start sample from the beginning. I didn't check the disassembly. Not interested enough. |
Quote:
Obviously in any faster processor they are less. What's the 'cycles point' in WinUAE emulation where 000 vs 020+ are working the same way? Or this 'hack' is only for pure 68k? I'd like to understand better why you can't emulate precisely also on fast processors (anyway the 'times' surely depends on DMA cycles and not by CPU cycles). |
Quote:
for information if you replace in original code last ; sound start correctly but are not stopped and loop infinitely!!move.w #$C000,($9A,a3) |
Quote:
|
Quote:
|
Quote:
Code:
- inside IRQ, DMA is stopped and INTREQ cleared In this case 94 DMA cycles after. I thought it meant in English 'after some time', but sure my language fault. (Google traslate italian 'poi' to then/after/later/next...) |
Ok. But then that can't be the problem because hack would only mean delay is always long enough to not cause problems even if CPU runs the loop in 1 DMA cycle.
It must be something else. Actual disassembly would still be nice.. I also can't duplicate any hangs which makes it more annoying to debug. |
Quote:
Yes, there in no hang, only IRQ storm that slow down the game incredibly. But is not a constant, because the AUDx bit is set only after DMA fetch, that can also be outside IRQ code (so there is not an immediate IRQ retrigger). |
1 Attachment(s)
Quote:
Cheers. |
Quote:
for information, I have just been confirmed that there is no sound bugs on a real A4000 + 040. |
Quote:
- CPU/ Fastest possible and in game change option by: - CPU/ Approcimate a500/a1200 or cycle exact |
Quote:
Code:
IRQ I tested it on real 1200+ 060 and it works fine too.lbC0000E4 |
Quote:
The main code question for me was not the code fixing, but why this instructions sequence give problems on WinUAE ;) |
@CFOU!
There is small mistake, I removed only one instruction. :) Code:
move.w d5,($96,a3) -> nop*2 ;slave src --> PL_NOP $2377c,4 |
@Asman
I think i have understand , but in my opinion is better to replace: move.w d5,($96,a3)by AND.w d5,($96,a3)To disable good audio channel without disable another channels and it's works fine too on Winuae. But now i don't understand why it's work on real amiga with MOVE!! PS/ I will test this evening on real Amiga to verify it works fine with "AND" too. |
All times are GMT +2. The time now is 20:32. |
Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.