MSX Village forum

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

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 15/10/2013 à 15h56

Reprise du message précédent

Salut Métalion ^^

Je 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


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

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 15/10/2013 à 17h05
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


"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)
   
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 15/10/2013 à 17h23
Ok.


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: 10353

Le 15/10/2013 à 17h32
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 ??


:noel
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 15/10/2013 à 18h01
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


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 15/10/2013 à 19h51
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 :top Edité par igal Le 15/10/2013 à 23h57


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

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 15/10/2013 à 19h59
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.

:tea

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

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 15/10/2013 à 21h58
Le déca passe bien à cette heure ci :tea

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 :p

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


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 15/11/2013 à 20h06
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 ;)


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 16/11/2013 à 11h57
Voici le listing qui permet un effet de "fondu d'image sur image" ;)

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 :oups
ici => http://msxvillage.fr/wiki/wiki.php?title=les-commandes-du-msx-basic Edité par igal Le 16/11/2013 à 12h01


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

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 17/11/2013 à 16h04
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


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

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 17/11/2013 à 18h33
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 :top

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 :p

http://www.youtube.com/watch?v=kyZSmZsEe7k Edité par igal Le 17/11/2013 à 19h34


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

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 17/11/2013 à 19h18
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.


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)
   
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 18/11/2013 à 10h40
Je ne comprends pas.
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

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 18/11/2013 à 12h16
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é :p
Ce player déplace le Bios sur la RAM de sorte à optimiser la vitesse.



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 19/11/2013 à 15h27
En passant en revu les anciens post sur msx.org, j'ai reçu le post de Enribar que voici:

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é.


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie