AMSTRAD GX4000 FORUM Index du Forum

AMSTRAD GX4000 FORUM


 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 

Bug d'interruptions vectorielles en mode IM2

 
Poster un nouveau sujet   Répondre au sujet    AMSTRAD GX4000 FORUM Index du Forum -> DIVERS -> Hardware
Sujet précédent :: Sujet suivant  
Auteur Message
moudubou


Hors ligne

Inscrit le: 05 Avr 2013
Messages: 111
Localisation: Lugdunum

MessagePosté le: 2017-07-30, 18:42    Sujet du message: Bug d'interruptions vectorielles en mode IM2 Répondre en citant

Traduction de la page cpcwiki


Les interruptions vectorielles sont boguées. Quand Amstrad en a eu vent, ils ont enlevé les informations concernant le registre IVR et les interruptions vectorielles des dernieres documentation ASIC.


À la suite de discussions sur cpcwiki impliquant roudoudou, Longshot, gerald, arnoldemu et dragon, la cause du bogue a été identifiée après test et analyse par gerald et son analyseur logique.


Une solution de contournement existe. Le bug a surtout été vu lors de l'utilisation de l'interruption raster.


Par exemple, si les interruptions DMA ne sont pas utilisées et qu'une interruption raster intervient, le vecteur sera 6 (interruption raster) ou 4 pour le DMA 0 (INT de priorité la plus basse)


Si l'instruction au moment du déclenchement de l'interruption est située dans une région mémoire où A13=0, le bogue se produit, indépendamment que le code exécuté soit en RAM ou en ROM. L'emplacement de la table de vecteur d'interruption n'a pas d'influence, pas plus que l'emplacement du code appelé sous interruption. Le bogue ne se produit pas non plus avec les opcodes qui n'utilisent pas la mémoire en lecture/écriture ou ne contiennent pas de lecture/écriture mémoire lors de la récupération de l'opcode (adressage IX/IY par exemple). Les instructions à un seul octet ne posent pas de problème, tout comme le HALT. Cependant il semble difficile de programmer en n'utilisant que ces instructions pour contourner le problème.


Si l'instruction au moment du déclenchement de l'interruption est située dans une région mémoire où A13=0, le bogue ne se produit pas.


Si les interruptions DMA sont en mode d'auto-acquittement (IVR bit 0 = 0), le bug peut également se produire avec les interruptions DMA.


Il existe des solutions de contournement


- Mettre le code entre #2000-#3FFF ou #6000-#7FFF ou #A000-#BFFF ou #E000-#FFFF


- Faire pointer tous les vecteurs d'interruption vers la même fonction et désactiver l'acquittement automatique.




Technique:


Le bogue est lié à la logique autour de la liaison LK106 et IC116 à côté du Z80 qui se rapporte aux signaux /IORQ, /RESET, A13 et /WAIT mais la raison exacte de la logique n'est pas connue.


Lorsqu'une interruption raster est en attente, l'ASIC voit deux accusés réception en provenance du Z80. Avec le premier il acquittera automatiquement l'interruption raster. Quand il voit le second, comme il sait qu'il a vu l'interruption raster mais qu'aucune interruption DMA est en attente, il prend par défaut l'interruption la plus basse qui est le DMA 0. La logique interne du Z80 qui allonge ou raccourci le signal /IORQ est fonction de A13 c'est pourquoi le bug ne se produit pas quand A13 = 1


Complètement tordu ^_^
Revenir en haut
Publicité






MessagePosté le: 2017-07-30, 18:42    Sujet du message: Publicité

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


Hors ligne

Inscrit le: 05 Avr 2013
Messages: 111
Localisation: Lugdunum

MessagePosté le: 2017-07-30, 18:43    Sujet du message: Bug d'interruptions vectorielles en mode IM2 Répondre en citant

Un oubli


Avec le premier il acquittera automatiquement l'interruption raster -> puis enregistre les infos dans le registre DCSR et envoie une interruption vectorielle sur le bus
Revenir en haut
GOB
Administrateur

Hors ligne

Inscrit le: 01 Avr 2013
Messages: 1 586

MessagePosté le: 2017-07-30, 20:43    Sujet du message: Bug d'interruptions vectorielles en mode IM2 Répondre en citant

Truc de malade...

Et forcément fallait que je tombe sur cette merde dans un des jeux que je code actuellement. Impossible de le débusquer... Ca fait du n'importe quoi. Et bien entendu sous winape ca fonctionne ^^

Merci pour cette explication du coup, j'ai juste changé mon code d'adresse et hop ca fonctionne nickel sur mon cpc+... Après 3 semaines à m'énerver ou presque Smile
Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 18:54    Sujet du message: Bug d'interruptions vectorielles en mode IM2

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    AMSTRAD GX4000 FORUM Index du Forum -> DIVERS -> Hardware Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  

Index | Panneau d’administration | créer un forum gratuit | 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