MSX Village forum

La Place des Développeurs [RESOLU] Scrolling et inversion d'une source vidéo avec inversion de direction Comment scroller des images flashées depuis le VDP

igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 18/02/2018 à 14h12
Salut à tous. (En réponse à Sylvain)

Voila plus d'une dizaine de jours que je bûche sur le problème à savoir.

Comment scroller de façon cohérente des images flashées par COPY SCREEN tout en autorisant l'inversion de direction et évidemment, permettre le flashage d'une nouvelle image à scroller à la suite de l'autre.

Forcément, ceci implique l'utilisation d'un MSX avec capacité de numérisation tel qu'un MSX2 Philips NMS8280 et l'utilisation d'une source vidéo "contrôlable"!

Voici deux dessins afin de mieux expliciter la tache à accomplir:

Le plus simple des deux cas est la possibilité de choisir de scroller à droite ou à gauche sans revenir sur ses pas (ou alors la possibilité de revenir sur ses pas tous les 128 pixels ;) )


Beaucoup plus compliqué, la possibilité de scroller à droite ou a gauche et de revenir sur ses pas à souhait:


J'ai pu résoudre une bonne partie des problèmes mais je bute sur la "sélection des bons bonnes parties à copier depuis la page tampon" lors de l'inversion de direction!
J'en suis arrivé à la conclusion qu'il est nécessaire d'identifier à tout moment sur "quel segment il faut aller récupérer les bonnes parties mises en tampon sur la page 1 :fou
Pour cela, je dois ajouter 2 variables qui m'orienteront vers la bonne "équation" à appliquer pour la bonne selection de la source à tout moment!

Je posterai le listing (incomplet) dans la semaine si vous avez une idée sur la bonne approche à adopter, vous pourrez me donner votre avis :tchin Edité par igal Le 19/02/2018 à 13h33


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
Visiteur

Vagabond

Rang

Avatar

Message : 0

Le 18/02/2018 à 19h44
Le truc de ouf, tu as bien fait d'ouvrir un sujet avec un dessin plutôt que d'écrire dans le fil de discussion ;)
   
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 19/02/2018 à 13h04
Eurêka :tchin :tchin :tchin

Il aura fallu attendre que ma femme aille à sa formation et ma fille à l'école pour résoudre mon petit challenge :)

Je poste mon code brut et incomplet avant que mon PC rend l’âme. (Trop de merdier qui tourne en arrière plan :sick )
Code CSS :
 
20 SCREEN 8:SETVIDEO 2,0,0:VDP(10)=0:COLOR 0,0,0
30 SETPAGE1:COPYSCREEN:SETPAGE0
50 AA=128:ZX=0:BB=0:CC=252:Z=1
100 S=STICK(0):ONS+1GOSUB110,120,0,175,0,130,0,300,0:GOTO100
110 RETURN
175 COPY(AA,0)-(AA+4,211),1TO(ZX,0),0:ZX=ZX+4
180 COPY(ZX,0)-(ZX+4,211),0TO(BB,0),1
185 BB=BB+4:IFBB=128THENBB=0
190 CC=CC+4AND56
195 AA=AA+4:IFAA=256THENAA=128:AA=128:BB=0:SETPAGE1:COPYSCREEN:SETPAGE0
210 SETSCROLLZX:IFZX=256THENZX=0
220 RETURN
300 IFZ=1THENZ=0:' Ne sert à rien pour le moment!
310 COPY(BB-4,0)-(BB-8,211),1TO(ZX,0),0
320 BB=BB-4:IFBB=0THENGOTO30
330 SETSCROLLZX:ZX=ZX-4:IFZX=-8THENZX=256:GOTO30
340 RETURN



Pour faire simple, la solution consistait à:

1) incrémenter ZX(variable de SET SCROLL) entre [COPY de page UN vers page ZERO] et [COPY de page ZERO vers page UN]
Ce qui donne nous donne:
175 COPY(AA,0)-(AA+4,211),1TO(ZX,0),0:ZX=ZX+4
180 COPY(ZX,0)-(ZX+4,211),0TO(BB,0),1
De la sorte, la mise en tampon depuis [le pixel 4 au pixel 8 de la Page ZERO] vers la [page UN, segment allant du pixel 0 au pixel 128]!

2) Pour afficher ces "pixels stockés en page tampon UN" vers "la Page ZERO" juste 4 pixels à gauche de ZX, il suffit d'appliquer:
310 COPY(BB-4,0)-(BB-8,211),1TO(ZX,0),0
320 BB=BB-4:IFBB=0THENGOTO30
330 SETSCROLLZX:ZX=ZX-4:IFZX=-8THENZX=256:GOTO30
340 RETURN

BB qui était la destination du TAMPON devient la coordonnée de la source à récupérer dans la page tampon.
Afin d’empêcher le clonage la dernière bribe affichée il faut Soustraire de 4 pixels l'adresse ou se trouve la birbe précédente ;)
De ce fait, ZX (qui est la variable SET SCROLL de référence) est biaisée de 8 pixels. Il suffit de permettre la décrémentation de ZX jusqu'à -8 pour compenser cela et retomber sur ses patte :D
Donc, si la valeur -8 est atteinte par ZX, ZX est valorisé à 256 pour reprendre un nouveaux cycle permettant le scroll d'une page complète de 256 pixels...A partir de là, nous ne sommes plus sous le statut de "Inversion de direction depuis le Scroll Droite vers le Scroll Gauche", mais nous IRONS (pas encore fait) vers Scroll vers la Gauche

Ouf...
Dans la semaine, je ferai une vidéo et je posterai un code expliqué ligne par ligne.

@Eric, t'en es ou avec le RS232 :noel
Edité par igal Le 19/02/2018 à 13h35


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 20/02/2018 à 15h37
L'avancement se passe très bien :top

Boucle primaire (statique):
Statique => OK
Droite => OK
Gauche => à venir

Boucle secondaire (droite)
Statique => OK
Droite => OK
Gauche => OK
Inversion vers la Gauche => OK (direction gauche)
Inversion de l'inversion vers la gauche => OK (de nouveau direction droite)

Pour faire simple: Du moment que l'on commence le Jeu en dirigeant le héro vers la droite en "tout premier INPUT", toutes les directions sont possibles par la suite avec retour sur ses pas possibles autant de fois que voulu et dans n'importe quelle direction voulu :tchin

Reste à implémenter le "tout premier INPUT" vers la Gauche, en exacte symétrie opposée aux premier input vers la droite. Ce sera pas très compliqué.

Voici le code provisoire avec le commentaire de toutes les commandes:
Code CSS :
 
9 'Sauvegarde le fichier en ASCII exploitable depuis un editeur de texte
10 'save"MEGA00E.asc",a
19 'Mode graphique avec resolution de 256X212 avec 256 couleurs invariables
20 SCREEN 8
29 'Mode video [Super impose],[0],[Color Bus entrant]
30 SETVIDEO 2,0,0
39 'Vitesse de rafraichissement a 60Hz
40 VDP(10) = 0
49 'Couleur [Premier plan],[Arrière plan],[Bords extérieurs]
50 COLOR 0,0,0
 
 
 
 
 
199 'vdp flash pipeline primaire
200 SETPAGE 1 : COPYSCREEN : SETPAGE 0
 
209 'boucle primaire de bascule vers scrolling droit ou gauche 
210 S = STICK (0) : ONS+1 GOTO 220,230,260,260,260,240,600,600,600 : GOTO 210
 
219 '(Statique de primaire)
220 GOTO 210
229 'Haut de primaire (outil de visualisation page 1)
230 SETPAGE 1:GOTO 210
239 'Bas de primaire (outil de visualisation page 0)
240 SETPAGE 0:GOTO 210
 
 
 
 
 
 
 
 
 
 
259 'Varibale de la Source Beta scrollee vers la Droite [Segment Pixels 128 a 256) 
260 AA = 128
269 'Variable du Scrolling universel
270 ZX = 0
279 'Variable de la destination du tampon Alpha [Segment pixels 0 à 128]
280 BB = 0
 
 
289 'vdp flash pipeline
290 SETPAGE 1 : COPYSCREEN : SETPAGE 0
 
299 'boucle du scrolling vers la droite
300 S = STICK(0) : ONS+1 GOSUB 310,320,400,400,400,330,500,500,500 : GOTO 300
 
309 'statique de scrolling vers la droite
310 RETURN
319 'Haut de scrolling vers la droite
320 SETPAGE 1 : RETURN
329 'Bas de scrolling vers la droite
330 SETPAGE 0 : RETURN
 
398 'Copie Alpha (mise en tampon) depuis la page 0 vers la page 1
399 'NB. La source ZX est decalee d un pixel vers la droite
400 COPY(ZX+1,0)-(ZX+5,211),0TO(BB,0),1
409 'Copie Beta depuis la page 1 vers la page 0
410 COPY(AA,0)-(AA+4,211),1TO(ZX,0),0
419 'Incrementation de ZX (Scroll universel)
420 ZX=ZX+4
429 'Incrementation de la Destination de la mise en tampon dans la page 0
430 BB = BB+4
439 'Mini et maxi de la zone tampon (segment du tampon Alpha)
440 IF BB=128 THEN BB=0
449 'incrementation de la source AA (copie Beta)
450 AA = AA+4
457 'Base et plafond de AA (source de copie Beta) 
458 'Reinitialisation de BB (destination de copie Alpha)
459 'Vdp flash pipeline
460 IF AA=256 THEN AA=128 : BB=0 :SETPAGE 1: COPYSCREEN : SETPAGE 0
469 'Scrolling selon ZX (Scrolling universel)
470 SETSCROLL ZX
479 'Base et plafond de ZX (Scrolling universel)
480 IF ZX=256 THEN ZX=0
489 'fin de la Droite du scrolling vers la droite
490 RETURN
 
499 'boucle du scrolling inversion de la droite
500 S = STICK(0) : ONS+1 GOSUB 510,520,540,540,540,530,550,550,550 : GOTO 500
509 'Statique
510 RETURN
519 'outil provisoire "Haut"
520 SETPAGE1:RETURN
529 'outil provisoire "Bas"
530 SETPAGE0:RETURN
539 'Recalibrage en cas d inversion de l inversion!
540 ID = 1 : AA = BB + 128 : GOTO 300
548 'inversion vers la gauche depuis le scrolling vers la droite
549 'Copie (Gamma) sur la page 0 depuis la page 1 (Tampon Alpha)'
550 COPY (BB-1,0) - (BB-5,211),1 TO (ZX,0),0
559 'Decremente les coordonnees de la source BB (Gamma)  
560 BB = BB-4
569 'Scrolling selon ZX (Scrolling universel)
570 SETSCROLL ZX
579 'Decremente ZX du Scroll universel (Fait scroller vers la gauche)
580 ZX = ZX-4
589 'Fin du scrolling Gauche en retour d'un scrolling vers la droite
590 RETURN


Evidemment, ce moteur nécessitera par la suite, le support d'un appareillage RS232 ou tout autre périphérique vidéo piloté par le MSX.
Cela implique l'ajout des commandes spécifiques aux périphériques ce qui sera un jeu d'enfant j'en doute pas :noel

@ suivre...


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
TurboSEB Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 08/08/2010 à 20h57

Messages: 5788

Le 21/02/2018 à 13h09
Toute une vie que j'attends ça et vue que c'est Igal....... J'y CROIS :glass

L'évolution sera un scrolling horizontal et vertical pourquoi pas avec un zoom vidéo :siffle, mais.....
Edité par TurboSEB Le 21/02/2018 à 13h14



MSX 1&2 + Moniteurs+divers (environ 0.70Tonnes)
   
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 21/02/2018 à 15h10
Puisque tu t'intéresse au "machin", voici le processus permettant de créer les "Images vidéos" nécessaires pour un scrolling vers la droite avec retour sur ses pas :)
Nb: Je ferai un autre schéma pour la construction des images permettant de scroller vers la gauche avec retour sur ses pas ;)

De Bas en haut, les différentes étapes:

1) Je récupère la mappe d'un stage sur Vgmap.com (la première image en partant du bas)
2) Je découpe la mappe en blocs de 256X212 ou encore 256X192 et je les positionne à la suite
3) Depuis l'image 1, je copie sa partie gauche pour la coller à droite de l'image 001, pareil avec l'image 2, 3 etc etc...
4) Depuis l'image 1, je copie sa partie droite pour la coller à droite de l'image 002, pareil avec l'image 2, 3 etc etc...
5) Depuis l'image 1, je copie sa partie droite pour la coller à droite de l'image 002, pareil avec l'image 2, 3 etc etc...
6) Depuis l'image 001, je copie sa partie droite pour la coller à gauche de l'image 003, pareil avec l'image 002, 003, etc etc...
Nb: si vous souhaitez créer un stage qui tourne en boucle (sans fin), il suffit de créer les images 015 et 016 afin de permettre le scrolling sur l'entièreté de la page primaire.
7) Afin de calibrer correctement le "Vdp Flash Pipeline", j'ajoute un cadre centré de 320X240 autour de chaque image produite.
Nb: Il est possible d'augmenter la résolution en préservant les proportions!

Enfin, ce schéma construit des "images vidéo" cohérentes pour scroller vers la droite avec un retour sur nos pas jusqu'à 128 pixels vers la gauche après chaque Flash!
Un pixel de plus vers la gauche et le processus de Scrolling vers la gauche se met en branle et nécessite le flash d'images et ce scrolling nécessite des images spécialement construites à cet effet!
Vous devez comprendre que [Revenir vers la gauche (jusqu'à 128 pixels)] et [Aller simplement à gauche ou encore Revenir à gauche de 129 Pixels] sont deux choses différentes :fou



Voici la vidéo:
Edité par igal Le 21/02/2018 à 17h46


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 21/02/2018 à 21h19
Voici le schéma pour construire les "images vidéos" permettant de scroller vers la Gauche et de revenir sur ses pas vers la droite.



Par la suite, je ferais la partie gauche du décors de "The King of Dragons" et je compléterai le programme pour mouliner le tout à volonté ;)



Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10316

Le 22/02/2018 à 14h09
dommage qu'il y ait des flash blanc par moments , ils se produisent quand ??
sinon on voit bien le boss de fin dans la transparence de l'écran :lol


:noel
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 22/02/2018 à 15h39
Salut Jipe...Le monstre final tu veux dire :lol

Pour éluder le problème de flash blanc, il suffit de mettre les bords blancs :D
COLOR x,x,255

Pour ce qui est de la redondance des flashs, ici, j'ai choisi de pouvoir aller dans n'importe quel sens horizontal et de pouvoir revenir sur mes pas.
Cela oblige un Flash tous les 128 pixels :moue
Pour un scroll dans une seule direction, on descend à un flash tous les 256 Pixels.

Le problème est que COPYSCREEN ne s'applique que sur la [page Active] ou encore sur la [page Active] + [Page Active-1]
(L'idéal aurait été la possibilité de flasher sur la page "non active seulement"!)

J'avais fait pas mal de tests hardware comme "éteindre l'image VDP associé au flash mais ça créer une effet beaucoup plus désagréable que le flash tout seul. (tu m'avais filé un un OUT.. qui permet d'éteindre puis de rallumer le VDP)
La j'ai plus rien sous la main pour tester et Bluemsx n'a pas un comportement rigoureusement identique à un NMS8280 en ce qui concerne la Superimpose!

J'avais testé avec SET VIDEO 1 (il me semble) qui est le mode Digitalisation "conventionnel" mais il fallait attendre une ou deux secondes pour que l'image "Flashé en arrière plan du VDP" soit "transférée" vers la VRAM. alors effectivement, le Flash n'est pas visible mais ça bloque tout le MSX le temps du "transfert?" ou de "l'écriture?" en VRAM ou en RAM peut être... Je sais plus j'ai un doute. Peut être que ce mode vidéo conviendrait mieux au Flash :moue

Ce qui est rageant c'est que le VDP a bien la capacité de flasher vers une Page non visible (COPYSCREEN1) mais chez yamaha, ils ont peut être pas trouvé d’intérêt à flasher sur une page non visible sans écrire sur la page visible!

Pour les curieux, voici la suite du moteur encore incomplet!
Support direction Droite OK
Support Direction Droite puis Gauche OK
Support Direction Droite puis Gauche puis encore Droite OK
Support de Bascule Moteur Droite réel vers Moteur Gauche Réel OK

Support direction Gauche OK
Support Direction Gauche puis droite ... d'ici demain
Support Direction Gauche puis droite puis gauche ... d'ici demain
Support de bascule moteur Gauche réel vers moteur Droite Réel ...d'ici demain :p

Code CSS :
 
9 'Sauvegarde le fichier en ASCII exploitable depuis un editeur de texte
10 'save"MEGA00G.asc",a
19 'Mode graphique avec resolution de 256X212 avec 256 couleurs invariables
20 SCREEN 8
29 'Mode video [Super impose],[0],[Color Bus entrant]
30 SETVIDEO 2,0,0
39 'Vitesse de rafraichissement a 60Hz
40 VDP(10) = 0
49 'Couleur [Premier plan],[Arrière plan],[Bords extérieurs]
50 COLOR 0,0,0
119 '(Statique de primaire)
199 'vdp flash pipeline primaire
200 SETPAGE 0 : COPYSCREEN
209 'boucle primaire de bascule vers scrolling droit ou gauche 
210 S = STICK (0) : ONS+1 GOTO 220,230,260,260,260,240,600,600,600 : GOTO 210
220 GOTO 210
229 'Haut de primaire (outil de visualisation page 1)
230 SETPAGE 1:GOTO 210
239 'Bas de primaire (outil de visualisation page 0)
240 SETPAGE 0:GOTO 210
259 'Varibale de la Source Beta scrollee vers la Droite [Segment Pixels 128 a 256) 
260 AA = 128:YA=0:YB=191
269 'Variable du Scrolling universel
270 ZX = 0
279 'Variable de la destination du tampon Alpha [Segment pixels 0 à 128]
280 BB = 0
289 'vdp flash pipeline
290 SETPAGE 1 : COPYSCREEN : SETPAGE 0
299 'boucle du scrolling vers la droite
300 S = STICK(0) : ONS+1 GOSUB 310,320,400,400,400,330,500,500,500 : GOTO 300
309 'statique de scrolling vers la droite
310 RETURN
319 'Haut de scrolling vers la droite
320 SETPAGE 1 : RETURN
329 'Bas de scrolling vers la droite
330 SETPAGE 0 : RETURN
398 'Copie Alpha (mise en tampon) depuis la page 0 vers la page 1
399 'NB. La source ZX est decalee d un pixel vers la droite
400 COPY(ZX+1,0)-(ZX+5,191),0TO(BB,0),1
409 'Copie Beta depuis la page 1 vers la page 0
410 COPY(AA,YA)-(AA+4,YB),1TO(ZX,0),0
419 'Incrementation de ZX (Scroll universel)
420 ZX=ZX+4
429 'Incrementation de la Destination de la mise en tampon dans la page 0
430 BB = BB+4
439 'Mini et maxi de la zone tampon (segment du tampon Alpha)
440 IF BB=128 THEN BB=0
449 'incrementation de la source AA (copie Beta)
450 AA = AA+4
457 'Base et plafond de AA (source de copie Beta) 
458 'Reinitialisation de BB (destination de copie Alpha)
459 'Vdp flash pipeline
460 IF AA=256 THEN AA=128 : BB=0 :SETPAGE 1: COPYSCREEN : SETPAGE 0
469 'Scrolling selon ZX (Scrolling universel)
470 SETSCROLL ZX
479 'Base et plafond de ZX (Scrolling universel)
480 IF ZX=256 THEN ZX=0
489 'fin de la Droite du scrolling vers la droite
490 RETURN
499 'boucle du scrolling inversion de la droite
500 S = STICK(0) : ONS+1 GOSUB 510,520,540,540,540,530,550,550,550 : GOTO 500
509 'Statique
510 RETURN
519 'outil provisoire "Haut"
520 SETPAGE1:RETURN
529 'outil provisoire "Bas"
530 SETPAGE0:RETURN
539 'Recalibrage en cas d inversion de l inversion!
540 ID = 1 : AA = BB + 128 : GOTO 300
548 'inversion vers la gauche depuis le scrolling vers la droite
549 'Copie (Gamma) sur la page 0 depuis la page 1 (Tampon Alpha)'
550 COPY (BB-1,0) - (BB-5,191),1 TO (ZX,0),0
559 'Decremente les coordonnees de la source BB (Gamma)  
560 BB = BB-4
569 'Scrolling selon ZX (Scrolling universel)
570 SETSCROLL ZX : IF ZX = 0 THEN 210
579 'Decremente ZX du Scroll universel (Fait scroller vers la gauche)
580 ZX = ZX-4
589 'Fin du scrolling Gauche en retour d'un scrolling vers la droite
590 RETURN
 
 
 
 
599 'Valeurs initiales pour la lecture vers la Gauche [Segment Pixel 0 a 128) 
600 AA = 128
609 'Variable du Scrolling universel
610 ZX = 256
619 'Variable 
620 BB = 256
 
629 'vdp flash pipeline
630 SETPAGE 1 : COPYSCREEN : SETPAGE 0
640 S=STICK(0):ONS+1GOSUB 650,660,650,650,650,670,680,680,680:GOTO640
649 'Statique de Direction Gauche
650 RETURN
659 'Haut de scrolling vers la gauche
660 SETPAGE 1 : RETURN
669 'Bas de scrolling vers la chauche
670 SETPAGE 0 : RETURN
 
678 'Copie Alpha (mise en tampon) depuis la page 0 vers la page 1
679 'NB. La source ZX est decalee d un pixel vers la droite
680 COPY(ZX-4,0)-(ZX-1,191),0TO(BB-4,0),1
689 'Copie Beta depuis la page 1 vers la page 0
690 COPY(AA-4,0)-(AA-1,211),1TO(ZX-4,0),0
699 'Incrementation de ZX (Scroll universel)
700 ZX=ZX-4
709 'Incrementation de la Destination de la mise en tampon dans la page 0
710 BB = BB-4
719 'Mini et maxi de la zone tampon (segment du tampon Alpha)
720 IF BB=128 THEN BB=256
729 'incrementation de la source AA (copie Beta)
730 AA = AA-4
738 'Reinitialisation de BB (destination de copie Alpha)
739 'Vdp flash pipeline
740 IF AA=0 THEN AA=128 : BB=256 :SETPAGE 1: COPYSCREEN : SETPAGE 0
749 'Scrolling selon ZX (Scrolling universel)
750 SETSCROLL ZX
759 'Base et plafond de ZX (Scrolling universel)
760 IF ZX=0 THEN ZX=256
769 'fin de la Droite du scrolling vers la droite
770 RETURN

Edité par igal Le 22/02/2018 à 15h52


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 23/02/2018 à 13h15
@Jipe: Une vidéo en bas de ce post avec Bords Blancs pour éluder la visibilité des flash :top

Voilà après 2 bonnes semaines, c'est fait :tchin :tchin :tchin

L'intégralité du listing est commenté et les emplacements pour le support RS232 est signalé par:
a)** => RS232 [IMAGE PRIMAIRE "ZERO"]
b)** => RS232 [IMAGE SUIVANTE]
c)** => RS232 [IMAGE PRECEDENTE]
Il faut donc insérer le code "RS232" qui gère le périphérique Vidéo externe de sorte à lire:
a) La première image du stage (par exemple "ZERO".
b) L'image qui succède à la précédente donc (Soit image UN si on était précédemment sur Primaires soit l'image "image +1, +1, +1 etc...)
c) L'image qui précède à la précédente donc (Soit image -UN si on était précédemment sur Primaire, soit l'image "image -1, -1, -1 etc...)

Le scrolling fonctionne dans tous les sens Droite/Gauche avec inversion de direction à souhait et illimité.
Faut juste alimenter le média Vidéo avec la bonne image par le biais du RS232.

Code CSS :
 
9 'Sauvegarde le fichier en ASCII exploitable depuis un editeur de texte
10 'save"MEGA00H.asc",a
19 'Mode graphique avec resolution de 256X212 avec 256 couleurs invariables
20 SCREEN 8
29 'Mode video [Super impose],[0],[Color Bus entrant]
30 SETVIDEO 2,0,0
39 'Vitesse de rafraichissement a 60Hz
40 VDP(10) = 0
49 'Couleur [Premier plan],[Arrière plan],[Bords extérieurs]
50 COLOR 0,0,255
99 '************************************************************FLASH PRIMAIRE
100 SETPAGE 0 : COPYSCREEN:'********************=>RS232 [IMAGE PRIMAIRE "ZERO"]
109 'Saut vers la boucle primaire
110 GOTO 210
119 '
200 SETPAGE 1 : COPYSCREEN: SETPAGE0 :'*********=>RS232 [IMAGE PRIMAIRE "ZERO"]
209 '***************BOUCLE PRIMAIRE DE BASCULE DEFINITIVE VERS DROITE OU GAUCHE
210 S = STICK (0) : ONS+1 GOTO 220,230,260,260,260,240,600,600,600 : GOTO 210
220 GOTO 210
229 'Haut de primaire (outil de visualisation page 1)
230 SETPAGE 1:GOTO 210
239 'Bas de primaire (outil de visualisation page 0)
240 SETPAGE 0:GOTO 210
259 '********************VARIABLES DU SCROLL VERS LA DROITE [Segment 128 a 256]
260 AA = 128
269 '**********************************************VARIABLE DU SCROLL UNIVERSEL
270 ZX = 0
279 '********************VARIABLE BB DE DESTINATION DU TAMPON [Segment 0 à 128]
280 BB = 0
289 '**************************************************=>RS232 [IMAGE SUIVANTE]
290 SETPAGE 1 : COPYSCREEN : SETPAGE 0
299 '*******************************************BOUCLE DE SCROLL VERS LA DROITE
300 S = STICK(0) : ONS+1 GOSUB 310,320,400,400,400,330,500,500,500 : GOTO 300
309 'statique de scrolling vers la droite
310 RETURN
319 'Haut de scrolling vers la droite
320 SETPAGE 1 : RETURN
329 'Bas de scrolling vers la droite
330 SETPAGE 0 : RETURN
398 '*****************MISE EN TAMPON de [ZX POSITIF] VERS [ SEGMENT BB 0 à 128]
399 '********************NB. La source ZX est decalee d un pixel vers la droite
400 COPY(ZX+1,0)-(ZX+5,211),0TO(BB,0),1
409 '*************************COPIE VERS [ZX POSITIF] DU [SEGMENT AA 128 A 256]
410 COPY(AA,0)-(AA+4,211),1TO(ZX,0),0
419 'Incrementation de ZX (Scroll universel)
420 ZX=ZX+4
429 'Incrementation de la Destination de la mise en tampon dans la page 0
430 BB = BB+4
439 'Mini et maxi de la zone tampon (segment du tampon Alpha)
440 IF BB=128 THEN BB=0
449 'incrementation de la source AA (copie Beta)
450 AA = AA+4
457 'Base et plafond de AA (source de copie Beta) 
458 'Reinitialisation de BB (destination de copie Alpha)
459 '********************************SI AA = 256 alors =>RS232 [IMAGE SUIVANTE]
460 IF AA=256 THEN AA=128 : BB=0 :SETPAGE 1: COPYSCREEN : SETPAGE 0
469 'Scrolling selon ZX (Scrolling universel)
470 SETSCROLL ZX
479 'Base et plafond de ZX (Scrolling universel)
480 IF ZX=256 THEN ZX=0
489 'fin de la Droite du scrolling vers la droite
490 RETURN
499 '*************************BOUCLE DES INVERSIONS DU SCROLLING VERS LA DROITE
500 S = STICK(0) : ONS+1 GOSUB 510,520,540,540,540,530,550,550,550 : GOTO 500
509 'Statique
510 RETURN
519 'outil provisoire "Haut"
520 SETPAGE1:RETURN
529 'outil provisoire "Bas"
530 SETPAGE0:RETURN
539 '****************************RECALIBRAGE EN CAS D INVERSION DE L INVERSION!
540 ID = 1 : AA = BB + 128 : GOTO 300
548 '******************INVERSION VERS LA GAUCHE DEPUIS UN SCROLL VERS LA DROITE
549 'Copie (Gamma) sur la page 0 depuis la page 1 (Tampon Alpha)'
550 COPY (BB-1,0) - (BB-5,211),1 TO (ZX,0),0
559 'Decremente les coordonnees de la source BB (Gamma)  
560 BB = BB-4:IF BB = 0 THEN SETPAGE 1 : COPYSCREEN : SETPAGE 0 : GOTO 210
569 'Scrolling selon ZX (Scrolling universel)
570 SETSCROLL ZX
579 'Decremente ZX du Scroll universel (Fait scroller vers la gauche)
580 ZX = ZX-4
589 '************FIN DE LA BOUCLE DES INVERSION DEPUIS UN SCROLL VERS LA DROITE
590 RETURN
599 '**********************VARIABLES DU SCROLL VERS LA GAUCHE [Segment 0 a 128]
600 AA = 128
609 '**********************************************VARIABLE DU SCROLL UNIVERSEL
610 ZX = 256
619 '********************VARIABLE BB DE DESTINATION DU TAMPON [Segment 0 a 128]
620 BB = 256
629 '************************************************=>RS232 [IMAGE PRECEDENTE]
630 SETPAGE 1 : COPYSCREEN : SETPAGE 0
639 '*******************************************BOUCLE DE SCROLL VERS LA GAUCHE
640 S=STICK(0):ONS+1GOSUB 650,660,780,780,780,670,680,680,680:GOTO640
649 'Statique de Direction Gauche
650 RETURN
659 'Haut de scrolling vers la gauche
660 SETPAGE 1 : RETURN
669 'Bas de scrolling vers la chauche
670 SETPAGE 0 : RETURN
678 '***************MISE EN TAMPON de [ZX NEGATIF] VERS [ SEGMENT BB 128 a 256]
679 '??????????????NB. La source ZX n est pas decalee d un pixel VERS LA GAUCHE
680 COPY(ZX-4,0)-(ZX-1,211),0TO(BB-4,0),1
689 '***************************COPIE VERS [ZX NEGATIF] DU [SEGMENT AA 128 a 0]
690 COPY(AA-4,0)-(AA-1,211),1TO(ZX-4,0),0
699 'Incrementation de ZX (Scroll universel)
700 ZX=ZX-4
709 'Incrementation de la Destination de la mise en tampon dans la page 0
710 BB = BB-4
719 'Mini et maxi de la zone tampon (segment du tampon Alpha)
720 IF BB=256 THEN BB=128
729 'incrementation de la source AA (copie Beta)
730 AA = AA-4
738 'Reinitialisation de BB (destination de copie Alpha)
739 '******************************SI AA = 128 alors =>RS232 [IMAGE PRECEDENTE]
740 IF AA=0 THEN AA=128 : BB=256 :SETPAGE 1: COPYSCREEN : SETPAGE 0
749 'Scrolling selon ZX (Scrolling universel)
750 SETSCROLL ZX
759 'Base et plafond de ZX (Scrolling universel)
760 IF ZX=0 THEN ZX=256
769 'fin de la Droite du scrolling vers la droite
770 RETURN
779 '*************************BOUCLE DES INVERSIONS DU SCROLLING VERS LA GAUCHE
780 S = STICK(0) : ONS+1 GOSUB 790,800,830,830,830,810,820,820,820 : GOTO 780
789 'Statique
790 RETURN
799 'outil provisoire "Haut"
800 SETPAGE1:RETURN
809 'outil provisoire "Bas"
810 SETPAGE0:RETURN
819 '****************************RECALIBRAGE EN CAS D INVERSION DE L INVERSION!
820 ID = 1 : AA = BB - 128 : GOTO 300
828 '******************INVERSION VERS LA DROITE DEPUIS UN SCROLL VERS LA GAUCHE
829 'Copie (Gamma) sur la page 0 depuis la page 1 (Tampon Alpha)'
830 COPY (BB+1,0) - (BB+5,211),1 TO (ZX,0),0
839 'Decremente les coordonnees de la source BB (Gamma)
840 BB = BB+4 : IF BB = 256 THEN SETPAGE 1 : COPYSCREEN : SETPAGE 0 : GOTO 210
849 'Scrolling selon ZX (Scrolling universel)
850 SETSCROLL ZX
859 'Incremente ZX du Scroll universel (Fait scroller vers la gauche)
860 ZX = ZX+4
869 '************FIN DE LA BOUCLE DES INVERSION DEPUIS UN SCROLL VERS LA GAUCHE
870 RETURN


Edité par igal Le 24/02/2018 à 09h51


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
TurboSEB Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 08/08/2010 à 20h57

Messages: 5788

Le 23/02/2018 à 14h16
Y'a même possibilité de faire un scrolling en profondeur genre trou de ver ou StarGate :heink



MSX 1&2 + Moniteurs+divers (environ 0.70Tonnes)
   
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie