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: 240
TYPE: text
SiZE: 4Ko
NOTE:

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

» SCRHARD2DATE: 1970-01-01
DL: 20
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 » A100%: Les RUBI bidouilles
» Coding » Rubidouille A100% n°18: L'Overscan
» Coding » Rubidouille A100% n°22: 1400 couleurs en mode 2
» Coding » Rubidouille A100% n°19: Scrolling en diagonale
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.7-desktop/c
Page créée en 325 millisecondes et consultée 2147 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.