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: 343
TYPE: text
SiZE: 5Ko
NOTE:

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

» SCRHARD2DATE: 1970-01-01
DL: 147
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 » A100%: Les RUBI bidouilles
» Coding » Rubidouille A100% n°19: Scrolling en diagonale
» Coding » Rubidouille A100% n°20: Scroll en vague
» Coding » Rubidouille A100% n°23 : Le dompteur de clavier
» 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
Page créée en 439 millisecondes et consultée 2578 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.