[Casio PB-80] Exploration du système

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Avatar du membre
leglatin
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 761
Enregistré le : 03 févr. 2003 19:46
Localisation : Berville-sur-Mer (27)
Contact :

[Casio PB-80] Exploration du système

Message par leglatin »

Avec les vacances qui arrivent, c'est l'occasion de déstocker ses micropoches pour jouer avec. Pour changer un peu des PB-7xx, j'ai déstocké mon petit PB-80 dans le but d'explorer son intérieur... sachant que le PB-80, tout comme les PB-110, FX-700P etc... sont similaires à l'historique PB-100.

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 :-) . Comment ça marche ?

- 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 :

Image

(*) 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 !
Modifié en dernier par leglatin le 16 oct. 2016 13:23, modifié 1 fois.
Commodore 7970 - Texas Instruments TI-30, 57, 60, 66, 74, 76.fr, 80, 81, 82, 82 Stats.fr, 83, 85, 86, 89, 92 - Casio PB-100, PB-110, PB-410, PB-500, PB-700, PB-770, FX-180Pv, FX-7500G, FC-200, FA-3, FA-4, FA-5, FA-10, FA-11, FA-20, FP-12, CM-1, OR-1, OR-1(E), OR-4, OR-8, RC-2, RC-4 - Canon X-07 - Psion Series 5 mx - PalmOne Tungsten E2 - Compaq iPAQ H3900 - HP iPAQ HX2110 - Philips VG8020, NMS8255, VY0010, VY0011, VS0080, D6450, VW0030, SBC3810, NMS1112, NMS1150, NMS1170 - Atari 1040 STE
Avatar du membre
epopy
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 692
Enregistré le : 27 sept. 2008 00:37
Localisation : Pas loin de Genève (CH)
Contact :

Re: [Casio PB-80] Exploration du système

Message par epopy »

Belle et intéressante plongée au cœur de ce bon vieux PB-80. Surement d'autre découvertes à faire...
mon site : epocalc
Avatar du membre
ledudu
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5622
Enregistré le : 26 mars 2009 13:07
Localisation : Ile de France
Contact :

Re: [Casio PB-80] Exploration du système

Message par ledudu »

+1
Avatar du membre
badaze
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 8372
Enregistré le : 12 févr. 2007 18:36
Localisation : Pas très loin de Lyon
Contact :

Re: [Casio PB-80] Exploration du système

Message par badaze »

ledudu a écrit :+1
+1
Tout est bon dans le pocket.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer :(
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.
Avatar du membre
leglatin
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 761
Enregistré le : 03 févr. 2003 19:46
Localisation : Berville-sur-Mer (27)
Contact :

Re: [Casio PB-80] Exploration du système

Message par leglatin »

epopy a écrit :(...) Surement d'autre découvertes à faire...
Certes... Il reste à explorer en détail la zone système, en ça les infos de Piotr seront très utiles pour ce faire.

Ensuite, le souci est qu'on ne peut probablement pas synthétiser nous-mêmes les tokens inexplorés, alors la seule soluce pour les observer qui se présenterait serait de fouiller cette zone système en toute connaissance de cause pour en dénicher un, à isoler ensuite par MID$( et compagnie, pour l'injecter en mémoire BASIC...

Ou alors, faire comme sur le 702P que j'ai eu quelques mois avant de prendre un PB-100, le truc de L'OI : lui enlever les piles une trentaine de secondes... De mémoire, ce truc ne marchait plus sur le PB-100. Faudrait tester sur le 80, on se sait jamais...
Commodore 7970 - Texas Instruments TI-30, 57, 60, 66, 74, 76.fr, 80, 81, 82, 82 Stats.fr, 83, 85, 86, 89, 92 - Casio PB-100, PB-110, PB-410, PB-500, PB-700, PB-770, FX-180Pv, FX-7500G, FC-200, FA-3, FA-4, FA-5, FA-10, FA-11, FA-20, FP-12, CM-1, OR-1, OR-1(E), OR-4, OR-8, RC-2, RC-4 - Canon X-07 - Psion Series 5 mx - PalmOne Tungsten E2 - Compaq iPAQ H3900 - HP iPAQ HX2110 - Philips VG8020, NMS8255, VY0010, VY0011, VS0080, D6450, VW0030, SBC3810, NMS1112, NMS1150, NMS1170 - Atari 1040 STE
Avatar du membre
leglatin
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 761
Enregistré le : 03 févr. 2003 19:46
Localisation : Berville-sur-Mer (27)
Contact :

Re: [Casio PB-80] Exploration du système

Message par leglatin »

Bonjour à tous,

Pendant mes vacances (fort appréciées...), j'ai pu continuer à jouer avec le PB-80 pour poursuivre son exploration.

Tout d'abord, voici la manip que j'utilise désormais pour tricker le poquette :

- Mettre l'OR-1 à poste
- ALL RESET
- saisir "DEFM 102", affichage "***VAR:128"
- Eteindre, ôter l'OR-1, rallumer : Le PB-80 est trické.
- si l'on saisit "DEFM", l'on obtient "***VAR:512"

Ainsi, d'une part, la totalité du Ko est désormais accessible par les variables A(0) à A(127), et d'autre part les variables fixes Z à A sont désormais accesibles par les pas 545 à 752 de la mémoire BASIC.

Ne pas oublier que la mémoire BASIC progresse dans le sens ascendant de la carte mémoire, et que les variables progressent dans le sens descendant.

Sur le PB-100 que j'aurai à Noël prochain, acheté et reçu récemment, que j'ai pu utiliser en avant-première officiellement pour tests :mrgreen: , qui n'est pas réceptif au sésame de l'OP, cette manip fournit les mêmes résultats, autorisant de fait son exploration. De là à penser qu'elle fonctionne sur l'ensemble des pockets de la série PB-1xx avec modules, ça paraît probable. Mais ça reste à vérifier. A noter que si le PB-80 affiche "***VAR:512" au DEFM, le PB-100 affiche toujours, lui, "***VAR:128", ce qui n'a pas de conséquences.

Pour l'exploration proprement dite, j'ai saisi en mémoire BASIC :

- en zone P0 :

1 SIN:REM %%%%%%%%%
2 SIN:REM %%%%%%%%%
3 SIN:REM %%%%%%%%%
4 SIN:REM %%%%%%%%%
5 SIN:REM %%%%%%%%%
6 SIN:REM %%%%%%%%%
7 SIN:REM %%%%%%%%%
8 SIN:REM %%%%%%%%%

Chaque ligne doit faire 16 octets pile.

- en zone P1 :

1 INPUT "VAR ",A:$=" (23 espaces) ":A$(96)=a$(93)
2 IF A$(A)="" THEN A(95)=A(A):GOTO 4
3 A$(95)=A$(A)
4 FOR A=0 TO 7:$=MID(1,7)+MID(16+A,1)+" "+MID(16+A,1)+MID(11,15)
5 A$(93-A*2)=A$(96):NEXT A

P1 va constituer un équivalent de moniteur hexa ; dont on observera les résultats en listant P0.

Exemple, consulter la mémoire 93 en l'état:
- "SHIFT", "P1", "93", EXE
- "MODE", 1, "SHIFT", "P0", "MODE", "0", "LIST" :

1 +:REM %%%%%%%%%
0 :REM %%%%%%%%%
80 SIN:REM %%%%%%%%%
EE- ::REM %%%%%%%%%
.E REM:REM %%%%%%%%%
0 :REM %%%%%%%%%
70 %:REM %%%%%%%%%
70 %:REM %%%%%%%%%

A(93) correspond à la zone mémoire $220 à $22F d'où :

$220: 01 00 80 FE AF 00 70 70

Qui correspond bien àu début de notre programme BASIC P0. Chaque octet extrait de la variable demandée correspond à une ligne de P0 ; octet implanté sur le premier offset de la ligne, pour en obtenir le code hexa, et sur son troisième offset, pour en obtenir la signification du token (caractère ou instruction) au moment du LIST.

A noter que P1 utilise les variables $ et A, donc explorer les registres 0 et 94 à 97 avec P1 ne donnera pas de résultats probants.

Cela a permis, d'une part, un contrôle aisé d'exactitude de la table des codes officiels. A ce propos, je me suis aperçu que le 80 avait un caractère supplémentaire par rapport au 100, le caractère "\" de code $7A :

Image

Tout à fait officiel, car accessible par "SHIFT", "P". J'avions pas vu... A noter que les codes $FF = fin de ligne BASIC et $F0 = fin de programme BASIC, comme sur les autres Casios.

Ceci fait, reste à boucher les trous. Malheureusement la série PB-1xx n'utilise pas le code ASCII, et donc point de CHR$ ou équivalent : impossible de synthétiser directement un octet à partir de son code sur cette série. Pas d'autre choix que de tenter de les dénicher quelque part en mémoire, en explorant en mode Yolo (*) les registres du système, en l'occurence 127 à 98. Et ça a payé partiellement, j'ai pu en isoler quelques uns. Pour en trouver d'autres, j'ai fait des FOR/NEXT et GOSUB/RETURN puis exploré les registres 98 à 107, et effectivement j'en ai alors récupéré d'autres :

$BF : WRITE#
$CF : CLEAR
$D4 : (Espace)
$D8 : ABS
$DD : BEEP
$DE : BE
$DF : A
$E0 : CLEA
$E1 : A
$E4 : DAT
$E7 : D
$E8 : O
$E9 : DE
$EF : A
$F4 : ST
$D8 : A
$F9 : REM
$FD : STE

Ce que l'on peut déjà dire est que ces tokens prennent leur nom sur des instructions déjà existantes, totalement : WRITE#, CLEAR ... ou partiellement : BE, A, CLEA, DAT, D, O, DE, ST, STE (même si elles ne font qu'un caractère, ce sont tout de même des instructions, dans le sens où elles sont suivies par un espace). J'ai tenté d'en exécuter deux (je ne sais plus lesquelles...) ; si la première s'est lancée sans plantage avec pour résultat une augmentation du DEFM de +26 ; l'autre a provoqué un plantage avec affichage assez psychédélique, seule solution : ALL RESET. J'ai du tout resaisir pour continuer mes explorations...

Il y a eu une petite friandise : le code $3F qui donne le caractère "-1" :

Image

Une fois implanté en mémoire BASIC par P1, j'ai pu l'éditer dans une ligne PRINT "-1" qui s'est parfaitement exécutée. Sauf erreur de ma part ce caractère n'est pas documenté dans la notice du PB-80. Le code $7F correspond à un espace, donc sans intérêt. Reste à trouver les codes $3A à $3E, $5A, $5B, $7A à $7E et ce qu'ils affichent...

Voilà, j'en suis là. En l'état actuel j'ai stocké les nouveaux tokens dans des variables utilisateurs, en attendant de poursuivre les investigations...

(*) Expression couramment emplyée par Petite Fille (et probablement une bonne majourité d'autres djeunes) signifiant visiblement "Au hasard". Synonyme également employé par l'intéressée : "En mode Bas les steaks".
Commodore 7970 - Texas Instruments TI-30, 57, 60, 66, 74, 76.fr, 80, 81, 82, 82 Stats.fr, 83, 85, 86, 89, 92 - Casio PB-100, PB-110, PB-410, PB-500, PB-700, PB-770, FX-180Pv, FX-7500G, FC-200, FA-3, FA-4, FA-5, FA-10, FA-11, FA-20, FP-12, CM-1, OR-1, OR-1(E), OR-4, OR-8, RC-2, RC-4 - Canon X-07 - Psion Series 5 mx - PalmOne Tungsten E2 - Compaq iPAQ H3900 - HP iPAQ HX2110 - Philips VG8020, NMS8255, VY0010, VY0011, VS0080, D6450, VW0030, SBC3810, NMS1112, NMS1150, NMS1170 - Atari 1040 STE
Avatar du membre
leglatin
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 761
Enregistré le : 03 févr. 2003 19:46
Localisation : Berville-sur-Mer (27)
Contact :

Re: [Casio PB-80] Exploration du système

Message par leglatin »

"Les dessous du PB-80", Troisième partie.

Pour pouvoir obtenir tous les codes BASIC sans avoir à les dénicher au p'tit bonheur la chance dans la mémoire système, j'ai eu recours à une autre solution.

Les Ingrédients nécessaires pour cette recette : Le PB-80 avec un OR-1, un PB-100 ou dérivé nanti d'un connecteur et pouvant recevoir l'OR-1, une interface cassette FA-3 (ou équivalent), et enfin un PC moderne avec un soft genre Adobe Audition et avec les précieux utilitaires de Marcus.

Sur le PB-80 nanti de l'OR-1, après un ALL RESET, saisir en zone P0 des lignes de BASIC, peu importe lesquelles, du moment que la zone fasse 752 octets, de telle sorte qu'il reste alors 816 octets de disponibles. En zone P1, saisir alors une ligne style 1 PRINT "ABCDEF" ; ça va être notre ligne utile.

Ôter l'OR-1 du PB-80 et le mettre dans le PB-100. "ALL RESET" sur le PB-100, saisir en mémoire du PB-100 exactement la même chose que sur le PB-80, en zones P0 et P1. Brancher le PB-100 sur la FA-3 et connecter cette dernière au PC. Sauvegarder la zone P1 du PB-100 (SAVE "ESSAI") dans un essai.wav (mono, 44.1 Kbps) et en extraire l'image binaire par "wav2raw -b essai.wav essai.cas".

En hexéditant ladite image binaire, on peut y voir entre autres octets la suite "01 00 A6 07 20 21 22 23 24 25 07" ; c'est notre ligne de BASIC. La chaîne de caractères correspondant à la suite de codes "20 21 22 23 24 25". Il n'y a plus qu'à la modifier, par exemple, par "3A 3B 3C 3D 3E 3F".

Dès lors, créer un WAV avec wave730.exe et injecter le ficher audio obtenu dans le PB-100 par un LOAD. Si on RUN alors P1 sur le PB-100 (en mode RUN), l'on aura un affichage blanc, car pour le PB-100 ce sont des caractères tout aussi blancs qui s'affichent donc comme des espaces.

Lorsqu'on ôte un module OR-1 de son micropoche, il conserve ses données quelques secondes ; alors il reste à ôter l'OR-1 du PB-100 pour le remettre dans le PB-80. Cette manip doit être effectuée rapidement car sinon les données commencent à s'altérer. Mais bon ne pas s'affoler quand-même, ne surtout pas risquer de détériorer le module, ce serait fort dommage... Personnellement je mets entre cinq à dix secondes pour déplacer le module, et globalement ça le fait. Attention, on le sait, toujours éteindre les appareils avant d'enlever ou retirer le module...

Sur le PB-80, on n'a plus RUN-er P1 pour voir s'afficher ces nouveaux caractères :) .

Exemple d'affichage :

Image

Ainsi, le PB-100 et l'OR-1 servent donc de passerelle entre le PB-80 et l'interface cassette : Le PB-80 n'est donc plus un système complètement fermé 8) .

Concernant les caractères, la table du PB-80 correspond in fine au jeu de caractère complet de la série 1xx (table ci-dessous, dressée par Piotr) ; il est donc dommage que certains d'entre eux ne soient pas directement accessibles au clavier...

Image

Concernant les instructions, tous les tokens ont donc pu être générés (*) :

Code : Tout sélectionner

 $80 SIN       $90 LEN(      $A0 FOR       $B0 VAC
 $81 COS       $91 VAL(      $A1 NEXT      $B1 SET
 $82 TAN       $92 MID(      $A2 GOTO      $B2 PUT
 $83 ASN       $93 KEY       $A3 GOSUB     $B3 GET
 $84 ACS       $94 CSR       $A4 RETURN    $B4 CLEAR
 $85 ATN       $95 TO        $A5 IF       *$B5 DEFM
 $86 LOG       $96 STEP      $A6 PRINT    *$B6 SAVE
 $87 LN        $97 THEN      $A7 INPUT    *$B7 LOAD
 $88 EXP       $98 DEG(      $A8 MODE     *$B8 VERIFY
 $89 SQR       $99  A        $A9 STOP     *$B9 LIST
 $8A INT       $9A STR$(     $AA END      *$BA RUN
 $8B FRAC      $9B DMS$(     $AB ON       *$BB NEW
 $8C ABS       $9C MID$(     $AC READ     *$BC PASS
 $8D SGN       $9D ALL       $AD RESTORE  *$BD SRAM
 $8E RND(      $9E BEEP      $AE DATA     *$BE LRAM
 $8F RAN#      $9F LET       $AF REM      *$BF WRITE#

 $C0 DEFM     *$D0 (Spc)    *$E0 CLEA      $F0 (Fin de zone BASIC)
 $C1 SAVE     *$D1 RAN#     *$E1 A        *$F1 (?)
 $C2 LOAD     *$D2 SAVE     *$E2 C        *$F2 N
 $C3 VERIFY   *$D3 TAN      *$E3 COS      *$F3 PRI
 $C4 LIST     *$D4 (Spc)    *$E4 DAT      *$F4 ST
 $C5 RUN      *$D5 VAC      *$E5 DEFM     *$F5 R
 $C6 NEW      *$D6 WRITE#   *$E6 DE       *$F6 RN
 $C7 PASS     *$D7 (Spc)    *$E7 D        *$F7 RESTORE
 $C8 SRAM     *$D8 ABS      *$E8 A        *$F8 O
 $C9 LRAM     *$D9 A        *$E9 DE       *$F9 REM
 $CA WRITE#   *$DA ALL      *$EA END      *$FA RE
*$CB VAC      *$DB ASN      *$EB FRAC     *$FB SA
*$CC SET      *$DC AT       *$EC A        *$FC RA
*$CD PUT      *$DD BEEP     *$ED F        *$FD STE
*$CE GET      *$DE BE       *$EE G         $FE :
*$CF CLEAR    *$DF A        *$EF A         $FF (Fin de ligne BASIC)
Ceux marqués d'une * correspondent à des intructions non officielles ; celles indiquées par (Spc) ont en fait pour nom un espace, et s'agissant d'instructions, sont suivies par... un espace. Pour pousser l'exploration plus loin, il faudrait tenter de les exécuter pour voir ce que ça donne :? ...

(*) à l'exception, il est vrai, du code F1 : En effet, si on le met dans une ligne de BASIC au sein d'une image CAS ; une fois transformée en WAV, un LOAD sur le PB-100 se solde par une "ERR-9"...
Modifié en dernier par leglatin le 30 déc. 2017 12:38, modifié 1 fois.
Commodore 7970 - Texas Instruments TI-30, 57, 60, 66, 74, 76.fr, 80, 81, 82, 82 Stats.fr, 83, 85, 86, 89, 92 - Casio PB-100, PB-110, PB-410, PB-500, PB-700, PB-770, FX-180Pv, FX-7500G, FC-200, FA-3, FA-4, FA-5, FA-10, FA-11, FA-20, FP-12, CM-1, OR-1, OR-1(E), OR-4, OR-8, RC-2, RC-4 - Canon X-07 - Psion Series 5 mx - PalmOne Tungsten E2 - Compaq iPAQ H3900 - HP iPAQ HX2110 - Philips VG8020, NMS8255, VY0010, VY0011, VS0080, D6450, VW0030, SBC3810, NMS1112, NMS1150, NMS1170 - Atari 1040 STE
Avatar du membre
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3625
Enregistré le : 06 sept. 2011 14:57
Localisation : Normandie

Re: [Casio PB-80] Exploration du système

Message par Hobiecat »

Excellent !
Avatar du membre
ledudu
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5622
Enregistré le : 26 mars 2009 13:07
Localisation : Ile de France
Contact :

Re: [Casio PB-80] Exploration du système

Message par ledudu »

+1
Avatar du membre
leglatin
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 761
Enregistré le : 03 févr. 2003 19:46
Localisation : Berville-sur-Mer (27)
Contact :

Re: [Casio PB-80] Exploration du système

Message par leglatin »

Merci :oops:

Ce week-end, j'ai un peu continué mes investigations :

Déjà une chose : après avoir généré une ligne BASIC "PRINT" avec les nouveaux caractères (Petit D majuscule, petit L majuscule etc...), qui s'affichent bien sur le PB-80, mais pas sur le PB-100 ; j'ai voulu en faire un RUN et un LIST sous PB-100 connecté à la FP-12 en mode "PRT" et les caractères s'impriment bien. Conclusion : La FP-12 dispose donc de son propre jeu de caractères en ROM (Comme la FP-10, d'ailleurs). La FP-12 étant sortie en même temps que le PB-100 (le premier poquette de cette série), on aurait raison de penser alors qu'à cette date Casio avait déjà prévu de sortir par la suite d'autres modèles qui utiliseraient ces caractères.

Question : Quel(s) est(sont) le(s) modèle(s) qui utilise en standard ces nouvaux caractères, et pour ceux qui les détiennent : Quel en est l'usage officiel ? (Stats ? Memo ?...)

Y en a que je trouvais bizarres (codes 7D et 7E), jusqu'à ce que je les imprime sur FP-12 et visiblement ça semble correspondre à un double caractère "b/t". Sur l'écran du PB-80 y a fatalement un blanc entre les deux moitiés, mais à l'impression le FP-12 semble bien les juxtaposer. Là aussi, pour quel usage est il prévu ?

Deuxième chose, j'ai voulu commencer à explorer les instructions synthétiques du PB-80, je n'ai pas pu tout explorer car c'est assez lourd à mettre en oeuvre (utilisation du PB-100 + OR-1 comme passerelle) et l'exécution de certaines provoquent une altération de la mémoire. Résultat, tout re-saisir, re-transférer etc... Ça a fini par me gaver un peu. Et puis bon, pas envie de trop risquer de flinguer mon OR-1.

La plupart de celles que j'ai essayées aboutissent à des "ERR-1", "ERR-2" avec des numéros de lignes exacts ou fantaisites, à des boucles temporaires ou permanentes (mais dont on peut sortir par "AC"), des plantages avec ou sans conséquences, des affichages parfois étranges, par exemple des colonnes manquantes (lol) etc... Beaucoup d'entre elles altèrent la mémoire...

Y a quand-même ces deux-là :
L'instruction "G " de code EE : elle exécute la routine d'allumage du PB-80 par la touche ON : Petit bip aigu, mise sous P0, affichage "READY P0". un "Soft Reset" programmable, quoi.
L'instruction "A " de code EF : au contraire, elle exécute la routine d'extinction par la touche OFF : Le PB-80 s'éteint. Là on a un OFF programmable, et ça c'est pas mal.

Ces deux instructions sont bien stables, comparées à d'autres qui sont plutôt radioactives, c'est déjà ça. Ce qui m'étonne, c'est que ces deux petites friandises, les seules stables que j'ai dénichées parmi les testées, font des choses complémetaires (ON et OFF), avec des codes qui se suivent (EE et EF)...

J'ai testé d'autres instructions libellées "A ", le code D9 par exemple, pour voir si elle éteignait aussi le PB, mais non : là on obtient une "ERR-2". Conclusion : le point d'entrée n'est pas lié au nom de l'instruction. Confirmé par l'essai de l'instruction "BEEP " de code DD : de mémoire, elle a foutu un beau bordel, mais point de son n'est sorti :mrgreen: ...
Modifié en dernier par leglatin le 16 oct. 2016 14:10, modifié 4 fois.
Commodore 7970 - Texas Instruments TI-30, 57, 60, 66, 74, 76.fr, 80, 81, 82, 82 Stats.fr, 83, 85, 86, 89, 92 - Casio PB-100, PB-110, PB-410, PB-500, PB-700, PB-770, FX-180Pv, FX-7500G, FC-200, FA-3, FA-4, FA-5, FA-10, FA-11, FA-20, FP-12, CM-1, OR-1, OR-1(E), OR-4, OR-8, RC-2, RC-4 - Canon X-07 - Psion Series 5 mx - PalmOne Tungsten E2 - Compaq iPAQ H3900 - HP iPAQ HX2110 - Philips VG8020, NMS8255, VY0010, VY0011, VS0080, D6450, VW0030, SBC3810, NMS1112, NMS1150, NMS1170 - Atari 1040 STE
Avatar du membre
ledudu
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5622
Enregistré le : 26 mars 2009 13:07
Localisation : Ile de France
Contact :

Re: [Casio PB-80] Exploration du système

Message par ledudu »

Merci pour ces compléments :geek: :geek:
Avatar du membre
leglatin
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 761
Enregistré le : 03 févr. 2003 19:46
Localisation : Berville-sur-Mer (27)
Contact :

Re: [Casio PB-80] Exploration du système

Message par leglatin »

Bien le bonjour en cette nouvelle année que je souhaite à tous la meilleure possible :D ,

Ici j'ai pu donc commencer à me servir de mon nouveau jouet que Papa Noël m'a apporté l'année dernière, en l'occurence un PB-110. A l'usage on s'aperçoit qu'il apparaît rigoureusement identique au PB-80 au niveau de son système : leurs jeux de caractères et d'instructions sont parfaitement semblables. De là à penser que pour concevoir le système du PB-80, Casio a simplement repris la ROM du PB-110... Le PB-80 a toutefois le mode "Buzzer" en plus : Casio a du donc juger utile tout de même d'y intégrer cette fonction supplémentaire dans le sens où son clavier était "tactile". Mais sorti de cela, aussi bien en utilisation normale qu'en utilisation trickée, on a exactement les mêmes résultats, même au niveau des caractères cachés et pour les instructions synthétiques, telles "A " et "G" de codes 238 et 239 qui exécutent les routines d'allumage et d'extinction du micropoche.

On comprend mieux pourquoi le 80 possède des instructions comme SAVE ou LRAM, bien que dépourvu de connecteur.

Une autre chose que j'avions pas vu, et ça c'est plutôt une très bonne nouvelle, c'est que le PB-110, et donc à fortiori le PB-80, sont parfaitement réceptifs à l'astuce de Xerxes pour PEEKer et POKEr avec l'instruction MODE, tels les FX-730P et FX-795P :-)

La syntaxe y est encore plus simple (là aussi au sein de lignes BASIC seulement) :

MODE 18(A,B) équivaut à B=PEEK(A)
MODE 19(A,B) équivaut à POKE A,B

Je n'avais pas pensé a tester cela sur le PB-80, ça m'aurait évité pas mal de manips lourdingues, rendant notamment mon trick complètement inutile...

Explorer alors la table des codes et la carte de la mémoire de ces pockets, système qui ont donc toujours été ainsi semi-ouverts, est de fait un jeu d'enfant, autorisant par exemple l'écriture toute simple d'un moniteur mémoire tel que celui-ci :

Code : Tout sélectionner

1 PRINT "  Moniteur","(C) CLG 2018"
2 INPUT "Adresse ",A:IF A<0 THEN INPUT "Valeur ",B:A=-A:MODE 19(A,B)
3 MODE 18(A,B):PRINT A;":";B;:C$=": ":MODE 19(1001,B):PRINT C$
4 A=A+1:GOTO 3
Pour lire la mémoire, Shift P0, saisir l'adresse, par exemple 272 (= début du Basic), affichage "272:1:+" (Adresse, valeur, caractère). Presser EXE pour visualiser l'octet suivant. Si on veut POKEr, Shift PO, saisir l'adresse précédée du signe moins, la nouvelle valeur de l'octet est alors demandée, puis EXE ramène en mode lecture.

Par exemple, si l'on saisit "-278" puis "76", le grand "M" de "Moniteur" se change en un petit "m" dans le listing, ce qui est confirmé par l'affichage "278: 76:m".

A noter que si l'on dispose du module optionnel de 1 Ko, il faut remplacer dans le listing le "1001" par "2025"
Commodore 7970 - Texas Instruments TI-30, 57, 60, 66, 74, 76.fr, 80, 81, 82, 82 Stats.fr, 83, 85, 86, 89, 92 - Casio PB-100, PB-110, PB-410, PB-500, PB-700, PB-770, FX-180Pv, FX-7500G, FC-200, FA-3, FA-4, FA-5, FA-10, FA-11, FA-20, FP-12, CM-1, OR-1, OR-1(E), OR-4, OR-8, RC-2, RC-4 - Canon X-07 - Psion Series 5 mx - PalmOne Tungsten E2 - Compaq iPAQ H3900 - HP iPAQ HX2110 - Philips VG8020, NMS8255, VY0010, VY0011, VS0080, D6450, VW0030, SBC3810, NMS1112, NMS1150, NMS1170 - Atari 1040 STE
Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1602
Enregistré le : 27 oct. 2010 20:46

Re: [Casio PB-80] Exploration du système

Message par Gilles59 »

Super découvertes ces commandes peek et poke pour le PB-80 et PB-110! La ROM est-elle accessible comme ça?
Quelqu’un a essayé sur le pb-100?
Je note que la syntaxe du PEEK est un peu différente que celle trouvée par Xeres pour les Fx-730 etc
Casio FX-502P /602P / 603P / FX180P+ / FX4000P / TI57 / TI66 / TI74 Basicalc / TI95 Procalc / HP12C / HP15C LE / DM41L / HP 30B / HP39GII / HP 48SX USA / 49G / 49g+ / 50G / 50G NewRPL / HP Prime / Oric 1 / Amstrad CPC 6128+ CM14 et MM12 / Alice 32
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Re: [Casio PB-80] Exploration du système

Message par Ben »

Gilles59 a écrit : 02 janv. 2018 11:36 Quelqu’un a essayé sur le pb-100?
Je ferais le test ce soir! :-)
Très intéressant, effectivement :-)
Avatar du membre
leglatin
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 761
Enregistré le : 03 févr. 2003 19:46
Localisation : Berville-sur-Mer (27)
Contact :

Re: [Casio PB-80] Exploration du système

Message par leglatin »

Gilles59 a écrit :La ROM est-elle accessible comme ça?
Malheureusement non, uniquement la RAM utilisateur, comme les PEEK et POKE officiels du PB-770. C'est pour ça que j'ai parlé de systèmes semi-ouverts...
Gilles59 a écrit :Quelqu’un a essayé sur le pb-100?
Oui, fatalement, mais sans succès (on obtient des ERR-5).

D'après les descriptifs des micropoches du site de l'ami pocket, je dirais à priori que cette astuce :
- marcherait aussi pour : PB-120, PB-220, PB-240, PB-400, PB-410, FX-710P, FX-720P, FX-740, FX-7xxp, FX-820P
- ne marcherait pas sur : PB-200, PB-300, FX-700P, FX-802P, FX-5200P
Mais tout cela reste à vérifier par les détenteurs de ces modèles...
Commodore 7970 - Texas Instruments TI-30, 57, 60, 66, 74, 76.fr, 80, 81, 82, 82 Stats.fr, 83, 85, 86, 89, 92 - Casio PB-100, PB-110, PB-410, PB-500, PB-700, PB-770, FX-180Pv, FX-7500G, FC-200, FA-3, FA-4, FA-5, FA-10, FA-11, FA-20, FP-12, CM-1, OR-1, OR-1(E), OR-4, OR-8, RC-2, RC-4 - Canon X-07 - Psion Series 5 mx - PalmOne Tungsten E2 - Compaq iPAQ H3900 - HP iPAQ HX2110 - Philips VG8020, NMS8255, VY0010, VY0011, VS0080, D6450, VW0030, SBC3810, NMS1112, NMS1150, NMS1170 - Atari 1040 STE
Répondre

Retourner vers « Tous les Pockets »