L'école [RESOLU] AUDIO Stéréo / VIDEO Screen 8 (Real Time Movie) Audio Stéréo avec 2 Music Module et Vidéo avec Effets spéciaux 256 couleurs
igal
Membre non connecté
Conseiller Municipal
Reprise du message précédent
Salut MétalionJe commence par la fin, ce sera plus simple:
**********
Métalion => Le VDP peut digitaliser dans tous les modes 5, 6, 7...
réponse: Tout à fait, ce sont les mode Graphiques qui appliquent une palette couleur "erro+nante" à l'image numérisée.
C'est la raison pour laquelle, il faut utliser un mode Graphique 0,1,2,3 ou 4.
**********
Je ne connais pas le processus dans le MSX mais je sais que pour obtenir une miniature cohérente en SCREEN 8 d'une vidéo à la volée, il faut:
ETAPE 1 => Facultative:
0) SCREEN8 (La Matrice 256 X 212 X 8Bits est "Posée)
1) COLOR ,,255 (La limite des 255 couleurs est désignée)
2) COPY SCREEN 0 (copie son contenu en VRAM)
3) BSAVE"H:IMAGE"+MID$(STR$(N),2)+".SC8",0,&HD3FF,S (Enregistre le contenu de la VRAM depuis &H0 jusqu'à &HD3FF)
4) SET VIDEO 2,1,1 (Permet de voir à travers une fenêtre sur le VDP sous n'importe quel SCREEN)
5) COPY SCREEN 0 (Copie son contenu en VRAM)
Ce qui nous donne:
282 SCREEN8:COLOR,,255:COPY SCREEN 0:BSAVE"H:IMAGE"+MID$(STR$(N),2)+".SC8",0,&HD3FF,S:SETVIDEO 2,1,1
ETAPE 2 => La boucle principale.
6) COPY SCREEN 0 (Copie son contenu en VRAM)
7) SCREEN 0 (applique un filtre 256 X 192 X 4Bits sur une image 256 X 212 X 8Bits)
8) BSAVE"H:IMAGE"+MID$(STR$(N),2)+".SC8",&H4A00,&HA400,S (Enregistre le contenu de la VRAM depuis &H4A00 jusqu'à &HA400)
9) N=N + 1 (Permet à BSAVE de générer un nouveau IMAGE.SC8)
10) SCREEN 8 (La Matrice 256 X 212 X 8Bits est "Posée)
11) COPY SCREEN 0 (copie son contenu en VRAM)
12) A$=INKEY$:IFA$=""THEN285 (Retourne à l'étape 6 si aucune touche est appuyée)
Ce qui donne:
285 COPYSCREEN0:SCREEN0:COPYSCREEN0:BSAVE"H:IMAGE"+MID$(STR$(N),2)+".SC8",&H4A00,&HA400,S:N=N+1:SCREEN 8:COPYSCREEN0:A$=INKEY$:IFA$=""THEN285
voici le listing complet:
Code TEXT :
10 'GOTO 290:'VA DIRECTEMENT AU PLAYER 20 'KILL"IMAGE*.* 30 VDP(10)=3:VDP(10)=2:SCREEN8:SCREEN0:'STOP LA VIBRATION IMAGE 40 'SAVE"012.ASC",A 50 ON STOP GOSUB450:STOP ON:N=1 60 SET ADJUST(8,-0):WIDTH 80:COLOR 1,15:CLS:'MODE TEXTE NOIR ET BLANC 70 PRINT"1) LANCER LE 'SOFTFIXE' SYNCHRO H SUR NMS8280 AVEC VDP9958 80 PRINT" 90 PRINT" => BARRE D ESPACE LORSQUE LE SCREEN 8 SERA CENTRE... 100 PRINT" => ALLUMER LA VIDEO PAL POUR EVITER DES PARASITES 110 A$=INKEY$:IF A$=""THEN110 120 SET VIDEO 2,0,0:SET VIDEO 0,0,0:SET VIDEO 2,0,0:COLOR 1,15,5 130 SCREEN8,,,,,2:A$=INKEY$:IF A$=""THEN130 140 SCREEN8,,,,,3:SCREEN0:'MODE ENTRELACE FIXE LA STABILITE 150 PRINT"2) INITIALISATION DU RAM DISK EN COURS 160 PRINT" PATIENTER QUELQUES INSTANTS... 170 PRINT" 180 CALL RAMDISK(0):CALL RAMDISK(4000):'RAMDISK 190 PRINT"3) LANCER LA NUMERISATION A LA VOLEE 200 PRINT" 210 PRINT" [STOP] => FAIRE UN ARRET SUR IMAGE 220 PRINT" [BARRE D ESPACE] SAUVER DES IMAGES 230 PRINT" [BARRE D ESPACE] QUITTER LA NUMERISATION 240 PRINT" 250 A$=INKEY$:IF A$=""THEN250 260 SET VIDEO 2,1,1:SCREEN8:COLOR,,255 270 COPYSCREEN0:A$=INKEY$:IF A$=""THEN270 271 SET VIDEO 0,0,0:SCREEN0:COLOR 1,15,15 272 PRINT" DEBUT..... 273 FOR T=1TO100:NEXT T 282 SCREEN8:COLOR,,255:COPY SCREEN 0:BSAVE"H:IMAGE"+MID$(STR$(N),2)+".SC8",0,&HD3FF,S:SETVIDEO 2,1,1 285 COPYSCREEN0:SCREEN0:COPYSCREEN0:BSAVE"H:IMAGE"+MID$(STR$(N),2)+".SC8",&H4A00,&HA400,S:N=N+1:SCREEN 8:COPYSCREEN0:A$=INKEY$:IFA$=""THEN285 290 SET ADJUST(7,0):SET VIDEO 0,0,0:VDP(10)=2:SCREEN0:COLOR 1,15,15 300 PRINT"4) LANCER LA VISIONNEUSE 310 PRINT" 320 PRINT" [STOP] => FAIRE UN ARRET SUR IMAGE 330 PRINT" [CTRL]+[STOP] => QUITTER LE PROGRAMME 340 A$=INKEY$:IF A$=""THEN340 350 ON STOP GOSUB450:STOP ON:COLOR ,,0:SCREEN8:VDP(10)=2:'VDP(10)=0 355 VDP(9)=VDP(9)OR2 360 N=1 370 ON ERROR GOTO 420 380 SET PAGE N AND 1, (N AND 1) XOR 1 390 BLOAD"H:image"+MID$(STR$(N),2)+".sc8",S 400 N = N + 1 410 GOTO 370 420 IF ERR = 53 THEN 430 ELSE SCREEN 0:VDP(10)=3:VDP(10)=2:SET VIDEDO0,0,0: PRINT"error in line:";ERL : ERROR ERR : REM err 53 , file not found 430 RESUME 440 440 GOTO 360:'END 450 SET ADJUST (7,0):SET VIDEO 2,0,0:SET VIDEO 0,0,0:VDP(10)=3:VDP(10)=2:END
Voici ce que cela donne:
http://youtu.be/yfjPGVevJnA
Nb: Je suis en SCREEN 0. La Bascule en SCREEN8 est seulement là pour les nécessités du BSAVE. Autrement, on peut très bien rester en SCREEN0, 1, 2, 3 ou 4 sans basculer sous le SCREEN8. Edité par igal Le 15/10/2013 à 15h58
igal :
réponse: Tout à fait, ce sont les mode Graphiques qui appliquent une palette couleur "erro+nante" à l'image numérisée.
C'est la raison pour laquelle, il faut utliser un mode Graphique 0,1,2,3 ou 4
C'est la raison pour laquelle, il faut utliser un mode Graphique 0,1,2,3 ou 4
"erro+nante" ?????? Comprends pas ce que tu veux dire ...
Et je ne comprends pas ton explication non plus sur le fait qu'il "faut" utiliser les modes 0,1,2,3,ou 4.
igal :
ETAPE 1 => Facultative
OK, cette étape est une numérisation standard en SCREEN8, suivi d'une sauvegarde sur RAMDISK.
igal :
ETAPE 2 => La boucle principale
6) Numérisation en SCREEN8 (sélectionné à la ligne précédente) => la VRAM contient l'image au format SCREEN8
7) Initialisation SCREEN0 => le système modifie les registres du VDP, les pointeurs de tableau en VRAM, et met à zéro quelques zones, ce qui altère ton image en VRAM
8) et 9) BSAVE => Sauvegarde partielle de l'image en VRAM (uniquement de &h4A00 à &hA400 - Pourquoi ?)
10) Initialisation SCREEN8 => A nouveau, le système modifie les registres du VDP, les pointeurs de tableau en VRAM, et met à zéro quelques zones, ce qui altère encore ton image en VRAM
11) nouvelle numérisation d'une image au format SCREEN8 en VRAM
Igal :
Nb: Je suis en SCREEN 0. La Bascule en SCREEN8 est seulement là pour les nécessités du BSAVE. Autrement, on peut très bien rester en SCREEN0, 1, 2, 3 ou 4 sans basculer sous le SCREEN8.
Non.
D'abord parce que c'est impossible, Igal.
Tu ne peux pas avoir d'image en 256x192 en couleurs en mode SCREEN0 ou 3.
Ensuite, parce que si tu analyse bien la boucle, tu verras que la numérisation se fait en SCREEN8, et que tu bascules en SCREEN0 après, pour la sauvegarde (ce qui n'a aucune importance). Tu reviens ensuite en SCREEN8 avant de boucler à nouveau. Donc, toutes les numérisations se font bien en SCREEN8. Edité par Metalion Le 15/10/2013 à 17h07
MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
il se produit quand même des choses étranges au niveau des sauvegardes peut être dues au changement de screen
mais pourquoi 2 sauvegardes de &H0 a &HD3ff puis H4A00 a &HA400 avec le même non de fichier ??
mais pourquoi 2 sauvegardes de &H0 a &HD3ff puis H4A00 a &HA400 avec le même non de fichier ??
igal
Membre non connecté
Conseiller Municipal
Je m efforce d expliquer que TOUTES les numerisations 1 2 3 et 4 sont en screen 8 mais subissent une modification quant a leur dimension.
Concernant la visualisation en screen 0, 1, 2 3 ou 4 la aussi je m efforce de dire que l on voit une image en screen 0 1 2 3 ou 4 simplement en appliquant set video 2,1,1
C
Dans la video au dessus je montre simplement ces deux choses distinctes en meme temps.
Y a quelques semaines, c etait => FAUX... Ru ne peux pas numeriser a la volee.. Ce que tu vois est la source video lol
A jipe: ai depart je supprime les elements graphiques restes en vram pour de oas avoir des numerisations anciennes dans d autres format venir s afficher a l ecran.
Demain je montrerai comment deformer la numerisation en screen 8 en temps reel. Lol
Pour resumer permettent de creer des miniatures de screen 8 en 256 couleurs. Edité par igal Le 15/10/2013 à 18h04
Concernant la visualisation en screen 0, 1, 2 3 ou 4 la aussi je m efforce de dire que l on voit une image en screen 0 1 2 3 ou 4 simplement en appliquant set video 2,1,1
C
Dans la video au dessus je montre simplement ces deux choses distinctes en meme temps.
Y a quelques semaines, c etait => FAUX... Ru ne peux pas numeriser a la volee.. Ce que tu vois est la source video lol
A jipe: ai depart je supprime les elements graphiques restes en vram pour de oas avoir des numerisations anciennes dans d autres format venir s afficher a l ecran.
Demain je montrerai comment deformer la numerisation en screen 8 en temps reel. Lol
Pour resumer permettent de creer des miniatures de screen 8 en 256 couleurs. Edité par igal Le 15/10/2013 à 18h04
igal
Membre non connecté
Conseiller Municipal
Me voila rentré:
@Métalion: Je t'invite à prendre un 8280, y mettre un 9958 puis tester ce qui suit:
Pour voir une vidéo à travers le SCREEN 0:
10 PRINT" VIDEO SCREEN 0.
20 SET VIDEO 2,1,1
30 SCREEN 0: GOTO 30
Nb: Ca marche avec tous les SCREEN de 0 à 12.
Pour numériser à la volée
10 PRINT" A LA VOLEE.
20 SET VIDEO 2,0,0
30 SCREEN 8: COLOR ,,255
40 COPY SCREEN 0
50 BSAVE"IMAGE.SC8",0,&HD3FF,S
Pour numériser à la volée sans freeze momentané du VDP
10 PRINT" A LA VOLEE SANS FREEZE.
20 SET VIDEO 2,1,1
30 SCREEN 8: COLOR ,,255
40 COPY SCREEN 0
50 BSAVE"IMAGE.SC8",0,&HD3FF,S
Pour Numériser un minature:
10 PRINT" MINIATURES.
20 SET VIDEO 2,1,1
30 SCREEN 8: COLOR ,,255
40 COPY SCREEN 0
50 SCREEN 0
60 COPY SCREEN 0
70 BSAVE"H:IMAGE"+MID$(STR$(N),2)+".SC8",&H4A00,&HA400,S
Nb: Les coordonnées &H4A00,&HA400 sont la pour ne sauvegarder que les parties acceptables de l'image.
Pour un effet miroir déformant:
10 PRINT"MIROIR DEFORMANT.
20 SET VIDEO 2,1,1
30 SCREEN 8: COLOR ,,255
40 VDP(10)=2
50 COPY SCREEN 0
60 BSAVE"IMAGE.SC8",0,&HD3FF,S
Tous les effets peuvent être combinés Edité par igal Le 15/10/2013 à 23h57
@Métalion: Je t'invite à prendre un 8280, y mettre un 9958 puis tester ce qui suit:
Pour voir une vidéo à travers le SCREEN 0:
10 PRINT" VIDEO SCREEN 0.
20 SET VIDEO 2,1,1
30 SCREEN 0: GOTO 30
Nb: Ca marche avec tous les SCREEN de 0 à 12.
Pour numériser à la volée
10 PRINT" A LA VOLEE.
20 SET VIDEO 2,0,0
30 SCREEN 8: COLOR ,,255
40 COPY SCREEN 0
50 BSAVE"IMAGE.SC8",0,&HD3FF,S
Pour numériser à la volée sans freeze momentané du VDP
10 PRINT" A LA VOLEE SANS FREEZE.
20 SET VIDEO 2,1,1
30 SCREEN 8: COLOR ,,255
40 COPY SCREEN 0
50 BSAVE"IMAGE.SC8",0,&HD3FF,S
Pour Numériser un minature:
10 PRINT" MINIATURES.
20 SET VIDEO 2,1,1
30 SCREEN 8: COLOR ,,255
40 COPY SCREEN 0
50 SCREEN 0
60 COPY SCREEN 0
70 BSAVE"H:IMAGE"+MID$(STR$(N),2)+".SC8",&H4A00,&HA400,S
Nb: Les coordonnées &H4A00,&HA400 sont la pour ne sauvegarder que les parties acceptables de l'image.
Pour un effet miroir déformant:
10 PRINT"MIROIR DEFORMANT.
20 SET VIDEO 2,1,1
30 SCREEN 8: COLOR ,,255
40 VDP(10)=2
50 COPY SCREEN 0
60 BSAVE"IMAGE.SC8",0,&HD3FF,S
Tous les effets peuvent être combinés Edité par igal Le 15/10/2013 à 23h57
Ecoute, Igal ... Mon but n'est pas de démolir ce que tu as fait, mais de le comprendre !
Les résultats sont surprenants, ça je te l'accorde, mais ce qui est intéressant dans ta démarche, c'est de comprendre comment le VDP fonctionne et pourquoi il produit ces effets là. Or tes explications ne sont pas très cohérentes par rapport au fonctionnement connu et documenté du VDP. De plus, le programme est confus et les changements multiples de modes graphiques et de sauvegardes totales ou partielles rendent difficile la compréhension.
Il est un fait, c'est que la numérisation (et les fonctions vidéo en général) sont très peu connues sur MSX, du fait du nombre très restreints d'applications qui les ont utilisées, et du manque de documentation. Et rien que pour cela, tes expérimentations sont très intéressantes, car elles nous permettront certainement d'en connaitre un peu plus.
Alors, il est possible que je sois un peu brutal parfois dans mes conclusions (et je m'en excuse), mais j'ai une tendance naturelle à être très rationnel et à chercher dans tout ce que je vois des explications logiques, et à écarter d'office ce qui ne l'est pas.
Bref, que cela ne nous empêche pas de continuer à essayer de comprendre ce qui se passe dans ton programme de numérisation.
EDIT : Je viens de lire ton dernier message, posté pendant que j'écrivais celui-ci ! Malheureusement, je n'ai pas ce matériel. Est-ce possible de simuler tout ça sur BlueMSX ? Edité par Metalion Le 15/10/2013 à 20h01
Les résultats sont surprenants, ça je te l'accorde, mais ce qui est intéressant dans ta démarche, c'est de comprendre comment le VDP fonctionne et pourquoi il produit ces effets là. Or tes explications ne sont pas très cohérentes par rapport au fonctionnement connu et documenté du VDP. De plus, le programme est confus et les changements multiples de modes graphiques et de sauvegardes totales ou partielles rendent difficile la compréhension.
Il est un fait, c'est que la numérisation (et les fonctions vidéo en général) sont très peu connues sur MSX, du fait du nombre très restreints d'applications qui les ont utilisées, et du manque de documentation. Et rien que pour cela, tes expérimentations sont très intéressantes, car elles nous permettront certainement d'en connaitre un peu plus.
Alors, il est possible que je sois un peu brutal parfois dans mes conclusions (et je m'en excuse), mais j'ai une tendance naturelle à être très rationnel et à chercher dans tout ce que je vois des explications logiques, et à écarter d'office ce qui ne l'est pas.
Bref, que cela ne nous empêche pas de continuer à essayer de comprendre ce qui se passe dans ton programme de numérisation.
EDIT : Je viens de lire ton dernier message, posté pendant que j'écrivais celui-ci ! Malheureusement, je n'ai pas ce matériel. Est-ce possible de simuler tout ça sur BlueMSX ? Edité par Metalion Le 15/10/2013 à 20h01
MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
igal
Membre non connecté
Conseiller Municipal
Le déca passe bien à cette heure ci
J'avoue être quelques fois un peu perplexe à te voir "démonter" systématiquement tout ce qui n'est pas strictement carré.
Je te remercie pour ces éclaircissements et pour le coup ta démarche peut être complémentaire à mon approche globale et souvent approximative
Pour en revenir au VDP, malheureusement ces effets spéciaux ne fonctionnent pas sur BlueMsx. Cela s'explique certainement par une émulation incomplète faute d'informations suffisantes.
Concernant mon listing, il y a certaines choses à nettoyer, d'autres ne demandent qu'à être améliorées mais de nombreuses répétitions sont la pour Fixer les problèmes de synchronisation connus sur le 8280 équipé d'un 9958.
Je souhaiterai par exemple ajouter la possibilité de sélectionner un SCREEN simplement en cliquant sur une touche.
[0] pour le SCREEN 0, [1] pour le SCREEN1 etc etc... [A] pour le SCREEN 10, [B] Pour le SCREEN 11 et [C] pour le SCREEN [12]. Edité par igal Le 16/10/2013 à 21h28
J'avoue être quelques fois un peu perplexe à te voir "démonter" systématiquement tout ce qui n'est pas strictement carré.
Je te remercie pour ces éclaircissements et pour le coup ta démarche peut être complémentaire à mon approche globale et souvent approximative
Pour en revenir au VDP, malheureusement ces effets spéciaux ne fonctionnent pas sur BlueMsx. Cela s'explique certainement par une émulation incomplète faute d'informations suffisantes.
Concernant mon listing, il y a certaines choses à nettoyer, d'autres ne demandent qu'à être améliorées mais de nombreuses répétitions sont la pour Fixer les problèmes de synchronisation connus sur le 8280 équipé d'un 9958.
Je souhaiterai par exemple ajouter la possibilité de sélectionner un SCREEN simplement en cliquant sur une touche.
[0] pour le SCREEN 0, [1] pour le SCREEN1 etc etc... [A] pour le SCREEN 10, [B] Pour le SCREEN 11 et [C] pour le SCREEN [12]. Edité par igal Le 16/10/2013 à 21h28
igal
Membre non connecté
Conseiller Municipal
Voici le tant espéré "Fondu d'image sur image" donnant l'illusion d'une animation moins hachurée.
http://youtu.be/fABnEv0-LZA
Les détails suivront
http://youtu.be/fABnEv0-LZA
Les détails suivront
igal
Membre non connecté
Conseiller Municipal
Voici le listing qui permet un effet de "fondu d'image sur image"
Comme vous pouvez le voir, Une image sur Trois n'est pas affichée instantanément et l'effet de "Fondu" ne s'y applique même pas.
J'aimerai améliorer cela.
Si vous avez une idée
Nb: J'ai bien essayé de comprendre les explications sur AND et XOR, mais j'ai un peu de mal à comprendre le fonctionnement dans le listing
ici => http://msxvillage.fr/wiki/wiki.php?title=les-commandes-du-msx-basic Edité par igal Le 16/11/2013 à 12h01
Code TEXT :
10 N=0 :' Initialise la Variable N à Zéro. 20 COLOR ,,0:' affiche l'écran Noir. 30 VDP(10)=0:' Bascule en 60Hz pour un petit gain de vitesse. 40 SCREEN12,,,,,3:' Les modes graphique 12,,,,,2 et 12,,,,,3 seulement permettent de voir l'effet de VDP(14) (Temps d'affichage des Pages) 50 ' 60 ON STOP GOSUB 80 : STOP ON:'Oriente la suite du programme vers la ligne 80 en cas de [CTRL+STOP] 70 SETPAGENAND1,(1ANDN)XOR1:' Je demande qu'à être corrigé sur ce qui suit... 71 ' La page SET PAGE X,Y sera toujours SET PAGE 0,1 ou SET PAGE 1,0 ? 72 ' XOR1 affiche la page (1ANDN) seulement si 1 et N ne sont pas à la même valeur? 73 BLOAD"IMAGE"+MID$(STR$(N),2)+".scc",S: ' charge le fichier [b]IMAGEnnn.SCC [/b]et l'affiche avec [b],S[/b] 74 N=N+1: ' Incrémente la valeur 1 à N 75 GOTO 70: ' Retour au début de la boucle en ligne 70 80 VDP(14)=0: ' rétabli un affichage visiblement normal puisque sans bascule entre deux pages. 90 END:' Fin du programme, le Msx va retourner vers le Basic Screen0,,,,,
Comme vous pouvez le voir, Une image sur Trois n'est pas affichée instantanément et l'effet de "Fondu" ne s'y applique même pas.
J'aimerai améliorer cela.
Si vous avez une idée
Nb: J'ai bien essayé de comprendre les explications sur AND et XOR, mais j'ai un peu de mal à comprendre le fonctionnement dans le listing
ici => http://msxvillage.fr/wiki/wiki.php?title=les-commandes-du-msx-basic Edité par igal Le 16/11/2013 à 12h01
Pour la ligne 70, si j'ai bien compris tu veux alterner les commandes SETPAGE 0,1 et SETPAGE 1,0 en fonction de la valeur de N ?
Ta commande est bonne. Moi perso j'aurais mis SETPAGE NAND1,(NAND1)XOR1
Tu pouvais aussi faire : SETPAGE NMOD2,(NMOD2)XOR1
AND, OR, XOR et NOT sont des commandes qui fonctionnent comme les portes logiques en électronique. Elles effectuent une comparaison bit à bit pour donner leur résultat.
AND s'utilise comme un "filtre". Lorque l'on effectue l'opération N AND &b00001111, on obtient comme résultat la partie basse de N (les 4 premiers bits).
&b10011011
AND
&b11110000
=
&b10010000
XOR s'utilise comme un "inverseur". Lorque l'on effectue l'opération N AND &b00001111, on obtient comme résultat un chiffre composé de l'inverse binaire de la partie basse de N, la partie haute restant inchangée..
&b10011011
XOR
&b11110000
=
&b01101011
Ta commande est bonne. Moi perso j'aurais mis SETPAGE NAND1,(NAND1)XOR1
Tu pouvais aussi faire : SETPAGE NMOD2,(NMOD2)XOR1
AND, OR, XOR et NOT sont des commandes qui fonctionnent comme les portes logiques en électronique. Elles effectuent une comparaison bit à bit pour donner leur résultat.
AND s'utilise comme un "filtre". Lorque l'on effectue l'opération N AND &b00001111, on obtient comme résultat la partie basse de N (les 4 premiers bits).
&b10011011
AND
&b11110000
=
&b10010000
XOR s'utilise comme un "inverseur". Lorque l'on effectue l'opération N AND &b00001111, on obtient comme résultat un chiffre composé de l'inverse binaire de la partie basse de N, la partie haute restant inchangée..
&b10011011
XOR
&b11110000
=
&b01101011
MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
igal
Membre non connecté
Conseiller Municipal
Salut Metalion.
à l'origine, Hit9918 à rédigé cette ligne de commande comme tu le préconise => SETPAGE NAND1,(NAND1)XOR1
j'avais fait différents tests et il me semble avoir un très léger gain en "accolant" NAND1,(1NAND) ou encore 1ANDN,(NAND1)
Dans tous les cas, j'avais déjà testé cette possibilité pour voir si c'était la source du problème de la troisième image qui s'affiche progressivement.
En fait en regardant la vidéo précédente, on voit bien que le fondu d'image ne se fait que 2 frames sur 3.
On dirait que les 2 premières images sont "entrelacées" et la troisième quant à elle est pleine.
Cette troisième image recouvre donc complètement l'image précédente et en plus elle n'apparaît que progressivement au lieu de s'afficher d'un seul coup.
Je précise que Ce phénomène ne se produit que lorsque le SCREEN X,,,,,3 ou SCREEN X,,,,,2.
C'est ce qui permet d'avoir l'effet de fondu puisqu'une seule ligne sur deux vient couvrir l'ancienne image.
Avec SCREEN X,,,,,0 ou encore SCREEN X,,,,,1, il n'y a plus d'effet de fondu (chaque ligne est pleine). L'image vient donc couvrir complètement l'ancienne image.
Le point positif est que l'effet indésirable de la troisième page s'affichant progressivement n'a plus lieu contrairement à X,,,,,2 ou X,,,,,3.
Tout autre chose:
A défaut de pouvoir numériser du SCREEN 12, j'ai donc utilisé BMP2MSX pour générer des séquences vidéo le plus simplement du monde.
Au préalable, j'utilise Virtualdub pour changer le Frame rate à 3 par seconde qui est la vitesse maximale que j'arrive à obtenir sur mon 8280 réel.
Une fois la séquence vidéo obtenue, en 256X212.BMP, BMP2MSX se charge de créer des images en SCREEN12.
Hit9918 m'a donné la solution pour "ripper" des images déjà existantes en modifiant légèrement sont programme.
Pour rappel, ces versions permettent d'exploiter 16Mo de RAM disponibles sur vôtre MSX
Avant tout, il faut savoir que pour optimiser la vitesse de lecture, le BIOS est copié en RAM et un espace doit lui être réservé.
Voici le petit programme à exécuter avant le Player ou Ripper/Capture
Prérequis:
Pour ripper une séquence vidéo existante en SCREEN 12 , il suffit de remplacer la ligne 120 tel que:
Pour numériser une séquence vidéo à la volée en SCREEN 8, il suffit d'ajouter les lignes suivantes et remplacer la ligne 120:
Le Logiciel de Capture/Ripp:
(modifier selon l'usage de Numérisation à la volée ou rippe d'une séquence d'image existante
Logiciel de Lecture:
Voici une vidéo utilisant le Ripper de sorte à stocker du SCREEN 12 sur 16Mo de RAM avant d'être lus par le Player.
Nb: Sur un véritable MSX, l'animation tourne à 3 images par seconde
Edit: Les plus pressés doivent aller directement à la troisième minute. Avant cela, on voit juste la méthode permettant le RIPP des IMAGES.SCC depuis la CF=>RAM
http://www.youtube.com/watch?v=kyZSmZsEe7k Edité par igal Le 17/11/2013 à 19h34
à l'origine, Hit9918 à rédigé cette ligne de commande comme tu le préconise => SETPAGE NAND1,(NAND1)XOR1
j'avais fait différents tests et il me semble avoir un très léger gain en "accolant" NAND1,(1NAND) ou encore 1ANDN,(NAND1)
Dans tous les cas, j'avais déjà testé cette possibilité pour voir si c'était la source du problème de la troisième image qui s'affiche progressivement.
En fait en regardant la vidéo précédente, on voit bien que le fondu d'image ne se fait que 2 frames sur 3.
On dirait que les 2 premières images sont "entrelacées" et la troisième quant à elle est pleine.
Cette troisième image recouvre donc complètement l'image précédente et en plus elle n'apparaît que progressivement au lieu de s'afficher d'un seul coup.
Je précise que Ce phénomène ne se produit que lorsque le SCREEN X,,,,,3 ou SCREEN X,,,,,2.
C'est ce qui permet d'avoir l'effet de fondu puisqu'une seule ligne sur deux vient couvrir l'ancienne image.
Avec SCREEN X,,,,,0 ou encore SCREEN X,,,,,1, il n'y a plus d'effet de fondu (chaque ligne est pleine). L'image vient donc couvrir complètement l'ancienne image.
Le point positif est que l'effet indésirable de la troisième page s'affichant progressivement n'a plus lieu contrairement à X,,,,,2 ou X,,,,,3.
Tout autre chose:
A défaut de pouvoir numériser du SCREEN 12, j'ai donc utilisé BMP2MSX pour générer des séquences vidéo le plus simplement du monde.
Au préalable, j'utilise Virtualdub pour changer le Frame rate à 3 par seconde qui est la vitesse maximale que j'arrive à obtenir sur mon 8280 réel.
Une fois la séquence vidéo obtenue, en 256X212.BMP, BMP2MSX se charge de créer des images en SCREEN12.
Hit9918 m'a donné la solution pour "ripper" des images déjà existantes en modifiant légèrement sont programme.
Pour rappel, ces versions permettent d'exploiter 16Mo de RAM disponibles sur vôtre MSX
Avant tout, il faut savoir que pour optimiser la vitesse de lecture, le BIOS est copié en RAM et un espace doit lui être réservé.
Voici le petit programme à exécuter avant le Player ou Ripper/Capture
Prérequis:
Code TEXT :
10 'SAVE"16MOPREP.asc",a 15 COLOR 1,15:WIDTH 80 20 POKE &HF676,1 : POKE &HF677,&HC0 : POKE &HC000,0
Pour ripper une séquence vidéo existante en SCREEN 12 , il suffit de remplacer la ligne 120 tel que:
Code TEXT :
120 BLOAD"image"+MID$(STR$(I),2)+".scc",S:CLS
Pour numériser une séquence vidéo à la volée en SCREEN 8, il suffit d'ajouter les lignes suivantes et remplacer la ligne 120:
Code TEXT :
99 SCREEN8:SET VIDEO 2,0,0:COLOR,,255 ... ... 120 COPYSCREEN0
Le Logiciel de Capture/Ripp:
(modifier selon l'usage de Numérisation à la volée ou rippe d'une séquence d'image existante
Code TEXT :
10 clear 200,&hd000 : p% = &hd000 'loading asm there 20 defusr0 = p%+2 '+2: skip module length 30 gosub 5000 'load asm code 40 LI% = p% 'ldir function. call with usr(%LD) 50 gosub 5000 'load asm code 60 screen 8 70 m = 1 'mapper start. 71 pp = (inp(&ha8) AND &b110000)/16 : ss = 0 'slot currently selected in page2/&h8000 to primary pp%, secondary ss%=0 110 for i = 0 to 9999 'count images i 120 color ,i AND 255 : cls : cls 200 for j = 0 to 2 220 defusr1 = (128 + ss * 4 + pp)*256 '*256 to get in akku A register of AF 230 defusr4 = &h8000 'tell 16k page in HL register 240 u%=usr(&h24) 'ENASLT bios function to set slot/subslot 250 out &hFE,m 300 defusr2 = 16384 310 defusr3 = &h8000 'DE 'ram target address 320 defusr4 = 16384*j 'HL 'vram source address 330 u%=usr(&h59) 'vram to ram 340 m = m + 1 : if m = 256 then gosub 600 440 next j 461 defusr1 = (128 + ss * 4 + pp)*256 '*256 to get in akku A register of AF 462 defusr4 = &h8000 'tell 16k page in HL register 463 u%=usr(&h24) 'ENASLT bios function to set slot/subslot 464 out &hFE,m 465 defusr2 = 5120'that snippet down between line 192 and 212. waste a whole 16k page for simple logic 466 defusr3 = &h8000 467 defusr4 = 16384*3 468 u%=usr(&h59) 469 m = m + 1 : if m = 256 then gosub 600 490 next i 500 screen 0 : color 15,4 : END 600 m = 1 : ss = ss + 1'to next subslot / next 4 megs bank 610 if ss <= 3 then return 620 return 500'done 4999 STOP 'when above code forgot END 5000 read a$ : if a$ = "END" then return 5010 poke p%,val("&h"+a$) : p%=p%+1 : goto 5000 9999 'the callbios code. runs on any address. 10000 DATA 55,00,3A,63,F6,FE,02,28 10010 DATA 04,CD,C0,00,C9,21,E1,E9 10020 DATA 22,AC,F3,CD,AC,F3,11,24 10030 DATA 00,19,ED,5B,F8,F7,73,23 10040 DATA 72,2A,9C,F3,E5,F1,ED,4B 10050 DATA 9E,F3,ED,5B,A0,F3,2A,A2 10060 DATA F3,DD,2A,A4,F3,FD,2A,A6 10070 DATA F3,CD,00,00,ED,43,9E,F3 10080 DATA ED,53,A0,F3,22,A2,F3,DD 10090 DATA 22,A4,F3,FD,22,A6,F3,F5 10100 DATA E1,2A,9C,F3,C9,END 19999 'LDIR : RET 20000 DATA ED,B0,C9,END
Logiciel de Lecture:
Code TEXT :
10 clear 200,&hd000 : p% = &hd000 'loading asm there 20 defusr0 = p%+2 '+2: skip module length 30 gosub 5000 'load asm code 40 LI% = p% 'ldir function. call with usr(%LD) 50 gosub 5000 'load asm code 60 screen 8 70 m = 1 'mapper start. 71 pp = (inp(&ha8) AND &b110000)/16 : ss = 0 'slot currently selected in page2/&h8000 to primary pp%, secondary ss%=0 110 for i = 0 to 9999 'count images i 120 set page i and 1,(i and 1) xor 1 200 for j = 0 to 2 220 defusr1 = (128 + ss * 4 + pp)*256 '*256 to get in akku A register of AF 230 defusr4 = &h8000 'tell 16k page in HL register 240 u%=usr(&h24) 'ENASLT bios function to set slot/subslot 250 out &hFE,m 300 defusr2 = 16384 310 defusr3 = 16384*j 'DE 'vram target address 320 defusr4 = &h8000 'HL 'ram source address 330 u%=usr(&h5c) 'ram to vram 340 m = m + 1 : if m = 256 then gosub 600 440 next j 461 defusr1 = (128 + ss * 4 + pp)*256 '*256 to get in akku A register of AF 462 defusr4 = &h8000 'tell 16k page in HL register 463 u%=usr(&h24) 'ENASLT bios function to set slot/subslot 464 out &hFE,m 465 defusr2 = 5120'that snippet down between line 192 and 212. waste a whole 16k page for simple logic 466 defusr3 = 16384*3 467 defusr4 = &h8000 468 u%=usr(&h5c) 469 m = m + 1 : if m = 256 then gosub 600 490 next i 500 screen 0 : color 15,4 : END 600 m = 1 : ss = ss + 1'to next subslot / next 4 megs bank 610 if ss <= 3 then return 620 return 500'done 4999 STOP 'when above code forgot END 5000 read a$ : if a$ = "END" then return 5010 poke p%,val("&h"+a$) : p%=p%+1 : goto 5000 9999 'the callbios code. runs on any address. 10000 DATA 55,00,3A,63,F6,FE,02,28 10010 DATA 04,CD,C0,00,C9,21,E1,E9 10020 DATA 22,AC,F3,CD,AC,F3,11,24 10030 DATA 00,19,ED,5B,F8,F7,73,23 10040 DATA 72,2A,9C,F3,E5,F1,ED,4B 10050 DATA 9E,F3,ED,5B,A0,F3,2A,A2 10060 DATA F3,DD,2A,A4,F3,FD,2A,A6 10070 DATA F3,CD,00,00,ED,43,9E,F3 10080 DATA ED,53,A0,F3,22,A2,F3,DD 10090 DATA 22,A4,F3,FD,22,A6,F3,F5 10100 DATA E1,2A,9C,F3,C9,END 19999 'LDIR : RET 20000 DATA ED,B0,C9,END
Voici une vidéo utilisant le Ripper de sorte à stocker du SCREEN 12 sur 16Mo de RAM avant d'être lus par le Player.
Nb: Sur un véritable MSX, l'animation tourne à 3 images par seconde
Edit: Les plus pressés doivent aller directement à la troisième minute. Avant cela, on voit juste la méthode permettant le RIPP des IMAGES.SCC depuis la CF=>RAM
http://www.youtube.com/watch?v=kyZSmZsEe7k Edité par igal Le 17/11/2013 à 19h34
Je pense que l'effet de la 3e image "non fondu/enchainé" vient d'une désynchronisation périodique entre le chargement des images et le rafraichissement de l'écran. Pas grand chose à faire pour corriger ça si ce n'est passer en assembleur et caler l'affichage avec le VBLANK. Hors de portée en BASIC.
Ceci dit, il y a encore des possibilités d'optimisation de ton programme, je regarderai ça demain matin.
Ceci dit, il y a encore des possibilités d'optimisation de ton programme, je regarderai ça demain matin.
MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
Je ne comprends pas.
Ta vidéo "PLANES" est beaucoup plus lente que ta vidéo "MONSTERS".
C'est le même lecteur, non ?
Ta vidéo "PLANES" est beaucoup plus lente que ta vidéo "MONSTERS".
C'est le même lecteur, non ?
MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
igal
Membre non connecté
Conseiller Municipal
La vidéo avec les avions est jouée avec mon petit programme élaboré avec l'aide de Jipe au tout début.
Je l'utilise pour expérimenter un max de choses. En ce moment, j'essais donc de trouver la solution pour le fondu d'images comme expliqué plus haut.
La vidéo avec les monstres est jouée avec le Player concocté par Hit9918.
Il est beaucoup plus rapide mais il m'est moins accessible du fait de sa technicité
Ce player déplace le Bios sur la RAM de sorte à optimiser la vitesse.
Je l'utilise pour expérimenter un max de choses. En ce moment, j'essais donc de trouver la solution pour le fondu d'images comme expliqué plus haut.
La vidéo avec les monstres est jouée avec le Player concocté par Hit9918.
Il est beaucoup plus rapide mais il m'est moins accessible du fait de sa technicité
Ce player déplace le Bios sur la RAM de sorte à optimiser la vitesse.
igal
Membre non connecté
Conseiller Municipal
En passant en revu les anciens post sur msx.org, j'ai reçu le post de Enribar que voici:
J'ai pas vraiment compris ce qu'il me suggère en ligne 289 lorsqu'il explique dessayer avec MID pour gagner en rapidité.
Code TEXT :
I don't know if there are timing reasons to slow down code, but for example: 281 SCREEN8 (some pokes are more quick?) 282 COLOR,,255 (some pokes are more quick?) 283 COPY SCREEN 0 (COPYSCREEN0, so without spaces) 284 BSAVE"H:IMAGE"+MID$(STR$(N),2)+".SC8",0,&HD3FF,S (MID$(...) slows down interpreter) 285 SETVIDEO 2,1,1 (...) 286 COPY SCREEN 0 (COPYSCREEN0) 287 SCREEN 0 (...) 288 COPYSCREEN0 (...) 289 BSAVE"H:IMAGE"+MID$(STR$(N),2)+".SC8",&H4A00,&HA400,S (try to do the MID$(...) only one time) 290 N=N+1 (a poke?) 291 SCREEN8 (...) 292 COPY SCREEN 0 (...) 293 A$=INKEY$:IFA$=""THEN286 (better this: IFINKEY$=""THEN286)
J'ai pas vraiment compris ce qu'il me suggère en ligne 289 lorsqu'il explique dessayer avec MID pour gagner en rapidité.
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie