Sinclair et Spectrum
1982
Rayures, sifflements et R Tape loading error
Les rayures colorées sur le bord de l'écran n'étaient pas une décoration : c'était la routine de chargement de la ROM elle-même qui montrait, bit par bit, les données arrivant de la cassette.
Qui a eu un Spectrum se souvient du rituel : LOAD "", ENTER, PLAY sur le magnétophone, et des minutes à fixer le bord de l'écran. Les rayures viennent directement de la routine de la ROM. D'abord vient la tonalité pilote, un sifflement continu qui dure environ 5 secondes avant l'en-tête et environ 2 secondes avant les données ; pendant cette phase, le bord alterne entre rouge et cyan à chaque transition du signal. Quand les données arrivent, les couleurs passent au bleu et au jaune [1].
La routine de lecture est exigeante. Pour accepter la tonalité pilote, elle doit trouver 256 paires de transitions, chacune à moins d'environ 3 000 cycles d'horloge de la précédente [2]. Les bits se distinguent par leur durée : un 0, ce sont deux impulsions de 855 cycles chacune, un 1, deux impulsions de durée double [1]. Tout compte fait, à 3,5 MHz, un 0 dure environ 0,49 milliseconde et un 1 environ 0,98, ce qui donne en moyenne près de 1 400 bits par seconde, et à peu près quatre minutes pour 40 Ko.
Les rayures sur le bord, c'est la ROM qui montre, en couleurs, chaque bit arrivant de la cassette.
Le « R Tape loading error » a une explication simple. Chaque bloc enregistré se termine par un octet de parité, calculé à partir de tous les autres. Au fil de la lecture, la ROM refait ce calcul, et à la fin le résultat doit être zéro ; sinon, ou si le signal se perd en cours de route, le chargement échoue [2]. Le manuel du Spectrum décrit ainsi l'erreur R : un fichier a été trouvé sur la bande, mais pour une raison quelconque il n'a pas été possible de le lire ou de le vérifier [3].
Les écrans de chargement profitaient d'un raccourci du BASIC : SCREEN$ équivaut à CODE 16384,6912, les 6 912 octets de l'image [3]. Et ils se chargeaient d'une façon étrange à cause de l'organisation de la mémoire vidéo. Les pixels ne sont pas stockés ligne par ligne : viennent d'abord les lignes du haut des caractères des rangées 0 à 7, puis les deuxièmes lignes, et ainsi de suite, et seulement ensuite le deuxième et le troisième tiers de l'écran. Les couleurs (les attributs) viennent à la fin, stockées dans l'ordre normal [4]. C'est pourquoi l'image apparaissait par rayures, en trois bandes, et ne prenait ses couleurs d'un coup qu'à la fin.
Les chargeurs rapides (turbo loaders) ont changé les règles. Speedlock a été écrit en 1983 par David Aubrey-Jones et David Looker, est resté environ un an dans un tiroir et a fait ses débuts fin 1984, dans Daley Thompson's Decathlon d'Ocean. En plus de charger plus vite, il utilisait des astuces du processeur, comme le registre de rafraîchissement de la mémoire, pour compliquer la copie [5].
Les premières versions de Speedlock se reconnaissaient aux clics dans la tonalité pilote ; les suivantes les ont remplacés par un compte à rebours à l'écran, avec le temps restant. Le système est passé sur l'Amstrad CPC en 1985 et a aussi été utilisé par U.S. Gold et par Ultimate Play the Game [5].
Sources
- [1]The Complete Spectrum ROM Disassembly: SA-BYTES (04C2) · Ian Logan e Frank O'Hara, edição SkoolKit de Richard Dymond
- [2]The Complete Spectrum ROM Disassembly: LD-BYTES (0556) · Ian Logan e Frank O'Hara, edição SkoolKit de Richard Dymond
- [3]Sinclair ZX Spectrum BASIC Programming, capítulo 20 (armazenamento em fita) · Sinclair Research / World of Spectrum, 1982
- [4]Sinclair ZX Spectrum BASIC Programming, capítulo 24 (a memória) · Sinclair Research / World of Spectrum, 1982
- [5]Fast loader (secção Speedlock) · Wikipedia