Amstrad Plus Forum Index

Amstrad Plus
Découverte de la gamme Old et Plus des Cpc d'Amstrad.

 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

*****Programmez vos Ruptures encore plus facilement

 
Post new topic   Reply to topic    Amstrad Plus Forum Index -> Programmation Cpc -> CRTC
Previous topic :: Next topic  
Author Message
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,976
Masculin
Point(s): 389
Moyenne de points: 0.13

PostPosted: Fri 20 Mar - 17:41 (2020)    Post subject: *****Programmez vos Ruptures encore plus facilement Reply with quote

C'est lors d'une discussion hier avec Plissken que j'ai eu l'idée de refaire un article plus focus sur la rupture.

En effet, il devait rester quelques zones d'ombres et certain d'entre vous paraissaient perdre pied, à l'idée d'élaborer le fameux schèma.
Qu'il en soit ainsi car nous allons nous en passer !!!

Code:

;
; Rupture Simple
; -- By AsT iMPact March 2020
;       
      ORG &A000
   
;
rupt1 equ 22 ; La première rupture fait 22*8=176 lignes de haut
rupt2 equ 39-rupt1 ; la seconde partie, c'est tout simplement le reste
;
start
          di                 ; on coupe les int
          ld   hl,&C9FB ;
          ld   (&38),hl  ;
;
          ld   hl,&0600+39 ; on affiche tout le tableau vertical
          call setreg         
;
main      ld   b,&F5  ; Attente vbl
wvbl      in   a,(c)
          rra
          jr   nc,wvbl
;
          ld   hl,&0700+39
          call setreg
;
          ld   b,0 ; petite attente de 32 lignes de la partie non visible de l'écran
          djnz $
          djnz $
;
          ld   hl,&0400+rupt1-1 ; hauteur de la première rupture
          call setreg
;
          ei
          halt
;
          ld   b,rupt1*8- 4 ; on attends x lignes
waitline  defs 60,0
          djnz waitline
;
          ld   hl,&0400+rupt2-1 ; on défini la hauteur du deuxième écran
          call setreg
;
          ld   hl,&0700+rupt2-4 ; on recale la position de la sync verticale
          call setreg
;
          jp   main
;   
; h=reg | l=val
;
setreg    ld   b,&BC
          out  (c),h
          inc  b
          out  (c),l
          ret
;     


Voici le résultat ! 1ère rupture de 0 à 21, 2ème rupture le reste.


On commence les explications ?

Code:

rupt1 equ 22 ; La première rupture fait 22*8=176 lignes de haut
rupt2 equ 39-rupt1 ; la seconde partie, c'est tout simplement le reste


Dans l'exemple proposé tout est calculé automatiquement. Il suffit juste de mettre la valeur de la 1ère rupture sachant que rupt1>=3 et <=32.
Pourquoi 32 ? Parce que j'utilise un registre 8 bit et que 32*8, ça fait 256!
En fonction de la valeur que vous donnerez à rupt1, la valeur de rupt2 sera modifié automatiquement en post-calcul.


Code:

          ld   hl,&0700+39
          call setreg


On mets le registre 7 en overflow. Pour cela, il suffit de lui mettre une valeur qu'il ne pourra jamais atteindre.

Code:

          ld b,0
          djnz $
          djnz $


On attends que les 32 premières lignes non visibles passent.

Code:

          ld   hl,&0400+rupt1-1 ; hauteur de la première rupture
          call setreg


C'est maintenant le moment d'envoyer la valeur de la 1ère hauteur de l'écran, à savoir 22-1, soit 22 lignes (0 à 21).

Code:

          ei
          halt


Le ei/halt permet, comme je l'ai indiqué aujourd'hui à notre nouveau membre Hwikaa d'attendre jusqu'à ce que la première int se produise, à savoir à la 52ème lignes (0 à 51).

Code:

          ld   b,rupt1*8- 4
waitline  defs 60,0
          djnz waitline


On attends quelques lignes, ici 22*8- 4 (172 lignes), le temps que tout se soit affiché.

Code:

;
          ld   hl,&0400+rupt2-1 ; on défini la hauteur du deuxième écran
          call setreg


On peut maintenant envoyer la deuxième valeur pour la 2ème rupture, celle du bas.

Code:

          ld   hl,&0700+rupt2-4 ; on recale la position de la sync verticale
          call setreg


et on repositionne tranquillement mais efficacement, la position de la vbl.

Voilà, c'est terminé. C'était pas bien compliqué, non ?

Petit Bonus avant de vous quitter. Il ne vous aura pas échappé que j'ai utilisé le reg 6 en début de routine. Celui-ci permet d'afficher le nombre de caractères visible en vertical, soit ici le max, 39. J'aurais pu mettre également, 39-4-2, 33 en supprimant les parties non visibles.

D'autres questions ?
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
Publicité






PostPosted: Fri 20 Mar - 17:41 (2020)    Post subject: Publicité

PublicitéSupprimer les publicités ?
Back to top
Display posts from previous:   
Post new topic   Reply to topic    Amstrad Plus Forum Index -> Programmation Cpc -> CRTC All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  

Index | Administration Panel | Create a forum | Free support forum | Free forums directory | Report a violation | Cookies | Charte | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group