A programmer en Pascal pour la HP-48G
Modérateur : Politburo
- Miskatonic91
- Fonctionne à 1200 bauds
- Messages : 477
- Enregistré le : 27 août 2016 17:28
- Localisation : Valdemarnie
A programmer en Pascal pour la HP-48G
Enfin... je triche un peu quand même! Ce n'est pas moi qui programme en l’occurrence, mais l'auteur d'un compilateur Pascal tournant sous XP et qui produit des exécutables pour la HP-48. Je me suis contenté de compiler les sources et de transmettre le programme à ma HP-48 par liaison série. Le compilateur s'appelle HP-Pascal. Un bon plan pour les ceusses qui ne veulent pas se mettre à l'assembleur de la HP-48...
Pour les communications PC-HP48, j'ai réutilisé le câble bricolé pour le HP-95LX:
Côté PC, c'est toujours le grand bazar : dans un XP virtuel émulé sous VirtualBox, lui-même lancé dans une session Linux, j'utilise HyperTerminal avec les paramètres qui vont bien:
Côté HP-48, ça mouline à 9600 bauds:
Une photo d'une session d'HP-Pascal (ici, le début du source du programme pacman.pas):
Et voili-voilou le résultat:
Bonne nuit!
Pour les communications PC-HP48, j'ai réutilisé le câble bricolé pour le HP-95LX:
Côté PC, c'est toujours le grand bazar : dans un XP virtuel émulé sous VirtualBox, lui-même lancé dans une session Linux, j'utilise HyperTerminal avec les paramètres qui vont bien:
Côté HP-48, ça mouline à 9600 bauds:
Une photo d'une session d'HP-Pascal (ici, le début du source du programme pacman.pas):
Et voili-voilou le résultat:
Bonne nuit!
Un peu de tout, mais toujours de bon goût
- Marge
- Fonctionne à 14400 bauds
- Messages : 6186
- Enregistré le : 01 oct. 2008 14:39
- Localisation : En bas, tout au fond à gauche.
Re: A programmer en Pascal pour la HP-48G
Ah oui, bien intéressant !
Ainsi, on peut faire ça depuis un PC moderne. Quelle liaison utilises-tu ? C'est du rs-232, non ?
Ainsi, on peut faire ça depuis un PC moderne. Quelle liaison utilises-tu ? C'est du rs-232, non ?
3 hommes, 3 demis, un 3a... Magnéto, Serge !
Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67__: A L I E N .
♣ ♦ « Boris », c'était juste Maurice enrhumé. ♥ ♠
Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67__: A L I E N .
♣ ♦ « Boris », c'était juste Maurice enrhumé. ♥ ♠
- Miskatonic91
- Fonctionne à 1200 bauds
- Messages : 477
- Enregistré le : 27 août 2016 17:28
- Localisation : Valdemarnie
Re: A programmer en Pascal pour la HP-48G
Oui, c'est une liaison série. Le PC doit posséder le port adéquat (voir le lien pour le HP-95LX). Sinon ça doit marcher aussi avec un câble USB-Série comme celui-ci.
Un peu de tout, mais toujours de bon goût
- Marge
- Fonctionne à 14400 bauds
- Messages : 6186
- Enregistré le : 01 oct. 2008 14:39
- Localisation : En bas, tout au fond à gauche.
Re: A programmer en Pascal pour la HP-48G
Merci.Miskatonic91 a écrit :Oui, c'est une liaison série. Le PC doit posséder le port adéquat (voir le lien pour le HP-95LX). Sinon ça doit marcher aussi avec un câble USB-Série comme celui-ci.
Ce vendeur n'expédie pas en bas à gauche, mais je dois trouver ça par ici.
Eh oui, même 4 fois moins cher, une fois n'est pas coutume.
3 hommes, 3 demis, un 3a... Magnéto, Serge !
Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67__: A L I E N .
♣ ♦ « Boris », c'était juste Maurice enrhumé. ♥ ♠
Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67__: A L I E N .
♣ ♦ « Boris », c'était juste Maurice enrhumé. ♥ ♠
- Miskatonic91
- Fonctionne à 1200 bauds
- Messages : 477
- Enregistré le : 27 août 2016 17:28
- Localisation : Valdemarnie
Re: A programmer en Pascal pour la HP-48G
Oui, bien sûr, on peut en trouver de moins chers. C'est juste que le câble sur Amazon est très bien noté par les acheteurs. Le problème crucial, c'est le pilote. Celui que je possède (qui n'est pas celui d'Amazon) ne fonctionne pas avec le pilote fourni par le constructeur. J'ai fini par trouver un pilote alternatif qui fonctionne très bien, lui (merci G..gle ).
Un peu de tout, mais toujours de bon goût
- fred260571
- Fonctionne à 1200 bauds
- Messages : 363
- Enregistré le : 19 avr. 2016 13:10
- Localisation : Toulouse
Re: A programmer en Pascal pour la HP-48G
Pour transférer un fichier depuis mon Mac 10.11.6 vers une HP48
utilisé un TRENDnet TU-S9 (USB vers RS232)
téléchargé et installé les drivers
http://www.trendnet.com/langfr/support/ ... =265_TU-S9
redémarré
téléchargé kermit
ftp://kermit.columbia.edu/kermit/bin/
ftp://kermit.columbia.edu/kermit/bin/ck ... _64-10.7.1
chmod qui va bien
et
et voila
utilisé un TRENDnet TU-S9 (USB vers RS232)
téléchargé et installé les drivers
http://www.trendnet.com/langfr/support/ ... =265_TU-S9
redémarré
téléchargé kermit
ftp://kermit.columbia.edu/kermit/bin/
ftp://kermit.columbia.edu/kermit/bin/ck ... _64-10.7.1
chmod qui va bien
et
Code : Tout sélectionner
./cku302.macosx-x86_64-10.7.1 -C 'set port /dev/tty.usbserial,set carrier-watch off,robust,set file bin,set parity none, set speed 9600, set block 3,set flow none,set control prefix all'
ignorance is bliss
TI 57 II, TI 66, casio fx7500g, HP48GX, HP49G+, HP200LX, palm m125, Sharp PC-G850VS, HP12C
TI 57 II, TI 66, casio fx7500g, HP48GX, HP49G+, HP200LX, palm m125, Sharp PC-G850VS, HP12C
Re: A programmer en Pascal pour la HP-48G
Ca marche aussi sur les HP49 et 50g ;DMiskatonic91 a écrit : ↑06 avr. 2017 00:03 Enfin... je triche un peu quand même! Ce n'est pas moi qui programme en l’occurrence, mais l'auteur d'un compilateur Pascal tournant sous XP et qui produit des exécutables pour la HP-48. Je me suis contenté de compiler les sources et de transmettre le programme à ma HP-48 par liaison série. Le compilateur s'appelle HP-Pascal. Un bon plan pour les ceusses qui ne veulent pas se mettre à l'assembleur de la HP-48...
Ci après un BreakOut que j'ai écris et qui est tres rapide sur 49/50G avec des sons etc ...
https://www.hpcalc.org/details/8662
La plupart des commandes de Pascal y sont (ca ressemble pas mal à du Turbo Pascal en fait), avec des limitations et quelques bugs mais c'est assez bluffant dans l'ensemble. Pour vous donner une idée de ce qu'on peut faire, voilà le programme source :
Code : Tout sélectionner
Program CasseBriques;
{ =======================================
v1.3 Août 2017 - Nemo_59
HP Pascal v2.1 pour HP50g-HP49g+
--------------------------------------- }
Uses SystemHP,CrtHPmini_49,GraphHP,GameHP_49,
MathsHP_49, SoundHP_49;
Ressource Breakout;
Const NbTableau=5; HzMur=200; MsMur=5; HzBord=600; MsBord=5;
HzRqt=800; MsRqt=5; HzOut=100; MsOut=500;
Mvt : Array[1..8, 1..3, 1..2] Of Byte =
{ Chaque déplacement de la balle est décomposé en 3 mouvements de 1x1 pixel}
1, 0, 1,-1, 1,-1 { Direction 1 -3---2- }
, 0,-1, 1,-1, 1,-1 { Direction 2 4-----1 }
, 0,-1,-1,-1,-1,-1 { Direction 3 ------- }
,-1, 0,-1,-1,-1,-1 { Direction 4 ---O--- }
,-1, 0,-1, 1,-1, 1 { Direction 5 ------- }
, 0, 1,-1, 1,-1, 1 { Direction 6 5-----8 }
, 0, 1, 1, 1, 1, 1 { Direction 7 -6---7- }
, 1, 1, 1, 0, 1, 1;{ Direction 8 }
Tableau : Array[1..NbTableau, 0..15] Of String[14] =
'..............', { Tableau 1 }
'..............',
'..............',
'XXXXXXXXXXXXXX',
'XXXXXXXXXXXXXX',
'XXXXXXXXXXXXXX',
'XXXXXXXXXXXXXX',
'XXXXXXXXXXXXXX',
'..............',
'..............',
'..............',
'..............',
'..............',
'..............',
'..............',
'..............',
'..............', { Tableau 2 }
'..............',
'XXXXXXXXXXXXXX',
'XXXXXXXXXXXXXX',
'..............',
'..............',
'XXXXXXXXXXXXXX',
'XXXXXXXXXXXXXX',
'XXXXXXXXXXXXXX',
'..............',
'..............',
'..............',
'..............',
'..............',
'..............',
'..............',
'..............', { Tableau 3 }
'..X........X..',
'...X......X...',
'..XXXXXXXXXX..',
'..XX.XXXX.XX..',
'.XXXXXXXXXXXX.',
'XXXXXXXXXXXXXX',
'XXXXXXXXXXXXXX',
'X.X........X.X',
'X.X........X.X',
'...XXX..XXX...',
'...XXX..XXX...',
'..............',
'..............',
'..............',
'..............',
'..............', { Tableau 4 }
'..............',
'....XXXXXX....',
'..XXXXXXXXXX..',
'.XX.XXXXXX.XX.',
'XX...XXXX...XX',
'XXX.XXXXXX.XXX',
'XXXXXXXXXXXXXX',
'XX.XXXXXXXX.XX',
'XXX........XXX',
'.XXXX....XXXX.',
'..XXXXXXXXXX..',
'.....XXXX.....',
'..............',
'..............',
'..............',
'..............', { Tableau 5 }
'..............',
'....XXXXXX....',
'..XX.XXXXXXX..',
'.XX.XXXXX...XX',
'XX.XXXXX.XX.XX',
'X...XXXX.XX.XX',
'X.XX.XX.XX.XXX',
'X.XX.XX...XXXX',
'X.XX.XX.XXXXXX',
'.XXXXXX.XXXXX.',
'..XXXXX.XXXX..',
'....XXXXXX....',
'..............',
'..............',
'..............';
Static BestScore:Integer=350;
Var i, j, Rx, Bx, By, Bx2, By2,
Dir, Choc, b, Vies, LrgRqt,
Vitesse, Difficulte, Niveau, NBrique, TotBrique : Byte;
TapeMur, Perdu, GagneNiveau, SoundOn: Boolean;
Score,k : Integer;
c: Char;
{--------------------------}
Procedure DessineMur;
Begin
PutBloc(10,10,g_Level);
GotoXY(11,6); Write(Niveau);
GotoXY(3,8); Write('Press ENTER to play');
If SoundOn Then Begin
Beep(349,100); Beep(392,200); Beep(349,100); Beep(392,200); Beep(493,200); Beep(523,400);End
Else c:=ReadKey;
Clearbar(5,5,95,70);
TotBrique:=0;
Box(0,0,100,80);
For i:=1 To 14 Do
For j:=0 To 15 Do
If Tableau[((Niveau-1) MOD NbTableau)+1,j][i]='X' Then Begin
Bar((i-1)*7+2,j*4+2,i*7,j*4+4); TotBrique:=TotBrique+1;
If SoundOn Then Beep(Random(1000)+200,15);
End;
Bar(Rx,78,Rx+LrgRqt,79);
GotoXY(26,2); Write(Score);
GotoXY(26,5); Write(BestScore);
GotoXY(26,8); Write(Vies);
GotoXY(26,11);Write(Niveau);
Perdu:=False; GagneNiveau:=False;
Vitesse:=Difficulte-(Niveau Div (NbTableau+1)*3);
If Vitesse<2 Then Vitesse:=1;
NBrique:=0;
End;
{--------------------------}
Procedure BougeRaquette;
Var D : Char;
Begin
D:=' ';
For j:=1 To Vitesse Do Begin
If RightPressed Then D:='R';
If LeftPressed Then D:='L';
End;
Case D Of
'R': If Rx<86 Then
Begin
ClearLineV(Rx,78,79);
LineV(Rx+LrgRqt+1,78,79);
Rx:=Rx+1;
End;
'L': If Rx>1 Then
Begin
ClearLineV(Rx+LrgRqt,78,79);
LineV(Rx-1,78,79);
Rx:=Rx-1;
End;
End;
End;
{------------------------------}
Procedure BougeBalle;
Var Mx,My : Integer; Interm : Byte;
Begin
Interm:=1;
Repeat
BougeRaquette;
Bx2:=Bx+Mvt[Dir,Interm,1];
By2:=By+Mvt[Dir,Interm,2];
If Bx2>=99 Then Begin
Case Dir Of
1: Dir:=4;
2: Dir:=3;
7: Dir:=6;
8: Dir:=5;
End;
Bx2:=98; If SoundOn Then Beep(HzBord,MsBord);
Exit;
End;
If Bx2<=0 Then Begin
Case Dir Of
3: Dir:=2;
4: Dir:=1;
5: Dir:=8;
6: Dir:=7;
End;
Bx2:=2; If SoundOn Then Beep(HzBord,MsBord);
Exit;
End;
If By2<=0 Then Begin
Case Dir Of
1: Dir:=8;
2: Dir:=7;
3: Dir:=6;
4: Dir:=5;
End;
By2:=4; If SoundOn Then Beep(HzBord,MsBord);
Exit;
End;
BougeRaquette;
If By2=77 Then Begin
k:=Bx2; k:=k-Rx+1;
If Dir in [7,8] And (k=-1 Or (k=-2 And LeftPressed)) Then k:=0;
If Dir in [5,6] And (k=15 Or (k=16 And RightPressed)) Then k:=14;
If k>=0 And k<=LrgRqt+1 Then Begin
Case k Of
0 : Dir:=4;
{1..3 : Case Dir Of 5,6: Dir:=4; 7,8: Dir:=2; End;
4..10 : Dir:=9-Dir;
11..13: Case Dir Of 5,6: Dir:=3; 7,8: Dir:=1; End;}
1,2 : Case Dir Of 5,6: Dir:=4; 7,8: Dir:=2; End;
3..11 : Dir:=9-Dir;
12,13: Case Dir Of 5,6: Dir:=3; 7,8: Dir:=1; End;
14 : Dir:=1;
End;
If SoundOn Then Beep(HzRqt,MsRqt);
End Else Begin
Perdu:=True; ClearBar(Bx,By,Bx+1,By+1);
If SoundOn Then Beep(HzOut,MsOut);
End;
Exit;
End;
Choc:=0; TapeMur:=False;
ClearBar(Bx,By,Bx+1,By+1);
If Point(Bx2,By2) Then Choc:=1;
If Point(Bx2+1,By2) Then Choc:=Choc+2;
If Point(Bx2+1,By2+1) Then Choc:=Choc+4;
If Point(Bx2,By2+1) Then Choc:=Choc+8;
Bar(Bx,By,Bx+1,By+1);
Case Dir Of
1,2: Case Choc Of
1,3: Begin TapeMur:=True; Dir:=9-Dir; End;
2 : Begin TapeMur:=True; Dir:=Dir+4; End;
6,4: Begin TapeMur:=True; Dir:=Dir+2; End;
End;
3,4: Case Choc Of
2,3: Begin TapeMur:=True; Dir:=Dir+2; End;
1 : Begin TapeMur:=True; Dir:=Dir+4; End;
9,8: Begin TapeMur:=True; Dir:=5-Dir; End;
End;
5,6: Case Choc Of
4,12: Begin TapeMur:=True; Dir:=9-Dir; End;
8 : Begin TapeMur:=True; Dir:=Dir-4; End;
1,9 : Begin TapeMur:=True; Dir:=Dir+2; End;
End;
7,8: Case Choc Of
8,12: Begin TapeMur:=True; Dir:=9-Dir; End;
4 : Begin TapeMur:=True; Dir:=Dir-4; End;
2,6 : Begin TapeMur:=True; Dir:=Dir-2; End;
End;
End;
If TapeMur Then Begin
NBrique:=NBrique+1;
Mx:=((Bx2-1) Div 7)*7 + 1;
My:=((By2-1) Div 4)*4 + 1;
ClearBar(Mx,My,Mx+6,My+3);
If SoundOn Then Begin Beep(HzMur,MsMur); Beep(HzMur*2,MsMur); End;
Score:=Score+5; GotoXY(26,2); Write(Score); Interm:=3;
End;
Interm:=Interm+1;
If By2<77 Then Begin
ClearBar(Bx,By,Bx+1,By+1);
Bar(Bx2,By2,Bx2+1,By2+1);
End;
Bx:=Bx2; By:=By2;
Until Interm=4;
End;
Procedure Parametres(c :Char);
Begin
If Ord(c)=16 Then Halt;
Case c Of
'A' : Begin ClearBar(118,22,125,44); PutSprite(118,22,Check); Difficulte:=15; End;
'B' : Begin ClearBar(118,22,125,44); PutSprite(118,31,Check); Difficulte:=11; End;
'C' : Begin ClearBar(118,22,125,44); PutSprite(118,40,Check); Difficulte:=8; End;
'D': Begin
If SoundOn Then SoundOn:=False Else SoundOn:=True;
ClearBar(63,49,70,61);
If SoundOn Then PutSprite(64,49,Check) Else PutSprite(64,56,Check);
End;
End;
End;
Procedure Initialisation;
Begin
EnableInterrupt;ClearBar(0,0,130,79);
If SoundOn Then SoundOn:=False Else SoundOn:=True;
AppearCool(Instructions);
Parametres(Chr(68));
Case Difficulte Of
15 : Parametres(Chr(65));
11 : Parametres(Chr(66));
8 : Parametres(Chr(67));
End;
While KeyPressed Do c:=ReadKey;
Repeat
c:=ReadKey;
If SoundOn Then Beep(440,20);
Parametres(c);
Until Ord(c)=13;
DisappearCool;
End;
{-------- Programme principal -----------}
Begin
AppearCool(Breakout2); LineV(128,0,59); LineV(129,0,59);
GotoXY(7,11); Write('Press ENTER to Play');
GotoXY(7,12); Write('Press DEL<- to Exit');
c:=ReadKey; If c=Chr(16) Then Halt;
DisappearCool;
SoundOn:=True; Difficulte:=15; Contraste(15);
Repeat
Initialisation;
Score:=0; Vies:=6; Niveau:=1; Rx:=35; LrgRqt:=13;
ClrScr; PutBloc(100,0,Menu);
Repeat
{Nouveau Niveau}
Vies:=Vies+2; DessineMur;
DisableInterrupt;
Repeat
{Nouvelle balle}
By:=75; Bx:=Rx+5; Dir:=Random(3)+1;
GotoXY(26,8); Write(Vies);
Repeat BougeRaquette; Until UpPressed Or ExitPressed Or EnterPressed;
If SoundOn Then Beep(740,300);
Bx:=Rx+6;
Perdu:=False;
Repeat
BougeBalle;
If NBrique=TotBrique Then GagneNiveau:=True;
Until GagneNiveau Or Perdu Or ExitPressed;
ClearBar(Bx,By,Bx+1,By+1);
If Perdu Then Vies:=Vies-1; GotoXY(26,8); Write(Vies);
Until Vies=0 Or GagneNiveau Or ExitPressed;
Niveau:=Niveau+1;
EnableInterrupt;
Until Vies=0 Or ExitPressed;
GotoXY(8,8); Write('GAME OVER'); Box(30,46,68,54);
If Score>BestScore Then Begin
ClearBar(1,1,99,79);PutBloc(4,6,Best);
BestScore:=Score;
If SoundOn Then Begin
Beep(233,400);Beep(349,400);Beep( 311,133);Beep( 293,133);Beep( 261,133);Beep( 466,400);Beep( 349,400);
Beep( 311,133);Beep( 293,133);Beep( 261,133 );Beep(466,400 );Beep(349,400 );Beep(311,133 );
Beep(293,133 );Beep(311,133 );Beep(260,533);
End;
End;
GotoXY(5,11); Write('ENTER to replay');
GotoXY(5,12); Write(' DEL<- to exit');
ClearBar(1,78,99,79);
Repeat Until EnterPressed Or ExitPressed;
Until ExitPressed;
End.
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
- Miskatonic91
- Fonctionne à 1200 bauds
- Messages : 477
- Enregistré le : 27 août 2016 17:28
- Localisation : Valdemarnie
Re: A programmer en Pascal pour la HP-48G
Ton jeu a l'air super!
Est-il compatible HP48?
Est-il compatible HP48?
Un peu de tout, mais toujours de bon goût
Re: A programmer en Pascal pour la HP-48G
En l'état non, Mais je pense que ça ne doit pas être compliqué avec de petites adaptation. Il faudrait changer les UNITS utilisées et la taille de l'écran.
Voir si çà ne serait pas trop lent aussi, mais de mémoire je mets des boucles de tempo car sinon c'est trop rapide. Si je trouve un peu de temps je vais essayer dans un premier temps avec l'émulateur.
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
Re: A programmer en Pascal pour la HP-48G
La conversion hp49g est facile mais il faut redimensionner l’ecran. Par contre il manque une UNIT pour gérer les mini-fonts pour les 48. Quelques extraits vidéo (pas facile de poser le smartphone lol).
https://youtu.be/C0SFkYQMbDY
https://youtu.be/C0SFkYQMbDY
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
Re: A programmer en Pascal pour la HP-48G
Si ça intéresse quelqu’un j’ai converti en PDF le manuel du hp pascal qui est à la base un fichier d’aide Windows qui n’est plus lisible avec les Windows récent.Gilles59 a écrit : ↑15 juin 2019 20:58 La conversion hp49g est facile mais il faut redimensionner l’ecran. Par contre il manque une UNIT pour gérer les mini-fonts pour les 48. Quelques extraits vidéo (pas facile de poser le smartphone lol).
https://youtu.be/C0SFkYQMbDY
Ce manuel évoque la possibilité d’appeler une fonction en pascal et renvoyer le résultat sur la pile rom, par contre ça n’explique pas comment. Si quelqu’un sait ...
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