adnz a écrit:
Normalement ça gère tout seul non ? car j'utilise RMB pour les réservations d'adresses.
pour pas faire d'erreur j'ai pas utilisé les adresses directement pour stocker des valeurs.
Je dois certainement avoir une fuite dans la gestion de la pile U ou S à l'endroit où sa plante !
je revois la logique pas à pas, on va voir
Salut
J'ai connu moi aussi ce genre de problème pour le dev de Bubble Bobble... En fait, c'était parce que je pensais être dans une banque non utilisée par le basic...
Fait attention avec la méthode de commutation de banques
Normalement, oui l'espace non commutable utilisateur va de $6100 à $9FFF oui
Moi je n'utilise JAMAIS les piles!! Si tu n'a pas un contrôle total dessus, à savoir où ça commence et où ça se termine... J'ai été formé au CNAM et j'essaie d'avoir une programmation propre, factorisée, et portable. Les piles c'est compliqué avec le 6809. Parce que déjà l'empilement se fait en partant de l'adresse N à l'adresse N-k, alors il est possible que ça empiète sur ton code su tu abuses de ces piles
Programmation modulaire donc, faire des fonction les plus courte possible mais avec quand même suffisamment de longueur (et d'appels) pour que ça justifie cette fonction).
Au fait je t'avais promis mon code pour les SPrite, je t'envoie celui qui sert pour l'écran normal ($4000-$5FF)
Code:
*************************************
*Procedure affiche sprite ou tile
*mode bm16c avec decalage possible
*de 2 pxl (avec IMPAIR=0)
*Variable externe : RAMECR
*IMPAIR a 0 si XSPRIT pair, 1 sinon
************************************
ORG $7200 Minimum en Basic 512
SETDP $72
ASPRIT LDA #1
STA BASCEC
SPRIT0 LDA BASCEC
LDB $E7C3
ADDA IMPAIR
CMPA #1
BNE SPRIT1
ORB #1
LDA BASCEC
BNE SPRIT2
LDY >RAMECR
LEAY 1,Y
STY >RAMECR
JMP SPRIT2
SPRIT1 ANDB #254
SPRIT2 STB $E7C3
LDA HSPRIP Boucle I HSPRIP
STA ISPRIP Samuel Devulder
LDY >RAMECR
SPRI02 LDA LSPRIP Boucle J LSPRIP
STA JSPRIP
SPRI03 LDA ,X Boucle J : LSPRIP
LDB ISSPRI Sprite ou un tile ?
BEQ FINTRA
*Debut transparence couleur 15
CMPA #$F0
BLO TRANSA
LDB ,Y
JMP TRANSB
TRANSA LDB ,X
TRANSB ANDB #$F0
STB BTEMPO
ANDA #$0F
CMPA #$0F
BLO TRANSC
LDA ,Y
ANDA #$0F
TRANSC ORA BTEMPO
FINTRA * Fin transparence
STA ,Y+
LEAX 1,X
DEC JSPRIP Samuel Devulder
BNE SPRI03
* Fin boucle J
LDA #40
SUBA LSPRIP Soustrait largeur sprite
LEAY A,Y
DEC ISPRIP Samuel Devulder
BNE SPRI02
* Fin boucle I
LDA BASCEC
LSRA Samuel Devulder
BCC FIPRO0 b0 de A dans C de CC
STA BASCEC
JMP SPRIT0
FIPRO0 RTS
****************************
*DATA pour fonctions affiche
****************************
ISPRIP FCB 0 Index I
JSPRIP FCB 0 Index J
HSPRIP FCB 16 Hauteur de Sprite
LSPRIP FCB 2 Nb octets RAM ecran de large
BTEMPO FCB 0
IMPAIR FCB 1 Vaut 0 ou 1 (par defaut)
BASCEC FCB 1 Vaut 0 ou 1 (par defaut)
ISSPRI FCB 0 Vaut 0 ou 1 (Externe)
*************************************
*Positionnement Sprite ou TILE
*Variables externe:RAMECR,DEBECR
*XSPRIT est sur 80 col, RAMECR sur 40
*On fait donc un decalage d'1 bit
*Sur la droite pour RAMECR/XSPRIT
*Et on valide IMPAIR à 0 ou 1
*************************************
POSSPR *
LDA XSPRIT
LDB XSPRIT
ANDB #1
STB IMPAIR
LSRA Pour RAM ecran
STA >XPOSEC
LDB >YSPRIT
LDA #40
MUL
ADDB >XPOSEC
ADDD #ECRDEB
STD >RAMECR
JMP ASPRIT
XPOSEC FCB 0