CODINGPremiers programmes avec la gamme Amstrad Plus et GX-4000

Split-screen (2/4): Rendre indépendantes les zones écran
Programmation des interruptions pour rendre deux zones écran totalement indépendantes

Voici un petit programme de démonstration d'un split-screen stable malgré le SSR qui change pour faire scroller l'écran du haut.

Deux routines sont appelées. L'une au moment du split-screen pour mettre le SSR comme il faut. L'autre à la fin de l'écran visible pour préparer à l'avance les réglages de l'écran du haut. Dans notre programme, le SSR suit une courbe sinus/cosinus, dans les limites possibles par le SSR, le but n'était pas de faire un copié-collé inutile de l'article sur les scrollings multi-directionnels.

L'utilisation du PRI est classique, il faut que chaque interruption reprogramme le PRI à chaque fois pour indiquer à quelle ligne l'interruption suivante aura lieu, ainsi que l'adresse du saut pour exécuter la bonne routine. C'est la méthode na&#;ve de programmation, nous verrons plus tard comment améliorer ça.

BUILDSNA
SNASET CPC_TYPE,4 ; 6128+
bankset 0
org #38
ei : ret
org #100
run #100
ld sp,#100
ld bc,#7F80+%1101 ; MODE 1
call UnlockAsic
ld bc,#7FB8 : out (c),c ; Activer le mapping de l'ASIC en #4000

ld hl,#0030 : ld (#6802),hl ; split en #C000
ld a,167 : ld (#6801),a ; split ligne 168

ld hl,#C000
junk ld a,r : ld (hl),a : inc l : jr nz,junk : inc h : jr nz,junk

; installer interruptions
ld hl,interrupt199 : ld (#39),hl
ld a,#C3 : ld (#38),a ; JP
ld a,199 : ld (#6800),a
ei

;**************************
splitScreen
;**************************
; mettre ici la logique du programme, blablabla
jr splitScreen

interrupt167 push af : xor a : ld (#6804),a : push hl ; reset du SSR pour avoir le HUD en bas stable
ld hl,interrupt199 : ld (#39),hl ; change interrupt vector
ld a,199 : ld (#6800),a
pop hl,af
ei : ret

interrupt199 push af,hl
.ssr ld hl,SSR_list : inc l : ld (.ssr+1),hl : ld a,(hl) : ld (#6804),a
ld hl,interrupt167 : ld (#39),hl ; change interrupt vector
ld a,167 : ld (#6800),a
pop hl,af
ei : ret


align 256
SSR_list
x=0
repeat 256
vx=cos(x*360/256)*2+2.5
vy=sin(x*360/256)*4+4.5
if vx<0 : vx=0 : endif
if vy<0 : vy=0 : endif
if vx>3 : vx=3 : endif
if vy>7 : vy=7 : endif
x=x+4
defb #80|(vy<<4)|(vx<<1) ; SSR en accord avec décalage vertical et horizontal
rend

UnlockAsic
ld bc,#BCFF
out (c),c
out (c),0
ld hl,%1001000011101010
.loop
out (c),c
ld a,h:rlca:ld h,l:ld l,a
srl c:res 3,c
and #88
or c
ld c,a
cp #4D
jr nz,.loop
ld a,#CD
out (c),a : out (c),a
ret

Les traits verts correspondent à l'exécution de nos deux routines d'interruption (activer le highlight interrupts)

La suite se passe dans l'article suivant.

Roudoudou

★ ANNÉE: 2026
★ AUTEUR: Roudoudou

Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.732-desktop/c
Page créée en 014 millisecondes et consultée 37 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.