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 12 sur 34
Page 12 sur 34 • 1 ... 7 ... 11, 12, 13 ... 23 ... 34
Re: Mr ToutLeMonde et la programmation NES...
On a perdu une interruption en route (background vert), mais là je pense pas que ce soit un pb d'émulation, je pense qu'on peut encore "creuser"... hein touko ?!
vincent2105- Patient incurable
- Nombre de messages : 1381
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Bon j'ai réussi à retrouver la verte, mais il manque encore une grise (en fait, il en manquait 2 tout à l'heure)
Les valeurs de tab_lignes n'ont apparemment aucune incidence
Les valeurs de tab_lignes n'ont apparemment aucune incidence
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 alors c'est justement ce que j'ai supprimé (un changement de couleurs)
Celui là (le premier):
Normalement la première interruption change le fond en vert
La seconde le change en ça:
La troisième en ça:
Essayes ça (normalement le gris devrait être noir):
Celui là (le premier):
- Code:
LDX index
BNE suite1
STX $2001 ;BG off to force stupid emulators to realize i'm changing the BG color
LDA #$3F
STA $2006
STY $2006 ;set the BG color
LDA #$0A
STA $2007
JMP fin
Normalement la première interruption change le fond en vert
La seconde le change en ça:
- Code:
LDA #$3F
STA $2006
STY $2006 ;set the BG color
LDA #$22
STA $2007
La troisième en ça:
- Code:
STY $2001 ;BG off to force stupid emulators to realize i'm changing the BG color
LDA #$3F
STA $2006
STY $2006 ;set the BG
LDA #$28
STA $2007
Essayes ça (normalement le gris devrait être noir):
- Code:
.inesprg 1 ;//one PRG bank
.ineschr 0 ;//zero CHR bank
.inesmir 0 ;//mirroring type 0
.inesmap 4 ;//memory mapper 4 (MMC3)
.org $C000
.bank 0
index .rs 1
start:
LDA #$80
STA $2000 ; NMI generation on
LDA #$08
STA $2001 ; turn the BG on so that MMC3 can count
LDA #$40
STA $4017 ;disable frame counter IRQs
CLI ; enable IRQ processing
gameloop:
JMP gameloop
;// NMI routine
nmi:
LDA #$00
STA $2006
STA $2006 ;set the BG color to black
STA index ; remet l'index à 0
;LDA #$06
STA $2007
STA $E000
LDA #$20
STA $C000 ;setup MMC3 to generate an IRQ after
LDA #$30
STA $C001 ;120 scanlines
STA $E001
LDA #$00
STA $2006
STA $2006
LDA #$08
STA $2001 ;BG on to enable counting for MMC3
RTI
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...
;****************************
; Acquitte l'interruption, et copie la ligne/interruption suivante dans $C000
STX $E000
LDY #$00
STY $2001 ;BG off to force stupid emulators to realize i'm changing the BG color
LDA #$3F
STA $2006
STY $2006 ;set the BG color to green
STY $2007
; On paramètre pour la prochaine interruption
LDX index
LDA tab_lignes , X
CMP #$FF
BNE fin ; Si oui on quitte l'interruption
STA $C001
INX
STX index
suite1:
CPX #$01
BNE suite2
STY $2001 ;BG off to force stupid emulators to realize i'm changing the BG color
LDA #$3F
STA $2006
STY $2006 ;set the BG color
LDA #$22
STA $2007
JMP fin
suite2:
CPX #$02
BNE suite3
STY $2001 ;BG off to force stupid emulators to realize i'm changing the BG color
LDA #$3F
STA $2006
STY $2006 ;set the BG
LDA #$28
STA $2007
JMP exit_interruption
suite3:
fin:
; Peut être nécessaire pour lancer le décompte des ligne,mais pas sur
LDA #$08
STA $2001
LDY #$00
STY $2006
STY $2006
STY $2007
STX $E001 ; Write to $E001 to enable the IRQ counter
exit_interruption:
pla
tay ; get your register values back
pla
tax
pla
RTI
;//wait until screen refresh
vwait:
lda $2002
bpl vwait ;//wait for start of retrace
vwait_1:
lda $2002
bmi vwait_1 ;//wait for end of retrace
RTS
tab_lignes:
.db $40, $50, $60 , $FF
;//jump table points to NMI, Reset, and IRQ start points
.bank 1
.org $fffa
.dw nmi
.dw start
.dw irq
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
Nouveau code:
- Code:
.inesprg 1 ;//one PRG bank
.ineschr 0 ;//zero CHR bank
.inesmir 0 ;//mirroring type 0
.inesmap 4 ;//memory mapper 4 (MMC3)
.org $C000
.bank 0
index .rs 1
start:
LDA #$80
STA $2000 ; NMI generation on
LDA #$08
STA $2001 ; turn the BG on so that MMC3 can count
LDA #$40
STA $4017 ;disable frame counter IRQs
CLI ; enable IRQ processing
gameloop:
JMP gameloop
;// NMI routine
nmi:
LDA #$00
STA $2006
STA $2006 ;set the BG color to black
STA index ; remet l'index à 0
;LDA #$06
STA $2007
STA $E000
LDA #$20
STA $C000 ;setup MMC3 to generate an IRQ after
LDA #$30
STA $C001 ;120 scanlines
STA $E001
LDA #$00
STA $2006
STA $2006
LDA #$08
STA $2001 ;BG on to enable counting for MMC3
RTI
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...
;****************************
; Acquitte l'interruption, et copie la ligne/interruption suivante dans $C000
STX $E000
LDY #$00
STY $2001 ;BG off to force stupid emulators to realize i'm changing the BG color
; On paramètre pour la prochaine interruption
LDX index
LDA tab_lignes , X
CMP #$FF
BEQ fin ; Si oui on quitte l'interruption
STA $C001
INC index
STX $E001 ; Write to $E001 to enable the IRQ counter
suite1:
CPX #$01
BNE suite2
;STY $2001 ;BG off to force stupid emulators to realize i'm changing the BG color
LDA #$3F
STA $2006
STY $2006 ;set the BG color
LDA #$22
STA $2007
JMP exit_interruption
suite2:
CPX #$02
BNE suite0
;STY $2001 ;BG off to force stupid emulators to realize i'm changing the BG color
LDA #$3F
STA $2006
STY $2006 ;set the BG
LDA #$28
STA $2007
JMP exit_interruption
suite0: ; index = 0
;STY $2001 ;BG off to force stupid emulators to realize i'm changing the BG color
LDA #$3F
STA $2006
STY $2006 ;set the BG color to green
STY $2007
JMP exit_interruption
; // Ici On remet le fond en noir pour signaler la fin des interruptions
fin:
STY $2006
STY $2006
STY $2007
exit_interruption:
pla
tay ; get your register values back
pla
tax
pla
RTI
;//wait until screen refresh
vwait:
lda $2002
bpl vwait ;//wait for start of retrace
vwait_1:
lda $2002
bmi vwait_1 ;//wait for end of retrace
RTS
tab_lignes:
.db $70, $08, $70, $FF
;//jump table points to NMI, Reset, and IRQ start points
.bank 1
.org $fffa
.dw nmi
.dw start
.dw irq
Dernière édition par TOUKO le Jeu 28 Avr 2016 - 19:23, édité 5 fois (Raison : modifs sur le code)
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
Non,c'est un peu pour ça aussi que je code au feeling ici
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
J'ai testé ton dernier code, mais c'est le blackout Touko :/
J'ai aussi essayé en corrigeant cette portion de code : (en remplacant BNE par BEQ)
J'ai aussi essayé en corrigeant cette portion de code : (en remplacant BNE par BEQ)
- Code:
LDA tab_lignes , X
CMP #$FF
BNE fin ; Si oui on quitte l'interruption
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
TADAM !!!
Ca reste du bidouillage, mais ça avance
Ca reste du bidouillage, mais ça avance
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Attention, en $C000 et $C001, il faut mettre le nombre de lignes avant la prochaine interruption, et non le numéro de la ligne où l'on veut l'interruption.
Dans la nmi, vu qu'on est à zéro, ça sera 120 lignes pour la ligne 120.
Mais à la première interruption, il faut mettre 16 si on veut la suivante en 136.
Enfin, il me semble.
Dans la nmi, vu qu'on est à zéro, ça sera 120 lignes pour la ligne 120.
Mais à la première interruption, il faut mettre 16 si on veut la suivante en 136.
Enfin, il me semble.
nemokantio- Patient contaminé
- Nombre de messages : 345
Age : 48
Localisation : Delgastan
Date d'inscription : 23/01/2013
Re: Mr ToutLeMonde et la programmation NES...
Oui, en modifiant légèrement un des codes de touko, c'est ce qu'on fait : dans le nmi, j'ai déclaré un background rouge et déclenche une IRQ $20 lignes après, puis je me sers des valeurs du tableau tab_lignes pour en déclencher d'autres :
LDX index
LDA tab_lignes , X
CMP #$FF
BNE continue
JMP exit_interruption
continue:
STA $C000
STA $C001
tab_lignes:
.db $70, $08, $70, $FF
LDX index
LDA tab_lignes , X
CMP #$FF
BNE continue
JMP exit_interruption
continue:
STA $C000
STA $C001
tab_lignes:
.db $70, $08, $70, $FF
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Ah bonne remarque,j avoue ne pas trop avoir pensé à ca.
Edit: en relisant l explication sur github, ca semble etre ca, puisque c est un compte a rebours.
Sinon vincent c est effectivement une erreur de ma part, c est BEQ qu il fallait, bien vu
Edit: en relisant l explication sur github, ca semble etre ca, puisque c est un compte a rebours.
Sinon vincent c est effectivement une erreur de ma part, c est BEQ qu il fallait, bien vu
Dernière édition par TOUKO le Jeu 28 Avr 2016 - 18:56, édité 1 fois
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
C'est tout l'effet que ca te fait Touko ? On a reussi ! mince quoi !
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Lol non c est super que ca marche, surtout avec mon gourage de boucle lol .
Tu peux remplacer le bne fin interruption par beq et virer le jmp .
Tu peux remplacer le bne fin interruption par beq et virer le jmp .
Dernière édition par TOUKO le Jeu 28 Avr 2016 - 19:25, édité 2 fois
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
Je vais te taquiner, vincent2105 !
Tu devrais essayer de remplacer toutes tes comparaisons/sauts en suiteN par une gestion des couleurs avec une table !
tab_couleurs:
.db couleur1,couleur2,couleur3,...
Tu devrais essayer de remplacer toutes tes comparaisons/sauts en suiteN par une gestion des couleurs avec une table !
tab_couleurs:
.db couleur1,couleur2,couleur3,...
nemokantio- Patient contaminé
- Nombre de messages : 345
Age : 48
Localisation : Delgastan
Date d'inscription : 23/01/2013
Re: Mr ToutLeMonde et la programmation NES...
j'ai fait les corrections, et mis ta table, le code pourrait servir à quelqu'un d'autre, autant qu'il soit clean .
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
Oui, c'est mieux comme çanemokantio a écrit:Je vais te taquiner, vincent2105 !
Tu devrais essayer de remplacer toutes tes comparaisons/sauts en suiteN par une gestion des couleurs avec une table !
tab_couleurs:
.db couleur1,couleur2,couleur3,...
- Spoiler:
LDX index
LDA #$00
STA $2001 ;BG off to force stupid emulators to realize i'm changing the BG color
LDA #$3F
STA $2006
LDA #$00
STA $2006 ;set the BG color
LDA tab_couleurs,x
STA $2007
CPX #$02
BNE fin
LDA #$01
STA $E000 ;acknowledge the IRQ and disable further IRQ generation
fin:
tab_couleurs:
.db $28, $22, $0A
Bon maintenant, qu'est ce que je fais, je m'attaque au scrolling avec parallaxes tout de go ?
Concernant mes .db , faut il que je scinde mes colonnes de background autant de fois qu'il y a d'interruptions ?
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Bah oui ,et même un nouveau tableau, celui des timers, car je suppose que tes parallaxes vont pas bouger à la même vitesse .
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
Oui ca me semblait normal, mais avec la fatigue, je me demandais si c'était le premier truc à faire Je m'y attaquerait que demain soir alors...
Tu vas rire, j'ai jamais utilisé de timer. Je pensais juste travailler avec plusieurs variables de vitesse de scroll... Je regarderais à ça alors
Tu vas rire, j'ai jamais utilisé de timer. Je pensais juste travailler avec plusieurs variables de vitesse de scroll... Je regarderais à ça alors
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Enfin des timers, des variables que tu incrémentes/décrémentes pour donner un tempo,des compteurs quoi .
Dernière édition par TOUKO le Ven 29 Avr 2016 - 12:12, édité 1 fois
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
Je suis en train d'y réfléchir, le moins qu'on puisse dire, c'est qu'il va y'avoir du remue ménage dans la routine de scrolling
Une belle prise de tête en perspective !
Une belle prise de tête en perspective !
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
L'idéal est que tu calcules ton tableau de scroll pendant la boucle principale ou le NMI pour que dans ton irq h-sync tu n'ais que les valeurs de scrolling à copier dans les registres .
Ma routine de parallaxes me prend 47 cycles max si le parallaxe doit être modifié, on peut faire moins en utilisant la ZP .
Ma routine de parallaxes me prend 47 cycles max si le parallaxe doit être modifié, on peut faire moins en utilisant la ZP .
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
Salut !
Je me suis penché sur le contenu de la routine IRQ, si quelqu'un veut jeter un coup d'oeil pour me dire ce qu'il en pense... Dans la boucle principale, je mettrai à jour les valeurs de scroll pour chaque parallaxe... J'espère avoir résolu cette partie du problème...
Je me suis penché sur le contenu de la routine IRQ, si quelqu'un veut jeter un coup d'oeil pour me dire ce qu'il en pense... Dans la boucle principale, je mettrai à jour les valeurs de scroll pour chaque parallaxe... J'espère avoir résolu cette partie du problème...
- Spoiler:
- Code:
;VARIABLES
ZP_scroll_LOW .rs 1
ZP_scroll_HIGH .rs 1
scroll_prlx_0 .rs 1
scroll_prlx_1 .rs 1
scroll_prlx_2 .rs 1
;_____________________________________________________________________________________
RESET:
;initialisation adresse tableau "tab_valeurs_scroll" dans pointeur
LDA tab_valeurs_scroll
STA ZP_scroll_LOW
LDA tab_valeurs_scroll + 1
STA ZP_scroll_HIGH
;_____________________________________________________________________________________
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...
;****************************
; Acquitte l'interruption, et copie la ligne/interruption suivante dans $C000
STX $E000
LDY #$00
LDX index
LDA tab_lignes , X
CMP #$FF
BEQ exit_interruption
STA $C000
STA $C001
INX
STX index
LDA #$08
STA $2001
STY $2006 ; clean up PPU address registers
STY $2006
; [???
;copie valeurs scroll dans registre
LDA index
ASL A
TAY
LDA [ZP_scroll_LOW],Y
STA $2005 ; write the horizontal scroll count register
LDA #$00 ; no vertical scrolling
STA $2005
LDY #$00
; ???]
STX $E001 ; Write to $E001 to enable the IRQ counter
exit_interruption:
pla
tay ; get your register values back
pla
tax
pla
RTI
;_____________________________________________________________________________________
tab_lignes:
.db $70, $08, $70, $FF
tab_valeurs_scroll:
.dw scroll_prlx_0, scroll_prlx_1, scroll_prlx_2
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 me semble bien ma foi ..
le ldy #$00 avant le ; ???] tu peux le supprimer je pense .
le ldy #$00 avant le ; ???] tu peux le supprimer je pense .
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
Salut à tous,
me voilà encore avec une question : quelqu'un sait il comment localiser l'adresse de départ de la CHR ROM d'une ROM NES quelconque ?
Edit : Dans l'éditeur hexadecimal, j'ai réussi a localiser la chr rom du jeu "kung fu" (pas trop dur vu la taille du jeu), et, avec un copier coller et un petit script python j'ai pu l'utiliser pour un nouveau projet. Une victoire pour moi !
Mais je me pose toujours la question, car j'aimerais bien trouver l'adresse de départ de manière plus académique (notamment pour les ROMs de tailles plus importantes) :p
me voilà encore avec une question : quelqu'un sait il comment localiser l'adresse de départ de la CHR ROM d'une ROM NES quelconque ?
Edit : Dans l'éditeur hexadecimal, j'ai réussi a localiser la chr rom du jeu "kung fu" (pas trop dur vu la taille du jeu), et, avec un copier coller et un petit script python j'ai pu l'utiliser pour un nouveau projet. Une victoire pour moi !
- Spoiler:
Mais je me pose toujours la question, car j'aimerais bien trouver l'adresse de départ de manière plus académique (notamment pour les ROMs de tailles plus importantes) :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...
upsilandre doit savoir, envoies lui un message /
Invité- Invité
Re: Mr ToutLeMonde et la programmation NES...
Oui, je pense aussi qu'il sait. Mais je vais encore chercher un peu, je le garde comme joker
De toute facon tout est dit dans le header, faut juste que je zieute tout ca dans l'editeur hexa... Après le souci que je pourrai avoir c'est avec les jeux qui utilisent de la CHR RAM...
De toute facon tout est dit dans le header, faut juste que je zieute tout ca dans l'editeur hexa... Après le souci que je pourrai avoir c'est avec les jeux qui utilisent de la CHR RAM...
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
En fait pour de la CHR ROM, c'est simple, il suffit de regarder les 5ème et 6ème octets de la ROM.
http://wiki.nesdev.com/w/index.php/NES_2.0#Big_ROMs
Maintenant, je vais tacher de comprendre comment ca fonctionne avec de la CHR RAM...
http://wiki.nesdev.com/w/index.php/NES_2.0#Big_ROMs
0-3: string "NES"
4: byte Number of 16384 byte program ROM pages
5: byte Number of 8192 byte character ROM pages (0 indicates CHR RAM)
6: bitfield Flags 6
7: bitfield Flags 7
8-15: byte These bytes are not used, and should be 00h.
Maintenant, je vais tacher de comprendre comment ca fonctionne avec de la CHR RAM...
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Mr ToutLeMonde et la programmation NES...
Avec de la CHR-RAM du peut pas faire grand chose. Ca implique que les tiles sont alors totalement en vrac n'importe ou dans la PGR-ROM (et peuvent meme etre parfois sous une forme compressé)
C'est le truc cool avec la CHR-ROM de la NES, ca assure de facilement trouver les tiles sur la cartouches (forcement fixe et non compressé) mais ca represente qu'un quart des cartouches.
La configuration avec CHR-RAM et donc avec uniquement une ROM cpu (PGR-ROM) c'est au final une configuration plus standard tel que sur les autres consoles (comme la Master System) mais moins pratique pour le hacking.
C'est le truc cool avec la CHR-ROM de la NES, ca assure de facilement trouver les tiles sur la cartouches (forcement fixe et non compressé) mais ca represente qu'un quart des cartouches.
La configuration avec CHR-RAM et donc avec uniquement une ROM cpu (PGR-ROM) c'est au final une configuration plus standard tel que sur les autres consoles (comme la Master System) mais moins pratique pour le hacking.
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 ta réponse upsilandre :) Tant pis pour ces ROMs la...
Sinon, tu maitrises les IRQ ? J'ai un peu laissé ca de coté pour le moment, mais je voulais savoir si tu avais déjà réalisé un scrolling avec parallaxes sans utiliser le "sprite 0 hit"...
Sinon, tu maitrises les IRQ ? J'ai un peu laissé ca de coté pour le moment, mais je voulais savoir si tu avais déjà réalisé un scrolling avec parallaxes sans utiliser le "sprite 0 hit"...
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 jamais testé. T'es partie sur une configuration MMC3?
upsilandre- Interne
- Nombre de messages : 5138
Age : 49
Localisation : val de marne 94
Date d'inscription : 31/05/2015
Page 12 sur 34 • 1 ... 7 ... 11, 12, 13 ... 23 ... 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 12 sur 34
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum