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 Depl du JR 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 ; reprogrammation 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 registres PUSH DE PUSH HL PUSH BC LD HL,COUNTI+ 1 ; compteur Inter LD B ,0F5H ; gestion periode compteur IN A,(C) RRA JP NC,NEXTI LD (HL),0FFH ; 1ere Inter NEXTI INC (HL) ; Num Inter+1 (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 VectNum 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... ; INT3 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 | ★ AMSTRAD CPC ★ DOWNLOAD ★ |
|
CPCrulez[Content Management System] v8.732-desktop/c Page créée en 795 millisecondes et consultée 3229 foisL'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. |
|
|