MSX Village forum

La Place des Développeurs [RESOLU] VDP(27) le Scrolling hardware Horizontal Comment alimenter de nouveaux décors VDP (27)?

Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 12/09/2014 à 10h42

Reprise du message précédent

igal :
Est ce qu'en créant le "Méga-fichier" dont tu parles, on pourra profiter des "vides" qui font parties intégrante des "Bribes" et ainsi ne pas avoir à donner d'adresse de départ et arrivée?




On ne comprends pas toujours ce que tu veux dire ou ce que tu veux faire, igal ... :s :lol



Je pense que ce que voulais expliquer z80, c'est qu'au lieu de créer 594 fichiers, tu peux aussi charger directement dans le fichier d'origine les morceaux dont tu as besoin. Le principe est de dire au BASIC : j'ouvre le fichier untel et une fois qu'il est ouvert en lecture, je charge uniquement la partie de Y à Y+7, puis uniquement la partie Y+8 à Y+15, etc ...



Par contre, je ne suis pas sur que ce soit plus rapide ... C'est même probablement plus lent, car chaque commande BASIC ne charge qu'un octet à la fois.



Tu peux m'envoyer la disquette par MP ? Edité par Metalion Le 12/09/2014 à 10h43


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 12/09/2014 à 19h11
Voici le zip ui contien le nécessaire avec les sources :)

METALION.zip

Pour faire simple dans l'explication:

Je génère un scrool sans avoir à donner quelques coordonnées que ce soit. Ni dans la partie a charger, ni dans la partie à coller à l'écran.
Sans la moindre coordonnée, je créer un scrooling :top

L'idée est produire un scrooling le plus aboutis qu'il puisse être en Basic.
Que les décors puissent être changés/ modifiés le plus simplement du monde.

L'astuce des Bribes d'image apporte une solution complète à tous ces problèmes de coordonnées à devoir exprimer.
Le seul problème selon moi est de trouver le meilleur moyen au MSX de localiser un fichier à charger.

Le temps que met le MSX à retrouver le bon fichier bloque tout le prcessus et donc la possibilité au joueur de déplacer un sprite pendant cette latence :(

Le fait de pouvoir déplacer la table des SPRITES est une super solution. Cela signifie que l'on pourra profiter de SPRITES avec tous les avantages que cela représente :top

Merci de ton aide.

Encore une chose.. Si tu veux t'y coller, pars sur l'idée que les BRIBES à charger ne feront plus que 4 X 256 et non plus 8 X 256.

Ainsi, la boucle principale devra charger....

[11 X (4 X256)] chargés par BLOAD"XXXXXXXX.SCC",S,0-44
suivi de la seconde zone...
[ 53 X (4 X256)] chargés par BLOAD"XXXXXXXX.SCC",S

Les Images sources restent les mêmes à savoir..
IMAGE0.BMP (44X256)
suivie de...
IMAGE1.BMP (212X526)
Ces deux images sont les gabarits de la source découpées sur PC.

Ensuite...Je convertis avec BMP2MSX

Et enfin, je dois modifier mon GENERAT.ASC pour qu'il créer des Bribes de 4 X 256 et non plus des Bribes de 8 X 256.

Enregardant les fichiers joints, tu comprendras mieux.

Bonne soirée et merci pour l'aide ^^


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

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 12/09/2014 à 21h15
s'cuze moi Igal, mais je viens seulement de comprendre ce que tu souhaitais faire...

Je comprend vite ! Mais faut m'expliquer longtemps ! :lol

En fait tu veux faire un scolling avec chargement progressif des images... :glass
Sur Floppy j'suis pas certain que ça tienne la route... Mais dans une ROM rapide pourquoi pas....

cela dit, je ne saisi pas comment tu veux générer le scoll ? Tu sera bien obligé à un moment ou un autre d'utiliser la fonction SCROLL du basique pour faire la palce à ta nouvelle bride... Edité par ericb59 Le 12/09/2014 à 21h16


banniere-ericb59e
Site web    
6502man Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 19/08/2013 à 18h14

Messages: 815

Le 12/09/2014 à 23h48
Moi aussi je n'avais pas compris exactement le but recherché d'Igal :oups

En faite c'est un scrolling en streaming c'est ca ?


Site web    
z80 Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 17/05/2013 à 22h52

Messages: 956

Le 13/09/2014 à 06h27
Oui


TurboR GT (1Mo), CANON V20! ( en kit, modif 2+ en cours) :top
Pas encore retrouvés: V9990, Grafx9000, SUNRISE IDE 2x CF, SUNRISE MOONSOUND, FM PAC, MUSIC MODULE, NMS8280, SD SNATCHER,... :\'(
   
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 15/09/2014 à 00h02
Effectivement c'est une sorte de streaming ;)
Chaque bribe à charger ne pèse qu'un ou deux Ko

Voici un dessin en espérant que c'est plus clair :p

Désolé pour la taille du graphique mais c'est pour résumer ce qui se passe dans ma tête :fou





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

Le 15/09/2014 à 08h40
igal :
Merci de ton aide


Je vais regarder ça aujourd'hui.

Pas eu le temps ce weekend.



igal :
Le seul problème selon moi est de trouver le meilleur moyen au MSX de localiser un fichier à charger. Le temps que met le MSX à retrouver le bon fichier bloque tout le prcessus et donc la possibilité au joueur de déplacer un sprite pendant cette latence :(


Malheureusement, le temps de chargement des fichiers sur disquette restera toujours un handicap. Je veux bien t'aider dans ton développement de ce scrolling en BASIC, mais ne t'attends pas à pouvoir faire un jeu viable.



J'ai développé un scrolling avec le registre 24 dans un embryon de jeu il y a quelques années. Cela marchait très bien, mais toutes les "bribes", comme tu les appelles, venaient directement de la RAM, et étaient gérées en assembleur.



Cela aiderai probablement aussi si tu étais plus raisonnable par rapport au mode graphique. Les images en SCREEN12 sont assez volumineuses, et prennent donc beaucoup plus de place qu'une image en SCREEN5 par exemple.



igal :
Encore une chose.. Si tu veux t'y coller, pars sur l'idée que les BRIBES à charger ne feront plus que 4 X 256 et non plus 8 X 256.


OK.



PS : une dernière chose : on dit "scroll" et non pas "scrool" ;) Edité par Metalion Le 15/09/2014 à 09h37


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/09/2014 à 12h19
Lut Métalion.

Actuellement, toutes les Bribes sont stockées dans la CF virtuelle de BlueMsx.

La méthode mise en oeuvre pour le scroll nécessite de distinguer les séries de Bribes larges de 8 Pixels des celles larges de 4 Pixels.
Chaque Bribes de 8X256 Pixels en SCREEN 12 pèsent 2 055 Octets.
Remplir l'écran + Zone réservée soit 256X256 nécessite [5 X (8X256) + 1 X (4X256)] + [26 X (8X256) + 1 X (4X256)]
Soit 33 Fichiers à charger pour remplir la totalité des 256X256

La méthode envisagée pour le scroll ne contient plus que des Bribes larges de 4 Pixels et ne nécessitent plus de les distinguer :top
Les Bribes de 4X256 Pixels en SCREEN 12 pèsent 1 031 Octets.
Remplir l'écran + Zone réservée soit 256X256 nécessite [11 X (4X256] +[53 X (4X256)]
Cette méthode nécessite deux fois plus de fichiers pour couvrir les 256X256 :oups
Soit 64 Bribes des 1031 Octets
[(64 Bribes X 1031octets) = 65984 Octets / 1024 Octets = 64,4375 Ko
Les Deux zones d'affichages additionnées (Soit 256 X256) nécessitent 64,4375Ko.

En extrapolant, on peut en tirer les conclusions hypothèses suivantes:
La plus grande adresse accessible sur MSX (8Bits) étant FFFF soit 65535.
La capacité du VDP à afficher 256X256 à peut être été bridée en la divisant en deux zones distinctes:
1) La zone principale 212 X 256 exploitables avec les adresses 65535 (FFFF)
2) La zone en bas de l'écran qui fait 44 X 256 accessible simplement avec une Valeur Négative pouvant prendre comme point de référence la ligne ZERO et ou l'on accède à la dernière ligne de cette zone par...
BLOAD"FICHIER.SCC",S,[b]0-44 (Pour accéder à la ligne accolée à la ligne 212)
BLOAD"FICHIER.SCC",S,[b]0-43
Etc...Jusqu'à
BLOAD"FICHIER.SCC",S,[b]0-1

J'ai pas essayé, mais peut être qu'il est possible d'accéder à cette zone avec une valeur Positive du genre...
BLOAD"FICHIER.SCC",S,212+1 (Pour accéder à la ligne accolée à la ligne 212)
BLOAD"FICHIER.SCC",S,212+2
Etc...Jusqu'à
BLOAD"FICHIER.SCC",S,212+44

@Métalion;
J'ai pensé à séparer les bribes par groupes/Répertoires:

REPERTOIRE 0
00000000.SCC
00000001.SCC
Etc....
00000064.SCC

REPERTOIRE 1
00000000.SCC
00000001.SCC
Etc....
00000064.SCC

REPERTOIRE 2
00000000.SCC
00000001.SCC
Etc....
00000064.SCC

REPERTOIRE ETC...
Le MSX n'aurait à chercher le bon fichier qu'au milieu de 63 autres au lieu de le chercher au milieu de 500 autres fichiers :p

Pour ce qui est du Stockage en RAM, j'y ai pensé aussi mais...avec 1000 Bribes de 1031 Octets on a besoin de 1006Ko soit 1Mo de Ram environ :moue
Ca réduit considérablement le nombre de personne pouvant en tirer partie. (Ca reste quand même une possibilité à envisager). Edité par igal Le 15/09/2014 à 12h22


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

Le 15/09/2014 à 17h54
la plupart des jeux avec scrolling ont des motifs répétitifs et les décors sont construits en temps réel
les datas d'images sont stockés dans la rom de la cartouche mais on peux les stocker dans la ram ou la vram
le jeu que tu a pris me fait penser a aleste bio challenge : http://www.youtube.com/watch?v=fBleOuMYEJM


:noel
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 15/09/2014 à 18h01
Igal,

Voici déjà un premier brouillon de travail, fait avec les 3 premiers écrans.

Pour l'instant, j'ai gardé une taille des bribes à 8px, mais j'ai passé la hauteur d'écran à 192px, ce qui est divisible par 8 (et donc plus simple à gérer). Bien évidemment, il y a toujours le temps de latence du chargement des images qui est problématique ...

Toaplan.dsk


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/09/2014 à 18h19
@Jipe: Tout à fait, j'avais pensé à ca aussi :D

@Métalion: (J'ai pas encore regardé on fichier)

J'ai pensé à placer les Bribes par Répertoires!

64 Bribes par répertoire me semble être tout à fait gérable.

Le Loader devra désigner dans quel répertoire charger les 64 Bribes:

100 Bload"ZERO/0.SCC",S,0-44
101 Bload"ZERO/1,SCC",S,0-40
Etc...
163 Bload"ZERO/63.SCC",S,208

200 Bload"UN/0.SCC",S,0-44
201 Bload"UN/1,SCC",S,0-40
Etc...
263 Bload"UN/63.SCC",S,208

300 Bload"DEUX/0.SCC",S,0-44
301 Bload"DEUX/1,SCC",S,0-40
Etc...
363 Bload"DEUX/63.SCC",S,208

GEN3.zip

Peut être que cela sera plus rapide surtout que les Bribes pourront être nommés avec 2 caractères seulement! Edité par igal Le 15/09/2014 à 19h38


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

Le 15/09/2014 à 20h06
Igal,

Je ne pense pas que le nom du fichier ou sa localisation ait une quelconque importance dans le temps de chargement. L'adresse relative de chaque fichier est stocké dans la FAT, et le temps d'accès moyen est probablement le même pour tous les fichiers. Eventuellement, sa localisation physique sur le média peut influencer (sur une disquette par exemple), mais c'est un paramètre qu'on ne maitrise pas, étant donné qu'on ne décide pas de l'emplacement physique d'un fichier (c'est le système qui le fait).

Ce qu'il se passe probablement dans le cas de chargements à répétition, c'est que le MSX utilise certainement un buffer de données, qui se remplit et qui se vide par alternance. Ce phénomène de pompage n'est pas synchronisé (forcément) avec les appels par le BASIC et les accès à la VRAM, et il y a donc des chargements plus longs et d'autres plus courts.

Le problème se double par le fait que les fichiers sont lus en interruption : toute tâche du MSX est suspendue pendant le chargement d'un fichier (il n'y a pas de tâche en parallèle). Je l'ai confirmé tout à l'heure en essayant de modifier le registre 24 du VDP à intervalles réguliers, en utilisant ON INTERVAL. Les appels réguliers par cette instruction étaient gelés pendant le temps de l'accès au fichier (alors que ces appels sont basés sur les interruptions hardware), ce qui prouve que les accès fichiers sont prioritaires sur tout le reste.

La seule solution raisonnable pour avoir un scroll fluide est de stocker la map en mémoire. Le problème est alors la taille de ta map : chaque écran en 256 x 192 pèse 48Ko en SCREEN12 et une map complète de niveau ne peut être stockée en RAM (du moins dans des machines "normales")

Je pense que la solution est de passer à un mode graphique inférieur (SCREEN5 par exemple), et de stocker les maps en RAM (via le mapper) ou dans une ROM.

Ceci dit, je veux bien continuer à travailler sur le schéma que tu as commencé à développer, mais il faut que tu saches que les problèmes de temps d''accès fichier aléatoire continueront à être un gros problème. Mes programmes de génération et de scrolling sur la disquette sont flexibles, je vais les modifier pour passer en 4px, on verra ce que ça donne.



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

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 15/09/2014 à 20h29
Je vais tenter d'apporter quelques idées...

Idée 1 :Lire les fichiers de cette sorte depuis un floppy ne fonctionnera pas car le MSX "se fige" pendant les accès disk.*
Par contre cela devient beaucoup plus jouable lorsque la disquette est transformée en ROM. On travaille alors avec un support beaucoup plus rapide que le lecteur de disquette ou que la Carte SD.

Idée 2: Avec Nestor Basic, il y a des fonctions qui permettent de lire/ecrire directement sur les secteurs de la disquette.
Tu ne travailles donc plus avec fichiers, mais tu lis du data en direct...
Ce sont les fonctions 35 à 38
IL y en a même une qui te permet de lire depuis les secteurs directement vers la VRAM.

http://www.konamiman.com/msx/nbasic/nbas111e.txt
Je pense que ça mérite quelques essais... ;)

idée3 : toujours avec Nestor Basic. Le Nestor Basic est capable d'utiliser toute la RAM d'un MSX, et celle-ci devient accessible au Basic par l'intérmédiaire des fonctions de Nestor Basic.
Ainsi prenons un MSX2 qui aurait 512K de ram. Nestor vas diviser cette ram en segments de 16Ko soit 32 segments pour une machine de 512Ko.
Dans la pratique seul les segments de mémoires supérieur à 5 sont pleinement utilisable, ce qui fait 26 segments de 16 ko (total 416Ko) pour y stocker les graphisme de ta map.
Nestor Basic dispose de fonctions qui permettent d'envoyer directement une partie d'un segment vers la VRAM.
Ce qui s'avère plus rapide qu'un accès disk....

Idée 4: c'est tout pour aujorud'hui !


banniere-ericb59e
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 15/09/2014 à 21h34
Bonsoir Eric,

Bonne idée, le Nestor Basic :top
Et particulièrement à la gestion des segments de RAM, et des transferts en VRAM !

Après ça dépend de ce que Igal veut faire ... ^^
Edité par Metalion Le 15/09/2014 à 21h35


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

Le 16/09/2014 à 08h25
igal :
J'ai pensé à placer les Bribes par Répertoires!

64 Bribes par répertoire me semble être tout à fait gérable.


C'est Impossible !



La création de répertoires n'est pas possible avec le MSX-BASIC.

Et le nombre maximum de fichiers par disquette est de 112.



Je viens de confirmer en essayant de générer les "bribes" de 4px à partir des 3 écrans sur lesquels je travaillait.

=> Message d'erreur à la création du 112e fichier.



Il faut passer à une autre solution d'encodage et/ou de stockage.



Toaplan4.dsk

Toaplan8.dsk Edité par Metalion Le 16/09/2014 à 08h33


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

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 03/10/2009 à 00h09

Messages: 777

Le 16/09/2014 à 09h59
Comme l'a déjà suggéré Jipe, le plus raisonnable serait de charger des (bribes de) pattern. Celle_ci +une carto prennent moins de place et peuvent être stockée en RAM ou vram.
Puis être moins gourmand en utilisant un mode écran plus léger. :D

Par contre je ne sais pas comment opérer avec la commande copy et le scroll.


Le MSXien le plus à l'ouest :fou ... ou presque :D
osaurer
   
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie