CODING ★ L'OVERSCAN ★

Graphic - 40 - Overscan (SOS Programmeurs)

OVERSCAN CHAPITE 1

Enfin nous y-sommes ! Il fallait bien que je vous explique comment fonctionne le CRTC avant d'y parvenir car tout passe par lui ! Alors pour ouvrir l'écran à l'overscan c'est tout simple . Bien qu'on puisse affecter une RAM écran de 32K , le cadre en plastique qui entoure votre moniteur est un peu trop petit pour y loger tout ça ! Le maximum autorisé sera de 92 octets (46 colonnes CRTC) et 33 lignes caractère (264 lignes écran) . Ces dimensions laissent un petit bout de bordure visible mais si on pousse d'encore une colonne ou une ligne , une partie de l'affichage se fera derrière le plastique !

Pour donner à l'écran cette nouvelle dimension , vous mettrez :

  • 46 (Colonnes) dans R1
  • 49 dans R2 (Ce qui avance la synchro horizontale de 3 colonnes)
  • 33 (lignes) dans R6
  • 34 Dans R7 (Ce qui avance la synchro verticale de 4 colonnes)

Faites l'essai avec le programme CRTC (Autre face SOS7) et vous verrez l'écran s'éclater joyeusement . Reste à faire disparaître la répétition de l'écran vers le bas ! Il suffit de mettre 60 dans le registre R12 et vous aurez un écran de 32K commençant en #C000 !

Et c'est là que ça devient caca ! Avec un écran de 32K en #C000 , la seconde zone de 16K s'étendra de 0 à #3FFF . Comme la zone de 0 à #170 est utilisée par le système bonjour les dégts ...

Alors entre #8000 & #C000 ? Dites adieu aux vecteurs et aux paramètres du drive ! Ce secteur est réservé aux spécialistes qui savent réécrire le système d'exploitation dans une zone préservée .

Entre #4000 et #8000 c'est pareil , on bouffe le système et entre 0 et #7FFF on redétruit la zone 0-#170 . Alors on se le met où l'overscan ?? Ne répondez pas svp. Je vais vous le dire .

Comme on n'utilisera jamais les 32K , on le met un peu au-dessus de 0 en décalant le départ de la RAM écran . On peu choisir 3 possibilités :

  • #40C: Donner 14 dans R12 pour adresse 0 , 32K de RAM et décalage de #400 et 6 dans R13 pour décaler encore de 12 octets .
  • #240: Donner 13 dans R12 pour adresse 0 , 32K de RAM et décalage de #200et 32 dans R13 pour décaler encore de 64 octets .
  • #D0 : Donner 12 dans R12 pour adresse 0 , 32K de RAM et 104 dans R13 pour décaler encore de 208 octets .

Je vous entends déjà demander pourquoi toujours décaler la RAM dans R13 alors que vous devriez deviner ... Il y-a une jointure à effectuer entre les 2 zones de 16K (#3FFF/#4000) et si l'adresse #4000 ne correspond pas exactement au début d'une ligne écran , amusez vous donc à calculer les adresses pour afficher un écran ou animer un sprite sur ce chevauchement ! Le décalage de R13 amène l'adresse #4000 sur la colonne la plus à gauche de la ligne où elle se trouve .

A part ça pourquoi pas #600 et des poussières ? Parceque dans ce cas , la seconde zone écran excède un peu 16K et il faudrait réduire la hauteur d'une ligne .

Laquelle des 3 choisir ? #240 et #40C permettent de préserver un petit bout de basic . #D0 détruit tout ce qui est basic mais préserve le système . Les 3 sont donc valables , d'autant plus que la zone écran #C000/#FFFF n'est plus utilisée comme écran et peu contenir une zone programme de même que la zone RAM de #8000 à &A6FF donc , overscan où pas , on dispose encore d'à peu près 28K pour la programmation ou pour sauvegarder une partie de la RAM basse pendant l'overscan .

Pour les 3 programmes overscan qui figurent dans le chapitre suivant j'ai choisi l'adresse #D0 . Ce choix s'explique par le fait que le programme d'affichage doit charger un fichier écran de 24K EN DEHORS DE LA ZONE OVERSCAN car il faut répartir ces 24K dans 32K écran et toute location trop basse entrainerait un recouvrement des données et un affichage incorrect . On peut bien sur charger plus bas mais dans ce cas , il faut jongler avec des zones de transit pour pour que tout se passe bien . Autre solution , séparer le fichier overscan en 2 fichiers de 12K , c'est plus simple mais plus long à charger .

Dernière précision vitale ! Comment calculer ADINF et ADSUP avec des écrans à coucher dehors ? C'est relativement aisé . Voici comment modifier les routines classiques :

Ca c'est la version Pour 92 colonnes
80 colonnes en #C000 en #C000 on fera
; ;
ADINF LD A,H ADINF LD A,H
ADD A,8 ADD A,8
LD H,A LD H,A
RET NC ; RET NC
PUSH DE PUSH DE
LD DE,#C050 LD DE,#C050+12 ;Puisqu'il y-a 12 colonnes
ADD HL,DE ADD HL,DE ;de plus . Pour un écran en
POP DE POP DE ;88 colonnes devinez donc ?
RET ; RET
; ;
ADSUP LD A,H ADSUP LD A,H
SUB 8 SUB 8
LD H,A LD H,A
AND %01000000 AND %01000000
RET NZ ; RET NZ
PUSH DE PUSH DE
LD DE,#3FB0 LD DE,#3FB0+12
ADD HL,DE ADD HL,DE
POP DE POP DE
RET ; RET
;

Mais en overscan il faut gérer des adresses différentes de 0 à # 7FFF , il y-à de nombreuses solutions et la plus évidente est celle-ci . Les vecteurs #BC26 & #BC29 font ces calculs et le font sur toute adresse de 0 à #FFFF ! Alors pourquoi se casser la tête surtout quand comme moi on a définitivement voué une haine féroce à toute forme de calcul ? On recopie les bouts de ROM intéressants ce qui nous donnera les 2 nouvelles routines :

;
ADINFUNI LD A,H
ADD A,8
LD H,A
AND #38
RET NZ
;
LD A,H
SUB #40
LD H,A
LD A,L
ADD A,#50 ;A modifier selon la différence entre le nombre de colonnes
LD L,A ;en plus ou en moins de 80 .
RET NC
;
INC H
LD A,H
AND 7
RET NZ
;
LD A,H
SUB 8
LD H,A
RET
;
ADSUPUNI LD A,H
SUB 8
LD H,A
AND #38
CP #38
RET NZ
;
LD A,H
ADD A,#40
LD H,A
LD A,L
SUB #50 ;A modifier selon la différence entre le nombre de colonnes
LD L,A ;en plus ou en moins de 80 .
RET NC
;
LD A,H
DEC H
AND 7
RET NZ
;
LD A,H
ADD A,8
LD H,A
RET
;


Les 3 programmes pour créer vos écrans overscan dans le chapitre suivant .

OVERSCAN CHAPITE 2

Je décris ici les 3 programmes qui permettent de créer et afficher un écran en overscan . Le plus difficile sera de réaliser votre dessin . Il n'existe aucun D.A.O fonctionnant en mode overscan ! Il faut donc ruser et couper l'overscan en 4 .

Ce 1er programme va sauvegarder un à un 4 écrans normaux sur lesquels il définira préalablement une zone de 46 colonnes par 132 lignes ce qui est le quart d'un écran de 92 colonnes par 264 lignes . Un texte repère sera sauvé avec l'écran . Cela nous donnera :

+---------------------+---------------------+
!ECRAN HAUT GAUCHE !ECRAN HAUT DROIT !
! ...........!........... !
! ...........!........... !
! ...........!........... !
! ...........!........... !
+---------------------+---------------------+
! ...........!........... !
! ...........!........... !
! ...........!........... !
! ...........!........... !
! ;! ;!
!ECRAN BAS GAUCHE !ECRAN BAS DROIT !
+---------- ----------+---------------------+

Ou les pointillés figurent les 4 zones de l'écran overscan . Il vous faudra créer votre image en 4 fois à l'intérieur de ces zones et resauvegarder séparément chaque écran . Les 4 fichiers de 17K sont toujours sauvegardés sous les noms OVERSCR1.SCR - OVERSCR2.SCR - OVERSCR3.SCR - OVERSCR4.SCR -

Libre à vous de changer les noms lors de la création du dessin .

Le code source du programme est peu commenté , tout ce qui le concerne se trouve dans les cours de graphisme et les routines disquette .

;
ORG 41000
;
;- Creation de 4 écrans pour OVERSCAN -
;
XOR A ;Remise a zero eventuelle erreur fichier
LD (FLGERR),A
;
LD HL,#E280+34 ;Adresse deépart 1er écran
LD B,46 ;de 46 colonnes par 132 lignes
LD C,132
;
PUSH BC
LD DE,TSC1 ;Afficher texte écran 1 et sauver .
CALL SAVE
POP BC
;
LD HL,#E280 ;Encore 3 a faire de la meme maniere
PUSH BC
LD DE,TSC2
CALL SAVE
POP BC
;
LD HL,#C000+34
PUSH BC
LD DE,TSC3
CALL SAVE
POP BC
;
LD HL,#C000
PUSH BC
LD DE,TSC4
CALL SAVE
POP BC
RET ;C'est fini
;
;- Marquer la zone overscan et sauver un écran -
;
SAVE PUSH BC ;Preserver registres
PUSH HL
PUSH DE
LD A,(MODE) ;L'octet de remplissage n'est pas le meme
LD HL,BCLFLIN+1 ;selon le mode écran choisi cela evite d'avoir
LD (HL),48 ;un écran a rayures .
OR A
JR Z,SETMODE
LD (HL),255
SETMODE CALL #BC0E
POP DE
POP HL
POP BC
;
BCLFLIN1 PUSH BC ;Remplissage de la zone écran qui sera
PUSH HL ;utilisee par l'overscan
BCLFLIN LD (HL),48
INC HL
DJNZ BCLFLIN
POP HL
PUSH DE
CALL #BC26 ;Routine systeme qui fait la meme chose que
POP DE ;ADINF mais en plus lent . Ici on n'est pas presse
POP BC
DEC C
JR NZ,BCLFLIN1
CALL PRT
;
LD HL,NOMSCR ;Sauver l'ecran , voyez donc notre cours sur les
LD B,12 ;vecteurs disque dans ce numéro pour comprendre .
LD DE,34000
CALL #BC8C
JR NC,ERRFICH
LD HL,#C000
LD DE,#4000
LD A,2
CALL #BC98
JR NC,ERRFICH
CALL #BC8F
JR NC,ERRFICH
LD HL,NOMSCR+7 ;On augmente de 1 le 8eme caractere du nom de fichier
INC (HL) ;pour avoir OVERSCR1.SCR , OVERSCR2.SCR , Etc ..
RET
;
ERRFICH LD (FLGERR),A ;Sort ici si erreur de fichier .
CALL #BC92
LD DE,TERFICH
JP PRT
;
PRT LD A,(DE) ;Routine PRINT .
OR A
RET Z
CALL #BB5A
INC DE
JR PRT
;
TSC1 DB 31,1,2,"ECRAN HAUT GAUCHE",0
TSC2 DB 31,1,2,"ECRAN HAUT DROITE",0
TSC3 DB 31,1,24,"ECRAN BAS GAUCHE",0
TSC4 DB 31,1,24,"ECRAN BAS DROITE",0
TERFICH DB 31,1,1,"ERREUR FICHIER",0
LIST
NOMSCR DB "OVERSCR1.SCR"
FLGERR DB 0
MODE DB 0
NOLIST
;

Une fois le dessin créé à l'intérieur des 4 écrans séparés , il faut regrouper le tout en un seul fichier utilisable en overscan . Pour cela il faut extraire de chaque écran les portions utiles et les sauvegarder en une seule zone RAM . Voici ce qu'il faut obtenir :

; Adresse 10046
;.
;.
; 46 Oct. . 46 Oct.
; .
Adresse 10000 -----> +-------------+-------------+ ; ! OVERSCR1 ! OVERSCR2 !
; ! Commence ! Commence !
; ! en ;! en ;! Hauteur 134 lignes
; ! #E280+34 ! #E280 !
; ! ; ! ;!
Adresse 22144 -----> +-------------+-------------+
(10000+92 Col.*134 Lin.)! OVERSCR3 ! OVERSCR4 !
; ! Commence ! Commence !
; ! en ;! en ;! Hauteur 134 lignes
; ! #C000+34 ! #C000 !
; ! ;! ;!
; +-------------+-------------+

Voici le listing source qui permet d'obtenir ce résultat .

;
;- Extraire et regrouper en un écran de 24K les 4 zones definies par OVERSCR -
;
NOLIST
ORG 41500
;
CP 5 ;5 Noms de fichiers a transmettre . 4 a charger
RET NZ ;et un a sauver en sortie .
;
LD B,65 ;RAZ de la zone noms de fichier
LD HL,NOM1
BCLRAZ LD (HL),0
INC HL
DJNZ BCLRAZ
;
XOR A
LD (FLGERR),A
;
LD L,(IX+0) ;Passer le nom de sauvegarde . (Voyez les routines
LD H,(IX+1) ;du drive dans ce numéro pour l'explication sur
LD C,(HL) ;le passage des parametres)
INC HL
LD E,(HL)
INC HL
LD D,(HL)
;
LD HL,NOMSAV
LD (HL),C ;Stocker la longueur du nom de sauvegarde
INC HL
EX DE,HL ;et le nom du fichier a la suite .
LD B,0
LDIR
;
LD HL,NOM1
LD B,4
;
TRANS4N PUSH HL
LD L,(IX+8) ;Passer les noms des 4 fichiers
LD H,(IX+9) ;En pensant que pour conserver l'ordre
LD C,(HL) CALL àfic(1)$,àfic(2)$,àfic(3)$,àfic(4)$,àficsav$
INC HL ;Il faut commencer par le pointeur le plus haut
LD E,(HL) ;et decrementer !
INC HL
LD D,(HL)
;
POP HL ;Adresse du nom en cours
PUSH BC
PUSH HL
;
LD (HL),C ;Ranger longeur dans le 1er octet nom
INC HL
EX DE,HL ;Copier le nom a la suite
LD B,0
LDIR
;
POP HL ;Adresse du nom en cours
LD BC,13
ADD HL,BC ;Pointer le nom suivant
POP BC
;
DEC IX
DEC IX
DJNZ TRANS4N ;4 fois .
;
;- Charger et transferer les fichiers -
;
LD HL,NOM1
CALL LOAD
LD HL,#E280+34 ;Adresse de la portion écran haut gauche
LD DE,10000 ;Debut de la zone overscan
CALL COPYSCR
;
LD HL,NOM2
CALL LOAD
LD HL,#E280 ;Adresse de la portion écran haut droite
LD DE,10046 ;Debut de la zone overscan + decalage de 46 octets
CALL COPYSCR
;
LD HL,NOM3
CALL LOAD
LD HL,#C000+34 ;Adresse de la portion écran bas gauche
LD DE,22144 ;Milieu de la zone overscan
CALL COPYSCR
;
LD HL,NOM4
CALL LOAD
LD HL,#C000 ;Adresse de la portion écran bas droite
LD DE,22190 ;Milieu de la zone overscan + decalage de 46 octets
CALL COPYSCR
;
;- Sauvegarde de la zone overscan -
;
LD HL,TPUTDIS ;Attendre disquette
CALL PRT
CALL #BB06
;
LD HL,NOMSAV ;Sauvegarde de la zone overscan
LD B,(HL) ;Longeur du nom
INC HL ;Adresse du nom
LD DE,5000 ;Buffer drive
CALL #BC8C
JR NC,ERRDRIV
LD HL,10000 ;Adresse debut sauvegarde
LD DE,24298 ;Longueur a sauver
LD BC,0
LD A,2 ;Type binaire
CALL #BC98
JR NC,ERRDRIV
CALL #BC8F
JR NC,ERRDRIV
RET
;
;- Routine de transfert -
;
COPYSCR LD B,132 ;132 lignes (264/2)
COPY PUSH BC
PUSH HL ;Adresse source dans l'ecran
LD BC,46 ;46 colonnes a transferer
LDIR
LD HL,46 ;Et on saute 46 colonnes pour laisser la place
ADD HL,DE ;a la moitie opposee
EX DE,HL ;Remet adresse suivante de la zone overscan dans DE
POP HL ;Recuperer adresse source écran
CALL #BC26 ;Et pointer la ligne en dessous
POP BC
DJNZ COPY ;On recommence pour 132 colonnes
RET
;
;- Routine de chargement des écrans -
;
LOAD LD B,(HL) ;Charger un des 4 fichiers . Longueur du nom dans B
INC HL ;Puis pointer sur le nom
LD DE,#C000 ;Buffer drive
CALL #BC77 ;Ouvrir fichier
JR NC,ERRDRIV
LD HL,#C000 ;Adresse chargement
CALL #BC83
JR NC,ERRDRIV
CALL #BC7A
JR NC,ERRDRIV
RET
;
ERRDRIV LD (FLGERR),A ;Sort ici si erreur drive
CALL #BC7D
CALL #BC92
LD HL,TERRDRIV
JP PRT
;
PRT LD A,(HL)
OR A
RET Z
CALL #BB5A
INC HL
JR PRT
;
TERRDRIV DB 31,1,1," ERREUR DISQUE !",7,0
TPUTDIS DB 31,1,1," PLACER DISQUETTE",10,13
DB " SAUVEGARDE IMAGE",10,13
DB " OVERSCAN ",10,13
DB " ET PRESSER UNE",10,13
DB " TOUCHE",7,0
LIST
NOM1 DS 13
NOLIST
NOM2 DS 13
NOM3 DS 13
NOM4 DS 13
NOMSAV DS 13
LIST
FLGERR DB 0
NOLIST
;

Et pour finir , il ne reste plus qu'à afficher l'overscan . Nous allons avoir quelques problemes d'emplacement memoire ... Comme expliqué dans le chapitre 1 , l'adresse la plus utilisable est #D0 alors utilisons la comme départ de la nouvelle RAM écran . Le 1er bloc de 16K commencera en #D0 , le second en #4000 . La RAM écran d'origine en #C000 ne sera pas utilisée par le CRTC . Nous y recopierons donc le contenu d'origine à partir de #D0 et sur 16K avant d'activer le CRTC . Avant de quitter le programme , cette zone sera ramenée de #C000 vers #D0 avant de provoquer le reset du CRTC . Nous pourrons
ainsi retrouver intact un éventuel programme basic ou tout autre code situé en RAM basse pour peu qu'il n'excède pas 16K .

L'écran overscan ne remplissant pas exactement les 32K , il faudra le transférer ligne par ligne en #D0 puis en #4000 par LDIR . Pour éviter des chevauchements désagréables lors de LDIR , il sera chargé en 17000 puis transféré . Cela nous donne :

#D0 -----> 16999 : Ecran overscan .
17000 ---> 41298 : Chargement overscan .
41500 ---> 42500 : Programmes overscan .

Donc toute la RAM est occupée et si un code binaire doit être ensuite utilisé , il faut d'abord effectuer le transfert et l'affichage overscan et seulement après , charger le code en #8000 . Si l'on ne souhaite pas préserver la RAM basse au cours de cette opération , on pourra utiliser les 16K en #C000 comme zone de programmation .

;
;- Charger et afficher un écran en overscan -
;
;
ORG 42000
NOLIST
CP 1 ;1 Parametre pour le nom de fichier .
RET NZ
;
CALL LOADSCR ;Charger l'ecran AVANT TOUT .
RET NC
;
CALL SAVERAM ;Sauver la RAM basse en #C000 (L'ancien écran)
LD HL,TOVERCRT ;Puis passer l'ecran en 92 colonnes 264 lignes
CALL OUTCRTC ;avec #D0 comme deépart .
;
CALL AFFSCR ;L'afficher .
;
CALL #BB06 ;Attendre une touche
LD HL,TRESTORE ;Remettre le CRTC aux normes CPC
CALL OUTCRTC
JP RESTORAM ;Recuperer la RAM basse et c'est fini
;
LOADSCR LD L,(IX+0) ;Passer nom de fichier
LD H,(IX+1)
LD B,(HL) ;Longueur dans B
INC HL
LD E,(HL)
INC HL
LD D,(HL)
;
EX DE,HL ;Adresse du nom
LD DE,#1000 ;Buffer
CALL #BC77
RET NC
;
LD HL,17000 ;Charger en 17000
CALL #BC83
CALL #BC7A
RET
;
AFFSCR LD B,255 ;264 lignes ca ne tient pas dans un registre 8 bits !
LD C,92 ;On procedera en 2 fois .
LD DE,#D0 ;Adresse de l'ecran
LD HL,17000 ;Adresse de la zone overscan
CALL BCLT1 ;Transferer 255 lignes
LD B,9 ;Puis les 9 qui manquent pour faire 264
;
BCLT1 PUSH DE ;Preserver adresse écran
PUSH BC
LD B,0
LDIR ;Transferer 1 ligne
POP BC
POP DE
;
PUSH HL ;ADINFUNI est une routine qui a le meme effet que
EX DE,HL ;ADINF mais calcule le decalage écran pour toute
CALL ADINFUNI ;adresse de 0 a #FFFF . Autre avantage , lorsque
LD A,H ;le 1er groupe est depasse (de 0 à #3FFF) H revient
OR A ;a 0 ce qui permet de tester rapidement si on doit
JR NZ,OKAFF ;passer au second groupe en #4000
LD H,#40
OKAFF EX DE,HL
POP HL
DJNZ BCLT1
RET
;
OUTCRTC LD BC,#BC00 ;Activation du CRTC
BCLOUTC LD A,(HL)
CP #FF
RET Z
OUT (C),C ;Selection des port #BC00 a #BC12
INC B
OUT (C),A ;Port BDxx envoyer l'octet voulu .
DEC B ;Port #BCnn
INC C ;incremente
INC HL ;Pointer octet CRTC suivant .
JR BCLOUTC
;
ADINFUNI LD A,H ;Routine ADINF speciale
ADD A,8
LD H,A
AND #38
RET NZ
;
LD A,H
SUB #40
LD H,A
LD A,L
ADD A,#5C
LD L,A
RET NC
;
INC H
LD A,H
AND 7
RET NZ
;
LD A,H
SUB 8
LD H,A
RET
;
RESTORAM LD DE,#D0 ;Recuperer la RAM depuis #C000
LD HL,#C000
JR TRANS
;
SAVERAM LD HL,#D0 ;Sauver la RAM en #C000
LD DE,#C000
TRANS LD BC,#4000
LDIR
RET
;
;ci-dessous : La 1ere ligne indique les registres du CRTC concernes .
;La seconde les valeurs a envoyer aux registres correspondants pour
;activer l'overscan en #D0 .
;La troisieme les valeurs pour restaurer le CTRC aux normes CPC
;
; ;0 1 2 3 4 5 6 7 8 9 10 11 12 13
TOVERCRT DB 62,46,48,14,38,00,32,34,00,07,00,00,12,104,#FF
TRESTORE DB 63,40,46,14,38,00,25,30,00,07,00,00,48,00,#FF
;
list
db 0

A suivre dans SOS8 ....

SOS PROGRAMMEURS

★ ANNÉE: ???
★ AUTEUR: MICHEL MAIGROT

Page précédente : Graphic - 30 - Etude du Crtc
★ AMSTRAD CPC ★ DOWNLOAD ★

Other platform tool:
» SOS7OVERSCANDATE: 2011-06-03
DL: 547
TYPE: ZIP
SiZE: 14Ko
NOTE: 40 Cyls
.HFE: Χ

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

Lien(s):
» Coding Src's » Triangles (The Amstrad User)
» Coding Src's » Arnold Jewels (Amstrad Computer User)
» Coding Src's » Efectos hipnotizantes (Amstrad Personal)
» Coding Src's » Lamp (Amstrad Computer User)
» Coding Src's » Origins (Computing With the Amstrad)
» Coding Src's » Graphic - Smoothly Scrolling
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 284 millisecondes et consultée 3286 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.