CODINGCHRONIQUE A100% DES LOGON SYSTEM ★ RUPTURE FACILE ★

Logon System ACPC n°36 - Rupture facileCoding Chronique A100% Des Logon System

Pour ce numéro d'avril, nous retrouvons le père des Logon System, pour revoir le problème de la rupture d'écran sur CPC. Pour une meilleure compréhension de cet article, relisez notre numéro de décembre ou Longshot vous expliquait déjà comment repousser les limites du CRT: le processeur vidéo des CPC.

Place à longshot !

Comme je vous l'avais expliqué, la rupture est la méthode consistant a changer l'adresse de l'écran en cours de balayage. Pour effectuer cela, plusieurs registres CRTC sont a notre disposition, notamment le 4,5 et 9 (revoir le numéro de décembre). Un léger problème subsistait cependant : comment stabiliser correctement l'écran ? Lorsqu'un VBL (Vertical Blanking) commence pour un écran, une zone de synchronisation (présente dans l'overscan vertical) est génerée. Le CRT doit se baser sur cette zone pour synchroniser l'image avec le début du balayage. Comment peut-il le faire ? Tout simplement grâce a un nouveau registre : le numéro 7 !

SVNCHRONISONS

La synchronisation de l'écran doit être basée par rapport au VBL de la derniere rupture générée (lorsqu'on en a plus de 2, je parle des ruptures). Le registre 7 permet d'indiquer, en partant du bas de écran, le nombre de lignes caractères ou trouver le signal de synchro (qui est, je le répète, dans le VBL de la dernière rupture) pour que l'image puisse être stabilisée.

Ce registre doit donc prendre sa véritable valeur durant la période d' affichage de la dernière rupture. Donc, pour être un peu plus concret, je reprends la rupture simple déjà évoquée, c'est a dire : le registre 4 = 18, le registre 5 = 0 et le registre 9 = 7.

Bon, comme je vous l' avais explique, chaque rupture génère une VBL ce qui implique donc que, pour chaque VBL, le registre 7 de synchronisation doit être pris en compte. Cette prise en compte du registre 7 est traduite sur l' écran, à l'endroit de la VBL, par une « bande noire » qui correspond a la zone de synchronisation. Or, si cette zone nous intéresse pour stabiliser notre écran par rapport a la dernière rupture, elle ne nous intéresse guère pour les ruptures précédentes. Que faire pour empêcher son apparition? Non Robby, on ne met pas un sparadrap sur écran !

DUPONS LE CRT

Oui, tout simplement, nous allons feinter le CRT. Pourquoi ne pas mettre le registre 7 a sa valeur maximale (qui est 127) ? Nous lui indiquerions ainsi que la zone de synchro (je rappelle que seule la dernière compte), pour toutes les ruptures avant la dernière, sera très très très bas. Donc en mettant registre 7 = 127, nous obtenons l' effet désiré: la bande noire disparaît !

Oui, je sais, tout cela est très théorique !

Eh bien voyons l'application de la chose grâce a un petit exemple prédigéré : les demos de Fefesse à la portée de tous !

Voici donc pour terminer ce chapitre sur la rupture, qui, je l'espère, vous a plu ! Vous pouvez ranger votre double-hache car vous devriez, grâce a ma petite routine commentée, vous offrir des ruptures sympa même sous Basic. Il reste beaucoup de notions a développer, mais comme je le disais hier a luke Skywalker: Demain, tu seras prêt !! 


; Rupture Simple sous Basic 

; Longshot. Logon System pour Amstrad 100% 

; LES RECOMMANDATIONS DE PAPY LONGSHOT : 
; Sauvegarder le code et utiliser sans DAMS (Perturbations) 

; CALL 0A000H installe le mode rupte 
; CALL 0A003H desinstalle 
;

        ORG 0A000H 

;

 

        JP      INSTALL          ; Rupture installee 
        JP      DESINST          ; Rupture desinstallee 

INSTALL 
        DI                       ; Hip Hop le suis seu1 
        LD      HL,(039H)        ; Vecteur Std Inter 
        LD      DE,BUF           ; zone sauvegarde 
        PUSH    HL 
        LDI 
        LDI 
        LDI                      ; Transfere 3 bytes 
        LD      C,(HL)           ; Lire Byte Dep1 du lR 
        LD      B,0 
        INC     HL               ; Instruc. Suivante 
        LD      (MRET2 + 1 ),HL  ; Ptr Ret Cond. Fausse 
        ADD     HL,BC            ; Adresse Arrivee ts CPC 
        LD      (MRET1 + 1 ),HL  ; Ptr Ret Cond Vraie 
        POP     DE               ; Modif Rout Systeme 
        LD      HL,VECTEUR       ; transfert vecteur pirate 
        LDI 
        LDI 
        LDI 
        EI                       ; En avant marche ! 
        RET

 

VECTEUR JP INTER 

BUF     DS 3,0 

DESINST 
        DI 
        LD DE,(039H) 
        LD      HL,BUF          ; restitution du buffer 
        LDI 
        LDI 
        LDI 
        LD      BC,0BC04H       ; repr0grammati0n Std du CRT 
        OUT (C),C 
        LD BC,0BD00H+38 
        OUT (C),C 
        LD BC,0BC07H 
        OUT (C),C 
        LD BC,0BD00H+30 
        OUT (C),C 
        LD BC,0BC06H 
        OUT (C),C 
        LD BC,0BD00H+25 
        OUT (C),C 
        EI 
        RET 

; Routine Interruption 

INTER 
        PUSH    AF              ; sauvegarde de quelques registrcs 
        PUSH DE 
        PUSH HL 
        PUSH BC 
        LD      HL,COUNTI+ 1    ; compteur Inter 
        LD      B ,0F5H         ; gestion periode compteur 
        IN A,(C) 
        RRA 
        JD      NC,NEXTI 
        LD      (HL),0FFH       ; 1ere Inter 
NEXTI 
        INC     (HL)            ; Num Inter+l (1/300 x 6) 
COUNTI  LD      A,0 
        CP      6               ; verif pas de pb ( Cas 
        JR      C,OK            ; de CRTC bizarroides ) 
        XOR A 
OK 
        SLA     A               ; x 2 + TabVectInt 
        LD      C,A 
        LD      B,0 
        LD      HL,TABINT 
        ADD     HL,BC

 

        LD      A,(HL)          ; donne Ptr VeetNum 
        INC     HL 
        LD      H,(HL) 
        LD      L,A 
        LD      BC,RETOUR       ; adresse retOUr 
        PUSH    BC 
        JP      (HL)            ; saut VectNum 
RETOUR 
        POP BC 
        POP HL 
        POP DE 
        POP AF 
        EX AF,AF

 

MRET1   JP      C,0000 
MRET2   JP      0000

 

TABINT  DW INT1 
        DW INT2 
        DW INT3 
        DW INT4 
        DW INT5 
        DW INT6 
        DW INT2

 


; INT1: debut de rafraichissement ecran. 
; Fin de VBL passee. 

INT1 
        LD BC,07F9EH 
        OUT (C),C 
        LD      BC,0BC0CH       ; changement adresse Reg0C Reg0D)
        OUT (C),C 
        LD   BC,0BD30H          ; en 0C000H 
        OUT  (C),C 
        LD   BC,0BC0DH 
        OUT  (C),C 
        LD   BC,0BD00H 
        OUT  (C),C 
        LD   BC,0BC04H          ; Nb ligne moitie écran Reg04 
        OUT  (C),C 
        LD   BC,0BD00H+ 18 
        OUT  (C),C 
        LD   BC,0BC07H          ; overflow du Reg 7 
        OUT  (C),C 
        LD   BC,0BD00H+255 
        OUT  (C),C 
        LD   BC,0BC06H          ; Nb de caraeteres affichés 
        OUT  (C),C 
        LD   BC,0BD00H+19 
        OUT  (C),C 
        RET 

;       INT2: 1/300eme de see est passe depuis INT1 

INT2 
        RET 

;       INT3: Ca fait 2/300eme... 

INIT3 
        LD   BC,0BC0CH       ; Bufferisation offset pour écran suivant 
        OUT  (C),C 
        LD   BC,0BD20H       ; en 08000H 
        OUT  (C),C 
        LD   BC,0BC0DH 
        OUT  (C),C 
        LD   BC,0BD00H 
        OUT  (C),C 
        RET 

;       INT4: nous arrivons a 31300eme 
;       soit 1/100, ce qui est la moitié 
;       de 1/50eme donc au milieu de l'ecran 

INT4 
        RET 

;       INT5: 4/300eme 

INT5 
        RET 

;       INT6: 5/300eme sont passes depuis INT1..I1 reste 1/300eme de sec 

INT6 
        LD  BC,0BC07H 
        OUT (C),C 
        LD  BC,0BD00H+ 18   ; resynchronisation ecran 
        OUT (C),C 

        RET

  

Longshot, ACPC n°36, avril 91, p40-41

★ ANNÉE: 1991
★ AUTEUR: LONGSHOT
★ UPDATED: 10/08/2019

Page précédente : Logon System ACPC n°35 - Le Gate Array
★ AMSTRAD CPC ★ DOWNLOAD ★

Je participe au site:
» Newfile(s) upload/Envoye de fichier(s)
★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » Logon System ACPC n°38 - Overscan facile
» Coding » Logon System ACPC n°45 - Sinus Dots
» Coding » Logon System ACPC n°31 - Le CRTC
» Coding » Logon System ACPC n°32 - La rupture
» Coding » Logon System ACPC n°46 - Une demo décortiquée

QUE DIT LA LOI FRANÇAISE:

L'alinéa 8 de l'article L122-5 du Code de la propriété intellectuelle explique que « Lorsque l'œuvre a été divulguée, l'auteur ne peut interdire la reproduction d'une œuvre et sa représentation effectuées à des fins de conservation ou destinées à préserver les conditions de sa consultation à des fins de recherche ou détudes privées par des particuliers, dans les locaux de l'établissement et sur des terminaux dédiés par des bibliothèques accessibles au public, par des musées ou par des services d'archives, sous réserve que ceux-ci ne recherchent aucun avantage économique ou commercial ». Pas de problème donc pour nous!

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 154 millisecondes et consultée 1411 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.