Alors, j'ai revue mon code et finalement j'ai trouvé pourquoi ce n'était pas stable
En fait, j'ai ajouté deux instructions en début et fin de routine pour sauvegarder les registres A et X.
; Sauvgarde des registres en début de routine IRQ
PHA
TXA
PHA
;...
;Puis, restaures les valeurs de registres en fin de routine IRQ
PLA
TAX
PLA
[WIP]ASM C64
Modérateurs : Papy.G, fneck, Carl
-
- Messages : 52
- Inscription : 11 déc. 2021 16:05
- Localisation : Région parisienne
Re: [WIP]ASM C64
Effectivement ne pas oublier de sauvegarder les les registres A, X et Y au tout début de la routine de gestion des interruptions quand on a désactivé la ROM Kernal et la ROM Basic. Puis les rétablir à la fin de la routine
Là tu as choisi la pile S pour contenir les valeurs des registres mais tu peux aussi utiliser cette astuce de SMC, qui prend un peu moins de cycles :
sta atemp+1
stx xtemp+1
sty ytemp+1
[... ta routine gestion des interruptions...]
atemp lda #$00
xtemp ldx #$00
ytemp ldy #$00
Là tu as choisi la pile S pour contenir les valeurs des registres mais tu peux aussi utiliser cette astuce de SMC, qui prend un peu moins de cycles :
sta atemp+1
stx xtemp+1
sty ytemp+1
[... ta routine gestion des interruptions...]
atemp lda #$00
xtemp ldx #$00
ytemp ldy #$00
-
- Messages : 7989
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: [WIP]ASM C64
Ah du code auto-modifié! Un délice de fin c0d3r
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
-
- Messages : 52
- Inscription : 11 déc. 2021 16:05
- Localisation : Région parisienne
Re: [WIP]ASM C64
Tu as mieux que le code auto-modifié.
Un PHA PLA prend 7 cycles. Avec un TXA et TAX, on rajoute 4 cycles... bof bof.
Le code auto-modifié que j'ai décrit prend 6 cycles.
Mais si tu utilises un STA et LDA en page zéro, c'est 5 cycles. Champagne !
Un PHA PLA prend 7 cycles. Avec un TXA et TAX, on rajoute 4 cycles... bof bof.
Le code auto-modifié que j'ai décrit prend 6 cycles.
Mais si tu utilises un STA et LDA en page zéro, c'est 5 cycles. Champagne !