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
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
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
Edité par igal Le 13/10/2016 à 21h12
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
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
Edité par igal Le 13/10/2016 à 21h12
igal
Membre non connecté
Conseiller Municipal
Salut Jipe. (Ca fait bien longtemps que mon hardware dort dans la cave :'( )
Voici le petit listing:
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
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
igal
Membre non connecté
Conseiller Municipal
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
@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
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
@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
igal
Membre non connecté
Conseiller Municipal
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
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
igal
Membre non connecté
Conseiller Municipal
@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
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
igal
Membre non connecté
Conseiller Municipal
@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
Edit: voici le résulta en 256x192:
C'est 127 et non 128 Edité par igal Le 19/10/2016 à 10h13
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
Edit: voici le résulta en 256x192:
C'est 127 et non 128 Edité par igal Le 19/10/2016 à 10h13
igal
Membre non connecté
Conseiller Municipal
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:
1) La numérisation des images est correctement centrée avec des images en 256X212 centrées sur un fond blanc en 320X240
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"
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 Edité par igal Le 27/10/2016 à 13h11
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
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"
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 Edité par igal Le 27/10/2016 à 13h11
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie