Revenir au plan du site La ruptuuuuure, faut qu'on la faaaaassssseeee....!

suite de l'article
[Rupture stable en Basic]
Comment coller nos deux écrans proprement?
Pour rappel, voici nos réglages de départ
Le rôle du registre R6
Le registre R6 indique le nombre de blocs de données à afficher. Contrairement au registre 4, il n'y a pas de -1 qui tienne. Si on demande 25 blocs, on en a 25. Donc, pour afficher 19 blocs dans la première zone, il suffit d'en demander 19. Simple, basique.
Et pour faire disparaitre notre VBL pendant l'affichage du premier bloc, nous lui donnerons une position impossible en réglant R7 à 255, puis R7 à la valeur qui nous intéresse, à savoir 11. Tant que nous y sommes, on ajustera la valeur de R4 de la seconde zone pour avoir un total de blocs à 39 et retrouver notre 50Hz parfait.
Comment se synchroniser pour les changements de registres ?
Élément très important pour ne pas faire n'importe quoi au mauvais moment, nous allons utiliser les interruptions et c'est là qu'on retrouve l'important d'avoir un bel écran à 50Hz. C'est que nous savons aussi comment vont se comporter nos interruptions (toutes les 52 lignes...).
Si je règle le registre 6 à 19, je vois qu'une interruption a lieu deux blocs avant la fin de mon premier groupe de blocs. Je vais m'en servir.
Comment savoir que l'interruption est la bonne ?
Contrairement au Plus et l'interruption raster, il n'y a pas de possibilité directe de savoir où se déclenche l'interruption. Il faut compter. Compter, ok, mais à partir de quand? Quoi?
On va d'abord se synchroniser sur la VBL, code presque classique. Pour s'assurer d'être au début de la VBL, nous testons d'abord la non présence de la VBL.
NoVBL
ld b,#F5
.loop in a,(c) : rra : jr c,.loop
VBL
in a,(c) : rra : jr nc,VBL
|
Nous sommes au début de la VBL, on compte sur le dessin, 4 visibles plus celle de la VBL, on attends 5 fois et on changer le background pour vérifier.
buildsna : bankset 0
org #100 : run #100
ld sp,#100 : ld hl,#C9FB : ld (#38),hl : ei ; init pile+INT
ld bc,#BC06 : out (c),c : ld bc,#BD00+19 : out (c),c
ld bc,#7F10 : out (c),c : ld a,#55 : out (c),a ; border en bleu vif
out (c),0 ; sélectionner le papier écran
ld hl,#4443 ; bleu marine / jaune pastel
novbl ld b,#F5
.vbl in a,(c) : rra : jr nc,.vbl
.novbl in a,(c) : rra : jr c,.novbl
mainLoop
halt : halt : halt : halt
ld b,#7F : out (c),l : ld b,10 : djnz $ : ld b,#7F : out (c),h
halt : halt
jr mainLoop
|
Nous sommes "bien" placés. Bien entre guillemets parce qu'il va falloir attendre un peu.

La première salve de changement se fera sur la deuxième interruption visible de l'écran :
- désactiver la VBL
- spécifier la taille de l'écran visible
- spécifier le nombre de blocs au total pour couper l'écran
La deuxième salve peu après notre trait jaune pour ne pas modifier les valeurs critiques avant d'avoir commencé notre deuxième écran :
- activer la VBL en position 11 (soit la même position qu'un écran standard)
- racourcir le deuxième écran visible (pour éviter qu'il rebique tout en haut)
- augmenter légèrement le nombre de blocs total pour être exactement comme un écran standard à 39 blocs
Il vous faudra télécharger une
[image de ma chatte] pour pouvoir assembler ce source.
buildsna : bankset 0
org #100 : run #100
ld sp,#100 : ld hl,#C9FB : ld (#38),hl : ei ; init pile+INT
ld bc,#BC06 : out (c),c : ld bc,#BD00+19 : out (c),c
ld bc,#7F00 : out (c),c : ld a,#54 : out (c),a
ld bc,#7F01 : out (c),c : ld a,#4E : out (c),a
ld bc,#7F02 : out (c),c : ld a,#43 : out (c),a
ld bc,#7F03 : out (c),c : ld a,#4B : out (c),a
novbl ld b,#F5
.vbl in a,(c) : rra : jr nc,.vbl
.novbl in a,(c) : rra : jr c,.novbl
ld b,0 : djnz $
mainLoop
halt : halt
ld bc,#BC07 : out (c),c : ld bc,#BD00+255 : out (c),c ; desactiver la VBL
ld bc,#BC06 : out (c),c : ld bc,#BD00+19 : out (c),c ; notre écran visible fait 19 blocs
ld bc,#BC04 : out (c),c : ld bc,#BD00+18 : out (c),c ; notre écran "complet" fait 19 blocs (R4=19-1)
halt : halt : halt
; attendre 16 lignes soit 16x64 nops ou 4x256 nops, le DJNZ qui saute prend 4 nops
ld b,0 : djnz $
ld bc,#BC07 : out (c),c : ld bc,#BD00+11 : out (c),c ; activer la VBL à l'emplacement standard
ld bc,#BC06 : out (c),c : ld bc,#BD00+8 : out (c),c ; on raccourci le deuxième écran visible
ld bc,#BC04 : out (c),c : ld bc,#BD00+19 : out (c),c ; le deuxième écran "complet" fait 20 blocs pour avoir 39 au total
halt
jr mainLoop
teucha defb #54,#4E,#43,#4B
org #C000 : incbin 'teucha.bin' ; petite image
|
Notre dessin (qui fait exprès 152 lignes soit 19 blocs de 8 lignes) se répète. L'écran est stable à 312 lignes.

Pour afficher autre chose dans le deuxième écran, regardons ce qu'on peut faire dans
[l'article suivant].