Mr ToutLeMonde et la programmation NES...
+13
tetsuro
uran
ichigobankai
lincruste
drfloyd
Sour
philip
Stef
Tryphon
brokestudio
vincent2105
TotOOntHeMooN
upsilandre
17 participants
Page 8 sur 15
Page 8 sur 15 • 1 ... 5 ... 7, 8, 9 ... 11 ... 15
Re: Mr ToutLeMonde et la programmation NES...
Il va sans dire que je suis impressionné par le travail que tu as accompli, et que j'adopte assurément ton émulateur !
D'ailleurs, je retenterai quelque chose avec le zapper ultérieurement.
D'ailleurs, je retenterai quelque chose avec le zapper ultérieurement.
vincent2105- Patient incurable
- Nombre de messages : 1381
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Bienvenue SourSour a écrit:En général, Mesen essaye de faire le moins de suppositions possibles à propos de l'état d'un mapper au boot. Dans le cas du MMC3, les registres sont tous initialisés a 0, donc en termes de banques de 1kb, ça donne: [0, 1, 0, 1, 0, 0, 0, 0]. J'imagine que FCEUX de son côté initialise probablement ça à [0, 1, 2, 3, 4, 5, 6, 7] (et même chose pour le Everdrive). J'essaye en général d'éviter de copier ce genre de comportement (qui n'a sûrement pas été validé sur un board MMC3) pour forcer le programme à faire l'initialisation correctement autant que possible (un certain nombre de vieilles démos ont d'ailleurs des problèmes dans Mesen puisqu'ils font des suppositions sur l'état du prg/chr banking au boot).vincent2105 a écrit:Bon, j'arrive a faire passer ma rom sur Mesen comme voulu.
En fait, j'avais saute l'etape initialisation des banks CHR ROM via $8000/$8001 mais ca passait sur fceux et surtout sur NES. En procedant a l'initialisation de chacune des banks CHR ROM, ca passe.
Aussi, il y a un setting pour forcer tous les types de RAM à être initialisés avec des valeurs aléatoires (plutôt que des 0s partout comme par défaut), ce qui permet de s'assurer que le code initialise la RAM correctement.Ça ne devrait pas être trop difficile à rajouter - mais comme tu l'as mentionné, je suis en plein milieu de d'autres modifications (116 fichiers de modifiés et je suis loin d'avoir terminé...), donc ça risque de prendre un certain temps.upsilandre a écrit:ou alors pouvoir ouvrir le memory tool avec un simple clic droit sur l'adresse dans le debugger comme Fceux, c'est pratique pour changer des octets directement en hexa
N'hésite pas à passer te présenter à l'accueil de l’hôpital que tout le monde puisse te souhaiter la bienvenue
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
Ah voila c'est parfait, j'aurais plus besoin de faire l'intérmediaire
Du coup j'ouvrirais peut etre un topic sur la beta de Mesen.
Du coup j'ouvrirais peut etre un topic sur la beta de Mesen.
upsilandre- Interne
- Nombre de messages : 5138
Age : 49
Localisation : val de marne 94
Date d'inscription : 31/05/2015
Re: Mr ToutLeMonde et la programmation NES...
Bonjour et bienvenu Sour !
Merci pour ton énorme travail sur Mesen, c'est vraiment un super outil.
Il ne me manque plus grand chose pour passez définitivement de FCEUX à Mesen
Merci pour ton énorme travail sur Mesen, c'est vraiment un super outil.
Il ne me manque plus grand chose pour passez définitivement de FCEUX à Mesen
Re: Mr ToutLeMonde et la programmation NES...
Merci pour l’accueil et vos commentaires! Bien content de voir que Mesen vous est utile :)
Si vous avez des suggestions pour de nouvelles features (e.g des manques par rapport au debugger de FCEUX, etc.) ou bien si vous trouvez des bugs, hésitez pas à me le faire savoir.
Si vous avez des suggestions pour de nouvelles features (e.g des manques par rapport au debugger de FCEUX, etc.) ou bien si vous trouvez des bugs, hésitez pas à me le faire savoir.
Sour- Patient en incubation
- Nombre de messages : 25
Age : 39
Localisation : Canada
Date d'inscription : 28/10/2017
Re: Mr ToutLeMonde et la programmation NES...
Attendez que j'ouvre un topic sur Mesen, je pense que je le ferais demain. Et moi ca m'evitera aussi de pourrir ta BAL
upsilandre- Interne
- Nombre de messages : 5138
Age : 49
Localisation : val de marne 94
Date d'inscription : 31/05/2015
Re: Mr ToutLeMonde et la programmation NES...
Je suis revenu sur un tuto concernant la compression de background : http://nintendoage.com/forum/messageview.cfm?catid=22&threadid=33104
Et j'ai réussi à afficher mon premier background compressé ! Ca fait quelquechose, je vous le livre tel quel :p
Grosso modo, on a une datastring qui permet de savoir quelle métatile afficher, mais aussi de choisir un autre set de metatiles (128 metatiles par set), et de vérifier si la metatile est répétée ou non.
J'avoue que j'aurais été bien en peine de pondre cette routine Mais je vais pouvoir en profiter, ca va me donner un ENORME coup de pouce...
Pour cet exemple je passe d'une nametable de 960 octets à une datastring de 30 octets !!!
Bon là je suis dans un cas extrême, dans la pratique, je pense tourner à 150/200 octets
Et j'ai réussi à afficher mon premier background compressé ! Ca fait quelquechose, je vous le livre tel quel :p
Grosso modo, on a une datastring qui permet de savoir quelle métatile afficher, mais aussi de choisir un autre set de metatiles (128 metatiles par set), et de vérifier si la metatile est répétée ou non.
J'avoue que j'aurais été bien en peine de pondre cette routine Mais je vais pouvoir en profiter, ca va me donner un ENORME coup de pouce...
Pour cet exemple je passe d'une nametable de 960 octets à une datastring de 30 octets !!!
Bon là je suis dans un cas extrême, dans la pratique, je pense tourner à 150/200 octets
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Par contre l'attribute table (pour le choix des palettes de couleurs) occupe toujours 64 octets, en proportion, ça fait mal.
Je pense que je vais me contenter d'une palette par zone de 32x32 pixels, de cette façon, je peux passer de 64 à 16 octets.
Je trouve que c'est plus équilibré.
Je pense que je vais me contenter d'une palette par zone de 32x32 pixels, de cette façon, je peux passer de 64 à 16 octets.
Je trouve que c'est plus équilibré.
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Logiquement l'information de palette elle devrait etre associé a tes metatiles donc pas besoin d'avoir d'attribute table, tu la construit en temps réel quand tu décompresse tes metatiles.
Et si jamais y a certaine metatile dont t'as besoin avec des couleurs differentes (ce qui est rare) suffit d'en faire plusieurs variantes dans ton set de metatile.
En gros t'as besoin que d'une seule attribute table, celle de ton set de metatile.
Et si jamais y a certaine metatile dont t'as besoin avec des couleurs differentes (ce qui est rare) suffit d'en faire plusieurs variantes dans ton set de metatile.
En gros t'as besoin que d'une seule attribute table, celle de ton set de metatile.
upsilandre- Interne
- Nombre de messages : 5138
Age : 49
Localisation : val de marne 94
Date d'inscription : 31/05/2015
Re: Mr ToutLeMonde et la programmation NES...
Ah c'est pas con ça, j'avais encore un wagon de retard
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Sinon tu peux aussi compresser tes attribute table selon le meme principe de répétition RLE. Ca se compresse bien (y a encore plus de chance de répétition que pour une nametable). Mais ca me parait moins logique comme approche. Tout dépend des besoins spécifique de chaque jeu, faut faire des choix de compression adapté.
upsilandre- Interne
- Nombre de messages : 5138
Age : 49
Localisation : val de marne 94
Date d'inscription : 31/05/2015
Re: Mr ToutLeMonde et la programmation NES...
Si tu veux scroller, il vaut quand même mieux ajouter l'attribut dans les propriétés de ta metatile.
Si c'est des écrans fixes, tu peux effectivement t'en passer mais c'est dommage et tu perds en souplesse.
Si ça peut aider, voici à quoi ressemble mon format de metatile :
Si c'est des écrans fixes, tu peux effectivement t'en passer mais c'est dommage et tu perds en souplesse.
Si ça peut aider, voici à quoi ressemble mon format de metatile :
- Code:
; .byte $T0,$T1,$T2,$T3 ; tiles
; .byte %pp--tttt ; metatile properties
;
; pp : palette
; tttt metatile type (transparent / solid / ...)
Re: Mr ToutLeMonde et la programmation NES...
Ok je vois :)
J'avais pas du tout pensé à tout ça, merci à vous
J'avais pas du tout pensé à tout ça, merci à vous
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Je pense que je suis pas loin du compte, j'ai un décalage.
Je chercherai demain, pour ce soir, c'est déjà pas mal.
Je chercherai demain, pour ce soir, c'est déjà pas mal.
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
La nuit porte conseil
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
ouep un bon pas en avant
Par contre associer ça au scrolling, ça m'a l'air d'être une autre paire de manches ! C'est pas grave, c'est pas une priorité... faut que je vois aux collisions avec le background, ma routine n'est plus adaptée.
Quand je pense à ton "Twin Dragons", j'imagine maintenant un peu mieux l'ampleur de la tâche.
Par contre associer ça au scrolling, ça m'a l'air d'être une autre paire de manches ! C'est pas grave, c'est pas une priorité... faut que je vois aux collisions avec le background, ma routine n'est plus adaptée.
Quand je pense à ton "Twin Dragons", j'imagine maintenant un peu mieux l'ampleur de la tâche.
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Ah ah merci ça fait plaisir ! :)
Si tu veux associer ça avec du scrolling, le format de compression RLE n'est pas forcément le plus adapté, à moins de décompresser tout le niveau en RAM.
Mais oui déjà gérer les collisions sur écran fixe en allant chercher dans tes données compressées est déjà un bon exercice :)
Si tu veux associer ça avec du scrolling, le format de compression RLE n'est pas forcément le plus adapté, à moins de décompresser tout le niveau en RAM.
Mais oui déjà gérer les collisions sur écran fixe en allant chercher dans tes données compressées est déjà un bon exercice :)
Re: Mr ToutLeMonde et la programmation NES...
Du coup, pour du scrolling, tu utilises un autre format de compression ?
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Non, juste les metatiles, donc 240 octets par écran.
Au début je décompressais à la volée mais c'était bien trop lent, et comme j'ai plein de place en ROM...
Au début je décompressais à la volée mais c'était bien trop lent, et comme j'ai plein de place en ROM...
Re: Mr ToutLeMonde et la programmation NES...
Au départ, j'ai pensé à calculer un index pour récupérer la bonne métatile dans ma datastring, mais je vais tenter autrechose. Ca m'a l'air plus compliqué que ce qui suit...brokestudio a écrit:Ah ah merci ça fait plaisir ! :)
Si tu veux associer ça avec du scrolling, le format de compression RLE n'est pas forcément le plus adapté, à moins de décompresser tout le niveau en RAM.
Mais oui déjà gérer les collisions sur écran fixe en allant chercher dans tes données compressées est déjà un bon exercice :)
Mon idée, c'est de réserver 64 octets pour une nouvelle attribute table, pas pour les couleurs, mais pour les propriétés des metatiles.
Je vais tout traiter par bloc de 16x16 pixels. (mes backgrounds si prêteront et je suis sur ecran fixe).
Pendant la décompression, j'en profiterai pour alimenter cette table.
Je sais pas ce que vous en pensez (ni si c'est clair).
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Tes propriétés de metatiles devraient être avec ... tes metatiles :) plutôt que dans une tables à part.
A partir du moment où tu récupères l'ID de ta metatile, il est facile ensuite d'aller la retrouver dans ta liste de metatiles, et de récupérer les propriétés qui t'intéressent.
Si tu utilise une nouvelle attribute table pour des propriétés de metatiles, tu seras dans tous les cas obligé de décoder l'info, et tu es limité en donnée que tu peux y stocker.
Un exemple si ça peut t'aider :
Ca c'est ta structure de base des données, pour mettre à jour ta nametable tu parcours le tableau room1 et pour chaque octet rencontré qui représente une metatile, tu vas chercher la liste des tiles dans les propriétés de la metatiles. Mais ça c'est ce que tu fais déjà il me semble.
Un peu de gymnastique à faire pour mettre à jour l'attribute table, mais rien de trop méchant. L'idéal est de passer par un tableau intermédiaire en RAM avant, et de tout envoyer en VRAM après.
Une fois que tu as ça, tu récupères le coordonnées de ton personnage sur la map, et à partir de ces coordonnées, tu génères l'index correspondant pour aller chercher la metatile sur laquelle il se situe dans ton tableau room1. Et là même principe, tu récupères l'ID de la metatiles, et tu peux aller chercher facilement ses coordonnées.
Bon y'a sûrement déjà pleins de trucs que tu savais déjà et et que tu as sûrement déjà fait, mais si ça peut aider.
A partir du moment où tu récupères l'ID de ta metatile, il est facile ensuite d'aller la retrouver dans ta liste de metatiles, et de récupérer les propriétés qui t'intéressent.
Si tu utilise une nouvelle attribute table pour des propriétés de metatiles, tu seras dans tous les cas obligé de décoder l'info, et tu es limité en donnée que tu peux y stocker.
Un exemple si ça peut t'aider :
- Code:
; données de background - table de metatiles
room1:
.byte $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01
.byte $01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01
.byte $01,$00,$00,$00,$00,$00,$00,$00,$02,$00,$00,$00,$00,$00,$00,$01
.byte $01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01
; etc .... pour un total de 240 octets
; liste des metatiles
metatilesList:
.word metatile00,metatile01,metatile02, .....
; format des metatiles :
; .byte $T0,$T1,$T2,$T3 ; tiles
; .byte $pppppppp ; palette
; .byte $tttttttt ; type
;
; pppppppp : palette
; tttttttt : metatile type (transparent / solid / ...)
; propriétés des metatiles
; mur
metatile00:
.byte $00,$01,$02,$03
.byte %11111111 ; palette 3
.byte $01 ; solide
; sol
metatile01:
.byte $04,$05,$06,$07
.byte %10101010 ; palette 2
.byte $00 ; transparent
; coffre
metatile02:
.byte $08,$09,$0A,$0B
.byte %01010101 ; palette 1
.byte $02 ; coffre
; NOTE : la palette est répétée sur tout l'octet pour simplifier la mise à jour de l'attribute table en utilisant un masque en fonction du quart à mettre à jour
Ca c'est ta structure de base des données, pour mettre à jour ta nametable tu parcours le tableau room1 et pour chaque octet rencontré qui représente une metatile, tu vas chercher la liste des tiles dans les propriétés de la metatiles. Mais ça c'est ce que tu fais déjà il me semble.
Un peu de gymnastique à faire pour mettre à jour l'attribute table, mais rien de trop méchant. L'idéal est de passer par un tableau intermédiaire en RAM avant, et de tout envoyer en VRAM après.
Une fois que tu as ça, tu récupères le coordonnées de ton personnage sur la map, et à partir de ces coordonnées, tu génères l'index correspondant pour aller chercher la metatile sur laquelle il se situe dans ton tableau room1. Et là même principe, tu récupères l'ID de la metatiles, et tu peux aller chercher facilement ses coordonnées.
Bon y'a sûrement déjà pleins de trucs que tu savais déjà et et que tu as sûrement déjà fait, mais si ça peut aider.
Re: Mr ToutLeMonde et la programmation NES...
Je crois que je comprends pourquoi ça coinçait pour moi.
En fait, tu réserves 240 octets pour la "room" tandis qu'avec la routine du tuto, je ne réservais en tout et pour tout que 32 octets pour bufferiser la partie basse des metatiles sur toute une rangée.
Il me parait maintenant évident d'avoir intérêt à faire cette concession. :)
En fait, tu réserves 240 octets pour la "room" tandis qu'avec la routine du tuto, je ne réservais en tout et pour tout que 32 octets pour bufferiser la partie basse des metatiles sur toute une rangée.
Il me parait maintenant évident d'avoir intérêt à faire cette concession. :)
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Si tu compresses ta room en RLE, tu seras en dessous des 240 octets mais le principe reste le même.
J'ai pris une room non compressée pour l'exemple, histoire d'y aller pas à pas.
Si tu restes sur un écran fixe, tu peux soit décompresser ta room en RAM, soit décompresser à la volée quand tu cherches une metatile à un endroit précis.
J'ai pris une room non compressée pour l'exemple, histoire d'y aller pas à pas.
Si tu restes sur un écran fixe, tu peux soit décompresser ta room en RAM, soit décompresser à la volée quand tu cherches une metatile à un endroit précis.
Re: Mr ToutLeMonde et la programmation NES...
Bon, j'ai réservé 240 octets de RAM, je conserve directement les propriétés de chaque metatile de la room.
Ca me coute "rien" (3 instructions / metatile) je fais ça pendant la décompression. Par contre, je ne conserve pas l'id de la tuile, mais est-ce nécessaire puisque j'ai 1 octet pour conserver toutes les caractéristiques ?
Décompresser à la volée, en comparaison, c'est sur que ça doit être bien plus gourmand.
Ca me coute "rien" (3 instructions / metatile) je fais ça pendant la décompression. Par contre, je ne conserve pas l'id de la tuile, mais est-ce nécessaire puisque j'ai 1 octet pour conserver toutes les caractéristiques ?
Décompresser à la volée, en comparaison, c'est sur que ça doit être bien plus gourmand.
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
@brokestudio:
Pk tu ne stockes pas tes metatiles sur 16 bits seulement au lieu de 24 ??
Avec le premier byte = indice dans un tableau contenant les adresses de tes 4 tiles(voire juste la première) en vRAM/CHROM
Et le second, attributs + palette ??
Car même avec 4 bits pour les attributs et 4 pour la palette,ça donne 16 possibilités pour chaque éléments .
Pk tu ne stockes pas tes metatiles sur 16 bits seulement au lieu de 24 ??
Avec le premier byte = indice dans un tableau contenant les adresses de tes 4 tiles(voire juste la première) en vRAM/CHROM
Et le second, attributs + palette ??
Car même avec 4 bits pour les attributs et 4 pour la palette,ça donne 16 possibilités pour chaque éléments .
Dernière édition par TOUKO le Lun 6 Nov 2017 - 18:52, édité 1 fois
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
La probabilité que deux metatiles utilisent les mêmes tiles dans le même ordre est assez faible je pense, à moins que ça soit le même élément d'une autre couleur. Du coup je suis pas sûr que faire une table à part pour ça apporte grand chose, mais je peux me tromper.
Pour la palette et le type de metatile, j'ai mis ça sur 2 octets pour clarifier / simplifier l'exemple, mais évidement on peut mettre ça dans un seul (voir mon autre exemple plus haut).
Pour la palette et le type de metatile, j'ai mis ça sur 2 octets pour clarifier / simplifier l'exemple, mais évidement on peut mettre ça dans un seul (voir mon autre exemple plus haut).
Re: Mr ToutLeMonde et la programmation NES...
Ah ok, donc tu prévois des tiles non alignées en mémoire dans ta métas tiles,c'est ça ??
Si c'est la cas, non ça apporte rien de mettre dans un tableau .
Si c'est la cas, non ça apporte rien de mettre dans un tableau .
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
Oui j'ai un script qui découpe mon tileset (bmp) et qui s'occupe de trouver les tiles uniques, qui recoupe avec les metatiles, et qui me sort les datas à charger en CHR-RAM et le tableau de metatile.
Re: Mr ToutLeMonde et la programmation NES...
J'ai trouvé un live sympa
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Je viens d'entendre à la fin que tu parlais de latence / coupures, moi j'en ai eu une bonne partie de la vidéo, mais c'est peut être encore une fois a cause de mon ordi tout pourri
J'avais manqué les 3/4 de la vidéo de toute façon, donc je pensais le revisionner en différé
J'avais manqué les 3/4 de la vidéo de toute façon, donc je pensais le revisionner en différé
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Page 8 sur 15 • 1 ... 5 ... 7, 8, 9 ... 11 ... 15
Sujets similaires
» Programmation CPS-1
» Initiation à Programmation
» Programmation sur Saturn
» La programmation Megadrive
» Programmation sous Unity3D ?
» Initiation à Programmation
» Programmation sur Saturn
» La programmation Megadrive
» Programmation sous Unity3D ?
Page 8 sur 15
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum