1

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
avatar

2

ericde45 (./1) :
et coté DSP:
movei #D_CTRL,R10
load (R10),R0
bset #1,R0 ; CPUINT
store R0,(R10)
Je ne suis pas un expert, mais je crois que tu dois faire du pairing afin que les instructions s'exécutent convenablement.
Par exemple.
load (R10),R0
nop
bset #1,R0 ; CPUINT
nop
store R0,(R10)

3

j'ai ajouté des OR sans succès
c'est hors sujet mais régulièrement sur des bugs j'ajoute des or par sécurité pour souvent me rendre compte que le gpu ou le dsp ne gère pas si mal smile
avatar

4

Pas besoin de OR/Nop smile

pour que le DSP génère une interruption vers le 68K il faut :
- configurer JINT ($F10020) en activant le bit1, ce qui va autoriser l'envoi de l'interruption DSP vers le contrôleur d'interruptions de TOM
- configurer INT1 ($F000E0) en activant le bit4, ce qui va rediriger l'interruption vers le 68k (interruption LEVEL0 [$100])

Comme toutes les interruptions 68k arrivent sur le même vecteur d'interruption, dans le code du vecteur d'interruption, il faut lire INT1 et JINT pour déterminer quels interruptions traiter et effacer sur chacun des registres. hehe
avatar

5

comme d'habitude avec SCPCD, et voilà ça marche direct

ça interrupt à fond !


merci
avatar

6

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.

7

top

Il y avait jagopedia, mais il semble down depuis quelques années. sad
avatar

8

SCPCD (./7) :
top

Il y avait jagopedia, mais il semble down depuis quelques années. sad
De toutes façons, cela ne pourrait être le fait d'un seul individu, plutôt d'un groupe qui alimenterait un WiKi.
Si cela se faisait, il faudrait déjà un plan commun et le suivre, mais comme c'est un hobby et que les réponses sont obtenues de manières ou d'une autre, je ne suis pas sure que cela puisse se faire.

9

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 )
avatar

10

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...
avatar

11

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 ?
avatar

12

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
avatar