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

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

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

Other platform tools:
» Logon36-Rupture-maxamDATE: 2019-08-10
DL: 234
TYPE: text
SiZE: 3Ko
NOTE:

» LOGON36-RuptureDATE: 2019-08-10
DL: 233
TYPE: text
SiZE: 5Ko
NOTE:

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » Logon System ACPC n°35 - Le Gate Array
» Coding » Logon System ACPC n°31 - Le CRTC
» Coding » Logon System ACPC n°47 - Sprites !!!!
» Coding » Logon System ACPC n°46 - Une demo décortiquée
» Coding » Logon System ACPC n°45 - Sinus Dots
» Coding » Logon System ACPC n°49 - Le soundtrack sur CPC
Je participe au site:
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 310 millisecondes et consultée 2658 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.