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
Merci Jipe@MsxLégend: tu vas pouvoir exploiter les 16Mo de la Playsoniq
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
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
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
TurboSEB
Membre non connecté
Conseiller Municipal
igal
Membre non connecté
Conseiller Municipal
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
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
igal
Membre non connecté
Conseiller Municipal
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
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
igal
Membre non connecté
Conseiller Municipal
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:
@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
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
igal
Membre non connecté
Conseiller Municipal
Voici le résulta une fois le SCREEN 0 recadré
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
Une fois résolu ce problème de supposés SPRITES, on se retrouve face à une vidéo en vision stéréoscopique
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
En théorie, plus le mouvement de caméra à de l'ampleur et plus l'effet de relief devrait être prononcé
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
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
Une fois résolu ce problème de supposés SPRITES, on se retrouve face à une vidéo en vision stéréoscopique
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
En théorie, plus le mouvement de caméra à de l'ampleur et plus l'effet de relief devrait être prononcé
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
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
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
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
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)
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
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
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
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
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 )
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
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 )
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
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.
EDIT (après lecture du manuel technique du V9938)
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
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.
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.
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 :
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
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à ...
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
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:
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
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
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie