CODINGCHRONIQUE A100% DE RUBI ★ RUBI FLUIDE ★

Rubidouille A100% n°26: Rubi FluideCoding Chronique A100% De Rubi
Vous ne le savez peut-être pas, mais il y a scrollings et scrollings. Non pas que je fasse la différence entre les scrollings horizontaux et verticaux, ceux en couleurs ou en noir et blanc, grands ou petits, CPC ou Amiga, mais entre les scrollings avec décalage en mémoire et scrollings HARD.

C'est fou le temps que demande le décalage de 16 pour voir plus de lignes à l'écran. Imaginez un instant que Dieu nous donne le moyen de réduire ce temps à presque rien. Non, non, vous ne rêvez pas, nous sommes encore gâtés ce mois-ci. La solution passait bien par le CRTC et nous est donnée toute cuite par notre trop bon Rubi.

Avant d'entrer dans les détails du source, laissez-moi vous parler du principe de ce scrolling. Nous allons faire scroller les 96 premières lignes de l'écran à raison d'un octet par affichage (deux pour le mois passé). On reformate donc l'écran, on sauve de manière particulière les 96*80 octets sous forme de sprites et on travaille sur deux écrans en plaçant une bascule pour afficher soit l'un, soit l'autre.

Pour le source, on reformate l'écran et on stocke, dans KBASE1 et 2, les deux off sets correspondant aux écrans. Le sprite est formé de 80 colonnes de 12*8 octets, on efface l'écran pour arriver à la boucle.

Le XOR FF sert de bascule pour choisir les deux offsets (celui pointé par IY sera affiché, alors que l'autre restera dans l'ombre du border). On calcule le prochain offset en se rappelant que le tout est modulo &400 (d'ou le AND 3 sur H). BASE0 calcule la colonne à afficher et BASE2 place la colonne dans les deux écrans.

On effectue le scrolling proprement dit suivi d'un &BD19 pour attendre la synchro. Je ne vous parle pas du test clavier. Par contre, dans ENVOIE, le XOR &23 sert à placer une fois sur deux un INC HL pour avoir le décalage entre les deux écrans. Les deux SET pouvaient être remplacés par un OR &C0 et n'oubliez pas le RES 3,H qui nous manquait le mois passé et pouvait faire pétouiller légèrement le scrolling. BOU3 affiche la colonne. Vous verrez une multiplication et le &BC26 à la sauce Rubi.

Amusez-vous bien, car vous avez sous la main un méga scrolling à la Logon que je salue au passage. Rien ne vous empêche d'afficher autre chose en fin des écrans, au lieu de boucler sur le même tout le temps. Cela reste une question de goût, n'est-ce pas?

Le Hardas masqué

;    ----------------
;    - RUBI_DOUILLE -
;    ----------------
;
;    ----------------
;    - SCROLL  HARD -
;    ----------------
;
ORG #9800

EBASE EQU #C000
BANK  EQU %00110000
SPRI  EQU #C000
SPRIH EQU 12*8
SPRIL EQU 30
TAMP  EQU #5000
DI
; --------------------------------
; - INITIALISATION DES VARIABLES -
; --------------------------------
    LD  BC, #BC06
    OUT (C) ,C
    LD  BC, &BD00+ 12
    OUT (C) ,C
;
    LD  HL,0
    LD IY,KBASE1
    LD (IY+0) ,L
    LD (IY+1) ,H
;
    LD HL,#01E0
    LD IY, KBASE2
    LD (IY+0) ,L
    LD (IY+1) ,H
;
    XOR A
    LD (ENC) ,A
    LD A, SPRIL-1
    LD (BASE0+ 1) ,A
; ------------------------
; - STOCKAGE D'UN SPRITE -
; ------------------------
    LD HL,SPRI
    LD DE,TAMP
    LD B,SPRIL
BOU1:   LD C,SPRIH
    PUSH HL
BOU2:   LD A,(HL)
    LD (DE),A
    INC DE
    CALL RBC26
    DEC C
    JR NZ,BOU2
    POP HL
    INC HL
    DJNZ BOU1
;
    LD HL,&C000 ;Efface écran
    LD DE,&C001
    LD BC,#3FFF
    LD (HL),L
    LDIR
;
BOUCLE:
    LD A,0      ;Systeme d'echange des écrans
    XOR &0FF
    LD IY, KBASE1
    LD IX, KBASE2
    LD (BOUCLE+1), A
    JR Z,BOUC1
    LD IY, KBASE2
    LD IX, KBASE2
BOUC1:
   LD L,(IY+0)    ; Prochaine offset
    LD H,(IY+1)
    INC HL
    LD A,%11
    AND H
    LD H,A
    LD (IY+1),H
    LD (IY+0),L
;
;
BASE0:
    LD A,0      ; Prochaine colonne de sprite
    INC A
    LD (BASE0+1),A
    CP SPRIL
    JR NZ,BASE_2
    XOR A
    LD (BASE0+1),A
BASE_2:
;
    LD L,(IY+0)    ; place colonne n
    LD H,(IY+1)
    CALL ENVOIE
    LD L,(IX+0)
    LD H,(IX+1)
    CALL ENVOIE
; --------------------
; - DEPLACEMENT HARD -
; --------------------
    LD L,(IY+0)
    LD A,(IY+1)
    OR BANK
    LD BC,&BC0C
    OUT (C),C
    INC B
    OUT (C),A
    DEC B
    INC C
    OUT (C),C
    INC B
    OUT (C),L
; -----------------
; - ATTENDRE SYNC -
; -----------------
    LD B,&F5
SYNC:   IN A,(C)
    RRA
    JR  NC,SYNC
; ----------------------
; - TEST TOUCHE ESPACE -
; ----------------------
    LD BC,&F40E
    OUT (C),C
    LD BC,&F6C0
    OUT (C),C
    LD BC,&F792
    OUT (C),C
    LD BC,&F645
    OUT (C),C
    LD B,&F4
    IN A ,(C)
    LD BC,&F782
    OUT (C),C
    LD BC,&F609
    OUT (C),C
    RLA
    JP C,BOUCLE
    LD BC,&FC06
    OUT (C),C
    LD BC,&BD00+25
    OUT (C),C
    RET
;
ENVOIE:
    LD A, (BASE0+1) ; ACCA= Colonne n du sprite
    PUSH  HL
    LD DE, SPRIH
    LD L,A
    LD H,0
    CALL  MULTI16
    LD DE,TAMP
    ADD HL, DE   ; HL = Adresse de la colone
    EX (SP), HL
    ADD HL,HL
ENC: NOP
    LD A, (ENC)
   XOR &23
   LD (ENC) ,A
;
    SET 6,H
    SET 7,H
    LD DE, SPRIL- 2
    ADD HL,DE
    RES 3,H
    LD B, SPRIH
    POP DE
BOU3:   LD A, (DE)
    LD (HL) ,A
    INC DE
    CALL RBC26
    DJNZ BOU3
    RET
MULTI16:       ; DE*HL=IIL
    LD C,H
    LD A,L
    LD B,&10
    LD HL,0
MULT16_1:
    SRL C
    RRA
    JR NC,MULT16_2
    ADD HL,DE
MULT16_2:
    EX DE,HL
    ADD HL,HL
    EX DE,HL
    DJNZ MULT16_1
    RET
;
;
RBC26:
    LD A,H
    ADD A,#08
    LD H,A
    AND &38
    RET NZ
    LD A,H
    SUB &40
    LD H,A
    LD A,L
    ADD A,&50
    LD L,A
    RET NC
    INC H
    LD A,H
    AND &07
    RET NZ
    LD A,H
    SUB &08
    LD H,A
    RET
KBASE1  DW 0
KBASE2  DW 0
;

RUBI, ACPC  n°26 Mai 1990, p68-69

★ ANNÉE: 1989
★ AUTEUR: RUBI

Page précédente : Rubidouille A100% n°25: Scroll Hard
★ AMSTRAD CPC ★ DOWNLOAD ★

Other platform tools:
» rubi26DATE: 2019-03-12
DL: 356
TYPE: text
SiZE: 5Ko
NOTE:

» SCRHARDDATE: 1970-01-01
DL: 180
TYPE: text
SiZE: 3Ko
NOTE:

» SCRHARD2DATE: 1970-01-01
DL: 164
TYPE: text
SiZE: 3Ko
NOTE:

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » Rubidouille A100% n°18: L'Overscan
» Coding » Rubidouille A100% n°20: Scroll en vague
» Coding » A100%: Les RUBI bidouilles
» Coding » Rubidouille A100% n°22: 1400 couleurs en mode 2
» Coding » Rubidouille A100% n°19: Scrolling en diagonale
» Coding » Rubidouille A100% n°23 : Le dompteur de clavier
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» 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 293 millisecondes et consultée 2653 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.