Le premier fil de cette rubrique concerne le Sharp PC-1500/A et le Tandy PC-2, ma machine de predilection.
A noter que le PC-1500 et le PC-2 etant identiques (sauf sur le look) tout ce qui concerne le PC-1500 s'applique au PC-2. Mais le PC-1500A, a cause de son implentation memoire differente, peut changer certaines informations ou valeurs et donc cela sera signale.
J'ai compile ci-apres un certain nombre de posts auxquels j'ai participe. Toutes ces astuces sont basees sur mon experience personnelle. Elles ont fait leur preuve depuis 30 ans, mais il y a en surement d'autres et certainement meilleures.
Reset materiel du PC-1500/PC-2
Le PC-1500 est pourvu d'un bouton RESET au dos. Un appui plus ou moins long avec une pointe de stylo permet de reprendre la main en cas de plantage; c'est un RESET materiel. En appuyant en meme temps sur la touche ON, on obtient une remise a zero complete de la machine.
Oui, mais non ! Par experience ceci fonctionne bien a condition de ne pas avoir de module memoire installe. J'ai constate que le RESET materiel pouvait laisser la machine dans un etat impropre.
Par contre, il a permis dans tous les cas de plantages de reprendre la main. Effet de bord: l'integrite des donnees presentes en memoire n'est pas garantie.
Si MEM ou STATUS 0 retournent une valeur farfelue ou inatendue, en mode PRO, utiliser la commande NEW 0 pour remettre les pointeurs RAM en accord avec le materiel. En effet, il semble que le reset, ne le fait pas tout seul. Ceci est surtout utile en cas de crash violent.
Reset soft du PC-1500/PC-2
Le RESET soft se fait par un call au vecteur de RESET (&FFFE), et a pour effet de remettre le PC dans etat connu, de recalculer la memoire et de reinitialiser tous les pointeurs et les vecteurs de derivation. Il est aussi beaucoup moins violent qu'un RESET materiel, et a toujours fonctionne apres l'insertion ou le retrait d'un module. Je vous conseille de l'utiliser lors de ces dernieres operations. Pour provoquer le RESET soft, il suffit de taper
Code : Tout sélectionner
CALL &E000
Attention. Si les pointeurs RAM sont recalcules correctement, les valeurs renvoyees par MEM ou STATUS n peuvent etre fausses, tant que le NEW 0 n'est pas effectue, car ce sont les valeurs des bornes (&7863 et &7864) qui sont recalculees.
La taille memoire totale est renvoyee par
Code : Tout sélectionner
(PEEK &7864 - PEEK &7863) * 256
Si vous faites un NEW 0 en mode PRO, vous allez reinitialiser les pointeurs du BASIC et dans ce cas MEM vous donnera la bonne valeur.
Code : Tout sélectionner
&7863 : Poids fort du bas de la RAM.
&7864 : Poids fort + 1 du haut de la RAM.
&7865/66 : Adresse de debut de la zone BASIC. Par defaut, c'est le debut (bas) de la RAM + &C5 (197 octets pour la memoire RESERVE)
&7867/68 : Fin du programme BASIC. Apres un NEW, cette adresse est la meme que celle en &7865/66.
&7869/6A : Pointeur de debut de merge, utilise par l'ordre MERGE. Apres un NEW, cette adresse est la meme que celle en &7865/66.
&7899/9A : Adresse des variables dynamiques et des tableaux. Apres un NEW ou un CLEAR, c'est la fin (haut) de la RAM.
- &7863 = &40 (64 en decimal)
- &7864 = &48 (72 en decimal)
- &7865/66 = &40C5
- &7867/68 = &40C5
- &7869/6A = &40C5
- &7899/9A = &4800
La memoire RAM valide s'etend ainsi de (PEEK &7863)*256 jusqu'a (PEEK &7864)*256 - 1.
Ci-dessous les adresses en fonctions des modules et des modeles.
Code : Tout sélectionner
PC-1500 PC-1500A
Base &4000 .. &47FF &4000 .. &57FF
CE-151 &4000 .. &57FF &4000 .. &67FF
CE-155 &3800 .. &5FFF &3800 .. &6FFF
CE-159 &2000 .. &47FF &2000 .. &57FF
CE-161/163 &0000 .. &47FF &0000 .. &57FF
Remise de la RAM a zero
Les deux routines ci-dessous, detruisent entierement le contenu de la RAM en mettant la valeur 0 a toutes les adresses valides.
La premiere s'adapte en fonction de la RAM effectivement trouvee:
Code : Tout sélectionner
POKE &7900,&A5,&78,&63,&08,&4A,&00,&34,&41,&84,&A7,&78,&64,&91,&08,&9A
Code : Tout sélectionner
POKE &7900,&34,&08,&0A,&41,&4C,&70,&91,&05,&9A
Ces routines sont logees dans la zone des variables A, B, C et seront donc effacees apres un CLEAR. Mais, elles sont relogeables n'importe ou.
Verification de la RAM systeme et de la RAM BASIC+module
Le PC-1500 possede deux espaces RAM:
- - L'espace BASIC+module decrit plus haut,
- - La RAM systeme ou sont ranges les differents pointeurs, piles, zones de travail, buffers et les variables statiques A a Z et A$ a Z$. Cette zone est situee de &7600 a &7BFF (7FFF sur le PC1500A).
Code : Tout sélectionner
POKE &4700,&48,&70,&4A,&00,&05,&2A,&BD,&FF
POKE &4708,&28,&0E,&05,&A6,&89,&0F,&BD,&FF
POKE &4710,&26,&89,&0A,&41,&4C,&7C,&91,&14
POKE &4718,&BE,&E6,&69,&F9,&9A,&FB,&9A
Pour l'utiliser, faire:
Code : Tout sélectionner
X=0
CALL &4700,X
Voici un petit programme qui teste la RAM BASIC+module. Cette routine s'adapte en fonction de la RAM et des modules installes:
Code : Tout sélectionner
POKE &7750,&A5,&78,&63,&08,&4A,&00,&05,&2A
POKE &7758,&BD,&FF,&28,&0E,&05,&A6,&89,&11
POKE &7760,&BD,&FF,&26,&89,&0C,&41,&84,&A7
POKE &7768,&78,&64,&91,&16,&BE,&E6,&69,&F9,&9A,&FB,&9A
Code : Tout sélectionner
X=0
CALL &7750,X
Attention, cette routine est implantee dans l'espace des variables P$, Q$, R$. Elle sera effacee par un NEW ou un CLEAR. Elle est totalement relogeable, mais doit imperativement residee en RAM systeme.
Ces 2 routines lisent chaque octet de l'espace a controler, font un XOR &FF de la valeur, ecrivent la valeur ainsi obtenue, relisent l'octet, le comparent, puis refont un XOR &FF, comparent la valeur a l'octet d'origine et le replacent. Elles ne sont donc pas destructrices, sauf si un des tests echoue.
Calcul de checksum de la ROM
La routine ci-dessous permet de calculer une somme de controle de la ROM (&C0000..&FFFF) du PC-1500.
Code : Tout sélectionner
POKE &78C0,&34,&08,&0A,&2A,&68,&C0,&65,&FD,&CA,&6C,&00,&99,&07,&FB,&9A
Code : Tout sélectionner
X=0
CALL &78C0,X
X
Ceci, car il existe plusieurs versions de la ROM, et ce calcul permet donc de connaitre quelle ROM est installee. A savoir que si la somme de controle n'est pas referencee si dessous, il est possible que la ROM soit endommagee, et pourrait expliquer le comportement erratique eventuel du PC.
J'ai rescense 3 ROMs differentes (4 avec celle du PC-1600). Peut-etre, il y en a-t-il d'autres. Dans les revues de l'epoque, il etait fait mention de 4 ROMs, mais jusqu'a ce jour, seules 3 ont ete identifiees:
Code : Tout sélectionner
-20007 = &B1D9 : ROM0 - PC1500 (debut-mi 1982) -> PEEK &E2B9 <> 56, ce qui rend le driver clavier inutilisable.
-20920 = &AE48 : ROM1 - PC1500 (12/1982) = PC2
-21986 = &AA1E : ROM2 - PC1500 (?) = PC1500A = PC2
31949 = &7CCD : ROM(3) ? PC1600 (A priori la ROM1500 dans le PC1600 est différente)
Restauration d'un programme apres un NEW ou apres incoherence des pointeurs BASIC
Le petit programme ci-dessous permet de recuperer un programme efface par un NEW (a condition qu'il n'est pas ete reecrit par dessus).
Code : Tout sélectionner
POKE &7900,&CC,&65,&05,&DD,&89,&01,&0E,&FD,&6A,&44,&44,&05,&FD,&CA,&05,&B7,&0D,&89,&09
POKE &7913,&44,&05,&B7,&FF,&99,&12,&CA,&67,&9A,&FD,&28,&B5,&FF,&0E,&9E,&0A
Un CALL &7900 va restaurer le programme BASIC efface, eventuellement, meme partiellement un programme BASIC corrompu, meme si les pointeurs BASIC sont incoherents. Attention cependant: ce programme ne se sort pas de toutes les situations, mais il peut etre utilise entre autre pour remettre les pointeurs BASIC en coherence apres une commutation de page avec le module CE-163.
Commutation de page du CE-163
Le CE-163 est un module de 32Ko pagines; il contient donc deux pages de 16Ko chacune, accesibles exclusivement l'une de l'autre.
Pour commuter les pages, des POKEs sont necessaires:
- POKE &5800,0 commutera en page 0 pour un PC-1500
- POKE &5801,0 commutera en page 1 pour un PC-1500
- POKE &6800,0 commutera en page 0 pour un PC-1500A
- POKE &6801,0 commutera en page 1 pour un PC-1500A
Voila. En esperant que ces astuces vous seront utiles. Et surtout n'hesitez pas a communiquer les votres et a enrichir cette rubrique pour d'autres machines dans un autre fil.
Edit: Mise a jour avec les routines de controle de la RAM systeme et de la RAM BASIC+module