Retourner au sommaire

Compatibilité et bugs CPC+

Basé sur l'article publié dans Quasar CPC numéro 17, CPC plus, par OffseT.

Le CPC+, l'ordinateur qui donne des coups sur la tête ? Vous trouverez ici un petit résumé synthétique sur tous les problèmes connus liés aux CPC plus.

Outre les problèmes d'incompatibilité avec les CPC classiques, ceux-ci sont en effet réputés pour être farcis de bugs matériels qui en rendent parfois l'exploitation acrobatique. Nous aborderons également quelques aspects liés à la conception même des CPC+ qui ne sont pas réellement des bugs mais plutôt des défauts de qualité parfois surprenants.

Le CPC+ est-il compatible CPC ?

Beaucoup de choses ont été dites sur les problèmes de compatibilité CPC des CPC+ et je vais tâcher de faire le point pour que tout soit clair pour tout le monde.

Plait-il ?

Les incompatibilités software

Le premier problème se situe au niveau logiciel car les ROMs sont différentes. Le soucis le plus courant vient de la ROM CP/M (présente en version 0.5 sur CPC et 0.7 sur CPC+). En effet, certains programmes qui ne passent pas par les vecteurs système et effectuent des sauts direct en ROM se retrouvent dans les choux !

Certains problèmes peuvent également venir de la ROM BASIC (version 1.40 sur CPC+ au lieu de 1.20 voire 1.22 sur CPC6128) ou de la ROM firmware (version 4 au lieu de 3) mais c'est beaucoup plus rare. Il vous suffira donc de remplacer la ROM CP/M pour corriger quasiment tous les problèmes liés aux versions de ROM.

Pour ce faire, vous avez trois solutions :

  • remplacer la cartouche standard par une cartouche anciennes ROMs. Vous vous retrouvez alors avec le firmware v3, le BASIC 1.22 et le CP/M 0.5,
  • installer la ROM CP/M 0.5+ (version patchée pour être compatible avec le firmware v4) en ROM numéro 7 dans un Romboard ou une Ramcard (elle prendra automatiquement la place de la ROM CP/M de la cartouche Burnin' Rubber),
  • installer la ROM Parados en ROM numéro 7. Celle-ci est à 99% compatible CP/M 0.5 et offre une meilleure gestion des lecteurs 3”1/2 (voir l'article sur le remplacement de la ROM 7 sur CPC classiques et le dossier sur les ROMs).

Les incompatibilités hard

Elles sont de deux ordres : celles liées à la programmation des chips et celles liées à la connectique. En ce qui concerne les chips, ils sont principalement deux à poser problème : le FDC et le PPI émulé.

FDC et PPI en cause

Mais que se passes-t-il là dedans ? Le FDC du CPC+ ne réagit pas comme celui des CPC ancienne génération ce qui implique que les programmes très optimisés pour les accès disque ne fonctionneront pas correctement. C'est par exemple le cas du copieur Crime (de Crown) qui fera des erreurs de lecture/écriture. Il n'y a pas à ma connaissance de solution autre que celle d'éviter d'utiliser ces programmes. En effet, certains ont pensé à retirer le FDC de la carte mère et à brancher une interface DD1 d'Amstrad (celle vendue à l'époque pour le CPC464) mais ça ne marche pas car l'horloge du bus CPU est à 4MHz sur CPC contre 4,44MHz sur CPC+.

Le PPI, qui interface le clavier, le son et quelques signaux pose également problème. Les deux symptômes essentiels sont des tests clavier qui ne marchent pas ou des musiques qui déraillent. Le problème vient du fait que sur CPC+ le PPI émulé par l'ASIC diffère très légèrement du PPI réel ce qui fait qu'une bidouille de validation automatisée dont certains programmeurs avaient pu tirer profit sur CPC est sans effet sur CPC+. là non plus, il n'y a pas de solution autre que celle de patcher les programmes.

Le problème des ports

Viennent ensuite quelques problèmes liés aux ports des CPC+. Tout d'abord en ce qui concerne le port joystick. Sur CPC+, il ne supporte que deux boutons alors que les CPC ancienne génération en géraient 3. De manière générale ce n'est pas très gênant, sauf si vous utilisez une souris AMX ou un câble de communication. La solution est simple, il suffit de rajouter un fil entre le PSG et le port joystick 1. En effet, pour une raison qui m'échappe, tous les signaux nécessaires à la gestion de ce troisième bouton sont présents sur la carte mère mais n'ont pas été reportés sur le connecteur. Si d'aucuns sont intéressés par cette bidouille nous pourrons rédiger un article sur le sujet.

Il y a également un problème au niveau du port imprimante. Si nous avions utilisé celui-ci normalement (pour brancher une imprimante), aucun problème ne se serait présenté. Mais voilà, le port imprimante sert également pour les cartes réseau pour le Virtual Net 96. Celles-ci utilisent les signaux strobe et busy… et ce dernier est consultable en temps réel sur le PPI… alors que sur CPC+ il n'est scruté par l'ASIC que 500 fois par seconde ce qui rend donc le Virtual Net incompatible !

Allons-nous arriver à bon port ?

Du mauvais matériel ?

Mais le gros problème lorsqu'on utilise un CPC+ au quotidien n'est pas celui de la compatibilité avec les vieux CPC car la plupart des programmes ont maintenant été patchés ou alors des versions spéciales CPC+ sont sorties… non, le gros problème est la médiocrité de l'écran et du lecteur 3” de certains CPC+.

Lecteur 3" médiocre

J'viens d'te niquer ta disquette !

En ce qui concerne le lecteur 3”, sur la plupart des CPC+, il se révèle être de très mauvaise qualité. Il ne parvient pas à lire certaines disquettes en parfaite santé pour un 3” de CPC ancienne génération ou pire, il les détruit si vous essayez d'écrire dessus ! Vous êtes nombreux à avoir eu ce genre de problème et il n'y a malheureusement pas de solution aisée car on ne peut pas mettre un lecteur 3” de CPC classique dans le CPC+. Les lecteurs 3” de CPC ont besoin de +5V et +12V alors que seul le +5V est disponible sur CPC+. Reste la solution d'utiliser une alimentation externe (attention au fait sur le +5V et le +12V sont inversés par rapport à la connectique 3”1/2). Si le lecteur de votre CPC+ fait partie de ceux qui marchent mal, le mieux à faire est sans doute d'oublier qu'il existe et d'utiliser un lecteur 3"1/2.

Affichage flou

Il ne vous aura par ailleurs pas échappé que l'affichage des CPC+ est souvent (toujours) légèrement flou comparé à celui des CPC ancienne génération.

Les écrans

Il s'avère également que certains écrans sont effectivement flous. Il s'agit vraisemblablement de ceux de référence CM14a. Si vous avez la malchance d'avoir un tel écran, essayez de trouver un CM14b ou de brancher votre CPC+ sur un CTM644 (ceux des vieux CPC). Il est inutile de tenter de régler le focus de votre CM14a, dans le meilleur des cas ça sera toujours flou. Pour savoir si votre écran est flou, passez en mode 2 et afficher un “m” minuscule à l'écran : si vous distinguez la jambe du milieu votre écran est net, si vous avez un gros paté votre écran a besoin d'être réglé ou changé.

Le chipset

Dans tous les cas, l'affichage d'un CPC+ est toujours plus flou que celui d'un CPC ancienne génération ! Branchez un CPC+ et un CPC classique sur le même écran, le second sera toujours plus net que le premier. Pourquoi ? Eh bien tout simplement car c'est l'ASIC en personne qui nous gratifie d'un joli floutage ! En effet l'ASIC est normalement prévu pour être cadencé à une fréquence légèrement inférieure à 40MHz, mais avec une telle fréquence, impossible d'obtenir rigoureusement les 1MHz necessaires au FDC et au PSG pour fonctionner normalement. Les ingénieurs d'Amstrad ont donc cadencé l'ASIC à 40MHz tout rond pour que les autres chips du CPC+ fonctionnement correctement. Conséquence : l'affichage vidéo de l'ASIC est dégradé !

Un chipset buggé...

Vous trouverez quelques informations à ce sujet dans la rubrique consacrée à l'ASIC, mais je pense qu'un point plus généraliste n'est pas inutile. Tous les problèmes du chipset ASIC sont liés de près ou de loin aux interruptions. Par rapport au CPC, les interruptions sont beaucoup plus riches sur CPC+, mais elles sont également parfois délicates à utiliser compte tenu des bugs vicieux qu'elles cachent.

Hum ?

Des interruptions indisciplinées

Il y a tout d'abord les bugs “gentils”. Il est évident que lorsqu'on utilise les interruptions en provenance des DMA le passage en mode d'interruption vectorisé est plus que conseillé. Dans ce cas, le registre I du Z80 fixe l'octet de poids fort de la table des vecteurs d'interruption, les 5 bits de poids fort du registre IVR de l'ASIC donnent les bits suivants alors que le bit 0 est toujours à 0 et que les bits 1 et 2 sont fixés par le périphérique ayant généré l'interruption. Il se trouve que ces deux derniers bits ne font pas toujours ce qu'ils devraient puisqu'ils sont parfois positionnés pour le DMA 0 lors d'une interruption Raster et inversement. En pratique le Z80 est donc mal aiguillé sur le vecteur d'interruption à utiliser et se trompe dans à peu près 50% des cas !

Heureusement il existe une solution : le registre DCSR de l'ASIC. Celui-ci nous renseigne sur le périphérique qui vient de générer une interruption et, par chance, est toujours juste. Il nous suffira donc, au début des vecteurs d'interruption associés au DMA 0 et au Raster, de vérifier qu'il n'y a pas erreur et de corriger le saut le cas échéant. On perd en vitesse de traitement mais au moins ça marche… Mais n'oublions pas que les DMA 1 et 2 ne sont pas buggés et seront donc à utiliser en priorité.

Le méchant bug !

Attendez que je m'occupe de votre RAM ! Jusque là on a parlé des bugs de l'ASIC qu'il est possible d'éviter ou de contourner. Mais il existe un bug malheureusement imparable et qui serait idéal si un virus destructeur de RAM devait voir le jour ! Mais pour que vous puissiez comprendre vous devez savoir que la RAM utilisée sur CPC(+) est de la RAM dynamique. En pratique, ça veut dire que si elle n'est pas lue régulièrement, elle s'efface. Pour éviter celà, il y a le système du refresh pour conserver la RAM qui n'est ni lue par le Z80 ni balayée par la vidéo. En bien il se trouve que sur CPC+, lorsque vous êtes en rupture ligne à ligne (Reg4 CRTC=0 et Reg9 CRTC=0) et que vous utilisez les interruptions raster ne serait-ce qu'une seule fois pendant la frame, ce fameux signal refresh est inhibé ! Le contenu de la RAM en dehors du programme et de la vidéo va donc petit à petit s'effacer (au bout de 10 secondes il ne reste déjà presque plus rien). Et ceci n'est qu'un exemple, il existe mille et une autres façons d'inhiber ce signal en faisant de la programmation un peu complexe et je vous assure que c'est très perturbant lorsque ça survient.

 
dossier/plus.txt · Dernière modification: 2017/10/09 10:04 (édition externe)