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
Longshot


Hors ligne

Inscrit le: 21 Nov 2015
Messages: 54

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

Si c'est strictement le même code
1100 : bug
0000 : bug
1010 : pas bug
Donc le seul bit différent d'une adresse qui bugge c'est le bit 13 de l'adresse.
Si tu mets le code en #200 ?

Sinon c'est peut etre une histoire de ram ou une rom peut être présente aussi ?
Donc ça devrait marcher en #4000


Revenir en haut
Publicité






MessagePosté le: Mar 25 Juil - 22:44 (2017)    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
roudoudou


Hors ligne

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

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

j'ai posté sur wiki
ça bug en #8000, #9000, #C000, #D000 mais pas #A000 #B000 #E000 #F000
pas essayé les adresses basses encore, un peu casse couille Very Happy


Revenir en haut
roudoudou


Hors ligne

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

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

à mon avis en #200 c'est pareil qu'en #0000 ça doit planter, tu voulais dire #2000 ?

Revenir en haut
Longshot


Hors ligne

Inscrit le: 21 Nov 2015
Messages: 54

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

C'est moi ou le cpcwiki n'arrête pas de vautrer ?

Oui tu as raison #200 doit aussi planter. Etourderie... Rolling Eyes


C'est là que mon premier programme va redevenir intéressant car il place une instruction exactement à la même place à chaque interruption
Alors que le programme actuel est anarchique.


Revenir en haut
Longshot


Hors ligne

Inscrit le: 21 Nov 2015
Messages: 54

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

Car je suspecte que le bit 13 n'est pas tout seul dans cette affaire.
Il doit y avoir un autre bit dans le poids faible de l'adresse.


Revenir en haut
roudoudou


Hors ligne

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

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

oui cpcwiki est pas stable
pour info j'ai aussi testé #F100, #F200, #F400 et #F800 avec succès Smile


Revenir en haut
Longshot


Hors ligne

Inscrit le: 21 Nov 2015
Messages: 54

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

Du coup, si tu assembles ça en #9000, est ce que c'est tout bleu ou tout jaune ?
 

 
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
roudoudou


Hors ligne

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

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

écran noir pour le moment Very Happy

Revenir en haut
Longshot


Hors ligne

Inscrit le: 21 Nov 2015
Messages: 54

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

Normal vu que la table des vecteurs est en 8000 et 8100
Change le ORG en &9000 et ça devrait aller mieux  Very Happy


Revenir en haut
roudoudou


Hors ligne

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

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

tain, j'ai rien vu Very Happy
je vais plutôt aller me coucher
à demain, j'ai un peu de temps libre


Revenir en haut
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 2 112

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

Salut,

Après une courte discussion avec Roudoudou ce matin 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 vecteur à 1 pour que ce bug ne se produise pas, ce qui nous positionnerait donc 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 Smile

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 &8000  ; On commence ici !
Ent $
 
vector Equ &a0   ; Octet de poids fort (Bit 13 à 1)
    ; 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 positionné en #a000, on peut modifier ce paramètre pour mettre l'adresse désirée

Résultat :

Si tout fonctionne correctement nous devrions avoir un border de la couleur orange or, nous avons bien un border avec 2 couleurs mélangés, rouge (dma0) et orange (raster)

Conclusion : malgré le bit 13 positionné à 1, les interruptions dma0 et raster se mélangent toujours.
Bien évidemment, j'ai fait l'essai avec toutes les adresses citées plus haut, mais aussi avec toutes les autres (#0000,#1000... #f000). Le résultat est sans appel : ça ne marche pas !
_________________
Ast/iMP4CT

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


Revenir en haut
Invité
Invité

Hors ligne




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

 
Citation:
 Il suffirait d'avoir le bit 13 du poids fort de l'adresse du vecteur à 1 pour que ce bug ne se produise pas

Pas du tout.
Il suffit que l'adresse du code interrompu ait le bit 13 à 1 pour que le bug ne se produise pas.
(Longshot pas connecté)


Revenir en haut
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 2 112

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

Merci Longshot pas connecté ! Mais cela n'arrange pas le problème ici ^^ Mr. Green
_________________
Ast/iMP4CT

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


Revenir en haut
Invité
Invité

Hors ligne




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

D'ailleurs on se fiche complètement de l'adresse de la table, et même de l'adresse des routines d'interruption, selon les tests de roud.
(comment on fait pour éditer les post ici ?)


Revenir en haut
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 2 112

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

bin faut être connecté ! Smile
_________________
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 4 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