GAMOPAT
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

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 11 sur 34 Précédent  1 ... 7 ... 10, 11, 12 ... 22 ... 34  Suivant

Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par Invité Mar 26 Avr 2016 - 15:09

C'est ironique vincent2105 code sur nes mais ne va pas discuté sur nesdev , et je vois touko et stef discuté sur nesdev mais qui eux ne code ni sur nes ni sur SNES Mr ToutLeMonde et la programmation NES... - Page 11 3621806995
LOL, non on échange aussi, voir le topic sur la compression .

l'interruption c'est pour savoir quand tu vas changer le scrool non ?
Oui ça permet de se synchroniser avec le faisceau de balayage sur une ligne bien précise .

Oui, mais il a réservé 7 octets pour sa variable scroll, il arrive ainsi a splitter son background en 7 et à les faire scroller horizontalement à 7 vitesses différentes. 
Oui, il utilise le trick de collision pour se positionner sur une ligne bien précise, et ensuite il utilise des boucles pour se synchroniser sur les autres lignes, c'est (pour moi) quasi inutilisable sorti d'une demo, car tu perds trop de CPU qui dépense des cycles à attendre .
C'est d'ailleurs pour ça que les mappers évolués sur nes ont des systèmes d'interruption h-sync, qui permettent de générer une interruption sur les lignes souhaitées, donc potentiellement sur chacune des lignes écran .

Ca me donne l'impression que tout est possible avec le "sprite 0 hit" non ? 
Non car comme tu ne peux pas repositionner le sprite en cours de frame, ça ne génère qu'une seule interruption/frame,donc 1 seul split écran possible,le reste est du code timé pour se synchroniser .

Merci pour ton avis éclairé Mr ToutLeMonde et la programmation NES... - Page 11 Icon_wink (concernant nesdev, j'y vais de temps en temps en tant que visiteur, mais je préfère discuter en français, c'est pourquoi je continue ici  Mr ToutLeMonde et la programmation NES... - Page 11 435303 ) 
Pourtant y'a des mecs très calé en nes là bas .

Invité
Invité


Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par vincent2105 Mar 26 Avr 2016 - 16:33



Oui, mais il a réservé 7 octets pour sa variable scroll, il arrive ainsi a splitter son background en 7 et à les faire scroller horizontalement à 7 vitesses différentes. 
Oui, il utilise le trick de collision pour se positionner sur une ligne bien précise, et ensuite il utilise des boucles pour se synchroniser sur les autres lignes, c'est (pour moi) quasi inutilisable sorti d'une demo, car tu perds trop de CPU qui dépense des cycles à attendre .
C'est d'ailleurs pour ça que les mappers évolués sur nes ont des systèmes d'interruption h-sync, qui permettent de générer une interruption sur les lignes souhaitées, donc potentiellement sur chacune des lignes écran .

Ca me donne l'impression que tout est possible avec le "sprite 0 hit" non ? 
Non car comme tu ne peux pas repositionner le sprite en cours de frame, ça ne génère qu'une seule interruption/frame,donc 1 seul split écran possible,le reste est du code timé pour se synchroniser .
Alors là, un grand merci Touko, c'est beaucoup plus clair pour moi maintenant ! thumleft Après je dis pas que je posterai pas aussi sur nesdev de temps à autre Wink
vincent2105
vincent2105
Patient incurable

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

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par Invité Mar 26 Avr 2016 - 17:03

Après je dis pas que je posterai pas aussi sur nesdev de temps à autre Mr ToutLeMonde et la programmation NES... - Page 11 Icon_wink
L'avantage c'est qu'ils pourraient te filer tout un tas d'infos est d'astuces utiles que tu trouveras pas ici .  Wink 
Mais bon si tu n'aimes pas poster en anglais, faut pas te formaliser non plus .
avatar
Invité
Invité


Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par vincent2105 Mar 26 Avr 2016 - 23:11

Vite fait, je partage un lien d'un topic que j'ai trouvé hyper intéressant au cours de mes lectures sur les parallaxes, on y découvre entre autres Battletoads sur NES vu par upsilandre (message 80)... http://desbitsetdespixels.forumactif.org/t146p75-nes-vs-master-system-fiiiiiiiight
On apprend un tas de trucs et on en prend plein les yeux ! D'une manière générale, les posts d'upsilandre sont une mine d'informations, je l'en remercie au passage :)
vincent2105
vincent2105
Patient incurable

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

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par Invité Mar 26 Avr 2016 - 23:52

Pour ma part je suis guère intéresser par nesdev aussi , j'y vais parce que la SNES est pas simple et que j'aime bien avoir de manière ponctuel des réponses a mes interrogations mais je trouve en général les discussions sur SNESDev trop inintéressant ça parle plus d'algorhytme de manière général que de la SNES et perso c'est pas ou je vais pour apprendre la prog ou l'algo.
avatar
Invité
Invité


Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par Invité Mer 27 Avr 2016 - 0:17

perso c'est pas ou je vais pour apprendre la prog ou l'algo.
En même temps c'est pas le but, c'est utile par contre si tu veux savoir certaines choses sur le hard, tricks ou autres joyeuseté hardware sur les machines nintendo.
avatar
Invité
Invité


Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par Invité Mer 27 Avr 2016 - 10:09

En même temps c'est pas le but, c'est utile par contre si tu veux savoir certaines choses sur le hard, tricks ou autres joyeuseté hardware sur les machines nintendo.
Clairement mais si tu vas sur SNESDev il y a plus des topic sur ces question la que sur le Hard Wink
avatar
Invité
Invité


Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par vincent2105 Mer 27 Avr 2016 - 11:26

J'ai trouvé un exemple d'utilisation d'interruption avec le mmc3 : https://github.com/ahefner/tenes/blob/master/tech/mmc3irqs.txt
Y'a juste un point à éclaircir : apparemment le code est écrit en "nbasic", je pense avoir compris que :
set est la suite d'opérations LDA / STA
gosub => JSR
goto => JMP
return => RTS
par contre est ce que je fais une boulette si je fais l'impasse sur "resume" ? (je peux pas tester le code, c'est surtout pour comprendre)
vincent2105
vincent2105
Patient incurable

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

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par nemokantio Mer 27 Avr 2016 - 13:39

Je dirais que resume, c'est un retour d'interruption.
La fonction d'interruption se termine, et ça retourne à l'endroit du programme où s'était déclenchée l'interruption.
Pour reprendre l'execution normale du programme...
Un rts mais d'interruption quoi...
avatar
nemokantio
Patient contaminé

Masculin Nombre de messages : 345
Age : 48
Localisation : Delgastan
Date d'inscription : 23/01/2013

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par Invité Mer 27 Avr 2016 - 13:54

ok le rts pour l'interruption sur 6502 c'est rti Wink
avatar
Invité
Invité


Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par Invité Mer 27 Avr 2016 - 14:41

Oui resume c'est rti en asm,vu que NMI est une interruption donc il faut un RTI et non un RTS .
D'ailleurs resume sous entend une interruption,dans le sens "reprendre une action interrompue" .
avatar
Invité
Invité


Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par vincent2105 Mer 27 Avr 2016 - 14:58

Ok, merci à tous les 3 Wink
J'ai recopié le code en asm, et j'ai pu l'assembler et voir la rom tourner sur émulateur (fceuxd ok, nestopia non).
A présent, je vais pouvoir faire quelques essais :)
Pour ceux qui voudraient également faire quelques tests, voici le code :
Spoiler:


Dernière édition par vincent2105 le Mer 27 Avr 2016 - 23:09, édité 1 fois
vincent2105
vincent2105
Patient incurable

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

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par vincent2105 Mer 27 Avr 2016 - 22:31

Afin d'avoir plusieurs interruptions et de changer la couleur de fond à chacune d'entre elle, j'ai conservé le code de la nmi et j'ai tenté de modifier la routine "IRQ" mais sans succès... 
Autrement dit je n'arrive pas à déclencher d'autres interruptions :/ Je me replongerai la dedans demain...
vincent2105
vincent2105
Patient incurable

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

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par Invité Mer 27 Avr 2016 - 22:41

Normal, je pense que la modif de l'interruption se fait dans le NMI (vblank sur nes ??) ..
Donc il faut que tu paramètres la prochaine scanline sur le mmc3 dans irq .

ton exemple ne change la couleur qu'un foi, à la ligne 120, donc le code qui indique au mmc3 quand générer une irq est dans le NMI, toi il faut que tu le mettes dans irq.

En gros tu dois faire :
NMI:   ; On remet tout par defaut
je remets la couleurs du fond par defaut
je paramètre le mmc3 pour la ligne ou je veux ma première interruption 

rti

irq:   ; On modifie la couleur de fond et génére une nouvelle interruption dans la frame en cours
je change la couleur du fond
je paramètre le mmc3 pour la prochaine ligne

rti
avatar
Invité
Invité


Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par vincent2105 Mer 27 Avr 2016 - 22:49

En gros tu dois faire :
NMI:
je remets la couleurs du fond par defaut
je paramètre le mmc3 pour la ligne ou je veux ma première interruption 

rti

IRQ:
je change la couleur du fond
je paramètre le mmc3 pour la prochaine ligne

RTI
C'est ce que je voulais faire :)  en gras, c'est la où je coince...
vincent2105
vincent2105
Patient incurable

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

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par Invité Mer 27 Avr 2016 - 22:53

Ok, je dirai

Code:
  LDY #$01
  STY $E000
 
  LDX index
  LDA tab_lignes , X
  STA $C000        ;setup MMC3 to generate an IRQ  
  STA $C001       
 
  STY $E000 
  STY $E001

  INC index
Par contre j'ai l'impression que les valeurs des lignes sont en hexa :
120 est mis en $20(low) et $01 (partie high)


Dernière édition par TOUKO le Jeu 28 Avr 2016 - 9:37, édité 1 fois
avatar
Invité
Invité


Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par vincent2105 Mer 27 Avr 2016 - 23:00

Non non excuse moi, j'avais fait un test avant... j'ai  remplacé la valeur $78(120) par $20 juste pour tester et j'ai oublié de rectifier après  Embarassed
vincent2105
vincent2105
Patient incurable

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

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par Invité Mer 27 Avr 2016 - 23:08

Pour moi, y'a pas à utiliser 2 octets (on a pas plus de $FF scanlines)... Après de dis p'tet des aneries.
Oui  Razz ,non je déconne.
En fait tu as 262 lignes en tout dont 224 visibles sur nes je crois,le reste ce sont les lignes du vblank,mais si le mmc3 permet comme sur PCE de générer des interruptions sur les ligne du vblank, tu peux avoir les 262 lignes(utile pour jouer des samples par exemple ).
Par contre si il ne sait générer des interruptions que pendant l'affichage tu as raison 256 valeurs suffisent .
avatar
Invité
Invité


Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par vincent2105 Mer 27 Avr 2016 - 23:45

Lol, j'ai pas mal pris la raillerie, tu peux y aller  MDR

Je regarderai cette histoire de scanlines plus tard, par contre dans ton code, y'a un truc qui diffère du tuto. tu écris des valeurs différentes en $c000 et $c001 (alors quelles sont identiques dans le tuto), idem pour $e000 et $e001... 

PS : je sais pas si tu as vu mon message précédent, ça aura p'tet une incidence
vincent2105
vincent2105
Patient incurable

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

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par Invité Jeu 28 Avr 2016 - 9:35

Ah oui, l'habitude de la pce dsl  Mr. Green.
Non tu as raison, vu qu'il écrit 2x la même valeur dans les 2 registres semble montrer que tu ne peux que mettre une valeur 8 bits pour les lignes .
Je modifie le code.
Code:
; Acquitte l'interruption, et copie la ligne/interruption suivante dans $c000
  LDY #$01
  STY $E000
  
; On paramètre pour la prochaine interruption
  LDX index
  LDA tab_lignes , X  
  STA $C001      
  
  STY $E000  ;Write to $E000 again to latch in the countdown value
  STY $E001  ; Write to $E001 to enable the IRQ counter

  INC index

; Peut être nécessaire pour lancer le décompte des ligne,mais pas sur
  LDA #$08
  STA $2001
Donc si j'ai compris le tuto, dans le NMI en $C000  tu mets la première ligne et dans $C001 la suivante(lui il a mis la même chose pour ne générer qu'une interruption ) .
Ensuite dans irq le fait d'acquiter l'interruption (lire/écrire dans $E000) va copier le contenu de $C001 dans $C000, ensuite tu mets la ligne suivante dans $C001(qui sera recopiée dans $C000 à la prochaine interruption) .

Version optimisée(comme une lecture/écriture suffit, peut importe la valeur dans $E000/$E001):
Code:
; Acquitte l'interruption, et copie la ligne/interruption suivante dans $C000
  LDX index
  STX $E000
  
; On paramètre pour la prochaine interruption  
  LDA tab_lignes , X  
  STA $C001      
  
  STX $E000  ;Write to $E000 again to latch in the countdown value
  STX $E001  ; Write to $E001 to enable the IRQ counter

  INC index

; Peut être nécessaire pour lancer le décompte des ligne ,mais pas sur
  LDA #$08
  STA $2001


Dernière édition par TOUKO le Jeu 28 Avr 2016 - 11:21, édité 9 fois
avatar
Invité
Invité


Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par nemokantio Jeu 28 Avr 2016 - 9:41

Je pense que le compteur de scanline est sur 8 bits.
D'après le tuto, tu écris d'abord le nombre de lignes avant la prochaine interruption en $C000, puis en $C001.
Dans $E000 et $E001, j'ai l'impression qu'il suffit d'y écrire une valeur, peu importe laquelle (dans le tuto ils écrivent des 1).
Ensuite, tu veux qu'il y ait plusieurs irq qui se déclenchent.
Dans la routine nmi tu dois choisir à quelle ligne se déclenche la première interruption irq.
Dans la routine irq, il te faut un compteur pour savoir où tu en es.
Et il te faut définir le nombre de lignes avant la prochaine.
Si tu es sur la dernière interruption irq, il faut faire juste la partie qui arrête les irq (comme dans le tuto).

EDIT :
Donc avec ce qu'à fait Touko, tu as ton compteur avec index.
avatar
nemokantio
Patient contaminé

Masculin Nombre de messages : 345
Age : 48
Localisation : Delgastan
Date d'inscription : 23/01/2013

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par Invité Jeu 28 Avr 2016 - 11:26

Oui c'est exactement ça .
Donc pour résumer :
$C000 : contient la ligne où doit avoir l'interruption (à initialiser 1 foi pendant le NMI).

$C001: contient la valeur de la ligne suivante où générer une interruption, copié automatiquement dans $C000 lors de la lecture/écriture dans $E000,donc doit être initialisée pendant le NMI.

$E000: désactive/acquitte les interruptions du MMC3 si on lit/écrit (peut importe la valeur, elle sert à rien),et copie le contenu de $C001 dans $C000 .

$E001:active les interruptions du MMC3 si on lit/écrit (peut importe la valeur, elle sert à rien).

PS: Bien sur cela ne prend pas en compte la conf correcte des vecteurs d'interruptions qui doit être faite avant .


Dernière édition par TOUKO le Jeu 28 Avr 2016 - 13:45, édité 1 fois
avatar
Invité
Invité


Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par vincent2105 Jeu 28 Avr 2016 - 13:34

Merci à tous les 2 Wink
En utilisant ta routine Touko, j'ai réussi à déclencher plusieurs interruptions mais visiblement pas avec les valeurs que j'avais déclarées dans tab_lignes (il semblerait que ca ne prenne en compte que la valeur de la première écriture à $c000 dans le NMI) et pas à chaque frame...
Spoiler:
J'ai fait ça rapidement et entre 2 clients comme d'hab, donc le risque d'étourderies de ma part est grand... Mais c'est début !
Je vais essayer d'assimiler toutes vos explications Wink
vincent2105
vincent2105
Patient incurable

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

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par Invité Jeu 28 Avr 2016 - 13:43

C'est déjà un début, quand ça sera maîtrisé, tu feras ce que tu veux avec .

Sinon si tu peux mettre ton code, peut être qu'on verra ce qui cloche .

EDIT: en regardant mon code y'a un truc qui me parait bizarre .
Il faut sortir du NMI avec index = index + 2, car:
nmi:
$C000 = tab_lignes , index  = ligne 1 (première interruption)
$C001 = tab_lignes , index + 1  = ligne suivant

irq:
$C001 = tab_lignes , index + 2 = 1ere ligne suivante dans irq .
inc index

Essayes ça :
Code:
; Acquitte l'interruption, et copie la ligne/interruption suivante dans $C000
  STX $E000
  
; On paramètre pour la prochaine interruption
  LDX index  
  LDA tab_lignes , X  
  STA $C001        
  
  STX $E001  ; Write to $E001 to enable the IRQ counter

  INC index


Dernière édition par TOUKO le Jeu 28 Avr 2016 - 14:00, édité 5 fois (Raison : n)
avatar
Invité
Invité


Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par vincent2105 Jeu 28 Avr 2016 - 14:03

Je t'avertis c'est brut de coffre.J'ai vraiment fait ça à l'arrache Embarassed
J'étais juste content de voir qu'il y avait eu plusieurs interruptions  Mr. Green
J'ai vu que t'avais édité, j'ai remplacé, mais apparemment pas de changement...
 
Spoiler:
vincent2105
vincent2105
Patient incurable

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

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par Invité Jeu 28 Avr 2016 - 14:29

Ouhla, la suite après inc index, je vois pas à quoi ça pourrait servir ..
EDIT:Ah oui à changer la couleurs du bckgnd .

Essayes ça(j'ai un peu optimisé aussi) :
Code:
Ouhla, la suite après inc index, je vois pas à quoi ça pourrait servir ..
EDIT:Ah oui à changer la couleurs du bckgnd .

Essayes ça(j'ai un peu optimisé aussi) :
.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 #$3F
  STA $2006
  LDA #$00 
  STA $2006        ;set the BG color to red
 
  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 
  CPX #$FF      ; Fin du tableau ??
  BEQ .exit_interruption    ; Si oui on quitte l'interruption
  STA $C001         

  INC index

; Peut être nécessaire pour lancer le décompte des ligne,mais pas sur
  ;LDA #$08
  ;STA $2001
  ;**************************** 
  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
 
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 
 
suite3:
fin:
    ; Peut être nécessaire pour lancer le décompte des ligne,mais pas sur
  LDA #$08
  STA $2001
 
  STY $2006
  STY $2006
 
  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


Dernière édition par TOUKO le Jeu 28 Avr 2016 - 14:59, édité 1 fois
avatar
Invité
Invité


Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par vincent2105 Jeu 28 Avr 2016 - 14:58

J'obtiens "en continu" le resultat suivant :
Spoiler:
Un détail pour pouvoir assembler, j'ai remplacé :
Code:
 BEQ .exit_interruption    ; Si oui on quitte l'interruption
Par :
  BNE continue
  JMP exit_interruption    ; Si oui on quitte l'interruption
continue:
vincent2105
vincent2105
Patient incurable

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

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par Invité Jeu 28 Avr 2016 - 14:59

Attention je viens de mettre à jour le code ..

Un détail pour pouvoir assembler, j'ai remplacé : 
Ah mince je pensais pas que le saut faisait plus de 127 octets .. Confused

Ok, je mets le nouveau code(j'ai supprimé du code inutile et remis le BEQ .exit_interruption):
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 #$3F
  STA $2006
  LDA #$00  
  STA $2006        ;set the BG color to red
  
  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  
  BEQ .exit_interruption  
  STA $C001           
  
  INX
  STX index    
 
  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  
  
suite3:
fin:
    ; Peut être nécessaire pour lancer le décompte des ligne,mais pas sur
  LDA #$08
  STA $2001
  
  STY $2006
  STY $2006
  
  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
avatar
Invité
Invité


Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par vincent2105 Jeu 28 Avr 2016 - 15:09

C'est kifkif Confused
Après c'est peut-être un problème d'émulation non ?
vincent2105
vincent2105
Patient incurable

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

Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par Invité Jeu 28 Avr 2016 - 15:11

C'est possible  Wink,cependant on voit bien qu'il y a les 3 interruptions, donc ça marche déjà pas mal .
Reste à savoir si par exemple la ligne 10, est bien la 10, par exemple sur PCE (et autres), il faut rajouter 64 pour avoir la vraie ligne écran car l'affichage commence à la ligne 64 (la taille verticale max des sprites),sur Md c'est 32 .
avatar
Invité
Invité


Revenir en haut Aller en bas

Mr ToutLeMonde et la programmation NES... - Page 11 Empty Re: Mr ToutLeMonde et la programmation NES...

Message par vincent2105 Jeu 28 Avr 2016 - 15:23

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 ?! Razz
vincent2105
vincent2105
Patient incurable

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

Revenir en haut Aller en bas

Page 11 sur 34 Précédent  1 ... 7 ... 10, 11, 12 ... 22 ... 34  Suivant

Revenir en haut

- Sujets similaires

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