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 11/10/2013 à 15h44

Reprise du message précédent

Merci Jipe :)

@MsxLégend: tu vas pouvoir exploiter les 16Mo de la Playsoniq :D

Ca fait quelques jours que je traîne sur Msx.Org et par coup de chance, hit9918 s'est intéressé à ma question.

Autre coup de bol, il a vraiment l'air de maîtriser le sujet puisque.

Avant tout, il est recommandé de ne pas charger le DOS mais de démarrer directement sous BASIC.
Nb: Malgré tout, je démarre sous DOS pour ensuite revenir sous BASIC et cela fonctionne sous certaines conditions :top

Voici le code permettant d'exploiter jusqu'à 16Mo sur Différents Slots et/ou SubSlots.
Vous trouverez à la suite de chaque Listing la modification à apporter pour l'utilisation de la [Numérisation en Temp Réel].

16MOPREP.ASC
Code TEXT :
 
10 poke &hf676,1 : poke &hf677,&hc0 : poke &hc000,0 : new
 

Nb: Ce code est préalable et permet de transférer le BASIC sur une autre adresse.

16MOCAPT.ASC
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
 


16MOPLAY.ASC
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 un Pack qui regroupe les Listing:
PORTE FOLIO.zip

Nb: Le Fichier 012.ASC permet de mieux comprendre le processus et le différents fixes nécessaires qu 8280 équipé d'un VDP9958 sans fixe Hardware.
Ce Fichier doit encore être complété avec les avancées de Jipe pour un gain de vitesse :top

Nb: Les Fichiers 16MOPREP.ASC, 16MOCAPT.ASC et 16MOPLAY.ASC sont aussi modifiés pour le [8280 Fixe] et la numérisation à la volée :top



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

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 08/08/2010 à 20h57

Messages: 5886

Le 11/10/2013 à 19h59
P'tet que different mapper sont exploitable avec ce prog, genre memoire interne + mapper externe ^^



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

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 11/10/2013 à 21h50
En fait la RAM est recherchée sur tous les slots et subslots.

Voici une vidéo stockée sur la playsoniq.


http://www.youtube.com/watch?v=NgAdiznzunc


À force de testes, je me suis aperçu qu'il est possible de couvrir la vidéo par le vdp sans que la superposition graphique ne freeze pendant la sauvegarde des deux images par seconde.

Pour cela, il suffit de remplacer la commande SET VIDÉO 2,0,0 par SET VIDÉO 2,1,1.

Pour faire simples le vdp ne suspend plus la numérisation à la volée pendant le backup VRAM => RAM.

Ne sorte de multitâche du vdp lol


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 12/10/2013 à 18h16
Encore plus fort:

Plutôt que d'utiliser SET VIDEO 2,0,0 on peut numériser tout aussi aisément le SCREEN 8 à la volée et chose surprenante....

Voici la démonstration de l'utilisation du mode SET VIDEO 2,1,1 qui tout comme le SET VIDEO 2,0,0 lorsqu'il est combiné à COPY SCREEN 0, permet de "Couvrir" la source vidéo d'un SCREEN8 en temps réel.

Auparavant, au moment du "Transfer" des données depuis la VRAM => RAM, le processus qui "couvrait" la vidéo par du SCREEN 8 "freezait" le temps que l'image ait été Sauvegardé pour ensuite reprendre son activité et de nouveau recouvrir la VIDEO en temps réel.

Avec le mode SET VIDEO 2,1,1 le problème ne se pose plus puisque la "Sauvegarde" des images se fait toujours en temps réel mais ne fait plus "Frezzer" le VDP puisque ce dernier continue de couvrir la Vidéo sans le moindre ralentissement de quelque nature que ce soit.


http://youtu.be/zx1c5Hf1-0M



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 14/10/2013 à 06h57
Quelques exemples sur les capacités inattendues du VDP.

Comme expliqué, le mode SET VIDEO 2,1,1 combiné au COPYSCREEEN0 permet de numériser tout ce passe par le VDP.

Voici ce que donne la Numérisation en SCREEN0:


Il faut comprendre que quelque soit le SCREEN sélectionné, la matrice reste [256 pixels X 212 pixels (en 8bits)].

Tant que cette Matrice n'est pas pleine, les [54 279 octets (434 232Bits)] ne sont pas remplis, le VDP ingère une nouvelle image venant de la carte vidéo en amont.

Ce résultat est obtenu avec ce listing:
Code TEXT :
 
10 'GOTO 300:'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
275 SET VIDEO 2,0,0:SCREEN8:COLOR,,255
280 COPYSCREEN0:BSAVE"H:IMAGE"+MID$(STR$(N),2)+".SC8",0,&HD3FF,S:N=N+1:A$=INKEY$:IFA$=""THEN280
290 SET VIDEO 0,0,0: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)=3:VDP(10)=0
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 VIDEO 2,0,0:SET VIDEO 0,0,0:VDP(10)=3:VDP(10)=2:END
 


@Jipe: Peut on changer cette ligne de commande de sorte à ne copier que ce qui nous interesse dans le volume de la matrice:
280 COPYSCREEN0:BSAVE"H:IMAGE"+MID$(STR$(N),2)+".SC8",0,&HD3FF,S:N=N+1:A$=INKEY$:IFA$=""THEN280

Je m'explique:
L'image numérisée est le résulta de la copie des données se trouvant stockés en VRAM.
Je suppose que la valeur 0,&HD3FF veut dire de copier un [Volume de Vram] commençant à 0 et allant jusqu'à &HD3FF.
On peut très bien imaginer ne sauvegarder "que" la partie de VRAM qui nous intéresse.
Dans l'exemple au dessus en SCREEN 0, le premier tiers du haut aurait été bon si il ne contenait pas ce qui semble être une frise de 32 blocs de 16 pixels.

On peut appliquer cette technique sur différents mode:
En SCREEN 1:


SCREEN 2:


SCREEN 3:


SCREEN 4:


Les SCREEN 5, 6 et 7 on une palette variable et ne donnent pas une image cohérente:
SCREEN5:


SCREEN6:


SCREEN7:
http://imageshack.us/a/img34/6655/q5uf.jpg
Notez que le SCREEN7 couvre le même volume que le SCREEN8:

SCREEN8:


Les SCREEN10, 11 et 12 n'apportent rien de plus puisqu'ils font le même volume que le SCREEN8 mais restent codés en RGB et non en YJK :(
SCREEN10:


SCREEN11:


SCREEN12:
Edité par igal Le 14/10/2013 à 07h04


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 14/10/2013 à 11h49
Voici le résulta une fois le SCREEN 0 recadré :top

J'ai donc modifié la ligne de commande suivante:
275 SET VIDEO 2,0,0:SCREEN8:COLOR,,255
280 COPYSCREEN0:BSAVE"H:IMAGE"+MID$(STR$(N),2)+".SC8",0,&HD3FF,S:N=N+1:A$=INKEY$:IFA$=""THEN280

Par la Formule suivante:
275 SET VIDEO 2,1,1:SCREEN0:'COLOR,,255
280 SCREEN0:COPYSCREEN0:BSAVE"H:IMAGE"+MID$(STR$(N),2)+".SC8",&H4A00,&HA400,S:N=N+1:SCREEN8:COPYSCREEN0:A$=INKEY$:IFA$=""THEN280

Ce qui a pour effet de ne copier depuis la VRAM => CF que la partie d'image qui nous intéresse.

Voici la vidéo

http://youtu.be/KB2IXjeGZBY
Nb: Il semblerait que la "Frise" affichée horizontalement soit faite de SPRITE :heink
Une fois résolu ce problème de supposés SPRITES, on se retrouve face à une vidéo en vision stéréoscopique :top

Je ne plaisante pas, L'image de gauche à un angle légèrement différent de celle de droite.
La raison en est très simple puisque lors d'une animation quelconque, une image représente un point de vue à un moment donné.
Lors d'un mouvement de Caméra, si l'on peut afficher deux instants différents au même moment, il ne reste qu'à diriger l'image de droite vers l'oeil droite exclusivement et l'image de gauche vers l'oeil gauche pour avec un véritable relief :top

En théorie, plus le mouvement de caméra à de l'ampleur et plus l'effet de relief devrait être prononcé :top

Si vous savez comment empêcher des SPRITES de s'afficher à l'écran, n'hésitez pas ^^ Edité par igal Le 14/10/2013 à 16h44


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

Le 14/10/2013 à 12h10
igal :
Si vous savez comment empêcher des SPRITES de s'afficher à l'écran, n'hésitez pas ^^




VDP(9)=VDP(9) OR 2



igal :
il ne reste qu'à diriger l'image de droite vers l'oeil droite exclusivement et l'image de gauche vers l'oeil gauche pour avec un véritable relief


Non.

Ce n'est pas si simple.



Une vraie image stéréoscopique est filmée avec deux objectifs écartés d'une distance équivalente à celle qui sépare les deux yeux. Ici , tu as deux images séparées par le temps, mais filmées par un même objectif. La distance est donc une résultante du temps entre les deux images, et n'est donc pas du tout liée à l'écartement entre deux yeux (et elle est variable).



Mais même si elles étaient à la bonne distance, elles ne donneraient pas une image stéréoscopiques, puisque les deux perspectives ne sont pas la résultante de deux points de vues donné sur un objet fixe (ce qui donne le relief), mais plutôt deux points de vues successifs d'un même objet qui bouge. Edité par Metalion Le 14/10/2013 à 13h27


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 14/10/2013 à 14h31
Merci Métalion.

Je viens d'essayer avec VDP(9)=VDP(9) OR 2 mais la frise horizontale, ne disparaît pas. Peut être que ce n'est pas des SPRITES.

Concernant la stéréoscopie, j'ai entrepris de créer une vidéo qui convient.

J'ai donc téléchargé cette vidéo:

http://www.youtube.com/watch?v=YaYTbD_1m7M

Ensuite, j'ai utilisé VirtualDub pour créer 2 vidéos.
L'une avec l'image de Gauche et l'autre avec l'image de Droite.

Il me reste à recoller les deux vidéos en alternant de la sorte:

Une image dont la source est le film DROITE.
******
Une image dont la source est le Film GAUCHE.
******
Une image dont la source est le film DROITE.
******
Une image dont la source est le Film GAUCHE.
******
etc etc...

Le problème est que pour le moment, j'ai pas trouver comment imbriquer 2 films en une seule vidéo avec VirtualDub.

Si vous savez comment faire ;)


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

Le 14/10/2013 à 14h56
igal :
Je viens d'essayer avec VDP(9)=VDP(9) OR 2 mais la frise horizontale, ne disparaît pas. Peut être que ce n'est pas des SPRITES


J'ai essayé sur un petit programme qui affiche un sprite en SCREEN5 et ça marche.

Donc, c'est que ta frise n'est pas constituée de sprites ... Edité par Metalion Le 14/10/2013 à 14h57


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

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10731

Le 14/10/2013 à 17h01
les screen 0 , 1 et 3 me laissent perplexent quand au résultats

les 0 et 1 sont des modes textes donc impossibles de restituer autant de couleurs a la fois

le screen 3 lui peux restituer une image mais on doit avoir des pixels de couleurs de 4 x 4

as tu essayé avec un vrai MSX ?

l'image que tu obtient est peut-être un effet de mémoire dans la VRAM

on peux en effet sauvegarder une partie de l'image en décalant les adresses mais il faut un multi^le de 256 pour le début sinon tout se décale

la commande COPY (X,Y)-(X1,Y1) ,page TO "fichier" est gérable plus facilement

le bandeau est bien la zone des sprites aprés la ligne 212 mais tu doit afficher l'image dans un mode différent de la digit pour obtenir ceci



:noel
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1503

Le 14/10/2013 à 17h19
Effectivement, Jipe a raison.
Je pense qu'Igal a fait une erreur d'interprétation.

Si on regarde les indicateurs "à cristaux liquides" du tableau de bord de BlueMSX, en bas à gauche, on voit dans la case "SCREEN" qu'on est en fait, dans le cas de toutes les images présentées, en SCREEN 8 ("SCR 8"). Edité par Metalion Le 14/10/2013 à 17h20


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 14/10/2013 à 20h12
Salut Jipe:

En fait il faut considérer le problème de la façon suivante.

Le 8280 MSX2 numérise en SCREEN8 seulement. (Sauf modification hardware dont tu as parlé vaguement il me semble :hum )
Le SCREEN 8 n'est pas impératif en tant que COMMANDE BASIC, mais juste le "cahier des charges" auquel répond le 8280.
Pour faire simple, on peut choisir n'importe quel SCREEN mais le 8280 numérisera comme si il s'agissait d'un SCREEN 8.

Cependant, l'astuce qui consiste de basculer en SCREEN 0, 1, 2, 3 ou 4 permet "Seulement" de modifier la Matrice originale qui devait être pour rappel:

1) Au niveau des SCREENS
SCREEN 8 => 256p X 212p X 8bits.
SCREEN 1,2,3,4 => 256p X192p X 4bits (il me semble)
Ce qui explique que lorsque je Numérise en SCREEN 0, 1, 2, 3, ou 4, j'obtiens des miniatures d'écran.

2) Le nombre d'images:
Chose amusante avec le VDP est que ce dernier accepte plusieurs images consécutives de sorte à se remplir de données avant de passé à la numérisation suivantes.
concrètement, on se retrouve avec 6 images successives d'une animation encapsulé dans le fichier SCREEN8.

3) La manipulation:
a) SET VIDEO 2,1,1
b) SCREEN 0
C) COPY SCREEN 0
D) SAUVEGARDE DE L IMAGE
E) SCREEN 8
F) COPY SCREEN 0
G) RETOUR à l'OPERATION a)

Nb: L'étape F et G permettent au VDP de Numériser de nouvelles images à l'étape B)
Sans ces deux opération combinées, le VDP ne recommence pas à Numériser le SCREEN 0, 1, 2, 3 ou 4.

4) La Numérisation se fait en SCREEN0 et la lecture en SCREEN8.
Cela explique pourquoi vous voyez SCREEN8 sur BlueMsx ;)


http://youtu.be/1xgPrMVBu1Q

Edit: @Jipe: tout est là:
275 SET VIDEO 2,1,1:SCREEN0:'COLOR,,255
280 SCREEN0:COPYSCREEN0:BSAVE"H:IMAGE"+MID$(STR$(N),2)+".SC8",&H4A00,&HA400,S:N=N+1:SCREEN8:COPYSCREEN0:A$=INKEY$:IFA$=""THEN280 Edité par igal Le 14/10/2013 à 20h14


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

Le 14/10/2013 à 20h24
si j'ai un peu de temps je vais essayer demain sur mon 8280

ça me rappelle les images sauvées en screen 5 repassées en screen 8


:noel
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1503

Le 15/10/2013 à 08h24
J'essaie de comprendre, mais cela m'échappe ...



Donc, tu sélectionnes un mode graphique donné (SCREEN x) pendant la numérisation et la sauvegarde, mais tu n'affiches rien. Ensuite tu bascules en SCREEN 8, tu charges l'image sauvegardée et tu l'affiches. Là ou je ne comprends pas, c'est que, logiquement, cette procédure ne devrait avoir aucune influence sur le résultat, quelque soit le SCREEN séléctionné pendant la numérisation, puisque le VDP remplit la VRAM avec des données au format SCREEN 8.



En fait, le VDP s'en fout du mode SCREEN sélectionné pendant la numérisation, puisque la numérisation est externe. Il se contente de remplir la VRAM avec les données. Le mode SCREEN est seulement une façon de visualiser les données en VRAM.



:hum



EDIT (après lecture du manuel technique du V9938)



Igal :
Le 8280 MSX2 numérise en SCREEN8 seulement. (Sauf modification hardware dont tu as parlé vaguement il me semble)

Le SCREEN 8 n'est pas impératif en tant que COMMANDE BASIC, mais juste le "cahier des charges" auquel répond le 8280.

Pour faire simple, on peut choisir n'importe quel SCREEN mais le 8280 numérisera comme si il s'agissait d'un SCREEN 8.


Incorrect ^^



Le VDP peut digitaliser dans tous les modes SCREEN5 à SCREEN8.

Et je pense que c'est là une grande partie de l'explication du phénomène ...

J'y reviendrai plus tard, mais là il faut que je bosse :) Edité par Metalion Le 15/10/2013 à 08h57


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

Le 15/10/2013 à 14h43
Metalion :
Incorrect ^^



Le VDP peut digitaliser dans tous les modes SCREEN5 à SCREEN8.

Et je pense que c'est là une grande partie de l'explication du phénomène ...

J'y reviendrai plus tard, mais là il faut que je bosse :)




Me revoilà ... :D



Comme je le disais, le VDP V9938 peut digitaliser dans tous les modes graphiques de SCREEN5 à SCREEN8, avec à chaque fois un mode de fonctionnement adapté au nombre de bits utilisés pour coder les couleurs (voir pages 106 et 107 du V9938 Technical Data Book). Donc, les images que tu montres, pour les modes SCREEN5,6,7 sont en fait des images numérisées correctement dans ces modes graphiques, mais altérées par une visualisation en SCREEN8.



Pour les modes SCREEN10,11,12, étant donné que la fonction digitalisation n'a pas été améliorée sur le V9958 pour intégrer les modes graphiques supplémentaires, et que ceux-ci (de mémoire) sont identiques au SCREEN 8 à l'exception du codage couleur YJK, il est donc normal de ne pas voir de différences.



Je n'ai pas encore d'explication pour les modes SCREEN0,1,2,3,4 ... Mais j'y travaille ^^ Edité par Metalion Le 15/10/2013 à 14h47


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 à 15h56
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
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie