La Place des Développeurs [RESOLU] VDP(27) le Scrolling hardware Horizontal Comment alimenter de nouveaux décors VDP (27)?
Reprise du message précédent
Si tu regardes attentivement les enregistrements que jais fais, tu verras qu'il y a des ralentissement de façon "cyclique". Je pense que la majeur partie de la lenteur à "retrouver" le fichier à charger est en réalité causée par "translation" en binaire du nom de fichier.1 fichier d'un caractère dont le nom est est contenu entre Zéro et F s'
Tels que:
00000000 pour le fichier 0.SCC
ou encore:
00001111 pour le fichier F.SCC
si l'on procédé avec des fichiers nommés avec plus d'un caractères ou encore un seul caractère supérieur à F on augmenterait automatiquement le nombre d'octets nécessaires à la machine pour le localiser.
Ça reste des suppositions, mais ça tient la route je pense. Edité par igal Le 21/09/2014 à 14h26
igal :
L'idée étant de ne plus être ralenti par le temps de recherche des fichiers.
Ca ne changera strictement rien.
Tu refuses l'évidence depuis le début.
Le MSX a besoin d'un temps de recherche et de chargement du fichier, que tu ne pourras pas diminuer ou exploiter.
Et il n'a RIEN à voir avec l'emplacement, le répertoire ou le nom.
Je te l'ai expliqué mais tu ne veux pas l'entendre.
GDX te le dit, mais tu ne veux pas l'entendre.
Va te renseigner sur le fonctionnement de la FAT12 et tu comprendras ce qu'on veux te dire.
igal :
(Peut être qu'en déplaçant la zone des Sprite sur une autre page ces derniers ne subirait plus ces accoups
Rien à voir.
Dans tous les cas, tu devras compenser le déplacement des sprites.
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)
Pour en avoir le coeur net, il suffit de lancer un "timer" juste avant de charger le seul et unique fichier suivant.
10 timer on
20 bload "zzzzzzzz. scc", S
30 timer off
40 ? Timer
Puis de renommer "zzzzzzzz.scc", S en "0.scc"
Il suffit ensuite de lancer:
10 timer on
20 bload "0.scc", S
30 timer off
40 ? Timer
Jipe avait donné une solution simple pour créer un timer mais je sais plus trop ou!
Nous somme d'accord que "zzzzzzzz.scc" et "0.scc" sont un seul et unique fichier. Seul son nom à changé.
pour aller plus loin on peut même faire le même test avec la condition que ce fichier soit noyé au milieu de centaines d'autres fichiers et enfin un dernier test avec "0.scc" au milieu de 15 autres fichiers nommés de 1 à F.
non?! Edité par igal Le 21/09/2014 à 16h59
10 timer on
20 bload "zzzzzzzz. scc", S
30 timer off
40 ? Timer
Puis de renommer "zzzzzzzz.scc", S en "0.scc"
Il suffit ensuite de lancer:
10 timer on
20 bload "0.scc", S
30 timer off
40 ? Timer
Jipe avait donné une solution simple pour créer un timer mais je sais plus trop ou!
Nous somme d'accord que "zzzzzzzz.scc" et "0.scc" sont un seul et unique fichier. Seul son nom à changé.
pour aller plus loin on peut même faire le même test avec la condition que ce fichier soit noyé au milieu de centaines d'autres fichiers et enfin un dernier test avec "0.scc" au milieu de 15 autres fichiers nommés de 1 à F.
non?! Edité par igal Le 21/09/2014 à 16h59
sylvain :
Dites-moi si je dis des bêtises, mais ne serait-il pas plus efficace de lire des secteurs disque pour lire les bribes?
je l'ai déjà proposé. Cela dit, je ne suis pas certain que ça doit plus rapide dans le cas d'un MSX.
J'ai lancé le teste suivant:
A l’intérieur d'un répertoire contenant 64 fichiers j'ai nommé l'un d'eux en
O.SCC
0 SCREEN 12,1
1 TME = 0
2 BLOAD"0.SCC"
3 X=X+1:IF X =100 THEN 4 ELSE 2
4 SCREEN 0 : PRINT TIME
5 GOTO 5
=> TIME = 681
Ensuite, j'ai fais:
NAME "0.SCC" AS "ZZZZZZZZ.SCC"
Puis j'ai relancé le programme:
0 SCREEN 12,1
1 TME = 0
2 BLOAD"ZZZZZZZZ.SCC"
3 X=X+1:IF X =100 THEN 4 ELSE 2
4 SCREEN 0 : PRINT TIME
5 GOTO 5
=> TIME = 758
Pour savoir si le nombre de fichiers étaient en corrélation avec la différence dans les temps d'accès, j'ai créé...
REPERTOIRE ZERO / 0.SCC
TIME => 662
Puis le même teste avec
REPERTOIRE ZERO / ZZZZZZZZ.SCC
TIMER => 738
Notez qu'il est plus rapide de charger un FICHIER 0.SCC au milieu de 63 autres fichiers contenus dans un répertoire que de charger un ZZZZZZZZ.SCC placé tout seul dans un répertoire
On peut donc raisonnablement penser que OUI, le nom du fichier influe sur le temps d'accès
Je ne sais pas faire le ratio et donc affirmer avec justesse le Pourcentage gagné, mais il est flagrant à l'écran....
Métalion..... =>
Edité par
igal
Le 22/09/2014 à 17h03
A l’intérieur d'un répertoire contenant 64 fichiers j'ai nommé l'un d'eux en
O.SCC
0 SCREEN 12,1
1 TME = 0
2 BLOAD"0.SCC"
3 X=X+1:IF X =100 THEN 4 ELSE 2
4 SCREEN 0 : PRINT TIME
5 GOTO 5
=> TIME = 681
Ensuite, j'ai fais:
NAME "0.SCC" AS "ZZZZZZZZ.SCC"
Puis j'ai relancé le programme:
0 SCREEN 12,1
1 TME = 0
2 BLOAD"ZZZZZZZZ.SCC"
3 X=X+1:IF X =100 THEN 4 ELSE 2
4 SCREEN 0 : PRINT TIME
5 GOTO 5
=> TIME = 758
Pour savoir si le nombre de fichiers étaient en corrélation avec la différence dans les temps d'accès, j'ai créé...
REPERTOIRE ZERO / 0.SCC
TIME => 662
Puis le même teste avec
REPERTOIRE ZERO / ZZZZZZZZ.SCC
TIMER => 738
Notez qu'il est plus rapide de charger un FICHIER 0.SCC au milieu de 63 autres fichiers contenus dans un répertoire que de charger un ZZZZZZZZ.SCC placé tout seul dans un répertoire
On peut donc raisonnablement penser que OUI, le nom du fichier influe sur le temps d'accès
Je ne sais pas faire le ratio et donc affirmer avec justesse le Pourcentage gagné, mais il est flagrant à l'écran....
Métalion..... =>
Edité par
igal
Le 22/09/2014 à 17h03
je vais dire une connerie : et si ta bribe ne faisait qu'une ligne
le bload étant plus court ça permettra de faire autre chose entre deux
en suite si tu n'utilise pas tout l'écran mais que tu laisse une bande noire de chaque coté ça va encore accélerer car le bload sera encore plus petit
le bload étant plus court ça permettra de faire autre chose entre deux
en suite si tu n'utilise pas tout l'écran mais que tu laisse une bande noire de chaque coté ça va encore accélerer car le bload sera encore plus petit
Possible que je réduise encore le nombre de lignes composants la bribe à deux lignes.
En ne faisant sue deux lignes au lieu de quatre on obtiendrait ceci:
Avantages.
Une seule commande vdp (24) = vdp (24) + 2 and 255 (au lieu de deux fous cette commande).
La bribe devrait peser 515 octets et donc tenir dans un seul cluster ( au lieu de 1031 octets sur deux clusters)
Les msx rend la main deux fois plus souvent et deux fois plus vite qu auparavant.
Le mouvement des spirites peut être deux fois plus fluide sans perte de vitesse.
Concernant la longueur des décors à charger pour un gain de vitesse:
Je souhaite trouver une solution "additionnelle" au procédé actuel.
Je mexplique:
Le msx est capable de créer des blocs graphiques affichables comme si elle étaient tressées dans un Canevas de la taille de l'écran.
Le contrainte de cette méthode est qu'il est possible de créer ces blocs n'importe où sur le canevas mais en déterminant les "longitudes" de début et de fin du tressage, mais pas la latitude!
Ou est le problème me direz vous?
Cette technique permet donc de créer des "bribes" horizontales mais pas de bribes verticales

Dans l'absolu, il faudrait ouvrir une bribe et voir quel est la technique utilisée pour ces bribes horizontales et voir si il est possible de les manipuler "genetiquement" pour créer artificiellement des Bribes verticales.
Voici un tout premier jet...
il sagit de Metal Slug 2 Stage 1.
comme vous pouvez le voir, il manque 1/2 page de transiion entre chaque page. Il s'agit donc de la prochaine étape.
http://youtu.be/eXV-C-FBiSA Edité par igal Le 05/10/2014 à 12h43
En ne faisant sue deux lignes au lieu de quatre on obtiendrait ceci:
Avantages.
Une seule commande vdp (24) = vdp (24) + 2 and 255 (au lieu de deux fous cette commande).
La bribe devrait peser 515 octets et donc tenir dans un seul cluster ( au lieu de 1031 octets sur deux clusters)
Les msx rend la main deux fois plus souvent et deux fois plus vite qu auparavant.
Le mouvement des spirites peut être deux fois plus fluide sans perte de vitesse.
Concernant la longueur des décors à charger pour un gain de vitesse:
Je souhaite trouver une solution "additionnelle" au procédé actuel.
Je mexplique:
Le msx est capable de créer des blocs graphiques affichables comme si elle étaient tressées dans un Canevas de la taille de l'écran.
Le contrainte de cette méthode est qu'il est possible de créer ces blocs n'importe où sur le canevas mais en déterminant les "longitudes" de début et de fin du tressage, mais pas la latitude!
Ou est le problème me direz vous?
Cette technique permet donc de créer des "bribes" horizontales mais pas de bribes verticales

Dans l'absolu, il faudrait ouvrir une bribe et voir quel est la technique utilisée pour ces bribes horizontales et voir si il est possible de les manipuler "genetiquement" pour créer artificiellement des Bribes verticales.
Voici un tout premier jet...
il sagit de Metal Slug 2 Stage 1.
comme vous pouvez le voir, il manque 1/2 page de transiion entre chaque page. Il s'agit donc de la prochaine étape.
http://youtu.be/eXV-C-FBiSA Edité par igal Le 05/10/2014 à 12h43
igal :
Métalion..... =>



Il faut savoir reconnaître ses erreurs.
A la lumière de ces tests, je dois bien te concéder que le nom du fichier semble avoir une influence sur le temps d'accès.
Autant pour moi.
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 :

Il faut savoir reconnaître ses erreurs.
A la lumière de ces tests, je dois bien te concéder que le nom du fichier semble avoir une influence sur le temps d'accès.
Autant pour moi.
igal :
Métalion..... =>



Il faut savoir reconnaître ses erreurs.
A la lumière de ces tests, je dois bien te concéder que le nom du fichier semble avoir une influence sur le temps d'accès.
Autant pour moi.
en fait ça dépend aussi des circonstances des tests.
Il me semble aussi que les fichiers qui sont créés/copiés en premier sur un floppy sont accessibles plus rapidement que ceux qui sont copiés/créés en dernier. Edité par ericb59 Le 23/09/2014 à 20h33
Oui tout à fait Eric, sur les floppy les données sont organisés par pistes et secteur concentrique 
Sans rentrer dans les détails technique : la piste au centre est la piste ayant le plus grands numéro la piste au bord extérieur du floppy est la numéro 0 .
Le catalogue ce situe vers le secteur 8 ( à vérifier pour le MSX-DOS) et donc si ton fichier est crée en premier il sera proche de ce secteur si ton fichier est crée après 50 autres il seras très loin, donc la tête du floppy mettra plus de temps pour aller chercher les données de ce fichier que celui qui est crée près du directory
Après il faut étudier le fonctionnement des floppy MSX mais ca doit être ca

Sans rentrer dans les détails technique : la piste au centre est la piste ayant le plus grands numéro la piste au bord extérieur du floppy est la numéro 0 .
Le catalogue ce situe vers le secteur 8 ( à vérifier pour le MSX-DOS) et donc si ton fichier est crée en premier il sera proche de ce secteur si ton fichier est crée après 50 autres il seras très loin, donc la tête du floppy mettra plus de temps pour aller chercher les données de ce fichier que celui qui est crée près du directory

Après il faut étudier le fonctionnement des floppy MSX mais ca doit être ca

Edit: Pour une meilleur lisibilité, j'ai replacé les vidéos précédentes dans le sujet à propos du Scroll Vertical VDP(24).
Pour ce qui est du déplacement horizontal, c'est assez compliqué mais j'y travaille...
http://youtu.be/-JowqPcEy_s
Petit correctif sur le scroll horizontal:
http://youtu.be/zldqVwkyu1k
Voici le listing:
Pour ce qui est du déplacement horizontal, c'est assez compliqué mais j'y travaille...
http://youtu.be/-JowqPcEy_s
Petit correctif sur le scroll horizontal:
http://youtu.be/zldqVwkyu1k
Voici le listing:
Code TEXT :
Edité par
igal
Le 04/10/2014 à 21h13
10 'SAVE"HPLAY13.asc",A
20 'PLAYER DE BRIBES HORIZONTAL [11X(4X256)]+[(53X(4X256)]
30 VDP(10)=0:SCREEN 12,,,,,1:X=100:Y=100
40 IF P=0 THEN CALL CHDIR ("H-04-05"):SET PAGE 0,1:'BLOAD"00000005.SCC",S:CALL CHDIR (".."):CALL CHDIR ("H-00-01")
41 IF P=1 THEN CALL CHDIR ("H-00-01"):GOTO49
42 IF P=2 THEN CALL CHDIR ("H-02-03"):GOTO49
43 IF P=3 THEN CALL CHDIR ("H-04-05"):GOTO49
44 IF P=4 THEN CALL CHDIR ("H-06-07"):GOTO49
45 IF P=5 THEN CALL CHDIR ("H-08-09"):GOTO49
46 IF P=6 THEN CALL CHDIR ("H-10-11"):GOTO49
47 IF P=7 THEN CALL CHDIR ("H-12-13"):GOTO49
48 IF P=8 THEN CALL CHDIR ("H-14-15"):P=0:GOTO49
49 SET PAGE 0,1
50 BLOAD"00.scc",S,0-11264:GOSUB 10000
60 BLOAD"01.scc",S,0-11264:GOSUB 10000
70 BLOAD"02.scc",S,0-11264:GOSUB 10000
80 BLOAD"03.scc",S,0-11264:GOSUB 10000
90 BLOAD"04.scc",S,0-11264:GOSUB 10000
100 BLOAD"05.scc",S,0-11264:GOSUB 10000
110 BLOAD"06.scc",S,0-11264:GOSUB 10000
120 BLOAD"07.scc",S,0-11264:GOSUB 10000
130 BLOAD"08.scc",S,0-11264:GOSUB 10000
140 BLOAD"09.scc",S,0-11264:GOSUB 10000
150 BLOAD"10.scc",S,0-11264:GOSUB 10000
160 BLOAD"11.scc",S:GOSUB 10000
170 BLOAD"12.scc",S:GOSUB 10000
180 BLOAD"13.scc",S:GOSUB 10000
190 BLOAD"14.scc",S:GOSUB 10000
200 BLOAD"15.scc",S:GOSUB 10000
210 BLOAD"16.scc",S:GOSUB 10000
220 BLOAD"17.scc",S:GOSUB 10000
230 BLOAD"18.scc",S:GOSUB 10000
240 BLOAD"19.scc",S:GOSUB 10000
250 BLOAD"20.scc",S:GOSUB 10000
260 BLOAD"21.scc",S:GOSUB 10000
270 BLOAD"22.scc",S:GOSUB 10000
280 BLOAD"23.scc",S:GOSUB 10000
290 BLOAD"24.scc",S:GOSUB 10000
300 BLOAD"25.scc",S:GOSUB 10000
310 BLOAD"26.scc",S:GOSUB 10000
320 BLOAD"27.scc",S:GOSUB 10000
330 BLOAD"28.scc",S:GOSUB 10000
340 BLOAD"29.scc",S:GOSUB 10000
350 BLOAD"30.scc",S:GOSUB 10000
360 BLOAD"31.scc",S:GOSUB 10000
370 BLOAD"32.scc",S:GOSUB 10000
380 BLOAD"33.scc",S:GOSUB 10000
390 BLOAD"34.scc",S:GOSUB 10000
400 BLOAD"35.scc",S:GOSUB 10000
410 BLOAD"36.scc",S:GOSUB 10000
420 BLOAD"37.scc",S:GOSUB 10000
430 BLOAD"38.scc",S:GOSUB 10000
440 BLOAD"39.scc",S:GOSUB 10000
450 BLOAD"40.scc",S:GOSUB 10000
460 BLOAD"41.scc",S:GOSUB 10000
470 BLOAD"42.scc",S:GOSUB 10000
480 BLOAD"43.scc",S:GOSUB 10000
490 BLOAD"44.scc",S:GOSUB 10000
500 BLOAD"45.scc",S:GOSUB 10000
510 BLOAD"46.scc",S:GOSUB 10000
520 BLOAD"47.scc",S:GOSUB 10000
530 BLOAD"48.scc",S:GOSUB 10000
540 BLOAD"49.scc",S:GOSUB 10000
550 BLOAD"50.scc",S:GOSUB 10000
560 BLOAD"51.scc",S:GOSUB 10000
570 BLOAD"52.scc",S:GOSUB 10000
580 BLOAD"53.scc",S:GOSUB 10000
590 BLOAD"54.scc",S:GOSUB 10000
600 BLOAD"55.scc",S:GOSUB 10000
610 BLOAD"56.scc",S:GOSUB 10000
620 BLOAD"57.scc",S:GOSUB 10000
630 BLOAD"58.scc",S:GOSUB 10000
640 BLOAD"59.scc",S:GOSUB 10000
650 BLOAD"60.scc",S:GOSUB 10000
660 BLOAD"61.scc",S:GOSUB 10000
670 BLOAD"62.scc",S:GOSUB 10000
680 BLOAD"63.scc",S:GOSUB 10000
1340 CALL CHDIR(".."):P=P+1:GOTO40
10000 VDP(27)=(N+7)/8:VDP(28)=-NAND7:S=STICK(0):ONS+1 GOSUB 11000,12000,13000,14000,15000,16000,17000,18000,19000:RETURN
10010 '
11000 COPY(H,0)-(H+3,212),1TO(H,0),0:H=H+4AND255:N=N+4AND255:'STATIQUE
11010 RETURN
11020 '
12000 'HAUT
12010 Y=Y-8:RETURN
12020 '
13000 'DIAGO HAUT DROITE
13010 Y=Y-16:VDP(27)=VDP(27)+1AND255:RETURN
13020 '
14000 'DROITE
14010 VDP(27)=VDP(27)+1AND255:RETURN
14020 '
15000 'DIAGO DROITE BAS
15010 Y=Y+16:VDP(27)=VDP(27)+1AND255::RETURN
15020 '
15030 '
16000 'BAS
16010 Y=Y+8:RETURN
16020 '
17000 'DIAGO BAS GAUCHE
17010 Y=Y+16:VDP(27)=VDP(27)+255AND255:RETURN
17020 '
18000 'GAUCHE
18010 VDP(27)=VDP(27)+255AND255:RETURN
18020 '
19000 'DIAGO HAUT GAUCHE
19010 VDP(27)=VDP(27)+255AND255:Y=Y-16:RETURN
c'est pas mal. Les petit beug d'affichage que tu as , c'est du a la zone de sprite qu'il faut effacer avant de lancer ton defilement. Pour ma demo de terminator, j'ai eu le meme probleme en screen 5
regarde au debut dans la demo terminator 2 que j'ai fait debut 2013
https://www.youtube.com/watch?v=958LcBofDQU&list=UU2EsXnk_Wq-Kydny2_zpw1A
je fait defiler le t800 sur la hauteur de 3 ecrans a la vertical
En tour cas je sais le boulot que ça represente de rassembler les tiles, chapeau !! et tu me feras des cours pour le screen 12
Edité par
MSXlegend
Le 04/10/2014 à 12h04
regarde au debut dans la demo terminator 2 que j'ai fait debut 2013
https://www.youtube.com/watch?v=958LcBofDQU&list=UU2EsXnk_Wq-Kydny2_zpw1A
je fait defiler le t800 sur la hauteur de 3 ecrans a la vertical
En tour cas je sais le boulot que ça represente de rassembler les tiles, chapeau !! et tu me feras des cours pour le screen 12
Edité par
MSXlegend
Le 04/10/2014 à 12h04
Mon Github -> github.com/msxlegend
challenge 2013 -> neodream MSX 2013
Concepteur du -> KCX Bluetooth transmitter
Demo Terminator2 T2.zip
Lut Légend.
En fait les soucis posés par la zone de sprites ne concerne que le SCROLL vertical VDP(24) => http://www.msxvillage.fr/forum/topic.php?id=2491#m58825
En fait il suffirait (au conditionnel) de déplacer la Zone des Sprites pour éluder ce problème. Ceci viendra plus tard lorsque j'aborderai le sujet des psirtes
Pour ce qui est du SCROLL horizontal, aussi incroyable que cela puisse paraître, j'ai quasiment résolu le sujet puisque je pense avoir trouvé la solution.
En effet, les bribes sont de bandes Horizontales chargées par BLOAD sur la Page 1 et sont ensuite copiées depuis la page 1 vers la page 0 verticalement.
Il reste deux petits détails à creuser puis je posterai une explication en image sous forme de schéma.
Cette technique ouvre grand la porte à une variété illimité de graphismes en scrolling horizontal
Edité par
igal
Le 05/10/2014 à 17h13
En fait les soucis posés par la zone de sprites ne concerne que le SCROLL vertical VDP(24) => http://www.msxvillage.fr/forum/topic.php?id=2491#m58825
En fait il suffirait (au conditionnel) de déplacer la Zone des Sprites pour éluder ce problème. Ceci viendra plus tard lorsque j'aborderai le sujet des psirtes
Pour ce qui est du SCROLL horizontal, aussi incroyable que cela puisse paraître, j'ai quasiment résolu le sujet puisque je pense avoir trouvé la solution.
En effet, les bribes sont de bandes Horizontales chargées par BLOAD sur la Page 1 et sont ensuite copiées depuis la page 1 vers la page 0 verticalement.
Il reste deux petits détails à creuser puis je posterai une explication en image sous forme de schéma.
Cette technique ouvre grand la porte à une variété illimité de graphismes en scrolling horizontal

Edité par
igal
Le 05/10/2014 à 17h13
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie




