Amstrad Plus Forum Index

Amstrad Plus
Découverte de la gamme Old et Plus des Cpc d'Amstrad.

 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Amstrad Plus et Acquittements Interruptions
Goto page: <  1, 2, 3, 4, 5, 6  >
 
Post new topic   Reply to topic    Amstrad Plus Forum Index -> Programmation Cpc -> Asic
Previous topic :: Next topic  
Author Message
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,976
Masculin
Point(s): 389
Moyenne de points: 0.13

PostPosted: Sat 22 Jul - 21:14 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

Je regarderais demain. Je suis pas à la maison 
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
Publicité






PostPosted: Sat 22 Jul - 21:14 (2017)    Post subject: Publicité

PublicitéSupprimer les publicités ?
Back to top
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,976
Masculin
Point(s): 389
Moyenne de points: 0.13

PostPosted: Sun 23 Jul - 00:12 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

Longshot wrote:

Le code ci-dessous est le même test que lui.
David, est ce que tu obtiens bien du bleu/jaune avec ce code ?



Code:
         org &a000
test
        di
        ld bc,&7F00+%10001101
        out (c),c        ; roms off, mode 1
        ld sp,&c000
        ;
        ld hl,dma_int
        ld (&8000),hl
        ld (&8002),hl
        ld (&8004),hl
        ld hl,raster_int
        ld (&8006),hl    
        ld hl,&8000
        ld de,&8008
        ld bc,256-8
        ldir
        ;
        ld a,&80
        ld i,a
        ;
        im 2
        ;
        ld bc,#7F10
        out(c),c
        ld de,#4449
        ei
loupe
        defs 64,&12
        defs 64,0
        jp loupe

dma_int:
        out (c),d
        ei
        ret
raster_int:
        out (c),e
        ei
        ret
        
tabazik
        DB 255,0,255,119,179
        DB 81,168,212,98,57,156
        DB 70,43,21,138,205
        DB 238









Manquerait pas un bout de code par le plus grand des hasards ?
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
Longshot


Offline

Joined: 21 Nov 2015
Posts: 93
Masculin
Point(s): 8
Moyenne de points: 0.09

PostPosted: Sun 23 Jul - 00:57 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

Non il ne manque rien.
Par contre, j'ai laissé la table de délockage. Tu peux la virer, elle ne sert à rien.


Back to top
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,976
Masculin
Point(s): 389
Moyenne de points: 0.13

PostPosted: Sun 23 Jul - 00:58 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

donc même chose pour tes dmalist ?

Je regarde cela demain dans la journée et te donnerais le résultat.
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,976
Masculin
Point(s): 389
Moyenne de points: 0.13

PostPosted: Sun 23 Jul - 18:18 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

Roulement de tambour.....

Sur ta dernière routine, le border 25 !!!

J'en profite pour glisser la réponse d'OffseT sur le sujet

OffseT wrote:


....

Tant que /INT reste actif, le Z80 accepte les interruptions du moment qu'il est en EI. C'est d'ailleurs comme ça que le firmware détecte les interruptions externes. Au début de la routine d'interruption, il fait un EI, si une interruption est empilée, alors il sait que le périphérique ayant généré l'interruption est externe et va appeler le vecteur "external interrupt". Ça marche car le Gate Array génère une impulsion courte sur /INT, qui n'est déjà plus active au moment du EI de début d'interruption ; en gros il s'auto-acquitte dès que le Z80 prend l'interruption.

 

Or donc, je parle de mémoire car je n'ai rien sous la main pour vérifier là, mais le bit d'acquittement spécifique de DCSR ne doit pas faire autre chose. Dans un cas il s'auto-acquitte sur la prise d'interruption par le Z80 (comme le Gate Array), dans l'autre il attend un acquittement manuel pour lever /INT.

 
Donc, si tu fais un EI *avant* d'avoir acquitté l'interruption qui maintient /INT, alors /INT est toujours actif, et ton interruption s'empile (comme pour les interruptions externe qui sont censée maintenir /INT jusqu'à l'acquittement spécifique, comme sur la CPC-ISA par exemple).
....

_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
Longshot


Offline

Joined: 21 Nov 2015
Posts: 93
Masculin
Point(s): 8
Moyenne de points: 0.09

PostPosted: Mon 24 Jul - 02:03 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

Il s'agit d'un problème de terminologie.
Si tu parles du périphérique qui génère l'interruption, rien ne s'empile à l'intérieur.
Une interruption est bêtement active ou inactive. Lorsque le Z80A autorise l'interruption, c'est la plus prioritaire en attente qui est servie.
Acquitter sert simplement à dire au périphérique que l'interruption est servie (dcsr.bit acq=1 par exemple)
Si une interruption pour un périphérique dure plus longtemps que le temps de 2 autres interruptions de ce même périphérique, tu ne vas pas empiler 2 interruptions!
Tu vas juste avoir un flag actif qui déclenchera l'interruption après l'instruction qui suivra le EI, et tu en auras "loupé" une.

Maintenant, si on "réautorise" les interruptions au sein même du code de l'interruption avant d'en sortir, on peut empiler les interruptions.
C'est en général assez dangereux si la routine n'est pas prévue pour gérer ça correctement ou qu'elle dure plus longtemps que la période de génération des interruptions.
Une routine capable de gérer ça est assez complexe. C'est pour ça que l'instruction suivant le EI n'est pas interruptible (c'est pour permettre de mettre un RET/RETI et de revenir au code qui a été interrompu et justement empêcher un "empilement"). Imagine une routine d'interruption commençant à dessiner une image, et qui s'interrompt elle-même pour dessiner l'image qui n'est pas terminée sans savoir ce qui a été fait....
Si tu fais un EI/RET sans avoir acquitté ton interruption DMA, le code d'interruption revient au code principal, qui est de nouveau interrompu. Pas d'empilement mémoire ici.
Le firmware fait en effet un EI lors de la prise en charge de l'interruption, ce qui m'avait posé des problèmes lorsque j'ai chargé un peu l'interruption firmware avec le B-Asic.
Dès que le temps dépassait 52 lignes, c'était le crash...


Back to top
Longshot


Offline

Joined: 21 Nov 2015
Posts: 93
Masculin
Point(s): 8
Moyenne de points: 0.09

PostPosted: Mon 24 Jul - 02:08 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

Concernant le border jaune, c'est plutôt étonnant que le bug dma0/pri ne se produise pas du tout sur ton amstrad.
Je vais demander à Kevin si il peut tester le même code.




 


Back to top
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,976
Masculin
Point(s): 389
Moyenne de points: 0.13

PostPosted: Mon 24 Jul - 06:45 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

Longshot wrote:
Concernant le border jaune, c'est plutôt étonnant que le bug dma0/pri ne se produise pas du tout sur ton amstrad.
Je vais demander à Kevin si il peut tester le même code.



Et pourtant, c'est l'exacte vérité ! Wink
Roud : peux tu tester la routine de Longshot sur un vrai Cpc+ et nous donner le résultat ? Merciii !
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
roudoudou


Offline

Joined: 14 Jul 2016
Posts: 427
Localisation: LYON
Masculin
Point(s): 46
Moyenne de points: 0.11

PostPosted: Mon 24 Jul - 08:38 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

je pourrais demain ou après-demain. Idéalement faut que j'en fasse une cartouche ça sera plus simple pour moi de le tester sur tous mes cpc+

Back to top
roudoudou


Offline

Joined: 14 Jul 2016
Posts: 427
Localisation: LYON
Masculin
Point(s): 46
Moyenne de points: 0.11

PostPosted: Mon 24 Jul - 08:48 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

roudoudou wrote:
je pourrais demain ou après-demain. Idéalement faut que j'en fasse une cartouche ça sera plus simple pour moi de le tester sur tous mes cpc+



On est d'accord que c'est le dernier bout de code posté duquel je vire la table de delock en fin de source?


Back to top
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,976
Masculin
Point(s): 389
Moyenne de points: 0.13

PostPosted: Mon 24 Jul - 11:03 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

 Oui c'est bien ca!!!
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
Longshot


Offline

Joined: 21 Nov 2015
Posts: 93
Masculin
Point(s): 8
Moyenne de points: 0.09

PostPosted: Mon 24 Jul - 22:53 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

En effet. Vous pouvez même essayer aussi le code de Kevin , dans lequel il écrit que chez lui, ça flashe en jaune et bleu toutes les 52 lignes...
Car si ça le fait chez vous, il va falloir chercher quelles différences entre son source et le mien (à part le RETI et l'adresse des instructions interrompues, le moment ou commence l'exécution du code...)

Code:
 ;; CPC style raster ints, no DMA, leaving at default h/w values
;;
;; flashes yellow and blue, 52 lines between each
org &0000

start:
ld sp,&c000

ld bc,&f782
out (c),c
ld bc,&f400
out (c),c
ld bc,&f600
out (c),c
ld bc,&ef7f
out (c),c
ld bc,&f8ff
out (c),c
ld bc,&7f00+%10001000
out (c),c
ld bc,&7f10
out (c),c
ld bc,&7f54
out (c),c
;; just to get something on the screen
call crtc_reset

ld hl,&c000
ld e,l
ld d,h
inc de
ld (hl),0
ld bc,&3fff
ldir

;; init vectors
ld hl,dma_int1
ld (&4000),hl
ld hl,dma_int2
ld (&4002),hl
ld hl,dma_int3
ld (&4004),hl
ld hl,raster_int
ld (&4006),hl

;; duplicate across the range that is possible with all vectors
ld hl,&4000
ld de,&4008
ld bc,256-8
ldir

ld a,&40
ld i,a
im 2
;; address for memory write operation
ld de,&2000

;; select pen 0
ld bc,&7f00
out (c),c
ld bc,&7f40
out (c),c

ei

loop:
;; opcode and memory write
rept 64
ld (de),a
endm

;; opcode alone
rept 64
nop
endm

jp loop



crtc_reset:
ld hl,crtc_default_values
ld b,16
ld c,0
cr1:
push bc
ld b,&bc
out (c),c
inc b
ld a,(hl)
inc hl
out (c),a
pop bc
inc c
djnz cr1
ret


dma_int1:
push bc
ld bc,&7f54        ;; black
out (c),c
pop bc
ei
reti

dma_int2:
push bc
ld bc,&7f42        ;; sea green
out (c),c
pop bc
ei
reti

dma_int3:
push bc
ld bc,&7f44        ;; blue
out (c),c
pop bc
ei
reti


raster_int:
push bc
ld bc,&7f49        ;; pastel yellow
out (c),c
pop bc
ei
reti

crtc_default_values:
defb &3f, &28, &2e, &8e, 39, &00, 25, 30, &00, &07, &00,&00,&30,&00,&c0,&00

end start



[ peux tu virer le post que j'ai fait dans "présentation" par erreur... Neutral ]


Back to top
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,976
Masculin
Point(s): 389
Moyenne de points: 0.13

PostPosted: Mon 24 Jul - 23:00 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

Oui sans soucis ^^ J'me disais aussi. Il a bu le serge... Mort de Rire
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
roudoudou


Offline

Joined: 14 Jul 2016
Posts: 427
Localisation: LYON
Masculin
Point(s): 46
Moyenne de points: 0.11

PostPosted: Tue 25 Jul - 07:56 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

Longshot, la différence évidente entre son source et le tiens, c'est l'adresse de la table de vectorisation  Idea

Back to top
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,976
Masculin
Point(s): 389
Moyenne de points: 0.13

PostPosted: Tue 25 Jul - 09:28 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

roudoudou wrote:
Longshot, la différence évidente entre son source et le tiens, c'est l'adresse de la table de vectorisation  Idea



Et tu crois que ca peut changer le résultat? Étrange tout ceci quand même  Rolling Eyes
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
Display posts from previous:   
Post new topic   Reply to topic    Amstrad Plus Forum Index -> Programmation Cpc -> Asic All times are GMT + 2 Hours
Goto page: <  1, 2, 3, 4, 5, 6  >
Page 2 of 6

 
Jump to:  

Index | Administration Panel | Create a forum | Free support forum | Free forums directory | Report a violation | Cookies | Charte | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group