A l'époque de L'OP, dans les n° 17 et 19, sur PB-100 une manipulation particulière (appelée traditionnellement "Sésame") avait permis un premier plongeon dans la mémoire" du PB-100 ; sa table des codes et sa carte de la mémoire avaient alors pu être établies. Cette manipulation ne marchait cependant que sur les modèles les plus anciens, ceux plus récents avaient été malheureusement corrigés...
De nos jours, grâce aux travaux de l'ami Piotr, complétés par le non-moins ami Marcus, les PB-1xx munis d'un connecteur peuvent être désormais connectés de façon tout à fait normale à un PC avec, de fait, la possibilité d'injecter en mémoire programme n'importe quel octet. Etablir leur table des codes par ce biais est donc désormais un jeu d'enfant. Sous réserve, bien-sur, de détenir une interface... Par contre, cela n'apportait pas la possibilté d'établir les cartes de leurs mémoires. Et, concernant le PB-80 qui n'a pas de connecteur, sa connection avec un PC est impossible...
Il n'empêche que leurs architectures internes sont connues, ne serait-ce que par la lecture du manuel de service du Tandy PC-4 (PB-100 américain) . A noter que les mémoires s'adressent non pas en octets, mais en quartets.
Ces cartes, les voici :
PB sans module, taille 2Kq
$000-$21F 544q Zone du système
$220-$72F 1088q Programmes BASIC
$730-$7FF 416q Variables Z à A
PB avec module, taille 4Kq
$000-$21F 544q Zone du système
$220-$E5F 3136q Programmes BASIC
$E60-$FFF 416q Variables Z à A
Chaque variable occupe 16 quartets. L'on s'aperçoit que, selon que l'on met à poste un OR-1 ou non, la zone adressant les variables fixes diffère... et j'ai observé que ça pouvait être utile pour explorer le PB-80
- Enlever la trappe du PB, mettre l'OR-1, remettre la trappe, ALL RESET -> "READY P0".
- MODE "1" EXE -> 1568 octets. Les variables sont en $E60-$FFF
- Enlever la trappe du PB, retirer l'OR-1, remettre la trappe -> "READY P0".
- Surtout ne pas faire de NEW ALL ni d'ALL RESET.
- MODE 1 EXE -> 1568 octets. LE PB n'a pas mis à jour son pointeur de fin de zone BASIC...
Où sont les variables ?
- MODE 0 EXE ; Z=3.14 EXE ; Z EXE -> 3.14
Si elles étaient toujours en $E60-$FFF, ce 3.14 n'aurait pas pu être mémorisé dans Z car cette zone ($E60-$E6F) n'existe pas physiquement. De là à penser que le pointage des variables en mémoire a bien été mis à jour vers la zone $730-$7FF, même sans avoir fait d'ALL RESET, il n'y a qu'un pas... Et en ce cas, cette zone se retrouverait donc, en l'état, également accessible à la zone BASIC...
- Dans P0, saisir des lignes de BASIC. Peu importe lesquelles, du moment que leur total fasse exactement 544 octets. Il doit donc rester 1024 octets de disponibles.
- Dans P1, saisir la ligne "10 +++++". Cette ligne fait exactement 16 quartets, et occupe donc $730-$73F, c'est-à-dire la lone correspondant à la mémoire Z.
- MODE 0, Z EXE -> ERR6...
- Z$ EXE -> "0 +++++". Ça ressemble bien à la ligne 10 du P1, ça...
L'on peut alors utiliser les manips semblables à celles décrites dans L'OP 17 pour établir la tables des codes du 80, comme suit :
Caractères (exemple "µ")
- Dans P1, saisir "10 +++++" et "11 END".
- Mode 0, Z$="µ +++++", EXE puis LIST, EXE -> "6) +++++%1 END " -> 6) est le code hexa de "µ", =$6C (*)
Sans grande surprise, la table des caractères du 80 est la même que celle du 100, valeurs $00 à $7F = première moitié de table. Ci-dessous cette table, dressée par Piotr :

(*) Cette table montre notamment les chiffres hexa, ligne "1x".
Instructions (exemple LIST)
- Dans P1, saisir "10 LIST++++" et "11 END" (Après NEW, si nécessaire).
- Mode 0, $=Z$ EXE puis Z$=MID(3,1)+"+++++" EXE puis LIST, EXE -> "1)4 ++++ o1 END " -> $C4 est le code de LIST.
La plupart des codes des instructions ("tokens") du 80 sont similaires à ceux du 100, à quelques exceptions : Le jeu d'instructions du 80 est plus étendu, et visiblement dans un souci de normalisation du BASIC Casio, certaines ont été modifiées, tout en gardant une certaine compatitilité. Les instructions occupent la dexième moitié de table ($80 à $FF), les tokens sont identiques à ceux du PB-100, exceptés :
Nouvelles instructions du 80 par rapport au 100 :
PASS ($C7), BEEP ($9E), READ ($AC), DATA ($AE), RESTORE ($AD), ON ($AB), REM ($AF), NEW ($C6), ALL ($9D), DEG( ($98), DMS$( ($9B), STR$( ($9A), LET ($$9F), MID$( ($9C), SRAM ($C8), LRAM ($C9) et WRITE# ($CA).
Par rapport au 100, CLEAR a déménagé en $B4 (Elle fait désormais VAC et non NEW). Contrairement à ce qui est dit dans le manuel du 80, les instructions VAC, SAVE, LOAD, PUT et GET sont toujours présentes. SAVE etc... sont inopérantes, car... il n'y a pas de connecteur. VAC fait la même chose que CLEAR, elles ont donc à priori le même point d'entrée... L'instruction KEY$ est en fait KEY auquel on juxtapose un "$", les intructions NEW#, LIST#, READ#, RESTORE# sont leurs instructions NEW + "#", LIST + "#" etc... par contre, WRITE# est un token à part entière, de code $CA. MID$( est un token à part entière, mais MID( est toujours là, et qui fait la même chose (même point d'entrée là aussi, donc). Enfin, SRAM et LRAM sont présentes, ce qui est tout de même surprenant...
Quand j'ai établi cette table, le token $99 restait inoccupé. J'ai voulu le créer, et j'ai pu le faire ainsi :
- MODE 1, saisir "10 ++++++" en P1 (Après NEW si nécessaire)
- MODE 0, Z EXE -> 1.0101010E-90
- Z=1.99999999E-10 EXE, list -> 10 A A A A+". $99 semble donc correspondre au token " A" (Espace, "A"). S'agit-il d'une instruction synthétique imprévue ? Je ne le pense pas : je présume qu'il s'agit en fait du "A" de "CLEAR A" ou "NEW A", acceptés par le 80 pour, je présume, des raisons de compatibilité avec le 100. Si tel est le cas, " A" est un token qui a, là également, le même point d'entrée que "ALL".
Et concernant la carte de la mémoire ? Notamment, connaître le détail de la zone système ($00-$21F) ? La bonne nouvelle est que si l'on consulte la config actuelle DEFM, on obtient "***VAR:410" ! C'est plus qu'il n'en faut... D'avoir retiré l'OR-1 sans le suivre d'un ALL RESET perturbe également le pointeur DEFM... (Tant mieux). Selon la carte globale sans module, la mémoire BASIC va de A(93) à A(27) et la mémoire système, celle qui nous intéresse, va de A(127) à A(94). Sur sa page consacrée au FX-700P, Piotr présente le détail de cette zone, qui apparaît semblable à celle du PB-100. Et pour le 80 ? D'après mes premières observations, il y a aussi des similitudes, mais aussi des discordances. Exemples :
$000-$07F (128q, 64o) = Tampon d'entrée, comme sur PB-100. Accessible via A(127) à A(120) -> en mode RUN, taper A$(127) EXE pour consulter ce registre, l'on obtient "A$(127)". Ce qu'on vient de taper... $1E0-$21F (64q, 32o) = Variable $, acessible via A(97) à A(94).
Par contre, autre exemple, la zone $110-$11F, qui sur PB-100 = la variable RAN#, sur le 80 semble contenir plutôt des pointeurs BASIC : J'ai essayé de POKEr 0 dans A(111), ça a mis la mémoire BASIC un peu en distribile, un ALL RESET a remis les choses en place...
Il y a donc encore des choses à explorer : Où est le registre PASS, par exemple...
Une dernière chose, concernant le "***VAR:410" : 410 = 26+128+128+128.
26+128 = 154 = DEFM correspondant à un PB avec 1 module OR-1 mais configuré en 544 octets. Taille totale 2 Ko
26+128+128 = 282 = DEFM correspondant à UN PB qui aurait deux modules OR-1, configuré en 544 octets. Taille totale 3 Ko
26+128+128+128 = 410 = DEFM correspondant à un PB qui aurait trois modules OR-1, configuré en 544 octets. Taille totale 4 Ko.
Bien évidemment, il est impossible d'adjoindre plus d'un OR-1 au PB-80 ; mais est-ce à dire que le PB pourrait donc adresser jusqu'à 4 Ko (8 Kq) de mémoire ?
Il faudrait faire l'essai d'y mettre un OR-2 pour voir si on obtient alors 2592 octets (en DEFM 0) ? Et, s'il existait un OR-3, aurait-on alors 3616 octets? C'est la taille mémoire du PB-400...
En l'état sur le 80, si on essaye de mettre quoi que ce soit dans A(384) à A(128), elles restent à 0 = la mémoire physique correspondante n'existe pas. De là à penser qu'elles pointent vers les adresses $1000 à $1FFF, ça semble cohérent...
En tout cas, il y a encore plein de choses à découvrir au sein de nos micropoches Casio, et c'est tant mieux !










