MSX Village forum

La Place des Développeurs [Resolu] Vram Flash Pipeline injecter facilement des données en Vram sans aucune autre ressource!

igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 13/10/2016 à 21h10
Salut à tous.

Cela fait pas mal de temps que j'avais cette idée en tête et aujourd’hui l'idée à pris forme.

La technique du [Vram Flash Pipeline] est simple à mettre en oeuvre puisqu'il s'agit en fait d'appliquer ce qui suit:

1) Rendre visible la page de destination. [SET PAGE 1]
2) lancer la commande de numérisation instantanée [COPY SCREEN 0]

A la suite de quoi, libre à vous de manipuler les données (ici des images scrollées) comme vous le souhaitez.
Dans la vidéo qui suit, j'ai simplement synchronisé le renouvellement d'image selon la vitesse de déroulement de mon scroll.

Il est évidement possible de piloter un périphérique de type RS232 (ou autres) de sorte à flasher des "Images", du "Son" et pourquoi pas aussi des données brutes.

Dans l'exemple qui suit, j'ai travaillé en SCREEN 8.
Je n'ai pas trouvé la possibilité "d'éteindre" l'écran du MSX pour rendre "non visible" la période "Flash" mais si vous connaissez la solution, n'hésitez pas à la poster :D
Il est tout a fait possible de travailler en SCREEN 5 ou encore SCREEN 7 et ainsi de rendre "transparentes" toutes les couleurs de sorte à rendre "invisible" la période "Flash" ;)

Bref encore plein de choses à faire mais la base est posée.
J'espère que cela vous inspirera :tchin :tchin :tchin

Edité par igal Le 13/10/2016 à 21h12


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

Le 14/10/2016 à 11h06
as tu essayé avec un vrai MSX ?

sinon peut tu envoyer le programme pour que j'essaie avec mon 8280

pour l'image je me debrouillerais


:noel
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 14/10/2016 à 13h56
Salut Jipe. (Ca fait bien longtemps que mon hardware dort dans la cave :'( )

Voici le petit listing:
Code TEXT :
 
10 'save"flash001.asc",a
20 SCREEN8:VDP(10)=0:COLOR,,0:X=124:Y=100
25 SETPAGE0,0:CLS:SETPAGE1,1:CLS
30 SETPAGE1,1:COPYSCREEN0:SETPAGE0,0
40 VX=0:VY=0
50 S=STICK(0):ONS+1GOSUB100,110,120,130,140,150,160,170,180
60 COPY(VX,0)-(VX+8,211),1TO(VX,0),0
70 VX=VX+8:SETSCROLLVX+1:IFVX=256THEN30
80 GOTO50
100 PUTSPRITE0,(X,Y),1,0:RETURN
110 PUTSPRITE0,(X,Y),1,0:Y=Y-4AND255:RETURN
120 PUTSPRITE0,(X,Y),1,0:X=X+4AND255:Y=Y-4AND255:RETURN
130 PUTSPRITE0,(X,Y),1,0:X=X+4AND255:RETURN
140 PUTSPRITE0,(X,Y),1,0:X=X+4AND255:Y=Y+4AND255:RETURN
150 PUTSPRITE0,(X,Y),1,0:Y=Y+4AND255:RETURN
160 PUTSPRITE0,(X,Y),1,0:X=X-4AND255:Y=Y+4AND255:RETURN
170 PUTSPRITE0,(X,Y),1,0:X=X-4AND255:RETURN
180 PUTSPRITE0,(X,Y),1,0:X=X-4AND255:Y=Y-4AND255:RETURN


J'essais de trouver un moyen d'éteindre un bref instant l'écran du MSX juste avant COPYSCREEN0 et le rallumer juste après mais je trouve pas :( Edité par igal Le 14/10/2016 à 13h58


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

Le 14/10/2016 à 15h11
DEF USR =&H41:X=USR(0) ' éteint l'écran
DEF USR =&H44:X=USR(0) ' allume l'écran


:noel
Site web    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10316

Le 14/10/2016 à 15h48
pour que ça marche sur un vrai MSX j'ai du ajouter une ligne
26 SET VIDEO 1
comment synchronise tu l'image extérieure avec ton MSX virtuel ?


:noel
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 14/10/2016 à 16h12
L'idée est de piloter le lecteur multimédia externe par rs232 ou tout autre moyen.

Pour le moment je me suis contenté de lire une succession d'images avec "magic camera" ce qui permet d'injecter l'image par une pseudo webcam :)

Avec cette méthode, je crée des images en 256x212 que je centre dans une image de 640×480 pour tomber pile poile avec bleuemsx.

Impressionnante la vitesse de remplissage de la Vram :top

@eric: tu pourrais utiliser cette méthode pour charger tes Samples Audio à vitesse grand V.

Edit: j'ai paramètre magic camera sur "lecture d'images" puis pour vitesse de lecture j'ai mis 16 au lieu de 15 et ça tombe juste avec le temps de scrolling par pas de 8 :) Edité par igal Le 14/10/2016 à 16h18


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/10/2016 à 13h57
Salut à tous.

Savez vous si il est possible de numériser en 256x192 au lieu de 256x212?

L'idée est de réduire au minimum le temps d'exécution de la commande [COPY SCREEN].


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

Le 16/10/2016 à 14h11
il y a un paramétre dans le registre 9 du VDP

en basic c'est le registre 10 bien connu pour passer de 50Hz a 60Hz

pour 256 x 192 en 60 Hz VDP(10)=128
pour 256 x 192 en 50 Hz VDP(10)=130

j'ai essayé avec le screen 8 et la digit reste en 212 x 256


:noel
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 16/10/2016 à 14h39
@Jipe: De mon coté, ce matin j'ai essayé cela.

1) J'ai créé avec BMP2MSX une image SC8 en cochant "192 Lines"
2) j'ai chargé l'image par BLOAD"IMAGE.SC8",S pour basculer le MSX en 192 ce qui fonctionne parfaitement.
3) Dès que COPY SCREEN est utilisé, le "SCREEN" s'agrandit, l'image précédemment préchargée remonte de 20 lignes dans le même temps que le SCREEN s'agrandit (le SCREEN rebascule en 212 lignes :()

Faudra que je fasse les essais suivants:

1) Je charge un image en 256X192
2) Je lance la commande COPY SCREEN

a la suite de quoi, si le SCREEN bascule en 256 alors COPY SCREEN est "calibré en 256X212" ce qui serait très dommage :\'(


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 18/10/2016 à 14h07
@jipe: Concernant la numérisation en 256x192, Nirikki à donné la commande qui va bien à savoir:
VDP(10)=VDP(10)AND127

La digitalisation en mode 192 lignes fonctionne très bien.

Une autre approche qui devrait apporter un plus énorme serait de pouvoir numériser en 256x256 :)

Est ce que tu aurais une idée ou encore une piste sur laquelle travailler :D

Edit: voici le résulta en 256x192:


C'est 127 et non 128 :oups Edité par igal Le 19/10/2016 à 10h13


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 27/10/2016 à 12h26
Voici une autre vidéo avec différents testes de vitesses.



Le scroll horizontal est testé avec une progression de...
4 pixels pour 32 dixièmes de secondes par page déroulée.
8 pixels pour 16 dixièmes de seconde par page déroulée.
16 pixels pour 8 dixièmes de seconde par page déroulée.
32 pixels pour 4 dixièmes de seconde par page déroulée.

Pour les curieux, voici le listing:
Code TEXT :
 
10 'save"flash004.asc",a
20 SCREEN8,,,,,0:SETVIDEO2,1,0,1,3,0,1:VDP(10)=0:COLOR1,1,0:X=200:Y=200:T=0
21 'OUT&HF6,235:SETVIDEO1'SECAM
22 OUT&HF6,251:SETVIDEO1'PAL
23 'OUT&B11110110,&b11011111:SETVIDEO1'TRANSPARENCE
24 'VDP(9)=VDP(9)OR2:'VDP(9)=VDP(9)AND&HDF:'AVEC OU SANS SPRITES
25 SETPAGE0:CLS:SETPAGE1:CLS:BLOAD"192.sc8",S
26 SETVIDEO1:SV=20:SETADJUST(0,-0):COLOR,,255
30 VDP(2)=&B00011111:VDP(24)=0:COPYSCREEN:VDP(2)=&B00111111
40 VDP(10)=VDP(10)AND127:SH=4:VX=0':VY=0
50 S=STICK(0):ONS+1GOSUB100,110,120,130,140,150,160,170,180
60 PUTSPRITE0,(X,Y),1,0:COPY(VX,0)-(VX+SH,211),0TO(VX,0),1
70 VX=VX+SH:SETSCROLLVX+1:VDP(24)=SVAND255:IFVX=256THEN:GOTO30
80 GOTO50
100 RETURN
110 IFSTRIG(0)THEN112ELSERETURN
112 IFVDP(24)>0THENSV=0:Y=Y-8:PUTSPRITE0,(X,Y),1,0:Y=Y-16:PUTSPRITE0,(X,Y),1,0:Y=Y-16:PUTSPRITE0,(X,Y),1,0:Y=Y-16:PUTSPRITE0,(X,Y),1,0:Y=Y+8:PUTSPRITE0,(X,Y),1,0:Y=0+8:PUTSPRITE0,(X,Y),1,0:RETURN
119 RETURN
120 Y=Y-4AND255:X=X+4AND255:SV=SV-1:RETURN
130 X=X+4AND255:IFSTRIG(0)THEN132ELSERETURN
132 VDP(19)=&B00001001:RETURN
140 Y=Y+4AND255:X=X+4AND255:SV=SV+1:RETURN
150 IFSTRIG(0)THEN152ELSERETURN
152 IFVDP(24)=0THENSV=20:RETURN
159 RETURN
160 Y=Y+4AND255:X=X-4AND255:SV=SV+1:RETURN
170 X=X-4AND255:IFSTRIG(0)THEN172ELSERETURN
172 VDP(19)=&B00000111:RETURN
180 Y=Y-4AND255:X=X-4AND255:SV=SV-1:RETURN
 


1) La numérisation des images est correctement centrée avec des images en 256X212 centrées sur un fond blanc en 320X240 :p
2) VDP(10)=VDP(10)AND127 "réduit la fenêtre visible en 256X192". Retirez cette commande pour laisser l'affichage en 256X212 ;)
3) Les commandes SETPAGE0, COPYSCREEN et SETPAGE1 semblent prendre 1/60ième de seconde chacune. J'ai donc remplacé SETPAGE par VDP(2)=&B00111111 ce qui économise 2X1/60ième de seconde par "Vram Flash Pipeline" :D

Si vous savez comment remplacer COPYSCREEN par une commande de type VDP(?)=????, peut être que l'on pourrait économiser encore 1/60ième de seconde sur le temps de la méthode [Vram Flash Pipeline].

Edit: La meme chose en 256X212

https://www.youtube.com/watch?v=9IwbPFjOOAE

Pour le coup, j'ai retiré la commande de réajustement Vertical VDP(24)=0 lors du flash ce qui est encore un peu moins agressif pour les yeux :oups Edité par igal Le 27/10/2016 à 13h11


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