Les problèmes de compatibilité entre les CPC et CPC+
(c) Maj du 08/01/2005 * (c) Tom et Jerry du GPA
Ce texte est une version un peu modifiée d'un article publié dans la revue
CPC Infos numéro 46. Elle fait le point sur les problèmes que tout utilisateur
de CPC Plus peut rencontrer avec des programmes originaux. Si ce document
peut apparaître inutile aux ténors du CPC (il n'en reste plus beaucoup, en
fait :-) ), je suppose qu'il peut intéresser les éventuels nouveaux amateurs
de cette prodigieuse machine.
Ces derniers ont déjà dû connaître la douloureuse expérience de s'apercevoir
que leur dernier jeu original acheté sur E-Bay se plante lamentablement sur
sa machine. Ne perdez pas espoir, la plupart du temps, il est possible de
modifier le code incompatible ou de trouver des versions patchées des
programmes "défectueux".
Avec cet article, vous avez la cerise sur le gâteau, des fichiers permettant
d'utiliser des programmes incompatibles. Il y en a pour des jeux originaux,
mais aussi pour quelques jeux déprotégés. Cliquer
ici
pour downloader le tout.
Les problèmes liés a la ROM disquette
Comme vous avez dû le remarquer, l'une des principales nouveautés du CPC+ par
rapport à son aîné, c'est son port cartouche. Amstrad a jugé bon de fournir
une partie de la ROM du CPC+, non pas en interne, mais sur une cartouche,
celle qui contient également Burnin' Rubber. Les programmeurs en ont profité
pour retoucher la ROM disque, en partie pour loger de nouvelles RSX dans le
CPC+ (|JEU, |JUEGO, |GAME).
Le résultat de ce travail est que le code de cette nouvelle version de la ROM
disque est "décalé" par rapport à l'ancienne. Cela se traduit par un plantage
assuré lors d'un appel direct à une routine de cette ROM. Certaines parties
ont même été complètement modifiées ! Il semblerait de plus que le FDC du
CPC+ (composant spécialisé gèrant le lecteur de disquette) soit légèrement
buggué, dixit Longshot du Logon System, que je remercie au passage pour ses
conseils éclairés. Son timing semble différent, ce qui explique
que beaucoup de logiciels de copie physique (Discology, Hercule, etc...)
accédant directement au FDC ne fonctionnent pas.
Cette différence de la ROM disque est aussi la source du plantage de
chargeurs de jeux plus ou moins anciens utilisant le loader Mirrorsoft, comme
Strike Harrier Force, Biggles, Geebee Air Rallye, mais aussi d'autres
jeux avec des protections moins connues : Sigma 7, Fernandez must die, etc...
Tous les loaders d'anciens jeux d'Ere Informatique et d'Infogrames sont
également concernés.
Le remède le plus simple pour corriger ce problème consiste à se procurer une
cartouche contenant l'ancienne ROM du CPC, distribuée par Amstrad peu après la
sortie du CPC+. Il est malheureusement très difficile de la trouver. Elle ne
corrige pas de plus les plantages constatés sur les copieurs physiques.
Une autre solution consiste à adapter ces chargeurs, en modifiant dans la
mesure du possible, les adresses d'appels aux routines de la ROM disque.
Vous trouverez ci-dessous une table de conversion des principales adresses
rencontrées. Cette modification ne s'avère hélas pas efficace à 100%, certains
jeux continuant à planter, en particulier la plupart des anciens softs
Infogrames (Les dieux de la mer, Bob Morane Espace) effectuant des
rechargements.
Table de conversion
CPC | CPC plus |
---|
&C6E5 | &C6EC |
&C91C | &C94A |
&C947 | &C971 |
&C95C | &C988 |
&C976 | &C9D8 |
&D252 | &D349 |
Troisième option, se procurer une version déprotégée du logiciel qui ne se
charge pas correctement. S'il est en fichiers, il n'utilise forcément plus
un chargeur faisant directement appel à la ROM disque ! De plus, si vous
possédez l'original du programme, c'est parfaitement légal.
Les problèmes liés à l'émulation du PPI
Autre source fréquente d'incompatibilité, l'émulation du PPI 8255. Pour doter
le CPC+ de caractéristiques étendues par rapport au CPC, et au passage faire
des économies d'echelle, Amstrad n'a pas hésité à remplacer le Gate Array,
le CRTC et le PPI 8255 du CPC par une puce nouvelle, l'ASIC. Même si elle
s'avère très puissante (sprites hardware, 4096 couleurs, etc... ), elle n'en
présente pas moins un petit défaut au niveau de l'émulation du PPI, en ne
réagissant pas exactement comme celui du CPC.
Dans la pratique, en fonction de la façon dont la routine lisant les touches
du clavier est programmée, le clavier ne "répond" plus, aucune des touches
sur lesquelles vous pouvez appuyer n'est prise en compte.
Autre phénomène rigolo, même si moins grave, on trouve dans quelques démos
des vumètres ne fonctionnant pas sur CPC Plus. Ce phénomène est dû à la
routine lisant le volume sonore du PSG, qui, comme par hasard, "passe" par
le PPI !
Dans les deux cas, l'adaptation à réaliser pour rendre une routine compatible
est simple.
La routine de lecture ci-dessous n'est pas complète, seule la portion posant
problème est indiquée. Si vous voulez plus d'informations sur la manière de
réaliser une routine de lecture clavier, je vous incite à vous reporter sur
l'excellent article de Stéphane Rodriguez que vous trouverez sur le site
http://tj.gpa.free.fr.
Routine CPC incompatible | Routine CPC + |
LD BC,&F40E | LD BC,&F40E |
OUT (C),C | OUT (C),C |
LD BC,&F6C0 | LD BC,&F6C0 |
OUT (C),C | OUT (C),C |
LD BC,&F79E | LD C,&00 |
OUT (C),C | OUT (C),C |
.... | LD BC,&F79E |
| OUT (C),C |
| .... |
Comme vous pouvez le constater, l'adaptation est minime. Il suffit de faire
un OUT &F6,&00 après le OUT &F6,&C0. La seule difficulté consiste à retrouver
dans un jeu cette fameuse routine de lecture du port clavier. Une interface
style Hacker est chaudement recommandée pour simplifier les recherches.
Attention, l'ASIC est aussi sensible à l'ordre dans lequel vous transmettez
les données dans les ports. Ainsi, la routine suivante sera incompatible sur
CPC+ alors qu'elle tourne parfaitement sur CPC :
LD BC,&F6C0
OUT (C),C
LD C,&00
OUT (C),C
LD BC,&F40E
OUT (C),C
Pour conclure le sujet, cette incompatibilité est, avec les problèmes liées
à la ROM disque bricolée, la plus fréquente que vous pouvez rencontrer. Elle
concerne aussi bien des jeux comme Barbarian, Super Cycle, Tornado Low level,
que des démos ou des fanzines sur disquette !
Emulation du CRTC
Vous pouvez parfois avoir des problèmes d'affichage sur votre moniteur.
L'écran n'est plus stable, une partie de l'écran est absente ou mal placée.
Là, c'est l'émulation du CRTC par l'ASIC qui est en cause. Si vous êtes un
fan de démos, vous devez savoir qu'il existe plusieurs types de CRTC (en
gros, le processeur gérant la synchronisation de l'écran) sur le CPC, plus ou
moins compatibles entre eux. L'ASIC semble avoir été conçu pour émuler un
CRTC type 0, mais dans la pratique, il réagit différemment ; on parle de CRTC
de type 4 pour les puristes. Les techniques dites de "rupture d'écran" peuvent
donc poser problème.
L'adaptation de programmes utilisant de tels procédés est plutôt complexe et
hasardeuse. Heureusement, ce genre d'incompatibilité est exceptionnel pour des
jeux. On peut citer trois jeux ayant de tels soucis : Octoplex, Led Storm et
Skateball.
Par contre, pas mal de démos (Terrific demo, par exemple) refusent de
fonctionner sur CPC+ à cause de l'émulation CRTC.
Programmes Basic/Binaires
On trouve parfois des programmes Basic dont le chargement s'opère comme un
fichier binaire. Une fois chargé, une routine assembleur particulière "lance"
le programme Basic. Pour une raison étrange, ce type de bricolage plante
lamentablement sur CPC plus, bien que la ROM Basic soit en tout point
similaire à celle d'un CPC 6128.
Ce genre de routine a très peu été utilisé par des éditeurs.
On la retrouve par contre dans les programmes Basic compactés avec le
Crown Imploder. Un générateur de tels programmes a été publié dans le fanzine
Noix de Croco numéro 4. Enfin, le fameux cracker C.A.C.H abusait de cette
routine dans ses loaders...
Il existe un paliatif trés simple à ce problème. Il suffit de charger le
programme binaire soit à partir d'un programme Basic, soit à partir des
vecteurs système du CPC (&BC77, &BC83 et &BC7A). Bref, tout est bon sauf la
commande RUN" !
Bugs graphiques
L'écran couleur du CPC nouvelle génération est plus large que les anciens
modèles CTM 664. Cette différence de taille explique le fait que sur des
demos en overscan, on distingue des choses sur le côté droit de l'écran que
l'on n'est pas censé voir ! Il s'agit en général de bouts de lettres non
effacées dans des scrollings. Cela n'est pas à proprement parler un bug, mais
gâche un peu la qualité graphique de ces démos.
Pour avoir un overscan couvrant la totalité de l'écran d'un CPC plus, il
faut la définir comme suit :
LD BC,&BC01
OUT (C),C
LD BC,&BD31
OUT (C),C
LD BC,&BC02
OUT (C),C
LD BC,&BD32
OUT (C),C
Autre curiosité, si un programme a utilisé des rasters (changement de couleurs
d'une encre synchronisé avec le balayage video) ou des split rasters
(plusieurs changement d'une couleur sur une même ligne video), ces derniers
seront décalé un peu vers la droite. Le décalage entre le CPC et le CPC+
correspond en gros à un NOP.
Il existe une petite astuce qui dans certains cas, peut éliminer ce bug. Il
suffit de décaler l'écran du CPC plus d'un caractère vers la droite, en
tapant la séquence suivante sous BASIC :
OUT &BC00,2
OUT &BD00,45
Evidemment, si le programme concerné change la valeur du registre 2 du CRTC,
cela ne fonctionnera pas !
Chargeurs Basic et chaines hexadécimales
Vous trouverez dans l'archive diffusé avec cet article des loaders pour les
programmes originaux suivants :
Afterburner (Activision)
Asterix and the magic cauldron (Melbourne house)
Barbarian (Palace software)
Biggles (Mirrorsoft)
Blue war (Free Game Blot)
Bob Morane Chevalerie (Infogrames)
Croco passion demo 2 (?)
Fernandez must die (Imageworks)
Geebee air rally (Activision)
Guadalcanal (Activision)
Le casse du siecle (Ariolasoft)
Nigel's Mansell grand prix (Martech)
Shufflepuck cafe (Microids)
Sigma 7 (Durell)
Sky demo 2 (Strooki)
Shufflepuck cafe (Microids)
Sky demo 2 (Strooki)
Star raiders II (Electric dreams)
Street sport basketball (Epyx)
Strike harrier force (Mirrorsoft)
Super cycle (Epyx)
Textomat (traitement de texte de Micro Applications)
Turbo cup (Loriciels)
Si vous maniez avec dextérité un éditeur de secteurs, voici quelques
recherches à effectuer pour d'autres jeux. Un conseil, travaillez TOUJOURS
avec une copie de sauvegarde de votre jeu, un malheur est si vite arrivé...
ARCADE TRIVIA QUIZZ SIMULATOR (Zeppelin)
****************************************
Rechercher : 06 F6 3E C0 (logé en mémoire vive en &C96)
Remplacer par : CD 7B 2A
Rechercher la chaine ASCII "rewind" (en &2A7B)
Remplacer par
COMANDO TRACER (Dinamic)
*************************
Rechercher : 01 0E F4
Remplacer par : CD 81 7F
Rechercher 2 fois la chaine ASCII "COPYR"
Remplacer LA 2EME CHAINE par : AE 91 9E F4 ED 49 01 C0 F6 ED 49 0E 00 C9
DEATH STALKER (Codemasters)
***************************
Rechercher : 32 AE 00 CD 0B 09
Remplacer par : CD DE 1C
Rechercher la chaine ASCII "CODE1.BIN"
Remplacer par : 32 AE 00 ED 49 C9
JONNY QUEST (hitech)
********************
Rechercher : 01 0E F4
Remplacer par : CD A6 94
Rechercher chaine ASCII "BY HITECH"
Remplacer par : 01 0E F4 ED 49 01 C0 F6 ED 49 0E 00 C9
MYTH (System 3)
***************
Rechercher : 01 C0 F6 ED 49
Remplacer par : C3 ED 87
Rechercher la chaine ASCII "YOUR QUEST"
Remplacer par : 00 01 0E F4 ED 49 01 C0 F6 ED 49 0E 00 ED 49 01 92 F7 C3 EA 96
MUTANT FORTRESS (Players)
*************************
Rechercher 2 fois : 01 C0 F6 ED 49 01 0E F4
Remplacer 2 fois par : 01 0E F4 ED 49 CD EE 2C
Rechercher 1 fois la chaine ASCII "REWIND"
Remplacer par : 01 C0 F6 ED 49 0E 00 ED 49 C9
PRISON RIOT (Players)
*********************
Rechercher : 3E C8 06 F8 (logé dans la mémoire vive en &82C1)
Remplacer par : CD 00 80 00
Rechercher : 00 00 38 7C 7C 7C 38 (en &7FF0)
Remplacer 16 OCTETS PLUS LOIN (en &8000) par : 01 C0 F6 ED 49 0E 00 ED 49 C9
RED HEAT (Ocean)
****************
Rechercher : 01 C0 F6
Remplacer par : CD D9 7A
Rechercher la chaine ASCII "DOORSPR"
Remplacer par : 01 0E F4 ED 49 01 C0 F6 ED 49 0E 00 C9
SUPER CYCLE (Epyx, version disque)
**********************************
Rechercher 2 fois : 01 C0 F6 ED 49 01 0E F4
Remplacer 2 fois par : 01 0E F4 ED 49 CD 50 7C
Rechercher chaine ASCII "SUPER CYCLE"
Remplacer 23 octets moins loing (suite de 00) par 01 C0 F6 ED 49 0E 00 C9
TIE BREAK (Ocean)
*****************
Rechercher : 01 C0 F6
Remplacer par : CD A0 09
Rechercher : 41 57 54 09 09 3B 52 45
Remplacer par : 01 C0 F6 ED 49 0E 00 C9
TORNADO LOW LEVEL (Vortex)
**************************
Rechercher 3 fois : 01 0E F4
Remplacer 3 fois par : CD C0 8C
Rechercher : 06 0C 21 23 C0 11 50 00
Remplacer par : 01 0E F4 ED 49 01 C0 F6 ED 49 0E 00 C9