hello
je fais des tests pour comprendre comment générer des interruptions entre le DSP et le 68000
du 68000, j'arrive sans problème à génerer une interruption sur le DSP :
coté DSP j'autorise l'interrution CPU :
movei #D_FLAGS,r28
movei #D_CPUENA|REGPAGE,R29 ; CPU only
store r29,(r28)
puis coté 68000 je force une interruption du DSP:
lea D_CTRL,a0
move.l (a0),d0
or.l #DSPINT0,d0
move.l d0,(a0)
et le DSP saute en $F1B000
par contre coté DSP pour interrompre le 68000:
je prépare le 68000:
le vecteur d'interruption:
move.l #interrupt_68000,LEVEL0
j'autorise dans le SR:
and.w #%1111100011111111,sr
et coté DSP:
movei #D_CTRL,R10
load (R10),R0
bset #1,R0 ; CPUINT
store R0,(R10)
et ça ne génére pas d'interruption
j'ai l'impression qu'il me manque l'equivalent de INT1 qui sert pour la VBL
comme d'habitude avec SCPCD, et voilà ça marche direct
ça interrupt à fond !
merci
SPCD est un puit de connaissance; s'il n'existait pas, il faudrait l'inventer.
Dommage que l'on ait pas un site web qui rassemble les connaissances se trouvant dans les forums et les cerveaux.
pour info, ça ne semble pas fonctionner sous virtual jaguar.
sous phoenix c'est ok, et sur la console c'est nickel
( le son a systématiquement des "trous" sous phoenix )
juste pour info, j'ai utilisé les interruptions dsp vers 68000 et 68000 vers DSP
sur émulateurs ça fonctionne à 100%
l'interruption 68000 vers DSP fonctionne aussi sur hardware à 100%
par contre, quand j'utilisais l'interruption DSP vers 68000 ( level0 ) sur hardware, au bout d'une durée variable ça crashait. parfois 1 minute, parfois 45 minutes...
SCPCD 2023-01-09 at 08:13pm est-ce que tu fais bien attention aux masques et clear-latch des interrupts LEVEL0 ?
Genre pour ne pas clear une interruption qui est arrivé pile entre le début de traitement d'interruption et la fin de ta routine ?
je n'avais que l'interrupt DSP autorisée, pas de VI / j'ai testé en diminuant la frequence de replay du I2S aussi.
level0 à à 50 HZ ( venant du timer 1 du DSP) ( donc plein de temps cpu car la démo globale prend les 2/3 maxi du temps machine de la jaguar )
un replay 'future composer' au 68000 qui prend juste quelque scanlines à la fréquence du 68000 de la Jaguar
avant la fin de ma routine level0, je testais si une interruption DSP était en cours avant de demander une interruption 68000 vers DSP
puis clear de l'interruption level0 :
.waitint1:
nop
move.l D_CTRL,d0
btst #6,d0
bne.s .waitint1
or.l #DSPINT0,D_CTRL ; interrupt pour prise en compte des valeurs FC par le DSP
move.w #%1000000010001,INT1
move.w #%1000000010,J_INT ; configurer JINT ($F10020) en activant le bit1
move.w #$0,INT2