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
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
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 Edité par igal Le 19/02/2018 à 13h33
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
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 Edité par igal Le 19/02/2018 à 13h33
igal
Membre non connecté
Conseiller Municipal
Eurêka
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 )
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
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
Edité par igal Le 19/02/2018 à 13h35
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 )
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
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
Edité par igal Le 19/02/2018 à 13h35
igal
Membre non connecté
Conseiller Municipal
L'avancement se passe très bien
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
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:
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
@ suivre...
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
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
@ suivre...
TurboSEB
Membre non connecté
Conseiller Municipal
Toute une vie que j'attends ça et vue que c'est Igal....... J'y CROIS
L'évolution sera un scrolling horizontal et vertical pourquoi pas avec un zoom vidéo , mais.....
Edité par TurboSEB Le 21/02/2018 à 13h14
L'évolution sera un scrolling horizontal et vertical pourquoi pas avec un zoom vidéo , mais.....
Edité par TurboSEB Le 21/02/2018 à 13h14
MSX 1&2 + Moniteurs+divers (environ 0.70Tonnes)
igal
Membre non connecté
Conseiller Municipal
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
Voici la vidéo:
Edité par igal Le 21/02/2018 à 17h46
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
Voici la vidéo:
Edité par igal Le 21/02/2018 à 17h46
igal
Membre non connecté
Conseiller Municipal
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é
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é
igal
Membre non connecté
Conseiller Municipal
Salut Jipe...Le monstre final tu veux dire
Pour éluder le problème de flash blanc, il suffit de mettre les bords blancs
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
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
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
Pour éluder le problème de flash blanc, il suffit de mettre les bords blancs
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
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
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
Code CSS :
Edité par
igal
Le 22/02/2018 à 15h52
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
igal
Membre non connecté
Conseiller Municipal
@Jipe: Une vidéo en bas de ce post avec Bords Blancs pour éluder la visibilité des flash
Voilà après 2 bonnes semaines, c'est fait
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.
Edité par igal Le 24/02/2018 à 09h51
Voilà après 2 bonnes semaines, c'est fait
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
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie