; http://www.cpcrulez.fr
;

;
; POUR LE SCROLL JE TE MET CELUI DE NDC 3 CAR IL EST TRES BIEN COMMENTE
; ET C'EST LE PLUS SIMPLE QUE TU PUISSES TROUVER
;
         ORG  #a000
;
;
debut
;
         LD   a,1
         CALL #bc0e                     ;met ecran en mode 1 (facultatif)
;
         LD   h,40                      ;locate 40,1 (mode 1)
;
; pour mode 2 LD h,80 / pour mode 0  LD h,20
;
         LD   l,1
;
; pour mettre le scrolling a un autre endroit sur l'ecran, changez le "LD l,1"
; ci-dessus par un "LD l,No de ligne", mais attention, ce n'est pas le seul
; truc a changer, tapez en BASIC   PRINT HEX$(&C000+&50*No de ligne-1)
; exemple PRINT HEX$(&C000+&50*12) pour la 13eme ligne...
; le cpc va vous repondre une adresse qu'il faudra mettre plus loin dans ce
; listing, (8 lignes apres SCROLL), je vous y attend...
;
         CALL #bb75                     ;locate !
         LD   hl,text1                   ;hl pointe sur debut du texte
;
prg      LD   a,(hl)                    ;prend lettre qu'il y a dans hl
         CP   "#"
         JR   nz,suite                  ;lettre prise = diese ? Si non, continu
         LD   hl,text1                  ;si oui, hl repointe sur le debut de la
         JR   prg                       ;phrase (le message tourne en rond)
;
suite    CALL #bb5a                     ;affiche la lettre
         LD   a,8                       ;revient d'un chr en arriere (comme ca
         CALL #bb5a                     ;le suivant chr est a la meme place)
;
         CALL scroll                    ;decale le tout !
         CALL scroll                    ;redecale (car mode 1= 2 pixels/lettre)
;
; pour le mode 1, faire 2 fois CALL scroll (c'est le cas ici),
; pour le mode 2, faire 1 fois CALL scroll,
; pour le mode 0, faire 4 fois CALL scroll.
;
         INC  hl                        ;hl pointe sur lettre suivante
;
         CALL #bb1b                     ;touche presse ??
         JR   nc,prg                    ;sinon alors recommence
;
         RET                            ;si oui alors Byyye ! (retour basic)
;
;
; routine qui scroll les huit lignes (un chr$=8 lignes)
;
scroll
;
         CALL #bd19                     ;pause pour pas que le scroll
         LD   bc,#105                   ;ne bave et aille trop vite
;
; Attention      suivant la ligne ou vous faites ce scrolling il se peut
; que le  scroll  bave,  dans ce cas changez la ligne ci - dessus par soit
; LD bc,#005 ou LD bc,#205 ou LD bc,#305 etc...Si les symptomes persistent
; appellez votre revendeur Noix De Croco...
;
tmp      DJNZ tmp                       ;comme je disais donc,
         DEC  c                         ;attend un peu
         JR   nz,tmp
;
         PUSH hl                        ;sauve hl car on va le modifier
;
         LD   b,8                       ;huit lignes a scroller
         LD   de,#c000                  ;point de depart 1ere ligne
;
; VOILA ! C'est juste au-dessus que vous remplacez le "LD de,#C000" par
; l'adresse que vous avait donnee la ligne basic que j'ai cite.
; par exemple "LD de,#c050"
;
bcl      PUSH bc                        ;sauve compteur
;
         LD   hl,#0001                  ;hl = source = dest+1
         ADD  hl,de                     ;addition evite un Call #bc26
         LD   bc,79                     ;79 octets a decaler
         PUSH de                        ;sauve destination
         LDIR                           ;scroll !!
         POP  hl                        ;pop inverse evite un 'EX DE,HL'
;
         CALL #bc26                     ;ligne suivante
         EX   de,hl                     ;de=hl=dest
         POP  bc                        ;reprend compteur de ligne
         DJNZ bcl                       ;si pas derniere ligne alors recomm
;
         POP  hl                        ;reprend hl du debut
         RET                            ;fin scrolling
;
text1    Db "Salut les copains,c"
         Db "a va ??? Moi, je suis l"
         Db "e scrolling de N.D.C, j"
         Db "e suis la pour raconter d"
         Db "es anneries.... Ba-bye..."
         Db "......"
         Db "#"