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 28 sur 34
Page 28 sur 34 • 1 ... 15 ... 27, 28, 29 ... 34
Re: Mr ToutLeMonde et la programmation NES...
Tu passes par des nametables bruts, tu n'utilises pas de metatiles ?
Du coup tu gères tes collisions sur les blocs de 8px directement ?
Du coup tu gères tes collisions sur les blocs de 8px directement ?
Re: Mr ToutLeMonde et la programmation NES...
Pour l'instant pas de metatiles non, on verra par la suite si ça vaut le cout, pour l'instant, je pense m'en sortir sans. Ca reste du bricolage je conçois.
Et effectivement, je vais gerer les collisions avec le background directement sur les blocs de 8 px, je pense pas que ce soit gênant outre mesure (pas de marche arriere, donc une hitbox d'une tile devrait suffire). Mais je sais que je ne suis pas à l'abri de surprises.
Et effectivement, je vais gerer les collisions avec le background directement sur les blocs de 8 px, je pense pas que ce soit gênant outre mesure (pas de marche arriere, donc une hitbox d'une tile devrait suffire). Mais je sais que je ne suis pas à l'abri de surprises.
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
J'imagine Super Mario bros avec des nametable brutes, le jeu tiendrait a peine sur une ROM de 512Ko (au lieu de 32Ko)
Mais tant que ca marche et que tu t'amuses .
Mais tant que ca marche et que tu t'amuses .
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...
Bon après quand c'est pas une nécessité, je vois pas l'intérêt de se faire chier avec des metatiles .
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
J'ai testé ma rom sur NES, y'a quelques p'tits soucis que je n'avais pas sur émulateur, je tacherai d'y remédier. En tout cas, c'est grisant de voir ça tourner. Allez ça mérite une petite vidéo. (attention au hors piste:p )
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Une petite video ca fait toujours plaisir
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...
ouep par contre, par la suite y'aura p'tet une ROM plus consistante a débugger
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 avance pas mal.
Sauf bug non détecté (je n'ai fait que quelques tests sommaires, faut que je conçoive plus de nametables/tiles vraiment différentes), j'arrive à boucler le scrolling sur les 16 nametables qui composent le circuit et à récupérer le type de tile sur lequel est positionné le kart.
La tile sur laquelle on est positionné (route, herbe, boue, booster, verglas ? etc) affectera la vitesse du kart.
Bref, c'est encourageant !
Sauf bug non détecté (je n'ai fait que quelques tests sommaires, faut que je conçoive plus de nametables/tiles vraiment différentes), j'arrive à boucler le scrolling sur les 16 nametables qui composent le circuit et à récupérer le type de tile sur lequel est positionné le kart.
La tile sur laquelle on est positionné (route, herbe, boue, booster, verglas ? etc) affectera la vitesse du kart.
Bref, c'est encourageant !
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Triple post, désolé
Tout semble fonctionner, même au niveau de la mise à jour de l'attribute table (choix palette parmi les 4 disponibles pour chaque zone de 16x16 pixels).
Sur la lancée, je vais attaquer le split du background (et prevoir un hud). Faut que je revois comment fonctionnent les interruptions, ça va conditionner mes nametables et ma routine de scrolling.
A priori, ça se complique...
Tout semble fonctionner, même au niveau de la mise à jour de l'attribute table (choix palette parmi les 4 disponibles pour chaque zone de 16x16 pixels).
Sur la lancée, je vais attaquer le split du background (et prevoir un hud). Faut que je revois comment fonctionnent les interruptions, ça va conditionner mes nametables et ma routine de scrolling.
A priori, ça se complique...
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
mais c'est tout le sel de la chose, quand ca se complique
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 mais j'ai tendance à être bordélique, donc il faut que je sois beaucoup plus rigoureux maintenant vu que mes projets commencent à prendre plus d'ampleur.
Ca devient le foutoir, j'ai des palettes, des sprites sheets (en BMP, PNG), des scripts python, des nametables, des colonnes de backgrounds à scroller, des tilesets, des attributes tables, qui se baladent dans le dossier quand ils sont pas directement inclus dans mes fichiers asm :/ Sans parler de différentes ébauches de fichiers reset/banking pour le MMC3.
Allez y'a du boulot Heureusement NESASM3 permet d'inclure des fichiers présents dans des dossiers, du coup, j'ai plus d'excuse.
Ca devient le foutoir, j'ai des palettes, des sprites sheets (en BMP, PNG), des scripts python, des nametables, des colonnes de backgrounds à scroller, des tilesets, des attributes tables, qui se baladent dans le dossier quand ils sont pas directement inclus dans mes fichiers asm :/ Sans parler de différentes ébauches de fichiers reset/banking pour le MMC3.
Allez y'a du boulot Heureusement NESASM3 permet d'inclure des fichiers présents dans des dossiers, du coup, j'ai plus d'excuse.
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Yes ! et une interruption ! je remarque malgré tout qu'elle n'est pas nette, on doit surement pouvoir faire mieux. J'aimerais comprendre avant d'en déclencher d'autres.
ROM
ROM
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Pour changer le scrolling proprement lors d'une interruption il faut le faire dans le Hblank (entre les pixels 256 et 320 de la scanline). Du coup quand ton interruption se déclenche, il faut que tu fasses une boucle pour changer de scrolling au bon moment (en prenant en compte le nombre de cycles des instructions de la boucle et de ta routine de changement de scroll).
Sachant que ça ne tombera pas deux fois au même endroit et qu'aucun émulateur n'est précis à 100% il faut souvent y aller à tâtons et surtout tester sur le hardware.
Le debugger de FCEUX t'indique la scanline et le pixel en cours de "render". Ca te donne un point de départ pour la suite.
N'hésites pas si c'est pas super clair :/
Sachant que ça ne tombera pas deux fois au même endroit et qu'aucun émulateur n'est précis à 100% il faut souvent y aller à tâtons et surtout tester sur le hardware.
Le debugger de FCEUX t'indique la scanline et le pixel en cours de "render". Ca te donne un point de départ pour la suite.
N'hésites pas si c'est pas super clair :/
Re: Mr ToutLeMonde et la programmation NES...
Merci beaucoup, je pense avoir saisi reste à mettre ça en pratique !
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 debugger m'est totalement inconnu.
Pourrais tu m'expliquer comment trouver la scanline et le pixel en cours de render stp ?
edit : en bidouillant, j'ai réussi à rectifier le tir Mais ma question demeure
Pourrais tu m'expliquer comment trouver la scanline et le pixel en cours de render stp ?
edit : en bidouillant, j'ai réussi à rectifier le tir Mais ma question demeure
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Alors si j'ai bien suivi, tu utilises NESASM3. Avec NESASM3, tu peux exporter des symbols de tes variables et de tes routines, qui peuvent ensuite être exploiter par le débugger de FCEUX.
Il y a ici un script python qui permet de convertir le fichier .fns ici : https://forums.nesdev.com/viewtopic.php?f=10&t=11114 . (je ne connais pas ce script n'utilisant pas NESASM3, mais si tu as déjà utiliser python ça devrait aller).
FCEUX va automatiquement détecter ces fichiers si ils sont dans le même dossier que ta ROM.
Tu pourras ensuite voir dans le debugger (F1) dans la partie gauche les "labels" de tes routines.
En utilisant le fichier .fns, tu peux relever l'adresse où se trouve une routine/un label en particulier. Avec cette adresse tu vas pouvoir créer un point d'arrêt dans le debugger.
Tu recherches l'adresse grâce au champs à côté de "Seek to", à gauche il te mettra une flèche à côté de l'adresse choisie, tu double cliques sur cette adresse pour créer un point d'arrêt. Il va t'ouvrir une fenêtre pour ça, tu fais juste OK pour le moment. Et maintenant, à chaque fois que ton programme passe par cet endroit, le debugger mettra en pause ton programme pile à cet endroit, et tu pourras utiliser les boutons Step Into / Step Over / Step Out / Run pour avancer dans ton programme.
Et en faisant ça, tu pourras voir dans quel état est l'adresse PPU, quelle scanline en cours, quel pixel, etc . (vers le milieu partie de droite du debugger).
Bon je me relis et c'est un beau merdier haha si tu t'en sors avec ça chapeau ! Mais bon pas de soucis je pourrais expliquer plus clairement si besoin :)
Tiens moi au courant si tu luttes avec ces infos merdiques en vrac ...
edit : j'ai encadré "Add" sur ma capture dans le cas où tu veux ajouter un point directement à une adresse précise sans passer par "Seek to" et le double clique dans la partie gauche.
Il y a ici un script python qui permet de convertir le fichier .fns ici : https://forums.nesdev.com/viewtopic.php?f=10&t=11114 . (je ne connais pas ce script n'utilisant pas NESASM3, mais si tu as déjà utiliser python ça devrait aller).
FCEUX va automatiquement détecter ces fichiers si ils sont dans le même dossier que ta ROM.
Tu pourras ensuite voir dans le debugger (F1) dans la partie gauche les "labels" de tes routines.
En utilisant le fichier .fns, tu peux relever l'adresse où se trouve une routine/un label en particulier. Avec cette adresse tu vas pouvoir créer un point d'arrêt dans le debugger.
Tu recherches l'adresse grâce au champs à côté de "Seek to", à gauche il te mettra une flèche à côté de l'adresse choisie, tu double cliques sur cette adresse pour créer un point d'arrêt. Il va t'ouvrir une fenêtre pour ça, tu fais juste OK pour le moment. Et maintenant, à chaque fois que ton programme passe par cet endroit, le debugger mettra en pause ton programme pile à cet endroit, et tu pourras utiliser les boutons Step Into / Step Over / Step Out / Run pour avancer dans ton programme.
Et en faisant ça, tu pourras voir dans quel état est l'adresse PPU, quelle scanline en cours, quel pixel, etc . (vers le milieu partie de droite du debugger).
Bon je me relis et c'est un beau merdier haha si tu t'en sors avec ça chapeau ! Mais bon pas de soucis je pourrais expliquer plus clairement si besoin :)
Tiens moi au courant si tu luttes avec ces infos merdiques en vrac ...
edit : j'ai encadré "Add" sur ma capture dans le cas où tu veux ajouter un point directement à une adresse précise sans passer par "Seek to" et le double clique dans la partie gauche.
Dernière édition par brokestudio le Lun 22 Mai 2017 - 23:01, édité 1 fois (Raison : typo)
Re: Mr ToutLeMonde et la programmation NES...
Merci encore
Je n'ai pas utilisé le script python. Dans l'éditeur hexa, j'ai très rapidement retrouvé ce que je cherchais grâce au ".fns"
J'enregistre la valeur du scroll au pixel 279. Sur fceux, je n'ai pas eu de meilleurs résultats que sur le screenshot suivant. On constate qu'il manque par endroit les pixels d'une scanline. Dites-moi si vous pensez qu'aucune scanline ne devrait "perdre de pixel".
Je n'ai pas utilisé le script python. Dans l'éditeur hexa, j'ai très rapidement retrouvé ce que je cherchais grâce au ".fns"
J'enregistre la valeur du scroll au pixel 279. Sur fceux, je n'ai pas eu de meilleurs résultats que sur le screenshot suivant. On constate qu'il manque par endroit les pixels d'une scanline. Dites-moi si vous pensez qu'aucune scanline ne devrait "perdre de pixel".
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
NMI et IRQ ca te suffit ?
- NMI:
- Code:
NMI:
;The PPU tells the processor it is starting the VBlank time
;and is available for graphics updates.
LDA #$00
STA $2003
LDA #$02
STA $4014
LDA #%00000000
STA $8000
LDA #8 ;0 = alphabet 8 = smb2
STA $8001
dec scroll
LDA scroll
STA $2005
LDA #0
STA $2005
STA machin
;-----------------------------
LDA #$01
STA $E000
LDA #$5f
STA $C000 ;setup MMC3 to generate an IRQ
LDA #$5f
STA $C001
LDA #$01
STA $E000
LDA #$01
STA $E001
;-----------------------------
; PPU MASK
;7654 3210
;|||| ||||
;|||| ||++- Base nametable address
;|||| || (0 = $2000; 1 = $2400; 2 = $2800; 3 = $2C00)
;|||| |+--- VRAM address increment per CPU read/write of PPUDATA
;|||| | (0: add 1, going across; 1: add 32, going down)
;|||| +---- Sprite pattern table address for 8x8 sprites
;|||| (0: $0000; 1: $1000; ignored in 8x16 mode)
;|||+------ Background pattern table address (0: $0000; 1: $1000)
;||+------- Sprite size (0: 8x8; 1: 8x16)
;|+-------- PPU master/slave select
;| (0: read backdrop from EXT pins; 1: output color on EXT pins)
;+--------- Generate an NMI at the start of the
; vertical blanking interval (0: off; 1: on)
LDA #%10001000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1 // bit 5 sprite 8x16
STA $2000
;76543210
;||||||||
;|||||||+- Grayscale (0: normal color; 1: produce a monochrome display)
;||||||+-- 1: Show background in leftmost 8 pixels of screen; 0: Hide
;|||||+--- 1: Show sprites in leftmost 8 pixels of screen; 0: Hide
;||||+---- 1: Show background
;|||+----- 1: Show sprites
;||+------ Intensify reds (and darken other colors) !!! VERT SUR NES
;|+------- Intensify greens (and darken other colors) !!! ROUGE SUR NES
;+-------- Intensify blues (and darken other colors)
LDA #%00011010 ; enable sprites, enable background, no clipping on left side PPU ;MASK BRV
STA $2001
;;;all graphics updates done by here, run game engine
;JSR ReadController1 ;;get the current button data for player 1
;JSR ReadController2 ;;get the current button data for player 2
RTI
- IRQ:
- Code:
IRQ:
pha
txa
pha ; save A,X and Y. you have to do this because
tya ; IRQs interrupt your main thread of code. having your
pha ; register values change in the middle of that main thread
; would be bad...
LDA #%00000000
STA $8000
LDA #0 ;0 = alphabet 8 = smb2 / bankswitch chr rom
STA $8001
debut:
LDA machin ; 2
CMP #3 ; 2
BEQ suite ;3
INC machin ;5
JMP debut ;3 = 15 cycles
suite:
inc scroll2
LDA scroll2
STA $2005
LDA #0
STA $2005
scrollok:
LDA #$01
STA $E000 ;acknowledge the IRQ and disable further IRQ generation
pla
tay ; get your register values back
pla
tax
pla
RTI
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Dans ton IRQ, ton code pour bankswitcher la CHR-ROM (entre le dernier pha et debut:), il faut qu'il soit après ta boucle, sinon tu changes trop tôt et c'est pour ça (je pense) que tu as un bout de ligne foireuse.
Re: Mr ToutLeMonde et la programmation NES...
Bingo ! 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...
Petite astuce d'optimisation, dans ton irq t'as pas besoin de pusher Y/X vu que tu les utilises pas
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
Oui, tu as raison en fait, j'ai bêtement fait un copier/coller d'une routine sur laquelle on avait planché l'an dernier. Vu qu'on désirait plusieurs interruptions, cela était nécessaire vu qu'on utilisait aussi ces 2 registres. (si je me souviens bien)
D'ailleurs c'est la prochaine étape pour le moment, je n'ai fait qu'une tentative infructueuse.
D'ailleurs c'est la prochaine étape pour le moment, je n'ai fait qu'une tentative infructueuse.
Dernière édition par vincent2105 le Jeu 25 Mai 2017 - 16:10, édité 1 fois
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 truc c'est que moins de temps prend une irq, mieux c'est
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
je viens de tomber sur ça : ROM : http://forums.nesdev.com/download/file.php?id=69
Allez y'a encore du boulot
Allez y'a encore du boulot
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
ouai mais bon 32 bank pour faire l'animation de tuiles, y a interet a trouver d'autre truc a mettre dans ces banks pour les completer sinon c'est beaucoup de gachie.
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...
J'essaie depuis un moment, mais je n'arrive pas à déclencher plusieurs interruptions.
Quelqu'un connait il la procédure (mmc3) ? Je continue de chercher
Quelqu'un connait il la procédure (mmc3) ? Je continue de chercher
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
J'ai regardé très rapidement, mais il te suffit de "réarmer" les registres qui vont bien, comme pour la première.
$C000 et $E001 devraient suffirent (et encore il est possible que tu puisses te passer de $E001).
Par contre attention, la valeur que tu vas recharger dans $C000 se base à partir de la dernière IRQ et non du haut de l'écran. Si ta première interruption est sur la scanline 100 et que tu en veux une autre à 108, tu ne vas pas recharger avec 108 mais avec 8 (8-1 ou -2 selon la version du chip MMC3). Tout ça est à confirmer, j'ai peut être lu trop vite et pas bien saisi la doc.
Tout est là : https://wiki.nesdev.com/w/index.php/MMC3#IRQ_Specifics
$C000 et $E001 devraient suffirent (et encore il est possible que tu puisses te passer de $E001).
Par contre attention, la valeur que tu vas recharger dans $C000 se base à partir de la dernière IRQ et non du haut de l'écran. Si ta première interruption est sur la scanline 100 et que tu en veux une autre à 108, tu ne vas pas recharger avec 108 mais avec 8 (8-1 ou -2 selon la version du chip MMC3). Tout ça est à confirmer, j'ai peut être lu trop vite et pas bien saisi la doc.
Tout est là : https://wiki.nesdev.com/w/index.php/MMC3#IRQ_Specifics
Re: Mr ToutLeMonde et la programmation NES...
Bon, ça marche par contre j'ai du recharger les 4 registres. Merci encore à tous ceux qui prennent le temps de m'aider
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
$E000, $C000, $C001, $E001
Je te mets le code si tu veux, mais je suis toujours aussi brouillon, je code entre 2 clients...
Je te mets le code si tu veux, mais je suis toujours aussi brouillon, je code entre 2 clients...
- IRQ:
- Code:
IRQ:
pha
txa
pha ; save A,X and Y. you have to do this because
tya ; IRQs interrupt your main thread of code. having your
pha ; register values change in the middle of that main thread
; would be bad...
LDx IRQ_index
CPX #0
BEQ IRQ_0
JMP IRQ_1
IRQ_0:
debut:
LDA machin ; 2
CMP #3 ; 2
BEQ suite ;3
INC machin ;5
JMP debut ;3 = 15 cycles
suite:
inc scroll2
LDA scroll2
STA $2005
LDA #0
STA $2005
scrollok:
;;---------------- BANKSWITCH CHR ROM
LDA #%00000000
STA $8000
LDA #0 ;0 = alphabet 8 = smb2
STA $8001
INC IRQ_index
LDX IRQ_index
LDA #$01
STA $E000
LDA #$6
STA $C000 ;setup MMC3 to generate an IRQ
LDA #$6
STA $C001 ;setup MMC3 to generate an IRQ
LDA #$01
STA $E001
JMP exit
IRQ_1:
dec scroll3
dec scroll3
LDA scroll3
STA $2005
LDA #0
STA $2005
LDA #%00000000
STA $8000
LDA #0 ;0 = alphabet 8 = smb2
STA $8001
FIN_IRQ:
;----------------
LDA #$01
STA $E000 ;acknowledge the IRQ and disable further IRQ generation
exit:
pla
tay ; get your register values back
pla
tax
pla
RTI
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Page 28 sur 34 • 1 ... 15 ... 27, 28, 29 ... 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 28 sur 34
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum