CODINGAMSLIVE ★ AMSLIVE n°04 - CPC + : DE LAMEGAFAUTE AU SCROLLING ★

AMSLIVE n°04 - Asic - ScrollhardCoding Amslive

J'ai honte, mais que voulez-vous... c'est Cannes, le film, toute cette pression... (Chantal Lauby) Bref, j'ai merdouillé. Je vous ai sorti un prototype de CPC+ cadencé à 40 MHz le mois dernier. Je vais me coucher !

ERRATUM TOM TO-TOM TOM TO TOM TO-TOM TO-TOOOOM
(air : "Marche Funèbre")

Non, le CPC+ n'est pas cadencé à 40 Mhz ! C'est l'Asie qui l'est... et ça ne fait pas tout. Alors pour clarifier la situation et grâce à OffseT, voici les vitesses comparées :

CPCold:

Z80 : 4MHz -> dont 3.33 MHz effectifs
Gâte Array : 16MHz
CRTC : 1MHz
PSG :1MHz
FDC:1MHz

CPC+:

Z80 : 4.44 Mhz -> dont 3.27 MHz effectifs
Asic : 40MHz (ça, c'était bon !)
FDC: 1MHz
PSG : 1MHz

AU PROGRAMME CE MOIS-CI

Un scrolling hard au pixel, et vertical de surcroît. Je l'ai fait moi-même (si, ça arrive !) et je m'en vais de ce pas vous l'expliquer. En fin de compte, il m'a fallu une petite heure pour comprendre où j'avais merd... euh... cafouillé. Mon scrolling, sur un écran de 40 words de large (80 octets, 80 pixels, donc) avait tendance à se décaler sur le coté : les écritures qui se trouvaient en haut à gauche de l'écran ré-apparaissaient en bas, mais au milieu et non à gauche. Alors, la voix de mon maître spirituel se fit entendre dans ma tête :

" Quand ça marche pas,
Soit tu frappes,
Soit tu bidouilles..."
(OffseT)

J'ai donc bidouillé. Et avec un écran de 32 words de large, ça passe parfaitement. Le scrolling scrolle. Bien.

Le principe est simple : c'est le registre SSCR du RMR2 qui gère le décalage a la ligne. Vous en avez peut-être déjà entendu parler. Il fait aussi le scrolling horizontal. Non ? Argh ! Je réexplique derechef.

SSCR

SSCR (Soft Scroll Control Register) se situe en &6804. Il ne comporte qu'un octet, ré-initialisé au reset, Write-Only. Il se décompose en 8 bits : D0 à D7.

D0 à D3 : Décalage horizontal
D4 à D6 : Décalage vertical
D7 : masque (quand enclenché, le border dépasse de 2 octets, afin de cacher les saletés que vous pourriez faire, lors d'un scrolling horizontal, pour afficher les nouveaux éléments).

Aujourd'hui, seuls les bits D4 à D6 nous intéressent. Si on écoute Amstrad PLC, on peut découper l'écran en 8 blocs de 2 Ko. (Chacun s'étalant sur 25 lignes-caractère). Eh bien ces bits permettent de choisir lequel de ces blocs est affiché en premier sur l'écran. C'est pas faux, et ça nous arrange bien, il faut dire.

MON BEBE SUR DEUX PAGES

Dans mon bébé, il y a un compteur, incrémenté à chaque frame. Ce compteur boucle à 256, le plus naturellement du monde. De ce compteur, je ne veux que les 3 premiers bits (AND %111) que je vais décaler 4 fois :

COMPT: ;10100111
AND %111 : 00000111
RLA x4: ; 01110000


Donc on a :

D7 D6 D5 D4 D3...
0 ;1 ;1 ;1 ;0

Compris ? Bien. Mais si on s'arrête là, notre écran va plus ressembler à une "Jeanne Calment sur la fin" qu'au générique du dernier James Bond. Il faut donc faire mumuse avec l'OffseT... euh... pardon, l'offset.

MUMUSE AU PAYS DE L'OFFSET

Tout simplement, on doit faire scroller l'écran d'une ligne-caractère vers le haut quand SSCR a fait scroller l'écran de 8 lignes-graphiques. (SSCR se retrouve alors à 0, ô miracle de la technique). Pour changer la valeur de l'OffseT (voyez ! J'ai encore lapsussé !) on se servira des bienheureux registres 12 & 13 du CRTC (en ayant pris soin d'arranger le 12 ! Seuls les deux premiers bits doivent bouger, les autres, effacés par un AND %11, sont forcés à &30 (écran &C000) par un OR.)

LE RESTE

Ne soyez pas surpris si votre clavier ne répond plus au lancement du programme, seule la touche "ENTER" est testée (et pas ESPACE, attention !).
Gentil comme tout, je vous ai préparé dans le listing, une petite routine qui calcule l'adresse où afficher la ligne courante de votre scrolling. Il suffit de la prendre au label "ADR" (en bas à gauche) et d'afficher ce que vous voulez (pouvez). Notez qu'il faudra l'améliorer car je viens de me rendre compte qu'il y a un petit bug que vous remarquerez bien vite... (quant à la correction du bug elle-même, elle m'a pris 4 heures, donc, je vous laisse mariner)
Notez enfin que j'ai coupé les interruption, car -qui sait- un petit raster en 4096 couleurs serait peut-être de mise...

AYE ! J'AI FINI !

Comme beaucoup de rédacteurs, je me plains de ne pas avoir de retour concernant mes articles. Alors, deux solutions, soit vous m'écrivez directement à l'AFC, ou par e-mail à : amslive@mail. do tcom. fr

SNN qui va chez le coiffeur. Si! , AMSLIVE n°4

★ ANNÉE: 1998
★ AUTEUR: SNN

Page précédente : AMSLIVE n°03 - Creation Sonore
★ AMSTRAD CPC ★ DOWNLOAD ★

Other platform tool:
» coding  amslive04-ASIC-scrollhard    LISTINGDATE: 2012-08-27
DL: 269
TYPE: text
SiZE: 3Ko
NOTE:

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » Adresses d'exécution des mots-clés du Basic CPC 664
» Coding » AMSLIVE : La rubriques programmation
» Coding » LOGON CPCPLUS 44: Des Rasters sur CPC+
» Coding » AMSLIVE n°12 - Rom Pour les Matelots
» Coding » AMSLIVE n°14 - Multiplication Saignee a Mort
» Coding » Basic - Mallard Basic To CPC Basic (The Amstrad User)
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 314 millisecondes et consultée 2756 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.