Mr ToutLeMonde et la programmation NES...

Page 1 sur 34 1, 2, 3 ... 17 ... 34  Suivant

Voir le sujet précédent Voir le sujet suivant Aller en bas

Mr ToutLeMonde et la programmation NES...

Message par vincent2105 le Mer 28 Mai 2014 - 22:00

Bonjour à tous,

Après quelques semaines de programmation en QB64, j'ai eu envie de "changer d'air" et  réaliser un rêve de gosse : apprendre à programmer pour la NES.

J'avais déjà effleuré la chose il y a 6 mois, et j'étais tout content de réussir à afficher une tile. Mais la découverte de QB64 a rapidement eu raison de ma volonté d'apprendre le langage assembleur (asm).

J'ouvre donc ce topic pour me motiver, pour poser des questions aux pros de l'asm ou si je le peux : éclairer les néophytes avec des mots de néophyte (quitte à être corrigé par les pros)...

J'ai commencé mon apprentissage avec les tutos "nerdy nights".
Ils sont très progressifs et un petit exercice clôture chaque chapitre.   http://nintendoage.com/forum/messageview.cfm?catid=22&threadid=7155
J'en suis actuellement au chapitre 7, mais j'ai déjà repéré d'autres tutos  (notamment sur le scrolling), toujours sur le même site. http://nintendoage.com/forum/messageview.cfm?catid=22&threadid=33287

Bref, la documentation est là, à moi de suivre ! Pour l'instant, ca me botte même si je mets souvent un moment à comprendre !

Mon premier projet sera un petit jeu sans prétention : on incarnera un gardien de but et on devra arrêter un maximum de tirs. Différentes vitesses et trajectoires compliqueront la tâche.  coquin

Pour l'instant, j'arrive à afficher des sprites et un background... J'arrive aussi à déplacer mon gardien mais pas comme je le souhaiterais.
En effet, il se déplace tant que le bouton est enfoncé or je souhaiterais qu'il ne se déplace qu'à chaque fois que l'on appuie sur le bouton.
Voici un petit screenshot de mon travail sur émulateur. Le rendu n'est pas le même sur une vraie NES


" />


Pour les curieux, une petite info concernant le choix des couleurs parmi celles disponibles sur la NES et pour avoir une idée des contraintes :
On ne peut utiliser que 4 couleurs par tile de 8x8 pixels.
On appelle ce "groupe de couleurs" une palette.
On dispose de 4 palettes pour les sprites et autant pour le background.
Une couleur est commune aux 4 palettes (dans l'exemple ci dessous : vert).

Pour le background, pour une zone de 32 * 32 px on peut utiliser plusieurs palettes  à condition que le nombre de couleur utilisées ne soit pas supérieur à 4.
En effet, à la fin de notre programme, on crée une base de donnée "attribut" qui permet à la machine de savoir quelle palette elle doit  utiliser pour chaque tile qu'elle doit afficher.

" />


Enfin, j'en reviens aux tutos "nerdy nights", et je me demande : avec plus de 116000 vues pour ces tutos, y'a forcément des gamopats qui ont fouiné la bas ou ailleurs et qui ont pondu quelquechose sur NES non ? Allez les barbus montrez nous tout !  Mr. Green


PS : Je remercie avec du retard le Doc et  Vetea  pour leurs encouragements dans mon dernier topic.   Embarassed


Dernière édition par vincent2105 le Ven 20 Juin 2014 - 11:53, édité 1 fois
avatar
vincent2105
Patient contaminé

Masculin Nombre de messages : 861
Age : 37
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par Vetea le Mer 28 Mai 2014 - 22:45

Ahhh .. L'assembleur ...
En tout cas, je salue ton initiative à faire partager tes expériences surtout pour ce langage qui est à la base de tout.
Passer du QB64 à l'assembleur sur NES, moi je dit CHAPEAU !  thumleft 
Comme les journalistes aiment à dire : Sans transition ! ^^

Pour ma part, après avoir fini Papi Commando sur PC, je me lance dans le développement sur MegaDrive !
A part que je serai toujours avec du bon vieux Basic. ( Et sans doute, un peu d'assembleur ... )

Tu trouveras ici des pros des 1 et des 0 ( Comme Touko qui utilise même des 3 !! Pour dire !  Mr. Green  Mr. Green  ), pour ma part, je ne te serai pas d'une grande aide car pour moi, l'assembleur a toujours été un truc obscur que j'ai utilisé avec Z80 sans pour autant comprendre ce que je faisais souvent ^^ !

Dans tous les cas, ça fait plaisir de voir la communauté pondre des jeux sur consoles quelque soit la technologie utilisée.
Le principal est avant tout, de se faire plaisir.

Amuses toi bien et fais nous découvrir tes avancées. :)
avatar
Vetea
Docteur *
Docteur *

Masculin Nombre de messages : 4295
Age : 46
Localisation : Baillargues
Date d'inscription : 22/06/2012

http://www.rolango.fr/

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par vincent2105 le Jeu 29 Mai 2014 - 7:46

Salut Vetea et merci pour tes encouragements !

Je suis content de voir que toi aussi tu ai de nouveaux projets et pour la Megadrive qui plus est.  thumleft Ton papi rame un peu chez moi mais sache que je le trouve bien sympa, le lancer de grenade me plait bien  Wink 

L'assembleur, de prime abord c'est... différent de qb64 !
Ce que j'aime, c'est qu'à chaque ligne de code on sait "exactement" ce qu'il se passe ! Alors quand je trouve ne seraient-ce que 5 lignes de codes qui m'amènent au résultat escompté, bah c'est jouissif !  

Concernant le déplacement des sprites, j'ai lu sur le forum de nesdev que la méthode présentée dans la plupart des tutoriaux pour débutants était déconseillée. Grosso modo comment faire ?

Dwedit wrote: You re-generate all sprites in the sprite table every frame, based on your array of game objects or another metasprite list.
Answer : Yes, this is the professional way to do it.

You shouldn't be doing noob stuff like responding to joystick input by incrementing or decrement values in your sprite memory, some awful tutorials suggest doing that.
Answer : I believe ALL tutorials suggest that, and because of that an insane amount of people here actually do it that way.
Je pense avoir trouvé plus d'explications là => http://nintendoage.com/forum/messageview.cfm?catid=22&threadid=33378

Je verrai ce point là plus tard. Pour l'instant, je reste avec la" méthode de noob" et j'essaie de résoudre mon petit problème ce soir.
avatar
vincent2105
Patient contaminé

Masculin Nombre de messages : 861
Age : 37
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par Vetea le Jeu 29 Mai 2014 - 9:51

Pour ma part, je potasse "tranquillement" un magnifique tuto sur l'ASM 68000 dédié a la MD (http://bigevilcorporation.co.uk/)
Les concepts de registres d0 - d7, a0 - a7, les OPcodes ( dont certain m'était familier ), etc ...
C'est assez enrichissant meme si ça reste rétrograde a notre époque ... Mais on s'en fout !

Et curieusement, je préfère la lecture d'un tuto asm que d'un tuto sur le C, C++, java etc ... De toute manière, Papi Commando s'en occupe pour moi : Pan Pan Boum Boum !

Je suis désolé que Papi rame chez toi ... C'est hélas le cas chez pas mal de personne.
Le jeu est devenu TRES complexe avec énormément de chose a gérer en temps réel. Même si QB64 est véloce, tout est gère en Software donc très lié au CPU. 
Et comme j'utilise une résolution HD, ça n'arrange pas les choses.

Je dirai qu'il faut minimum un 2.4 GHz double coeur pour faire tourner le jeu correctement. 
J'ai optimise pas mal le moteur mais cela ne sera jamais parfait.
avatar
Vetea
Docteur *
Docteur *

Masculin Nombre de messages : 4295
Age : 46
Localisation : Baillargues
Date d'inscription : 22/06/2012

http://www.rolango.fr/

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par drfloyd le Jeu 29 Mai 2014 - 10:09

disons qu'avec un jeu réellement retro (c'est à dire en 320x200 par exemple) le jeu n'aurait ramé sur aucune machine. Et je pense que tu perd aussi beaucoup du fait des détails que tu as intégré : comme le passage derrière le décor des sprites via une pseudo 3D... ca bouffe terrible.

Sinon oui je suis d'accord je prefererai me mettre à l'ASM qu'au C... en ASM tu prends le controle de la machine... en C tu te fais chier  Mr. Green 

Faut avoir du temps libre pour se mettre à l'assembleur, deja pour bien maitriser, et ensuite pour faire le jeu souhaité.

_______________________________________________________


Mon profil Gamopat Advisor de vendeur :
http://www.gamopat-forum.com/t94659-dr-floyd-advisor







avatar
drfloyd
DOYEN ET PROFESSEUR FOU DE L'HOPITAL

Masculin Nombre de messages : 124497
Age : 48
Localisation : Dpt 62
Date d'inscription : 05/12/2004

http://www.gamopat.com

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par Vetea le Jeu 29 Mai 2014 - 10:12

En C tu te fais chier ... J'approuve Doc' à 200% !! Very Happy
avatar
Vetea
Docteur *
Docteur *

Masculin Nombre de messages : 4295
Age : 46
Localisation : Baillargues
Date d'inscription : 22/06/2012

http://www.rolango.fr/

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par vincent2105 le Jeu 29 Mai 2014 - 21:19

Doc, en effet, faut du temps libre, personnellement, je code très très peu,  mais je lis beaucoup et, inconsciemment, ca rentre.
Parfois, mes lectures n'ont plus trop de rapport avec l'objet de ma recherche, mais cela me donne quelquefois le déclic pour piger une autre notion asm.  Bref, quand j'ai assimilé, et que je pense avoir la solution, j'ouvre notepad. Je ne m'acharne pas. Avec QB64, j'avais de mauvaises habitudes, mon code était dég, je voulais aller trop vite, mais j'arrivais à mes fins.

Vetea a écrit:Et curieusement, je préfère la lecture d'un tuto asm que d'un tuto sur le C, C++, java etc ..
Idem ! Sans dénigrer ces autres langages, mes débuts sont beaucoup plus agréables en assembleur.
Au passage, si Papi passe en 16 bits, je m'achète une Megadrive   joueur fou

Ma lecture pour ce soir : TUTO COMBOS CONTROLLER,  (pas dit que je touche notepad...)
avatar
vincent2105
Patient contaminé

Masculin Nombre de messages : 861
Age : 37
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par vincent2105 le Dim 1 Juin 2014 - 0:01

Bonsoir,

Pour déplacer le ballon du pied du buteur jusqu'au but, je souhaite comparer les 2 ordonnées dont l'écart est égal à  #$88.
J'ai tenté avec l'opcode CMP mais la limite est semble-t-il de #$80.
J'imagine qu'il y a une histoire de drapeaux, sinon je ne vois pas quelle opcode utiliser.
Quelqu'un pour me donner des explications ? scratch 


"CMP : Compare sets flags as if a subtraction had been carried out. If the value in the accumulator is equal or greater than the compared value, the Carry will be set. The equal (Z) and sign (S) flags will be set based on equality or lack thereof and the sign (i.e. A>=$80) of the accumulator."
Code:


Code:
DeplacementBallon:
 
  LDA $0228,x ;charge position Y du ballon (au départ #$D0)
  CMP #$59 ; PROBLEME : Voulu #$48, Max #$59
 
 BMI NouveauTir         ; qd le ballon atteint la ligne de but (#$48) nouveau tir
  SEC             ; "make sure the carry flag is clear"
  SBC #$03     ; le ballon avance de 3 px vers le haut
  STA $0228,x       ; enregistre position x du sprite
 INX   ; 4 * INX => permet de passer au sprite suivant
  INX
  INX
  INX
  CPX #$10          ; Sprite composé de 4 tiles => #$10
  BNE DeplacementBallon
  RTS

NouveauTir:
LoadSpritesBallon2:
  LDX #$00              ; permet de charger la position y du sprite
LoadSpritesLoopBallon2:
  LDA spriteBallon, x        ; load data from address (sprites +  x)
  STA $0228, x          ; store into RAM address ($0200 + x)
  INX                   ; X = X + 1
  CPX #$10            ; Compare X to hex $10, decimal 16  
  BNE LoadSpritesLoopBallon2  
 RTS
avatar
vincent2105
Patient contaminé

Masculin Nombre de messages : 861
Age : 37
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par TOUKO le Mer 4 Juin 2014 - 20:35

Salut sympa ton petit jeu  Very Happy

Sinon pour les comparaisons, tu es limité à #$FF (8 bit quoi ) .
Le seul  soucis que je peux voir avec #$80, serai que tu utilises des nombres signés,CAD nombre positifs #$00 à #$79 0 à 127) et nombres négatifs de #$80 à #$FF (128 à 255) .


Dernière édition par TOUKO le Mer 4 Juin 2014 - 21:16, édité 4 fois
avatar
TOUKO
Docteur *
Docteur *

Masculin Nombre de messages : 12106
Age : 44
Localisation : LE MANS/MARSEILLE
Date d'inscription : 08/07/2010

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par vincent2105 le Mer 4 Juin 2014 - 21:10

Salut TOUKO et merci pour le p'tit mot ça fait toujours plaisir Wink

TOUKO a écrit:Le seul  soucis que je peux voir avec #$80, serai que tu utilises des nombres signés,CAD nombre positifs #$00 à #$79 0 à 127) et nombres négatifs de #$80 à #$FF (128 à 255) .
Après une rapide recherche sur le forum 6502.org, j'ai trouvé çà :
6502.org a écrit:
2.1 THE CMP, CPX, AND CPY INSTRUCTIONS
The CMP, CPX, and CPY instructions are used for comparisons as their mnemonics suggest. The way they work is that they perform a subtraction. In fact,
CMP NUM

is very similar to:
SEC
SBC NUM

Both affect the N, Z, and C flags in exactly the same way. However, unlike SBC, (a) the CMP subtraction is not affected by the D (decimal) flag, (b) the accumulator is not affected by a CMP, and (c) the V flag is not affected by a CMP. A useful property of CMP is that it performs an equality comparison and an unsigned comparison. After a CMP, the Z flag contains the equality comparison result and the C flag contains the unsigned comparison result, specifically:

  • If the Z flag is 0, then A <> NUM and BNE will branch
  • If the Z flag is 1, then A = NUM and BEQ will branch
  • If the C flag is 0, then A (unsigned) < NUM (unsigned) and BCC will branch
  • If the C flag is 1, then A (unsigned) >= NUM (unsigned) and BCS will branch

In fact, many 6502 assemblers will allow BLT (Branch on Less Than) and BGE (Branch on Greater than or Equal) to be used as synonyms for BCC and BCS, respectively.
J'utilisais l'opcode BMI juste après CMP, en la remplaçant par l'opcode BCC, ça marche comme je le voulais  thumleft

En attendant ton aide,  le footeux c'était avancé de #$20  Mr. Green
avatar
vincent2105
Patient contaminé

Masculin Nombre de messages : 861
Age : 37
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par TOUKO le Mer 4 Juin 2014 - 21:16

C'est ça qui va pas :
Code:
BMI NouveauTir 
Si tu veux brancher si Y est inférieur à #$59
il faut utiliser bcc NouveauTir et pas bmi, bmi ne veux pas dire inférieur mais test si négatif .

bcc ,c'est branchement si carry clear, soit si REG (A,X,Y) est inférieur à la valeur comparée .
bcs ,c'est branchement si carry set, soit si REG (A,X,Y) est supérieur ou égal à la valeur comparée .

Mince, je viens de voir que tu as trouvé comme un grand  Wink

En attendant ton aide,  le footeux c'était avancé de #$20  
 MDR 
En tout cas bienvenue dans le monde du 65xx  Wink
avatar
TOUKO
Docteur *
Docteur *

Masculin Nombre de messages : 12106
Age : 44
Localisation : LE MANS/MARSEILLE
Date d'inscription : 08/07/2010

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par vincent2105 le Mer 4 Juin 2014 - 21:31

TOUKO a écrit:bcc ,c'est branchement si carry clear, soit si REG (A,X,Y) est inférieur à la valeur comparée .
bcs ,c'est branchement si carry set, soit si REG (A,X,Y) est supérieur ou égal à la valeur comparée .
 Merci pour l'info, j'avais survolé la liste d'opcodes pour voir celles qui pourraient me servir et quand j'ai trouvé BMI et BPL, j'ai complètement zappé le reste.
TOUKO a écrit:En tout cas bienvenue dans le monde du 65xx  

Ca c'est collector, merci TOUKO !
avatar
vincent2105
Patient contaminé

Masculin Nombre de messages : 861
Age : 37
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par Vetea le Jeu 5 Juin 2014 - 16:05

Il est génial ce post.
Le premier du genre ou l'on découvre un réel partage d'un projet réalisé en assembleur avec des explications, des liens et une volonté de nous faire découvrir les méandres du très bas niveau.

Merci Vincent. Continues.
avatar
Vetea
Docteur *
Docteur *

Masculin Nombre de messages : 4295
Age : 46
Localisation : Baillargues
Date d'inscription : 22/06/2012

http://www.rolango.fr/

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par joelabroc le Jeu 5 Juin 2014 - 17:30

slt
j ai pas tout compris
mais en tout cas cela a l aire bien sympathique
 love console
avatar
joelabroc
Patient incurable

Masculin Nombre de messages : 1088
Age : 38
Localisation : paris
Date d'inscription : 21/02/2014

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par joelabroc le Jeu 5 Juin 2014 - 17:42

de plus je suis content
j ai par la meme ocaze teste papi commando
un petit jeu bien fun quand ta 5 min ou 10    a tue au travail
avatar
joelabroc
Patient incurable

Masculin Nombre de messages : 1088
Age : 38
Localisation : paris
Date d'inscription : 21/02/2014

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par TOUKO le Jeu 5 Juin 2014 - 18:59

u trouveras ici des pros des 1 et des 0 ( Comme Touko qui utilise même des 3 !! Pour dire !     

 MDR 
Je réagis que maintenant ..
avatar
TOUKO
Docteur *
Docteur *

Masculin Nombre de messages : 12106
Age : 44
Localisation : LE MANS/MARSEILLE
Date d'inscription : 08/07/2010

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par vincent2105 le Jeu 5 Juin 2014 - 22:03

Vetea a écrit:Il est génial ce post.
Le premier du genre ou l'on découvre un réel partage d'un projet réalisé en assembleur avec des explications, des liens et une volonté de nous faire découvrir les méandres du très bas niveau.
Merci Embarassed , ce topic est en tout cas un formidable moteur pour mon apprentissage !
Joe la broc a écrit:j ai pas tout compris
mais en tout cas cela a l aire bien sympathique
Je tacherai d'expliquer un peu plus ce que je sais de la NES  dans un prochain message Wink  Merci pour tes encouragements !

TOUKO a écrit:
Dwedit wrote: You re-generate all sprites in the sprite table every frame, based on your array of game objects or another metasprite list.
Ca, c'est pour moi la technique du noob .
Si tu n'utilises que 10 sprites, tu vas te taper la maj de la table des 64 sprites !!
Enfin je dis ça ...
A ce jour, je ne me suis toujours pas penché sur le problème. Ta remarque me fait cependant dire que plus tard j'aurai  besoin de cette technique car  je compte bien utiliser "toutes" les capacités de la NES (afficher 64 sprites). Du coup j'imagine que tu seras du même avis.

J'en profite pour vous faire part de mes intentions graphiques...

Pour l'instant j'ai 22 sprites (4 sprites pour le ballon, 8 sprites pour le gardien, 10 sprites pour le buteur)

Nombre qui va augmenter car je ne suis pas satisfait du look de mes bonhommes. 4 couleurs par sprite c'est un peu restreint. Pour y remédier, je compte doubler leur nombre de couleur.
Il faut forcément utiliser 2 palettes de 4 couleur (dont une couleur commune). Je vais donc créer 2 sprites qui une fois superposés (affichés au même endroit au même moment) créeront l'illusion d'un sprite 6 couleurs.

"Sprite 1 + Sprite 2 = Illusion sprite 6 couleurs. "




Vu que la NES permet d'afficher 8 sprites par ligne et que le gardien a une carrure de 2 sprites, si j'applique mon tour de magie, cela fait 4 sprites sur la ligne, bref Y'A D'LA MARGE  MDR ...
Me vient à l'esprit l'ajout d'un mode 2 joueurs en simultané... oui 2 gardiens dans les mêmes cages  Mr. Green 
Avec la superposition : cela me fait 2 gardiens * 2 sprites *2 ("superpositions") = 8 sprites sur la même ligne.
En principe ca passe mais dites moi si ça risque de clignoter.
Je ne pourrais cependant pas appliquer cette amélioration de la tête au pied car, je ne dois pas oublier que le gardien est sensé arrêter des ballons (soit 2 sprites de plus sur la ligne.)
Je vais donc appliquer "la superposition" pour le buste et me contenterai du sprite "de base" pour les jambes .

Cout de la manoeuvre "2 gardiens + 1 buteur full HD" : environ 40 sprites

Ensuite, je vais créer des tiles de background pour les spectateurs et quelques tiles sprites pour animer les spectateurs.
Et enfin, il faudra que j'affiche le score de chaque joueur. Mais là aussi, il me semble qu'il y a une astuce avec le background...

Bref, tout ca ne sera pas mis en place tant que je n'aurai pas le de jeu jouable avec les sprites actuels.

A+  Wink
avatar
vincent2105
Patient contaminé

Masculin Nombre de messages : 861
Age : 37
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par TOUKO le Jeu 5 Juin 2014 - 23:05

ouai, j'ai modifié mon post car en cherchant j'ai vu qu'il y avait un DMA dédié pour la maj de la table des sprites, donc c'est logique  ..

Sinon tu pourrais faire un mode 2 joueurs alterné tireur/gardien ..
avatar
TOUKO
Docteur *
Docteur *

Masculin Nombre de messages : 12106
Age : 44
Localisation : LE MANS/MARSEILLE
Date d'inscription : 08/07/2010

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par vincent2105 le Sam 7 Juin 2014 - 0:06

Salut,

TOUKO a écrit:Sinon tu pourrais faire un mode 2 joueurs alterné tireur/gardien ..
J'y ai pensé, mais le mode 2 gardiens simultanément, ca représente beaucoup moins de boulot   Mr. Green   Mais avec un peu de volonté ca sera fait !


Bon, là, j'arrive à la première étape importante de mon jeu : les trajectoires.

Comme vous pouvez le voir ci dessous, il y aura 9 trajectoires différentes. (Le tir se fait en 2 étapes : Au pied du buteur, il n'y a que 3 trajectoires mais arrivé à la ligne médiane violette et en fonction de la difficulté on a jusqu'à 9 trajectoires différentes)
en NOIR celles du premier niveau de difficulté
en JAUNE celles débloquées à partir du 2nd niveau de difficulté
en ROUGE celles débloquées à partir du 3eme niveau de difficulté


Pour chaque tir, un "numéro" correspondant à une trajectoire sera tiré au sort.

 ICI  il est évoqué une méthode très courte permettant de générer des nombres aléatoires.
Il suffirait que j'utilise l'opcode "AND" sur le nombre de mon choix pour que la NES retourne un nombre entre 0 et le nombre que je lui ai fourni.

Voici le passage en question :
"And it.
  and #%00000001
Will make it 0 or 1.
  and #%00001111
will make it a number between 0 and 15."
Avec une remarque cependant :

"Kasumi, that only works if you need a range that's a power of 2.
It's more involved if you need another range, especially if it needs to be uniformly distributed.
Maybe you can adjust your algorithm so that it works for values in a power-of-2 range."
Cela me laisse perplexe, quelqu'un peut m'expliquer ou a un lien à me donner ? Un exemple ne serait pas de refus.
J'ai déjà pas mal cherché, mais surement pas au bon endroit  Razz 

Cette méthode vous parait elle adaptée dans mon cas ?

Merci par avance ! Wink
avatar
vincent2105
Patient contaminé

Masculin Nombre de messages : 861
Age : 37
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par vincent2105 le Sam 7 Juin 2014 - 7:54

Après réflexion, je pense que j'avais mal interprété.
Il suffirait que j'utilise l'opcode "AND" sur le nombre de mon choix pour que la NES retourne un nombre entre 0 et le nombre que je lui ai fourni.
Je pense qu'il faut d'abord que j'arrive à générer une graine ("seed" ou nombre aléatoire en binaire, puis interviendra l'opcode AND avec le "nombre limite"
1 et 1 => 1
1 et 0 => 0
0 et 1 => 0
0 et 0 => 0
Exemples de graines que la NES doit générér pour obtenir chacun des nombres compris entre 0 et la "limite"       

      01010000 ; "Graine"("Seed") générée par la NES
and00000111 ; Nombre limite pour le tirage aléatoire (ici 7 en décimal)
      00000000    Numéro aléatoire renvoyé "0"


      01010001 ; "Graine"("Seed") générée par la NES
and00000111 ; Nombre limite pour le tirage aléatoire (ici 7 en décimal)
      00000001  Numéro aléatoire renvoyé "1"   

      01010010 ; "Graine"("Seed") générée par la NES
and00000111 ; Nombre limite pour le tirage aléatoire (ici 7 en décimal)
      00000010  Numéro aléatoire renvoyé "2"

      01010011 ; "Graine"("Seed") générée par la NES
and00000111 ; Nombre limite pour le tirage aléatoire (ici 7 en décimal)
      00000011  Numéro aléatoire renvoyé "3"

      01010100 ; "Graine"("Seed") générée par la NES
and00000111 ; Nombre limite pour le tirage aléatoire (ici 7 en décimal)
      00000100 Numéro aléatoire renvoyé "4"

      01010101 ; "Graine"("Seed") générée par la NES
and00000111 ; Nombre limite pour le tirage aléatoire (ici 7 en décimal)
      00000101 Numéro aléatoire renvoyé "5"

      01010110 ; "Graine"("Seed") générée par la NES
and00000111 ; Nombre limite pour le tirage aléatoire (ici 7 en décimal)
      00000110 Numéro aléatoire renvoyé "6"

      01010111 ; "Graine"("Seed") générée par la NES
and00000111 ; Nombre limite pour le tirage aléatoire (ici 7 en décimal)
      00000111 Numéro aléatoire renvoyé "7"

Suis-je sur la bonne piste ?
avatar
vincent2105
Patient contaminé

Masculin Nombre de messages : 861
Age : 37
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par TOUKO le Sam 7 Juin 2014 - 9:31

Les nombres aléatoire sur ces machines c'est assez la galère .
tu peux utiliser cette fonction
Code:
srand:
   lda      _rndseed + 1
   rol      A
   rol      A
   rol      A
   eor      _rndseed
   ror         A
   php
   lda      _rndseed + 1
   eor      _rndseed
   sta      _rndseed + 1
   lda      _rndseed + 2
   eor      _rndseed
   sta      _rndseed
   plp
   rol      _rndseed
   rol      _rndseed + 1
   lda      _rndseed + 1
   eor      _rndseed
   
   rts
Par contre l'idéal serait de l'appeler dans ta routine nmi, donc il faut que tu es le contrôle dessus .
C'est un nombre aléatoire sur 16 bit, mais rien ne t'empêche d'utiliser 1 ou l'autre partie 8 bit .

Le soucis de ta solution c'est d'avoir les mêmes nombres à chaque partie.
avatar
TOUKO
Docteur *
Docteur *

Masculin Nombre de messages : 12106
Age : 44
Localisation : LE MANS/MARSEILLE
Date d'inscription : 08/07/2010

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par vincent2105 le Dim 8 Juin 2014 - 1:02

Merci  pour la routine  Wink (je la décortiquerai un peu plus tard).
Par contre l'idéal serait de l'appeler dans ta routine nmi, donc il faut que tu es le contrôle dessus .
Avoir le contrôle sur le NMI ?  C'est pouvoir mettre du code entre NMI: et RTI ? Si c'est ça alors "c'est bon". ( J'ai déjà un JSR vers la routine de lecture du controller, que j'aimerai bien sortir de là d'ailleurs pour le mettre après le RTI)
Par contre cette routine sera appelé à chaque frame alors qu'en théorie j'en ai besoin qu'à chaque tir (toutes les secondes je pense), alors pourquoi ca serait l'idéal ? (c'est juste une question)

Bref, j'ai pas du tout avancé pour les trajectoires.
J'ai par contre remplacé les portions de code de lecture des controllers par une routine. Je vais mettre les nombres aléatoires de côté pour l'instant et je vais me concentrer sur la structure du jeu. Concrètement, je vais essayer de faire un menu et d'initialiser mes variables avant de démarrer une partie. Je pense que ca va m'occuper un moment  ! Quand je dis un menu, je serai  déjà content d'afficher un écran de couleur qui disparait quand on appuye sur "start" et qui nous amène à l'écran de jeu...
avatar
vincent2105
Patient contaminé

Masculin Nombre de messages : 861
Age : 37
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par koan75 le Dim 8 Juin 2014 - 1:48

Super post ! Je commence une formation de programmeur en septembre et ce post me parle énormément alors que je suis neophyte ! J'ai juste fait quelque test sur du basic avec une appli telecharger sur l'eshop dsi (Petit computer) mais programmer d'ici 1 ou 2 an un jeu nes me botte bien. Bonne continuation et je serais un fidele lecteur !
avatar
koan75
Patient contaminé

Masculin Nombre de messages : 294
Age : 35
Localisation : Paris
Date d'inscription : 12/08/2013

http://viensfairetesdevoirs.com/

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par vincent2105 le Dim 8 Juin 2014 - 18:07

Salut Koan75, si tu souhaites te lancer dans l'aventure, encore une fois je ne peux que te recommander les tutos nerdy nights ! Bon courage pour la suite et merci pour ton soutien qui m'a un peu plus boosté  Wink

Comme prévu, revoir la structure du jeu me donne du fil à retordre.J'ai néanmoins accompli la mission que je m'étais fixée : afficher un "écran titre" qui bascule vers le jeu (au point mort). Comme on dit les petites victoires font les grandes conquêtes cheers 

Et puisqu'on lui dit pas souvent, merci au Doc d'avoir créé ce forum  thumleft
avatar
vincent2105
Patient contaminé

Masculin Nombre de messages : 861
Age : 37
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par TOUKO le Dim 8 Juin 2014 - 20:32

vincent2105 a écrit:Merci  pour la routine  Wink (je la décortiquerai un peu plus tard).
Par contre l'idéal serait de l'appeler dans ta routine nmi, donc il faut que tu es le contrôle dessus .
Avoir le contrôle sur le NMI ?  C'est pouvoir mettre du code entre NMI: et RTI ? Si c'est ça alors "c'est bon". ( J'ai déjà un JSR vers la routine de lecture du controller, que j'aimerai bien sortir de là d'ailleurs pour le mettre après le RTI)
Par contre cette routine sera appelé à chaque frame alors qu'en théorie j'en ai besoin qu'à chaque tir (toutes les secondes je pense), alors pourquoi ca serait l'idéal ? (c'est juste une question)

Bref, j'ai pas du tout avancé pour les trajectoires.
J'ai par contre remplacé les portions de code de lecture des controllers par une routine. Je vais mettre les nombres aléatoires de côté pour l'instant et je vais me concentrer sur la structure du jeu. Concrètement, je vais essayer de faire un menu et d'initialiser mes variables avant de démarrer une partie. Je pense que ca va m'occuper un moment  ! Quand je dis un menu, je serai  déjà content d'afficher un écran de couleur qui disparait quand on appuye sur "start" et qui nous amène à l'écran de jeu...
C'est ça, par contre le but d'être appelée à chaque frame est justement d'avoir le nombre le plus aléatoire possible ..
Si tu la mets dans ta boucle principale, y'a de fortes chances que tu es toujours les mêmes nombres .
avatar
TOUKO
Docteur *
Docteur *

Masculin Nombre de messages : 12106
Age : 44
Localisation : LE MANS/MARSEILLE
Date d'inscription : 08/07/2010

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES...

Message par vincent2105 le Ven 20 Juin 2014 - 11:33

Salut,

J'ai réussi à créer quelques trajectoires.
Je les appelle en utilisant les boutons droite/gauche.
Pour les 2 premières pas de problème, en revanche lorsque j'ai ajouté la routine de la troisième (même sans l'appeler), j'ai eu un message d'erreur : "Branch address out of range".
Dans chaque routine "trajectoire" (il y en aura 9), j'utilise l'opcode BCC car je compare la position du ballon avec celle de la ligne de but et réinitialise  sa position si elle l'atteint.

Vu la manière dont j'appelle les trajectoires, puis-je utiliser un autre opcode , y'a-t-il un truc pour contourner le problème ou dois-je tout remettre à plat ?




Si en plus j'essaie d'appeler la routine "AppelTrajectoire" j'ai une autre erreur.
avatar
vincent2105
Patient contaminé

Masculin Nombre de messages : 861
Age : 37
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par vingazole le Ven 20 Juin 2014 - 12:08

Les branchements conditionnels sont des branchements relatifs codés sur 1 octet signé (codage en complément à 2) : tu ne peux donc brancher que vers une adresse situé entre (adresse de l'instruction de branchement - 128) et (adresse de l'instruction de branchement + 127). [note : pour chicaner c'est peut-être calculé par rapport à l'adresse de l'instruction suivant l'instruction de branchement...].

Je ne crois pas qu'il y ait de branchement conditionnel long sur ce microprocesseur : la solution serait alors d'utiliser un branchement inconditionnel long (JMP) qui serait "évité" par un branchement conditionnel de condition opposée (BCS dans ton cas si j'en crois la liste des opcodes que j'ai trouvée), ça donnerait quelque chose du genre :


Code:
       LDA $0228,x
       CMP #$49
       BCS suite
       JMP ReinitialisationBallon
suite:


Dernière édition par vingazole le Ven 20 Juin 2014 - 13:00, édité 1 fois
avatar
vingazole
Infirmier

Masculin Nombre de messages : 4011
Age : 43
Localisation : Les Herbiers (85)
Date d'inscription : 05/01/2012

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par vincent2105 le Ven 20 Juin 2014 - 12:43

Ahah ! EXCELLENT ! Merci Vingazole !

Du coup pour ma routine AppelTrajectoire, j'ai utilisé la même astuce à savoir :
Vingazole a écrit:la solution serait alors d'utiliser un branchement inconditionnel long (JMP) qui serait "évité" par un branchement conditionnel de condition opposée

J'ai donc remplacé l'opcode BEQ (branch if equal) par JMP et je l'évite avec BNE (Branch if not equal) 

Code:
AppelTrajectoire:
  LDA NumeroAleatoireTrajectoire
  CMP #$01
  BEQ Tir1
  LDA NumeroAleatoireTrajectoire
  CMP #$02
  BEQ Tir2
  LDA NumeroAleatoireTrajectoire
  CMP #$03
  BNE suite
  JMP Tir3
suite:
  RTS

Merci encore thumleft


avatar
vincent2105
Patient contaminé

Masculin Nombre de messages : 861
Age : 37
Localisation : 82
Date d'inscription : 17/12/2013

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par patapouf31 le Ven 20 Juin 2014 - 12:50

C est un peu HS mais j ai beau m y connaitre en prog c et PHP je comprend rie' a ce que vous dite..

C est quel langage ?
avatar
patapouf31
Patient contaminé

Masculin Nombre de messages : 888
Age : 29
Localisation : De retour à toulouse
Date d'inscription : 07/05/2014

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par vingazole le Ven 20 Juin 2014 - 13:04

C'est de l'assembleur 6502 (la NES utilise un 6502 modifié).
avatar
vingazole
Infirmier

Masculin Nombre de messages : 4011
Age : 43
Localisation : Les Herbiers (85)
Date d'inscription : 05/01/2012

Revenir en haut Aller en bas

Re: Mr ToutLeMonde et la programmation NES...

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Page 1 sur 34 1, 2, 3 ... 17 ... 34  Suivant

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum