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 4 sur 34
Page 4 sur 34 • 1, 2, 3, 4, 5 ... 19 ... 34
Re: Mr ToutLeMonde et la programmation NES...
Bah ça avance, bon j'ai pété de rire quand j'ai vu le changement de sport, mais ça reste du tout bon
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
Touko, quand ouvre tu ton topic pour nous parler de tes avancées ?
_______________________________________________________
Re: Mr ToutLeMonde et la programmation NES...
mes avancées sur quoi ???drfloyd a écrit:Touko, quand ouvre tu ton topic pour nous parler de tes avancées ?
Pare ce qu'en ce moment, elles avancent pas bcp
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
c'est bien ce que je pensais
Dommage
Dommage
_______________________________________________________
Re: Mr ToutLeMonde et la programmation NES...
Attention j'annule rien, mais entre le boulot et le perso, je suis crevé et en ce moment j'ai pas envie de coder .drfloyd a écrit:c'est bien ce que je pensais
Dommage
Sinon j'ai envie de faire une adaptation de barbarian sur PCE, une version amiga ++ ..
Une version de Ghost and goblins aussi sur PCE .
Ces 2 projets en marge de mes gros du moment, a savoir chuck suivi du shoot sgx .
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
Salut,
J'ai testé ma ROM sur ma NES, apparemment ça plante dès que les 2 joueurs appuyent sur un bouton simultanément . Sinon, le reste semble fonctionner.
J'ai fait quelques recherches, mais rien trouvé pour l'instant.
EDIT : Je viens de m'apercevoir que le problème est présent depuis que j'ai ajouté l'écran titre.
J'ai testé ma ROM sur ma NES, apparemment ça plante dès que les 2 joueurs appuyent sur un bouton simultanément . Sinon, le reste semble fonctionner.
J'ai fait quelques recherches, mais rien trouvé pour l'instant.
EDIT : Je viens de m'apercevoir que le problème est présent depuis que j'ai ajouté l'écran titre.
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Surement encore un soucis d'init de variables, ou de boucle infinie .
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
Salut,
Je fais quelques révisions (tables de sauts).
Je vais prendre pour exemple le chargement de différentes palettes de couleurs, mais par la suite cela pourrait aussi me servir à charger des backgrounds et autres...
Voici la routine que j'utilise pour écrire ma palette dans le PPU :
J'aimerais utiliser d'autres palettes et les charger à loisir à partir de cette même routine.
J'ai donc créé une liste de palettes (.DW) et des palettes (.DB)
Souci : je ne sais pas comment charger l'adresse de la palette choisie.
En espérant avoir été clair.
Merci
Je fais quelques révisions (tables de sauts).
Je vais prendre pour exemple le chargement de différentes palettes de couleurs, mais par la suite cela pourrait aussi me servir à charger des backgrounds et autres...
Voici la routine que j'utilise pour écrire ma palette dans le PPU :
- Code:
LDX #$00
LoadPalettesSpriteLoop:
LDA palette_1, x
STA $2007
INX
CPX #$10
BNE LoadPalettesSpriteLoop
RTS
;-----------------------------------
palette_1:
.db $02,$31,$32,$33,$02,$35,$36,$37,$02,$39,$3A,$3B,$02,$3D,$3E,$0F
J'aimerais utiliser d'autres palettes et les charger à loisir à partir de cette même routine.
J'ai donc créé une liste de palettes (.DW) et des palettes (.DB)
Souci : je ne sais pas comment charger l'adresse de la palette choisie.
- Code:
LDX #$00
LoadPalettesSpriteLoop:
LDA ??????, x
STA $2007
INX
CPX #$10
BNE LoadPalettesSpriteLoop
RTS
;-----------------------------------
liste_palettes:
.dw palette_1, palette_2 ...
palette_1:
.db $02,$31,$32,$33,$02,$35,$36,$37,$02,$39,$3A,$3B,$02,$3D,$3E,$0F
palette_2:
.db $25,$12,$17,$19,$25,$12,$17,$19,$25,$12,$17,$19,$25,$12,$17,$19
...
En espérant avoir été clair.
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...
Je pense qu'il faut utiliser un pointeur en page zéro (zp_ptr, voir post de TOUKO du 21 juin, 16:08) pour stocker l'adresse de la palette à charger :
A confirmer/infirmer par TOUKO
- Code:
; à ce point, A désigne le numéro de palette (A=0 pour palette_1, A=1 pour palette_2, ...)
ASL A ; A = A*2
TAX ; X = A
LDA liste_palettes , X ; copie l'adresse de la palette dans zp_ptr
STA zp_ptr ;
LDA liste_palettes + 1 , X ;
STA zp_ptr + 1 ;
LDY #$00
LoadPalettesSpriteLoop:
LDA (zp_ptr),Y
STA $2007
INY
CPY #$10
BNE LoadPalettesSpriteLoop
RTS
;-----------------------------------
liste_palettes:
.dw palette_1, palette_2 ...
A confirmer/infirmer par TOUKO
vingazole- Infirmier
- Nombre de messages : 4522
Age : 50
Localisation : Midian
Date d'inscription : 05/01/2012
Re: Mr ToutLeMonde et la programmation NES...
vincent2105 a écrit:
J'ai décidé de laisser tomber le foot pour le tennis.
tu as raison, c'est plus simple de commencer par un jeu de tennis je pense.
_______________________________________________________
Re: Mr ToutLeMonde et la programmation NES...
drfloyd a écrit:tu as raison, c'est plus simple de commencer par un jeu de tennis je pense.
Doc, en fait, il s'agissait d'un petit jeu de tirs au buts... pas de simulation en vue pour l'instant
@Vingazole
J'ai pas le temps de tester (boulot), mais y'a un truc que je ne comprends pas dans ta suggestion : tu ne récupères que l'octet de poids faible. Que vaut zp_ptr + 1 ?
- Code:
LDA (zp_ptr),Y
Edit : J'ai essayé ta routine, elle fonctionne. 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...
Quand tu fais LDA (zp_ptr),Y le microprocesseur va chercher l'adresse 16 bits (word) pointée par zp_ptr : 8 bits en zp_ptr et 8 bits en zp_ptr+1.
Il récupère alors la valeur 8 bits stockée en "adresse_16bits + Y" et la stocke dans le registre A.
http://en.wikibooks.org/wiki/6502_Assembly#Zero_Page_Indirect_Indexed_with_Y:_.28zp.29.2Cy
Il récupère alors la valeur 8 bits stockée en "adresse_16bits + Y" et la stocke dans le registre A.
http://en.wikibooks.org/wiki/6502_Assembly#Zero_Page_Indirect_Indexed_with_Y:_.28zp.29.2Cy
vingazole- Infirmier
- Nombre de messages : 4522
Age : 50
Localisation : Midian
Date d'inscription : 05/01/2012
Re: Mr ToutLeMonde et la programmation NES...
Vingazole a raison il faut utiliser une variable sur 16 bit en ZP comme
Pointeur .
Tu dois initialiser d abord l adresse de ton tableau dans le pointeur (prealablement déclaré bien sur lol) .
Lda #mon_tableau
Sta zp_ptr
Lda #mon_tableau + 1
Sta zp_ptr + 1
Ensuite pour accéder aux valeurs du tableau.
Ldy #00
Lda (zp_ptr) , y ou lda [zp_ptr] , y selon ton compilateur .
Iny
Pointeur .
Tu dois initialiser d abord l adresse de ton tableau dans le pointeur (prealablement déclaré bien sur lol) .
Lda #mon_tableau
Sta zp_ptr
Lda #mon_tableau + 1
Sta zp_ptr + 1
Ensuite pour accéder aux valeurs du tableau.
Ldy #00
Lda (zp_ptr) , y ou lda [zp_ptr] , y selon ton compilateur .
Iny
Dernière édition par TOUKO le Dim 2 Nov 2014 - 18:46, édité 1 fois
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
Bordel, ça cause assembleur, énorme (là je suis à la rue)
_______________________________________________________
Re: Mr ToutLeMonde et la programmation NES...
C est comme tout le doc, ca s apprend
Puis qd tu t y mets c est pas complique en fait.
Puis qd tu t y mets c est pas complique en fait.
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
je sais, je sais, mais à mon age... et je manque aussi de temps pour apprendre...
Je' n'aurai pas du lacher au bout de quelques jours quand j'avais décidé de m'y mettre dans les années 80. Mais il faut dire qu'à l'époque on etait pas aidé pour apprendre, y avait pas internet, pas d'amis connaisseur, peu de bouquins.
Tans pis, je suis passé à coté
Je' n'aurai pas du lacher au bout de quelques jours quand j'avais décidé de m'y mettre dans les années 80. Mais il faut dire qu'à l'époque on etait pas aidé pour apprendre, y avait pas internet, pas d'amis connaisseur, peu de bouquins.
Tans pis, je suis passé à coté
_______________________________________________________
Re: Mr ToutLeMonde et la programmation NES...
On est jamais trop vieux pour apprendre
Et puis tu peux tenter le dev megadrive en basic !!!
Et puis tu peux tenter le dev megadrive en basic !!!
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
La preuve, je viens de changer de métier à 40 ans^^TOUKO a écrit:On est jamais trop vieux pour apprendre
Tu peux même te mettre à l'asm 68000 si tu veux de l'assembleur "facile" : il est très orthogonal et tu as même des instructions de multiplication et de division (comme sur les x86)Et puis tu peux tenter le dev megadrive en basic !!!
vingazole- Infirmier
- Nombre de messages : 4522
Age : 50
Localisation : Midian
Date d'inscription : 05/01/2012
Re: Mr ToutLeMonde et la programmation NES...
LOL, ça c'est pas facile pourtant ..La preuve, je viens de changer de métier à 40 ans^^
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
Salut,
J'ai repris le code depuis le début, sans le tester au fur et à mesure sur NES (faute de temps)... et bien sur... ça tourne nickel sur émulateur mais pas sur NES .
Je pense avoir trouvé une possible erreur dans mon code, mais n'ai pas le temps de réessayer sur le vrai hardware...
Mes variables, constantes, et pointeurs sont déclarés en zp ($0000-$00FF). J'ai vu sur http://wiki.nesdev.com/w/index.php/Sample_RAM_map que les pointeurs en ZP étaient déclarés à partir de $0010. Est-ce impératif ? Qu'est ce qui le justifie ?
(Actuellement, je déclare certains pointeurs avant $0010).
Je continue de chercher les causes possibles et j'apprends pas mal de truc au passage.
Sinon, j'ai crée un début de mode 1 joueur avec un adversaire imbattable. Une fois les bugs résolus, j'attaquerai l'affichage du score.
J'ai repris le code depuis le début, sans le tester au fur et à mesure sur NES (faute de temps)... et bien sur... ça tourne nickel sur émulateur mais pas sur NES .
Je pense avoir trouvé une possible erreur dans mon code, mais n'ai pas le temps de réessayer sur le vrai hardware...
Mes variables, constantes, et pointeurs sont déclarés en zp ($0000-$00FF). J'ai vu sur http://wiki.nesdev.com/w/index.php/Sample_RAM_map que les pointeurs en ZP étaient déclarés à partir de $0010. Est-ce impératif ? Qu'est ce qui le justifie ?
(Actuellement, je déclare certains pointeurs avant $0010).
Je continue de chercher les causes possibles et j'apprends pas mal de truc au passage.
Sinon, j'ai crée un début de mode 1 joueur avec un adversaire imbattable. Une fois les bugs résolus, j'attaquerai l'affichage du 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...
Non ce n'est pas impératif, et l'exemple donné sur ton lien est un exemple de mappage de la RAM que tu peux utiliser .
Maintenant si tu veux pas prendre de risques, utilises la ZP à partir de $0010, et regardes sur le vrai hard si ça marche .
C'est peut être toujours le même problème de variables non initialisées, certains émulateur mettent toute la RAM à 0 lors du démarrage, ce que la console ne fait pas forcement .
Maintenant si tu veux pas prendre de risques, utilises la ZP à partir de $0010, et regardes sur le vrai hard si ça marche .
C'est peut être toujours le même problème de variables non initialisées, certains émulateur mettent toute la RAM à 0 lors du démarrage, ce que la console ne fait pas forcement .
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
Non, la RAM est remise a zero comme suit (mais merci pour la précision;) ) :C'est peut être toujours le même problème de variables non initialisées, certains émulateur mettent toute la RAM à 0 lors du démarrage, ce que la console ne fait pas forcement .
- Code:
RESET:
SEI ; disable IRQs
CLD ; disable decimal mode
LDX #$40
STX $4017 ; disable APU frame IRQ
LDX #$FF
TXS ; Set up stack
INX ; now X = 0
STX $2000 ; disable NMI
STX $2001 ; disable rendering
STX $4010 ; disable DMC IRQs
JSR vblankwait
clrmem:
LDA #$00
STA $0000, x
STA $0100, x
STA $0300, x
STA $0400, x
STA $0500, x
STA $0600, x
STA $0700, x
LDA #$FE
STA $0200, x ;move all sprites off screen
INX
BNE clrmem
JSR vblankwait
[...]
Maintenant si tu veux pas prendre de risques, utilises la ZP à partir de $0010, et regardes sur le vrai hard si ça marche .
J'essaierai ça dès que possible mais vu que ce n'est qu'un exemple de mappage, j'y crois plus trop. Je crois que je suis bon pour ciseler mon code et voir à quel moment ça coince.
Au rythme auquel j'avance, je vous souhaite de joyeuses fêtes
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Ce qui est bizarre c'est que ça marche sous émulateur, bon à moins que tu titilles le hard, en général c'est souvent un soucis de variable .
Mais ta routine clear RAM semble correcte ma foi ..
PS:Je vois un SEI, t'as bien remis les interruptions avec un CLI après ??
Bonnes fêtes à toi aussi
Mais ta routine clear RAM semble correcte ma foi ..
PS:Je vois un SEI, t'as bien remis les interruptions avec un CLI après ??
Bonnes fêtes à toi aussi
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
bon à moins que tu titilles le hard, en général c'est souvent un soucis de variable .
Bein, je pense qu'il y a un peu des deux !
J'ai fais quelques tests et, en supprimant la routine qui permettait de revenir à l'écran titre une fois une partie terminée et celle qui génère un nombre aléatoire, mon programme ne plante plus sur le vrai hard. C'est déjà ça...
Quelque soit l'endroit ou est appelé ma routine "srand", ca plante sur NES. Je relirai mon code plus attentivement, notamment les endroits où je récupère la variable "seed".
PS:Je vois un SEI, t'as bien remis les interruptions avec un CLI après ??
Cette portion de code vient des tutos "nerdy nights" ; pour mes programmes, je fais "bêtement" le copier-coller, mais non, il n'y a pas de CLI où que ce soit... Ca se termine par
- Code:
;PPUCTRL ($2000)
;The PPU tells the processor it is starting the VBlank time
;and is available for graphics updates.
LDA #%10010000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1
STA $2000
LDA #%00011110 ; enable sprites, enable background, no clipping on left side
STA $2001
(Puis suivent : forever - nmi - rti)
Merci TOUKO
Au passage, si toi ou un autre ne sait plus quoi faire d'un bouquin pour apprendre à programmer le 6502, je suis preneur
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Ca veut surement dire que tu touchais à des emplacements mémoires qu'il fallait pas .J'ai fais quelques tests et, en supprimant la routine qui permettait de revenir à l'écran titre une fois une partie terminée et celle qui génère un nombre aléatoire, mon programme ne plante plus sur le vrai hard. C'est déjà ça...
J'ai pas ça hélas, mais tu peux trouver plein de tuto sur le net:Au passage, si toi ou un autre ne sait plus quoi faire d'un bouquin pour apprendre à programmer le 6502, je suis preneur
https://www.dropbox.com/s/g4h2ewoftto49bq/programmanual.pdf?dl=0
https://www.dropbox.com/s/mbi3dhp4t949bdv/using6502.pdf?dl=0
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
J'ai appris le 6502 en freestyle a vrai dire , ce processeur est assez simple on peut le connaitre par cœur assez rapidement (comparé au monstre qu'est le X86 par exemple).
Il faut juste avoir en tête que le microprocesseur ne fait pas grand chose , il lit , il fait éventuellement un calcul logique ou arithmétique dessus et le réécrit quelque part.
J'utilise ce lien personnellement : http://www.6502.org/tutorials/6502opcodes.html
Pour ça que je trouve le 6502 génial pour commencé , parce qu'on voit très bien toute les instruction du premier coup oeil et il n'est pas très sophistiqué comparé a d'autres assembleurs , y a juste les strict nécessaire pour faire un programme.
En gros lire/écrire dans une variable , condition , boucle et fonction et avec ça tu fait un jeu
Après l'expérience personnelle y joue aussi un très grand rôle et ça seul la pratique continu et régulière te permet d'avoir un bon niveau.
Je conseille de lire aussi les doc officiel ou officieux de la NES c'est des mines d'or information et sont souvent exhaustive.
Il faut juste avoir en tête que le microprocesseur ne fait pas grand chose , il lit , il fait éventuellement un calcul logique ou arithmétique dessus et le réécrit quelque part.
J'utilise ce lien personnellement : http://www.6502.org/tutorials/6502opcodes.html
Pour ça que je trouve le 6502 génial pour commencé , parce qu'on voit très bien toute les instruction du premier coup oeil et il n'est pas très sophistiqué comparé a d'autres assembleurs , y a juste les strict nécessaire pour faire un programme.
En gros lire/écrire dans une variable , condition , boucle et fonction et avec ça tu fait un jeu
Après l'expérience personnelle y joue aussi un très grand rôle et ça seul la pratique continu et régulière te permet d'avoir un bon niveau.
Je conseille de lire aussi les doc officiel ou officieux de la NES c'est des mines d'or information et sont souvent exhaustive.
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
Moi ce que j'aime dans ce type de CPU, c'est la marge d'optimisation que tu peux avoir, elle est tout simplement énorme, rien qu'à voir ce que des gourous arrivent à pondre d'un C64 @0,9 mhz ..
Bien sur il faut avoir pas mal de pratique pour en tirer tout le maximum, mais c'est payant .
Bien sur il faut avoir pas mal de pratique pour en tirer tout le maximum, mais c'est payant .
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
vous me faites rêver les gars , c'est beau de maitriser l'asm !
pckid- Infirmier
- Nombre de messages : 3753
Age : 47
Localisation : ile de france (94)
Date d'inscription : 29/09/2011
Re: Mr ToutLeMonde et la programmation NES...
bah on s'y ai mis comme des grands, rien de spectaculaire
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
Oui je sais , mais toi touko avant l'asm , tu en avais jamais fait ?
pckid- Infirmier
- Nombre de messages : 3753
Age : 47
Localisation : ile de france (94)
Date d'inscription : 29/09/2011
Re: Mr ToutLeMonde et la programmation NES...
Non, je faisais du C, puis j'ai commencé à remplacer des routines en asm petit à petit, et j'ai appris comme ça ..
maintenant je vais plus vite en asm qu'en C, et surtout le code est déjà optimisé ..
maintenant je vais plus vite en asm qu'en C, et surtout le code est déjà optimisé ..
Invité- Invité
Page 4 sur 34 • 1, 2, 3, 4, 5 ... 19 ... 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 4 sur 34
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum