CODINGCHRONIQUE A100% DE RUBI ★ UN CORP RUBI HARD ★

Rubidouille A100% n°25: Scroll HardCoding Chronique A100% De Rubi

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 écran
    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

★ ANNÉE: 1990
★ AUTEUR: RUBI

Page précédente : Rubidouille A100% n°24: The Rubiraster
★ AMSTRAD CPC ★ DOWNLOAD ★

Other platform tools:
» rubi25DATE: 2019-03-12
DL: 406
TYPE: text
SiZE: 4Ko
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°20: Scroll en vague
» Coding » Rubidouille A100% n°24: The Rubiraster
» Coding » Rubidouille A100% n°18: L'Overscan
» Coding » Rubidouille A100% n°23 : Le dompteur de clavier
» Coding » Rubidouille A100% n°19: Scrolling en diagonale
» Coding » Rubidouille A100% n°22: 1400 couleurs en mode 2
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 507 millisecondes et consultée 2694 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.