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
Longshot


Offline

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

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

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


Back to top
Publicité






PostPosted: Tue 25 Jul - 22:44 (2017)    Post subject: Publicité

PublicitéSupprimer les publicités ?
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 - 22:58 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

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


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 - 23:08 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

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

Back to top
Longshot


Offline

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

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

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.


Back to top
Longshot


Offline

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

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

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.


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 - 23:24 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

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


Back to top
Longshot


Offline

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

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

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    
  





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 - 23:48 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

écran noir pour le moment Very Happy

Back to top
Longshot


Offline

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

PostPosted: Wed 26 Jul - 00:11 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

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


Back to top
roudoudou


Offline

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

PostPosted: Wed 26 Jul - 00:21 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

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


Back to top
Ast
Administrateur

Offline

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

PostPosted: Wed 26 Jul - 14:28 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

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


Back to top
Guest
Guest

Offline




PostPosted: Wed 26 Jul - 15:28 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

 
Quote:
 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é)


Back to top
Ast
Administrateur

Offline

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

PostPosted: Wed 26 Jul - 15:31 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

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

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


Back to top
Guest
Guest

Offline




PostPosted: Wed 26 Jul - 15:31 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

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


Back to top
Ast
Administrateur

Offline

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

PostPosted: Wed 26 Jul - 15:32 (2017)    Post subject: Amstrad Plus et Acquittements Interruptions Reply with quote

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