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 #9800EBASE 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 ★ AMSTRAD CPC ★ DOWNLOAD ★ |
|
CPCrulez[Content Management System] v8.73-desktop/c Page créée en 021 millisecondes et consultée 2272 foisL'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. |
|
|