Amstrad Plus Index du Forum

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

 FAQFAQ   RechercherRechercher   MembresMembres   GroupesGroupes   S’enregistrerS’enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Amstrad Plus et Acquittements Interruptions
Aller à la page: <  1, 2, 3, 4, 5, 6  >
 
Poster un nouveau sujet   Répondre au sujet    Amstrad Plus Index du Forum -> Bienvenue sur ce forum -> Programmation
Sujet précédent :: Sujet suivant  
Auteur Message
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 2 112

MessagePosté le: Sam 22 Juil - 21:14 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

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

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


Revenir en haut
Publicité






MessagePosté le: Sam 22 Juil - 21:14 (2017)    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 2 112

MessagePosté le: Dim 23 Juil - 00:12 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

Longshot a écrit:

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


Revenir en haut
Longshot


Hors ligne

Inscrit le: 21 Nov 2015
Messages: 54

MessagePosté le: Dim 23 Juil - 00:57 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

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


Revenir en haut
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 2 112

MessagePosté le: Dim 23 Juil - 00:58 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

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


Revenir en haut
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 2 112

MessagePosté le: Dim 23 Juil - 18:18 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

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 a écrit:


....

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


Revenir en haut
Longshot


Hors ligne

Inscrit le: 21 Nov 2015
Messages: 54

MessagePosté le: Lun 24 Juil - 02:03 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

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


Revenir en haut
Longshot


Hors ligne

Inscrit le: 21 Nov 2015
Messages: 54

MessagePosté le: Lun 24 Juil - 02:08 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

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.




 


Revenir en haut
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 2 112

MessagePosté le: Lun 24 Juil - 06:45 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

Longshot a écrit:
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...."


Revenir en haut
roudoudou


Hors ligne

Inscrit le: 14 Juil 2016
Messages: 210
Localisation: LYON

MessagePosté le: Lun 24 Juil - 08:38 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

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+

Revenir en haut
roudoudou


Hors ligne

Inscrit le: 14 Juil 2016
Messages: 210
Localisation: LYON

MessagePosté le: Lun 24 Juil - 08:48 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

roudoudou a écrit:
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?


Revenir en haut
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 2 112

MessagePosté le: Lun 24 Juil - 11:03 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

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

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


Revenir en haut
Longshot


Hors ligne

Inscrit le: 21 Nov 2015
Messages: 54

MessagePosté le: Lun 24 Juil - 22:53 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

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 ]


Revenir en haut
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 2 112

MessagePosté le: Lun 24 Juil - 23:00 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

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

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


Revenir en haut
roudoudou


Hors ligne

Inscrit le: 14 Juil 2016
Messages: 210
Localisation: LYON

MessagePosté le: Mar 25 Juil - 07:56 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

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

Revenir en haut
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 2 112

MessagePosté le: Mar 25 Juil - 09:28 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

roudoudou a écrit:
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...."


Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 05:41 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Amstrad Plus Index du Forum -> Bienvenue sur ce forum -> Programmation Toutes les heures sont au format GMT + 2 Heures
Aller à la page: <  1, 2, 3, 4, 5, 6  >
Page 2 sur 6

 
Sauter vers:  

Index | Panneau d’administration | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com