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
Invité
Invité

Hors ligne




MessagePosté le: Mer 26 Juil - 14:38 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

Pas mon mot de passe sur mon pc pro...
Fait un org &A000 ou &7000 et le bug ne se produira plus, quelque soit la valeur que tu mets dans I


Revenir en haut
Publicité






MessagePosté le: Mer 26 Juil - 14:38 (2017)    Sujet du message: Publicité

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

En ligne

Inscrit le: 05 Sep 2014
Messages: 2 321

MessagePosté le: Mer 26 Juil - 14:40 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

Anonymous a écrit:
Pas mon mot de passe sur mon pc pro...
Fait un org &A000 ou &7000 et le bug ne se produira plus, quelque soit la valeur que tu mets dans I


Je regarde ça de suite ^^
_________________
Ast/iMP4CT

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


Revenir en haut
Ast
Administrateur

En ligne

Inscrit le: 05 Sep 2014
Messages: 2 321

MessagePosté le: Mer 26 Juil - 14:49 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

Salut,

Après une courte discussion avec Roudoudou ce matin et une petite correction avec Longshot cet après midi concernant le bug qui mélange les interruptions Dma0 et Raster (PRI) en mode iM2, il semblerait qu'une solution viable ait été trouvée.
Je m'en vais de ce pas vous l'expliquer.

Il suffirait d'avoir le bit 13 du poids fort de l'adresse du code (Merci Longshot!) à 1 pour que ce bug ne se produise pas, ce qui nous laisserait les adresses suivantes (#2xxx, #3xxx, #6xxx, #7xxx, #axxx, #bxxx, #exxx,#fxxx) hors du fameux bug !

Description Octet poids fort (si bit 13=1)
%0010 -> #20
%0011 -> #30
%0110 -> #60
%0111 -> #70
%1010 -> #a0
%1011 -> #b0
%1110 -> #e0
%1111 -> #f0
Qu'à cela ne tienne ! Je décide donc de tester avec le programme du maitre en modifiant un peu quand même





Code:
;           Gestion du mode d'interruption
;         vectorisé sur 6128 plus et 464 plus
; (mise en évidence du bug du vecteur d'interruption)
;
;                Par OffseT of Futurs'
;              pour Quasar CPC numéro 10
;                Modifié par AsT/iMPact 26/07/2017
;
;      Attention : pensez à délocker l'ASIC avant
; de lancer ce prog car sinon c'est le plantage assuré !!!
;
 
 Org &2000  ; (Bit 13 à 1)
Ent $
 
vector Equ &a0   ; Octet de poids fort
                         ; de l'adresse des
                         ; vecteurs d'interruption
adr Equ vector*&100 ; adr = &a000
ivr Equ 0   ; Valeur du registre IVR
 
dma0 Equ adr+ivr+%100 ; Déclaration des adresses
dma1 Equ adr+ivr+%010 ; des vecteurs d'interruption
dma2 Equ adr+ivr+%000 ; des DMA son 0, 1 et 2 et
rast Equ adr+ivr+%110 ; de l'interruption raster.
 
      di   ; On interdit les
            ; interruptions pour
            ; ne pas avoir de surprise !
      ld bc,&7fb8  ; On connecte la page
      out (c),c  ; I/O ASIC en &4000-&7FFF
                      ; (comme d'habitude)
      ld a,vector  ; On charge l'octet de
                         ; poids fort du vecteur
      ld i,a   ; d'interruption dans I.
      ld a,ivr  ; Chargement du registre IVR
      ld (&6805),a  ; sur la page I/O ASIC
      ld bc,&7fa0  ; Déconnexion de la page
      out (c),c  ; I/O ASIC
      ld hl,son0  ; Initialisation des vecteurs
      ld (dma0),hl  ; d'interruption aux adresses
      ld hl,son1  ; calulées lors de la
      ld (dma1),hl  ; déclaration des constantes.
      ld hl,son2  ; (DMA0)=Son0
      ld (dma2),hl  ; (DMA1)=Son1
      ld hl,raster  ; (DMA2)=Son2
      ld (rast),hl  ; (RAST)=Raster
      im 2   ; Passage en mode vectorisé

;
main ld b,#f5
vbl    in a,(c)
        rra
        jr nc,vbl
        ei
        halt
        jr vbl
;
; Vecteur d'interruption
;
 
son0 push af  
     push bc
     ld bc,#7f4c ; rouge
     ld a,#10
     out (c),a
     out (c),c
     pop bc
     pop af   ; le vecteur d'interruption
     jp &b941  ; du système - Si 464 Plus, mettre le vecteur #b939
 
son1 push af  
     push bc
     ld bc,#7f58 ; violet
     ld a,#10
     out (c),a
     out (c),c
     pop bc
     pop af   ; le vecteur d'interruption
      jp &b941  ; du système - Si 464 Plus, mettre le vecteur #b939
 
son2 push af  
     push bc
     ld bc,#7f44 ; bleu
     ld a,#10
     out (c),a
     out (c),c
     pop bc
     pop af   ; le vecteur d'interruption
      jp &b941  ; du système - Si 464 Plus, mettre le vecteur #b939
 
Raster push af     push bc
     ld bc,#7f4e ; orange
     ld a,#10
     out (c),a
     out (c),c
     pop bc
     pop af   ; le vecteur d'interruption
      jp &b941  ; du système - Si 464 Plus, mettre le vecteur #b939














1. Ne pas oublier de délocker l'asic avant de lancer ce test !
2. L'adresse du vecteur (vector) est toujours positionné en #a000, on peut modifier ce paramètre pour mettre l'adresse désirée.
3. L'adresse de la routine est positionnée (bit 13 à 1)

Résultat :

Si tout fonctionne correctement nous devrions avoir un border de la couleur orange et nous avons bien ce résultat ! Félicitation les Gars ^^

Conclusion :  Le résultat est sans appel : ça fonctionne !

_________________
Ast/iMP4CT

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


Revenir en haut
Invité
Invité

Hors ligne




MessagePosté le: Mer 26 Juil - 15:05 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

Il faut maintenant déterminer (ce qui est en cours) dans quelle situation ça ne fonctionne pas lorsque le bit 13 vaut 0
(car lorsqu'on parle de bug, il se produit seulement dans certains cas de figure)
D'ou l'autre programme que tu peux tester en le mettant en &9000 Laughing


Revenir en haut
Ast
Administrateur

En ligne

Inscrit le: 05 Sep 2014
Messages: 2 321

MessagePosté le: Mer 26 Juil - 15:12 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

C'est déjà un grand pas !

Pour ton programme il doit y avoir quoi comme résultat ?
_________________
Ast/iMP4CT

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


Revenir en haut
Invité
Invité

Hors ligne




MessagePosté le: Mer 26 Juil - 15:42 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

Avec le code suivant, je pensais qu'on devait tout avoir en bleu ou tout avoir en jaune.
Or Roud obtient du bleu sur la 2ème interruption de manière stable et toutes les autres en jaune (voir écran sur cpcwiki page 9)
Obtiens tu  la même chose ?

Code:

          org &9000
nbnopinst    equ 1   ; nb usec instruction to test
test
        di
        ld bc,&7F00+%10001101
        out (c),c        ; roms off, mode 1
        ld sp,&c000
        im 1
        ld hl,#c9fb
         ld (#38),hl
         ei
          halt
          halt 
        di
        ;
        ld bc,&7f10        ; black border
        out (c),c
        ld bc,&7f54
        out (c),c
        ;
        ld hl,calibrate_int
        ld (&8000),hl
        ld (&8002),hl
        ld (&8004),hl
        ld (&8006),hl
        ld hl,&8000
        ld de,&8008
        ld bc,256-8
        ldir
        ;
        ld a,&80
        ld i,a
        ;
        im 2
        ;
        ld hl,0
        ld (&8100),hl
        ld (&8102),hl
        ld hl,dma_int
        ld (&8104),hl
        ld hl,raster_int
        ld (&8106),hl                
        ld hl,&8100
        ld de,&8108
        ld bc,256-8
        ldir
        ;
        ld bc,&7F10
        out (c),c
        ;
        ei
        halt
; wait de usec        
; 40+(((de/8)-5) x 8)+(de and 7) nop
wait:
        ld hl,adjust    ; 3
        ld b,0        ; 2
        ld a,e        ; 1
        and %111    ; 2>8
        ld c,a        ; 1
        sbc hl,bc    ; 4
        srl d        ; 2 
        rr e        ; 2>17
        srl d        ; 2
        rr e        ; 2 
        srl d        ; 2
        rr e        ; 2>25
        dec de        ; 2>27 8
        dec de        ; 2>29 16
        dec de        ; 2>31 24
        dec de        ; 2>33 32 
        dec de          ; 2>35 40 *
                nop        ; 1>36 
wait_01
        dec de        ; 2 -
        ld a,d        ; 1 -
        or e        ; 1 -
        nop        ; 1 -
        jp nz,wait_01    ; 3 - v=(8 x DE)
        jp (hl)        ; 1>37 
        nop        ; 1 * v=0--7
            nop        ; 1
            nop        ; 1
            nop        ; 1
            nop        ; 1
        nop        ; 1
        nop        ; 1
adjust
        ret        ; 3>40 *

calibrated:
          ld a,&81    ; vector on page 2
          ld i,a            
        halt
        
calibrate_int:
            ei            ; 1
            pop hl            ; 3 
            ld  sp,&c000        ; 3
            ld de,end_calibrate    ; 3 -- 10
            or a            ; 1
            sbc hl,de        ; 4
            ld a,h            ; 1
            or l            ; 1
            jp z,calibrated        ; 3 -- 20
           ld de,(calibnop+1)    ; 6
            inc de            ; 2
            ld (calibnop+1),de    ; 6 -- 34 
        nop            ; 1 -- 35
        nop            ; 1 -- 36
            call wait        ; 5 
            nop            ; 1 
end_calibrate
            nop
me        jr me

raster_int:
          ld bc,&7f49        ; 3
           jp common        ; 3

dma_int:
          ld bc,&7f44
            jp common
    
common:
        ei            ; 1 -- 7
            ld sp,&c000        ; 3 -- 10
            out (c),c        ; 4 -- 14
calibnop      ld hl,64*48        ; 3 -- 17
compens        ld de,0            ; 3 -- 20
        or a            ; 1 -- 21
        sbc hl,de        ; 4 -- 25
        ex de,hl        ; 1 -- 26
        ld a,nbnopinst-1    ; 2 -- 28
        ld (compens+1),a    ; 4 -- 32
            call wait
ouf 
        nop            ; 1 -- 33
            nop            ; 1 -- 34
            nop            ; 1 -- 35
            nop            ; 1 -- 36
instruction     ld b,a            ; instruction to test
          ds 10,0    
  




Revenir en haut
Ast
Administrateur

En ligne

Inscrit le: 05 Sep 2014
Messages: 2 321

MessagePosté le: Mer 26 Juil - 15:48 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

Voici le résultat:



Border Jaune !

Edit
Même résultat sur le Cpc Plus de Cmp!
_________________
Ast/iMP4CT

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


Revenir en haut
Invité
Invité

Hors ligne




MessagePosté le: Mer 26 Juil - 15:59 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

C'est plutôt bizarre car Roud vient d'écrire sur CpcWiki que ça fait la même chose sur ses autres CPC (voir écran page 10 du post sur CpcWiki)
Ce qui est bizarre sur sa photo, c'est que le fond est noir, alors que je n'ai pas touché à cette couleur.

Roud ? WTF?

Bref, on est bien avec le bit 13=0, mais avec no bug, ce qui me parait bien plus cohérent.


Revenir en haut
Ast
Administrateur

En ligne

Inscrit le: 05 Sep 2014
Messages: 2 321

MessagePosté le: Mer 26 Juil - 16:17 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

Pour ma part, sur mes 2 cpcs, ça donne bien le même résultat, je confirme!
_________________
Ast/iMP4CT

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


Revenir en haut
roudoudou


En ligne

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

MessagePosté le: Mer 26 Juil - 17:51 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

Longshot, n'oublie pas que j'exécute une cartouche, par défaut tout est noir non?

Revenir en haut
Longshot


Hors ligne

Inscrit le: 21 Nov 2015
Messages: 66

MessagePosté le: Mer 26 Juil - 17:51 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

Et avec celui ci, tu obtiens quoi ?

 
Code:

          org &9000
nbnopinst    equ 1   ; nb usec instruction to test
test
        di
        ld bc,&7F00+%10001101
        out (c),c        ; roms off, mode 1
        ld sp,&c000
        im 1
        ld hl,#c9fb
         ld (#38),hl
         ei
          halt
          halt 
        di
        ;
        ld bc,&7f10        ; black border
        out (c),c
        ld bc,&7f54
        out (c),c
        ;
        ld hl,calibrate_int
        ld (&8000),hl
        ld (&8002),hl
        ld (&8004),hl
        ld (&8006),hl
        ld hl,&8000
        ld de,&8008
        ld bc,256-8
        ldir
        ;
        ld a,&80
        ld i,a
        ;
        im 2
        ;
        ld hl,0
        ld (&8100),hl
        ld (&8102),hl
        ld hl,dma_int
        ld (&8104),hl
        ld hl,raster_int
        ld (&8106),hl                
        ld hl,&8100
        ld de,&8108
        ld bc,256-8
        ldir
        ;
        ld bc,&7F10
        out (c),c
        ;
        ei
        halt
; wait de usec        
; 40+(((de/8)-5) x 8)+(de and 7) nop
wait:
        ld hl,adjust    ; 3
        ld b,0        ; 2
        ld a,e        ; 1
        and %111    ; 2>8
        ld c,a        ; 1
        sbc hl,bc    ; 4
        srl d        ; 2 
        rr e        ; 2>17
        srl d        ; 2
        rr e        ; 2 
        srl d        ; 2
        rr e        ; 2>25
        dec de        ; 2>27 8
        dec de        ; 2>29 16
        dec de        ; 2>31 24
        dec de        ; 2>33 32 
        dec de          ; 2>35 40 *
                nop        ; 1>36 
wait_01
        dec de        ; 2 -
        ld a,d        ; 1 -
        or e        ; 1 -
        nop        ; 1 -
        jp nz,wait_01    ; 3 - v=(8 x DE)
        jp (hl)        ; 1>37 
        nop        ; 1 * v=0--7
            nop        ; 1
            nop        ; 1
            nop        ; 1
            nop        ; 1
        nop        ; 1
        nop        ; 1
adjust
        ret        ; 3>40 *

calibrated:
          ld a,&81    ; vector on page 2
          ld i,a            
        halt
        
calibrate_int:
            ei            ; 1
            pop hl            ; 3 
            ld  sp,&c000        ; 3
            ld de,end_calibrate    ; 3 -- 10
            or a            ; 1
            sbc hl,de        ; 4
            ld a,h            ; 1
            or l            ; 1
            jp z,calibrated        ; 3 -- 20
           ld de,(calibnop+1)    ; 6
            inc de            ; 2
            ld (calibnop+1),de    ; 6 -- 34 
        nop            ; 1 -- 35
        nop            ; 1 -- 36
         nop     ; 1 -- 37
            call wait        ; 5 
            nop            ; 1 
end_calibrate
            nop
me        jr me

raster_int:
          ld bc,&7f49        ; 3
           jp common        ; 3

dma_int:
          ld bc,&7f44
            jp common
    
common:
        ei            ; 1 -- 7
            ld sp,&c000        ; 3 -- 10
            out (c),c        ; 4 -- 14
calibnop      ld hl,64*48        ; 3 -- 17
compens        ld de,0            ; 3 -- 20
        or a            ; 1 -- 21
        sbc hl,de        ; 4 -- 25
        ex de,hl        ; 1 -- 26
        ld a,nbnopinst-1    ; 2 -- 28
        ld (compens+1),a    ; 4 -- 32
            call wait
ouf 
        nop            ; 1 -- 33
            nop            ; 1 -- 34
            nop            ; 1 -- 35
            nop            ; 1 -- 36
            nop     ; 1 -- 37
instruction     ld b,a            ; instruction to test
          ds 10,0    
  




Revenir en haut
Longshot


Hors ligne

Inscrit le: 21 Nov 2015
Messages: 66

MessagePosté le: Mer 26 Juil - 17:55 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

 
Citation:
 Longshot, n'oublie pas que j'exécute une cartouche, par défaut tout est noir non?
J'imagine en effet que c'est le basic qui met le fond bleu Very Happy
En l'état, je suppose que lorsque le bit 13 est à 0, il faut peut-être aussi que le bit 0 soit à 0 pour que ça bug
Car il est possible que la 2ème interruption survienne un nop avant ou après, et donc on est sur une adresse paire ou impaire.


Revenir en haut
Ast
Administrateur

En ligne

Inscrit le: 05 Sep 2014
Messages: 2 321

MessagePosté le: Mer 26 Juil - 17:57 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

Longshot : ça va me prendre un peu de temps de convertir ton source... J'ai toutes tes tabulations qui s'affiche sous forme de "^"
Dis moi plutôt ce qui change, je modifie ton 1er source comme cela ! merci
_________________
Ast/iMP4CT

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


Dernière édition par Ast le Mer 26 Juil - 17:57 (2017); édité 1 fois
Revenir en haut
Longshot


Hors ligne

Inscrit le: 21 Nov 2015
Messages: 66

MessagePosté le: Mer 26 Juil - 17:57 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

D'ailleurs si c'est vrai, (Roud), tu devrais avec ce code dont j'ai décalé le code interrompu (ou simplement en assemblant le code en 9001), obtenir strictement l'inverse, à savoir du bleu avec une interrupt jaune...

Revenir en haut
Longshot


Hors ligne

Inscrit le: 21 Nov 2015
Messages: 66

MessagePosté le: Mer 26 Juil - 17:59 (2017)    Sujet du message: Amstrad Plus et Acquittements Interruptions Répondre en citant

Citation:

 Longshot : ça va me prendre un peu de temps de convertir ton source... J'ai toutes tes tabulations qui s'affiche sous forme de "^"
Il y a plus simple. Assemble le précédent en &9001

Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 23:42 (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 + 1 Heure
Aller à la page: <  1, 2, 3, 4, 5, 6  >
Page 5 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