Mr ToutLeMonde et la programmation NES...
+23
brokestudio
F.L
grostonton
Ned_Flanders
Tryphon
philip
fanoplusplus64K
tfdi
Ricco59_59
Top l'âne
tetsuro
upsilandre
nemokantio
Stef
pckid
ichigobankai
suisseretrogaming
patapouf31
vingazole
koan75
joelabroc
drfloyd
vincent2105
27 participants
Page 32 sur 34
Page 32 sur 34 • 1 ... 17 ... 31, 32, 33, 34
Re: Mr ToutLeMonde et la programmation NES...
Je pense que c'est bon, j'ai fait pas mal de vérifications, tout semble ok... Et il serait même facile de rajouter une unique issue.
Du coup, je sais pas si je continue, le challenge était intéressant, mais de la à essayer d'en faire un jeu...
Du coup, je sais pas si je continue, le challenge était intéressant, mais de la à essayer d'en faire un jeu...
vincent2105- Patient incurable
- Nombre de messages : 1381
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Nouvel exercice : un "snakelike". L'idée m'est venue en voyant mon fils y jouer sur tablette ces jours ci.
Un mode 2 joueurs serait bien sympa... voir 3 ou 4 joueurs, puisque la NES peut profiter du "NES four score".
Un mode 2 joueurs serait bien sympa... voir 3 ou 4 joueurs, puisque la NES peut profiter du "NES four score".
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Un projet plutot sympa et classique indémodable!
En multi, ca serait super sympa.
Allez au boulot !
En multi, ca serait super sympa.
Allez au boulot !
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
Merci pour tes encouragements Vetea
Ca va être un bon petit casse-tête.
Ca va être un bon petit casse-tête.
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
C'est le genre de jeu que l'on faisait en Basic sur nos 8 bits chéris!
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
Il me donne du fil à retordre le "snake".
A partir de 40 maillons, ça glitche sur emu en NTSC alors que je monte jusqu'à 150 maillons en PAL. Bizarre
(Pour l'instant le serpent à une taille fixe définie au "RESET", il ne grandit pas).
A partir de 40 maillons, ça glitche sur emu en NTSC alors que je monte jusqu'à 150 maillons en PAL. Bizarre
(Pour l'instant le serpent à une taille fixe définie au "RESET", il ne grandit pas).
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 reviens sur ce bug après quelques jours de pause. Il m'a mis un p'tit coup au moral celui là
A priori, je tape dans le registre de scroll.
On va reprendre ça calmement.
A priori, je tape dans le registre de scroll.
On va reprendre ça calmement.
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Y'a de bonne chances que tu accèdes au PPU en dehors du VBlank quand tu dépasses les 40 maillons, d'où la différence observée avec le PAL (ou le VBlank est plus long).
Stef- Interne
- Nombre de messages : 5087
Age : 45
Localisation : Sevres
Date d'inscription : 04/04/2007
Re: Mr ToutLeMonde et la programmation NES...
Merci de te pencher sur le problème Stef
La différence est quand même énorme non ? (40 maillons NTSC / 150 PAL)
J'ai remarqué qu'avec ne serait ce que 5 maillons, si je ne force pas le registre de scroll à 0 à la fin de ma NMI, j'ai le même souci. Mais ça, c'est peut-être un autre problème.
Je vais voir si en travaillant sur plusieurs frames ça passe. Mais d'abord, faut je relise mes quelques routines, au cas où.
La différence est quand même énorme non ? (40 maillons NTSC / 150 PAL)
J'ai remarqué qu'avec ne serait ce que 5 maillons, si je ne force pas le registre de scroll à 0 à la fin de ma NMI, j'ai le même souci. Mais ça, c'est peut-être un autre problème.
Je vais voir si en travaillant sur plusieurs frames ça passe. Mais d'abord, faut je relise mes quelques routines, au cas où.
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
tres interessant tes experimentations sur ce vieux dino qu'est la NES.
je suis ca avec interet même si je poste peu
je suis ca avec interet même si je poste peu
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
Ah ça fait plaisir à lire ça ! Merci kaot
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Bon, avant de partir 2 jours, une petite ROM pour montrer où j'en suis :)
https://drive.google.com/open?id=0B0HKOrG7iEpfbEFXZUhncGhFdGM
Au passage, j'ai un pb avec un pointeur qui ne retourne pas la valeur que j'attends... En $0000 et $0001 l'adresse low et high de la tête du serpent dans le ppu. en $0002, j'attends la valeur contenue à cette adresse, or je recupère des valeurs inattendues. Si ça amuse Upsilandre ou un autre
https://drive.google.com/open?id=0B0HKOrG7iEpfbEFXZUhncGhFdGM
Au passage, j'ai un pb avec un pointeur qui ne retourne pas la valeur que j'attends... En $0000 et $0001 l'adresse low et high de la tête du serpent dans le ppu. en $0002, j'attends la valeur contenue à cette adresse, or je recupère des valeurs inattendues. Si ça amuse Upsilandre ou un autre
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Le Vblank en PAL dure 3.5 fois plus longtemps qu'en NTSC, c'est BEAUCOUP plus.vincent2105 a écrit:Merci de te pencher sur le problème Stef
La différence est quand même énorme non ? (40 maillons NTSC / 150 PAL)
Tu vas me dire que 150/40 = 3.75 mais tu n'utilise pas le Vblank seulement pour les maillons, suffit que tu utilise 10% du Vblank pour autre chose que tes maillons ce qui est forcement le cas et ca suffit pour atteindre les x3.75 (et si c'etait 50% du Vblank alors t'aurais meme un facteur x6 entre PAL et NTSC)
N'oublie pas qu'utiliser le registre $2006 modifie aussi les 2 premiers bit du registre $2000 qu'il faut donc réinitialiser apres, je sais pas si ca a un rapport avec ton probleme.J'ai remarqué qu'avec ne serait ce que 5 maillons, si je ne force pas le registre de scroll à 0 à la fin de ma NMI, j'ai le même souci. Mais ça, c'est peut-être un autre problème.
Dernière édition par upsilandre le Mar 15 Aoû 2017 - 11:46, édité 1 fois
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...
vincent2105 a écrit:Bon, avant de partir 2 jours, une petite ROM pour montrer où j'en suis :)
https://drive.google.com/open?id=0B0HKOrG7iEpfbEFXZUhncGhFdGM
Au passage, j'ai un pb avec un pointeur qui ne retourne pas la valeur que j'attends... En $0000 et $0001 l'adresse low et high de la tête du serpent dans le ppu. en $0002, j'attends la valeur contenue à cette adresse, or je recupère des valeurs inattendues. Si ça amuse Upsilandre ou un autre
J'ai regardé vite fais et je pense que tu va rigoler quand tu vas voir l'erreur que t'as fais.
Pour récuperer l'ID de la tuile qui se trouve sous la tete du serpent tu utilise ton pointeur a $00 et tu fais:
- Code:
LDY #$00
LDA ($00),Y
Sauf que la tu vas chercher dans la mémoire CPU (et un endroit ou y a pas de RAM donc effectivement ca va etre random) et pas dans la mémoire GPU ou se trouve tes tuiles.
En remplacant ton bout de code par celui la ca devrait beaucoup mieux marcher
- Code:
LDA $0001
STA $2006
LDA $0000
STA $2006
LDA $2007
LDA $2007
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...
Merci pour toutes ces explications et effectivement avec ton bout de code, ça va mieux maintenant
En fait, si j'ai bien compris, avec mon pointeur qui était sensé récupérer la valeur à un endroit précis dans la nametable à l'adresse de départ $2000, j'allais chercher des valeurs dans les miroirs des adresses des registres PPU ($2000-$2007 / $2008- $3fff)
Les affaires reprennent
En fait, si j'ai bien compris, avec mon pointeur qui était sensé récupérer la valeur à un endroit précis dans la nametable à l'adresse de départ $2000, j'allais chercher des valeurs dans les miroirs des adresses des registres PPU ($2000-$2007 / $2008- $3fff)
Les affaires reprennent
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 ne comprends pas tout mais c'est génial, continuez surtout.
lincruste- Interne
- Nombre de messages : 5619
Age : 45
Localisation : RP
Date d'inscription : 07/06/2014
Re: Mr ToutLeMonde et la programmation NES...
Oui ces ca, les registres PPU et tout le mirroring est dans l'espace memoire CPU alors que ta nametable est dans l'espace memoire PPU. Forcement tu trouve les meme adresse dans les 2 espaces mais c'est pas du tout la meme chosevincent2105 a écrit:Merci pour toutes ces explications et effectivement avec ton bout de code, ça va mieux maintenant
En fait, si j'ai bien compris, avec mon pointeur qui était sensé récupérer la valeur à un endroit précis dans la nametable à l'adresse de départ $2000, j'allais chercher des valeurs dans les miroirs des adresses des registres PPU ($2000-$2007 / $2008- $3fff)
Les affaires reprennent
On peut vite s’emmêler les pinceaux dans les acces memoires.
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...
Par curiosité, j'ai supprimé un "LDA $2007", et je me suis retrouvé avec un comportement du programme en apparence identique (suite à tes explications, je JMP sur RESET si la valeur est égale à 1).upsilandre a écrit:Sauf que la tu vas chercher dans la mémoire CPU (et un endroit ou y a pas de RAM donc effectivement ca va etre random) et pas dans la mémoire GPU ou se trouve tes tuiles.
En remplacant ton bout de code par celui la ca devrait beaucoup mieux marcher
- Code:
LDA $0001
STA $2006
LDA $0000
STA $2006
LDA $2007
LDA $2007
Tu déconseilles ou non ?
@lincruste : Merci
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
nan faut pas l'enlever. Quand tu lis $2007 tu ne charge pas le contenu de l'adresse que tu viens de mettre mais un buffer interne au PPU qui contient une precedente data mais en meme temps le PPU va mettre a jour ce buffer interne avec le contenu de l'adresse que tu as donné pour la prochaine lecture. Y a un décalage a cause de cette etape intermediaire qui passe par ce buffer (car le CPU n'accede pas directement a la VRAM, faut passer par le PPU, c'est pas un acces immediat)vincent2105 a écrit:Par curiosité, j'ai supprimé un "LDA $2007", et je me suis retrouvé avec un comportement du programme en apparence identique (suite à tes explications, je JMP sur RESET si la valeur est égale à 1).upsilandre a écrit:Sauf que la tu vas chercher dans la mémoire CPU (et un endroit ou y a pas de RAM donc effectivement ca va etre random) et pas dans la mémoire GPU ou se trouve tes tuiles.
En remplacant ton bout de code par celui la ca devrait beaucoup mieux marcher
- Code:
LDA $0001
STA $2006
LDA $0000
STA $2006
LDA $2007
LDA $2007
Tu déconseilles ou non ?
Donc apres avoir initialisé une nouvelle adresse faut toujours lire une fois pour rien. Si tu veux charger 10 octets alors faut enchainer 11 LDA $2007 et ne pas garder le premier. Si tu veux lire juste 1 octet alors faut mettre 2 LDA $2007.
Dans ton cas c'est normale que t'es l'impression que ca marche car pour l'instant tu n'utilise probablement pas la lecture $2007 pour autre chose du coup quand tu fais ton LDA $2007 tu va pas acceder a l'adresse que tu viens de mettre mais a celle que t'as mis la frame précédente qui est maintenant dans le buffer donc ca va juste te faire un retard d'une frame dans ton test de collision ce qui est pas grave sauf que dès que tu utilisera la lecture $2007 pour autre chose que ce test de collision ca va buger et tu saura pas pourquoi et rebelote .
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...
Ouai c'est pas claire je te sent sceptique
Mais c'est vrai que c'est tordu
Pour synthétiser:
Quand tu fais "LDA $2007" le PPU charge dans l'accumulateur du CPU le contenu d'un registre tampon qui se trouve dans le PPU et ensuite charge dans ce registre tampon le contenu VRAM de l'adresse qui se trouve en $2006 (et incrémente ensuite cette adresse)...
...sauf quand t'accede aux palettes, la c'est encore different car les palettes ne sont pas en VRAM mais directement dans le PPU donc cette fois y a bien un acces direct sans intermediaire.
Mais c'est vrai que c'est tordu
Pour synthétiser:
Quand tu fais "LDA $2007" le PPU charge dans l'accumulateur du CPU le contenu d'un registre tampon qui se trouve dans le PPU et ensuite charge dans ce registre tampon le contenu VRAM de l'adresse qui se trouve en $2006 (et incrémente ensuite cette adresse)...
...sauf quand t'accede aux palettes, la c'est encore different car les palettes ne sont pas en VRAM mais directement dans le PPU donc cette fois y a bien un acces direct sans intermediaire.
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 pense avoir compris. Et d'ailleurs on va pouvoir vérifier ça quand j'ajouterai d'autres serpents d'ici peu
Mais en premier lieu, faut que je réussisse a gaspiller moins de vblank, parce qu'en fin de compte, je n'ai que 2 malheureux octets à écrire (1 pour la nouvelle position de la tête du serpent, et un autre pour effacer le dernier maillon).
Pour l'instant, je pense traiter leurs déplacements respectifs alternativement (pas dans la même frame).
Mais en premier lieu, faut que je réussisse a gaspiller moins de vblank, parce qu'en fin de compte, je n'ai que 2 malheureux octets à écrire (1 pour la nouvelle position de la tête du serpent, et un autre pour effacer le dernier maillon).
Pour l'instant, je pense traiter leurs déplacements respectifs alternativement (pas dans la même frame).
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Bon j'ai choisi la facilité, ne me jetez pas de cailloux ...
Une frame pour la maj du tableau de coordonnées et une pour l'affichage de la tête et de la queue et la collision du serpent. Ca fonctionne, apparemment
Next, l'ajout de serpents concurrents. C'est à mes yeux la partie la plus sympa du projet.
Une frame pour la maj du tableau de coordonnées et une pour l'affichage de la tête et de la queue et la collision du serpent. Ca fonctionne, apparemment
Next, l'ajout de serpents concurrents. C'est à mes yeux la partie la plus sympa du projet.
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
De toutes façons ce genre de jeu n'a pas besoin de tourner à 60fps on est pas dans un shoot, donc à 30 c'est largement suffisant,et ça permet d'alléger les frames .
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
C'est ce que je me suis dit :) Ca me parait un peu bourrin comme méthode, mais c'est tellement plus simple, en 3 lignes, c'était plié. Je sais qu'il est possible de faire ça proprement, mais en rajoutant des cycles quand même et des variables tampons. Et fallait que je désosse un peu la logique des routines que j'avais mises en place, j'avais pas du tout envie.
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 c'est pas bourrin, quel est l'intérêt de bouffer 90% de CPU dans une frame et 10% dans l'autre, si tu peux faire 50/50 ??
ca te laisse la possibilité de faire d'autres traitements avec les 50% qui te reste /frame .
C'est juste logique ce que tu as fait,c'est toujours mieux d'avoir une charge constante sur chaque frame,ça permet d'éviter les sauts de frames par manque de temps CPU sur certaines frames, alors que tu as plein de temps inutilisé sur d'autres . .
imagines que tu as besoin en plus de 20% de CPU pour autres choses ??, et bien 1 frame sur 2 tu vas déborder ,alors qu'avec ta répartition tu seras toujours dans la frame et avec du rab en plus
ca te laisse la possibilité de faire d'autres traitements avec les 50% qui te reste /frame .
C'est juste logique ce que tu as fait,c'est toujours mieux d'avoir une charge constante sur chaque frame,ça permet d'éviter les sauts de frames par manque de temps CPU sur certaines frames, alors que tu as plein de temps inutilisé sur d'autres . .
imagines que tu as besoin en plus de 20% de CPU pour autres choses ??, et bien 1 frame sur 2 tu vas déborder ,alors qu'avec ta répartition tu seras toujours dans la frame et avec du rab en plus
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
De toute facon le serpent peut pas avancer d'une tuile par frame ca serait trop rapide?
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...
Oui, par contre, y'a un truc qui me fait peur, c'est qu'avec une cadence d'une tile toutes les 3 frames, avec un item à récupérer en bord d'écran, ca reste jouable à mon avis. Donc, ça va peut être compliquer l'histoire des 4 serpents :/
Au passage, je suis en train d'essayer de modifier la cadence en fonction de tel ou tel évènement et ça bug parfois...
A part ça tout va bien
Au passage, je suis en train d'essayer de modifier la cadence en fonction de tel ou tel évènement et ça bug parfois...
A part ça tout va bien
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 ça générait pas au début, mais qd l'écran va commencer à se remplir va vite falloir des réflexes de tueurs,surtout avec 4 serpents .upsilandre a écrit:De toute facon le serpent peut pas avancer d'une tuile par frame ca serait trop rapide?
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
4 serpents, des pièges qui apparaissent, des petits ennemis mobiles, on peut vraiment agrémenter le concept "snake" dans l'idée. Reste à caser tout ça dans la frame...
Mais on va y arriver, je compte sur vous, je le veux ce snake 4 joueurs
Mais on va y arriver, je compte sur vous, je le veux ce snake 4 joueurs
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Donc tu vas passer par le multitap?
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...
Oui, j'espère pouvoir en dégoter un. Faut voir le prix Sinon, une connaissance en a un, je devrais pouvoir lui emprunter pour tester, le moment venu.
Mais même sans ça, je souhaite faire un mode de jeu dans lequel on affronterait plusieurs serpents contrôlés par la machine. Ils seraient un peu plus intelligents à chaque niveau.
Avec plus de 4 serpents, ça pourrait être intéressant aussi, mais techniquement, c'est pas possible à cause des palettes (3+1 couleurs) et de l'attribute table. Déjà, pour 4 serpents, on en aura 3 de couleurs différentes et le 4eme avec un mix de ces couleurs.
Mais même sans ça, je souhaite faire un mode de jeu dans lequel on affronterait plusieurs serpents contrôlés par la machine. Ils seraient un peu plus intelligents à chaque niveau.
Avec plus de 4 serpents, ça pourrait être intéressant aussi, mais techniquement, c'est pas possible à cause des palettes (3+1 couleurs) et de l'attribute table. Déjà, pour 4 serpents, on en aura 3 de couleurs différentes et le 4eme avec un mix de ces couleurs.
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Page 32 sur 34 • 1 ... 17 ... 31, 32, 33, 34
Sujets similaires
» Programmation CPS-1
» La programmation Megadrive
» Mr ToutLeMonde et la programmation NES...
» Programmation Nintendo SWITCH ?
» Mr ToutLeMonde et la programmation GameBoy...
» La programmation Megadrive
» Mr ToutLeMonde et la programmation NES...
» Programmation Nintendo SWITCH ?
» Mr ToutLeMonde et la programmation GameBoy...
Page 32 sur 34
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum