Comment
Author: Admin | 2025-04-28
1 et 2 marchent très bien ! Dès lors, si elles sont suffisantes, le bug de l'interruption DMA 0 est sans conséquence.Listing : IM 2 sur CPC plusTélécharger le listing au format Protext 6.10 (ASCII ISO-Latin-1).; 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;; Attention : pensez à délocker l'ASIC avant; de lancer ce prog car sinon c'est le plantage assuré !!!; Org &8000 ; On commence ici ! Limit &9fff ; On s'arrêtera là ! Nolist Vector Equ &a0 ; Octet de poids fort ; de l'adresse des ; vecteurs d'interruptionAdr Equ vector*&100IVR Equ 0 ; Valeur du registre IVR DMA0 Equ adr+ivr+%100 ; Déclaration des adressesDMA1 Equ adr+ivr+%010 ; des vecteurs d'interruptionDMA2 Equ adr+ivr+%000 ; des DMA son 0, 1 et 2 etRAST 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é ei ; On revient au système comme ret ; si de rien n'était... ;; Vecteur d'interruption; son0 push af ; On poke 0 en &0000 xor a ; pour dire qu'on a été ld (0),a ; appelé puis on lance pop af ; le vecteur d'interruption jp &b941 ; du système son1 push af ; De même mais on poke 1 ld a,1 ; en &0000 ld (0),a ; ... pop af ; ... jp &b941 ; ... son2 push af ; Idem avec 2 en &0000 ld a,2 ; ... ld (0),a ; ... pop af ; ... jp &b941 ; ... Raster push af ; Idem avec 255 en &0000 ld a,255 ; ... ld (0),a ; ... pop af ; ... jp &b941 ; ...Les interruptions rasterCelles-ci sont pilotées grâce au registre PRI ; étudions-le en détail. Lorsqu'il est à une valeur nulle (ce qui est la valeur par défaut), l'ASIC est alors en mode compatibilité Gate Array et génère une interruption tous les 300ème de seconde comme le ferait un
Add Comment