CODINGCHRONIQUE A100% DE RUBI ★ UN CORP RUBI HARD ★

Je vous vois, attendant comme chaque mois la parole divine. Prions mes frères, car nous sommes gâtés par les dieux. Qui n'a jamais rêvé de faire des scrollings hard d'écrans. Vous? Prosternez-vous mes frères, les dieux vous ont entendus.

J'explique, pour les petites têtes de linotte qui ne connaissent pas encore les scroll. hard, qu'il s'agit de faire scroller l'écran entier, sans toucher à quoi que ce soit en mémoire. Donc pas de LDIR ou de transfert mémoire. Je ne vous parle même pas du temps machine que cela prend ( que dalle). Mais passons aux choses sérieuses.

Vous pouvez choisir l'adresse à laquelle commencera votre écran (en général, on place l'écran en &C000), et la bank où l'on travaille. Pour l'écran en &C000, c'est la bank 00110000 ; pour l'écran en &8000, 00100000. De même pour &4000 (00010000) et pour 0 (00000000). OK ?

SPRI est l'adresse à laquelle est stocké l'écran. SPRIH est la hauteur en ligne de ce sprite (200 s'il s'agit d'un écran complet), SPRIL est sa longueur en octets (80 normalement). Essayez de modifier ces valeurs pour vous amuser. TAMP est un buffer ; vous avez intérêt à y garder une place correspondante au sprite.

Le programme réinitialise ces variables et trafique le sprite pour lui donner un aspect qui lui convient, . à
savoir, stocke deux par deux les octets en allant du haut vers le bas. Cela pour les réafficher sous forme de colonnes plus tard.

Dans BOUCL, on scrolle et on attend la frappe d'une touche.

Dans BASE, on calcule la prochaine valeur à envoyer au CRTC qui déterminera le début de l'écran. Dans BASE0, on teste le compteur pointeur du sprite, qui une fois arrivé à 40 (80/ 2), se remet à 0. Il reste BASE2, qui réajuste le calcul en fonction de la bank dans laquelle on travaille. La synchro genre &BD19, je n'en parle même pas, le test d'une touche non plus.

Pour les petits malins qui pensent que le père Rubi se fait c... pour le BC26, sa chez que sa routine est valide dans n'importe quelle zone de mémoire.

Le Corbillard
 

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

EBASE   EQU #C000
BANK    EQU %110000

SPRI    EQU #C000
SPRIH   EQU 200
SPRIL   EQU 80          ; Nb pair obligatoire
TAMP    EQU #5000

DI
;----------------------------------
;-  INITIALISATION DES VARIABLES  -
;----------------------------------
;
        XOR A
        LD HL,0
        LD (BASE) ,HL
        LD (BASE0+1),A
        LD HL,TAMP
        LD (ETAMP+1), HL
;--------------------------
;-  STOCKAGE D'UN SPRITE  -
;--------------------------
        LD HL,SPRI
        LD DE,TAMP
        LD B,SPRIL/2
BOU1:   LD C,SPRIH
        PUSH HL
BOU2:   LD A, (HL)
        LD (DE),A
        INC DE
        INC HL
        LD A, (HL)
        LD (DE),A
        DEC HL
        INC DE
        CALL RBC26
        DEC C
        JR NZ,BOU2
        POP HL
        INC HL
        INC HL
        DJNZ BOU1
;
        LD HL,#C000     ;Efface ecran
        LD DE,#C001
        LD BC,#3FFF
        LD (HL) , L
        LDIR
;
BOUCLE:
BASE_0: LD HL,0
BASE    EQU BASE_0+1
;
        INC HL
        LD A,%11
        AND H
        LD H,A
        LD (BASE), HL
;
BASE0:  LD A,0
        INC A
        LD (BASE0+1),A
        CP 40
        JR NZ,BASE_2
        XOR A
        LD (BASE0+1),A
        LD DE,TAMP
        LD (ETAMP+1) ,DE
BASE_2: LD A,H
        OR BANK

;--------------------
;- DEPLACEMENT HARD -
;--------------------

        LD BC,#BC0C
        OUT ( C) , C
        INC B
        OUT ( C) , A
        DEC B
        INC C
        OUT ( C) , C
        INC B
        OUT (C),L

;----------------------------
;- AFFICHAGE A DROITE D'UNE -
;- PARTIE DU SPRITE         -
;----------------------------

        ADD HL, HL
        LD DE,EBASE
        ADD HL, DE
        LD DE,SPRIL-2
        ADD HL, DE
        LD B,SPRIH
ETAMP:  LD DE,TAMP
BOU3 :  LD A, (DE)
        LD (HL),A
        INC DE
        INC HL
        LD A, (DE)
        LD ( HL) , A
        INC DE
        DEC HL
        CALL RBC26
        DJNZ BOU3
        LD (ETAMP+1), DE

;-----------------
;- 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
        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

RUBI, ACPC  n°25 Avril 1990, p68-69

» Download la sources
» Download le programme basic (merci naPO)
» Download le programme basic (merci naPO)

ANNÉE: 1989
AUTEUR: RUBI
Page précedente : Coding Rubi24

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

» Coding Rubi20
» Coding Rubi18 - Overscan
» Coding Rubi26
» Coding Rubi24
» Coding Rubi23
» Coding Rubi22
» Coding Rubi19
CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ CPC RULEZ
CPCrulez[Content Management System] v8.00 par hERMOL
Page créée en 379 millisecondes et consultée 166 fois