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

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

» SCRHARD2DATE: 1970-01-01
DL: 52
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 » 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
» Coding » A100%: Les RUBI bidouilles
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.73-desktop/c
Page créée en 021 millisecondes et consultée 2272 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.