Help Calculator

Conversione ASCII - HP binary object e viceversa

« Older   Newer »
  Share  
view post Posted on 5/9/2009, 10:16
Avatar

Advanced Member

Group:
Administrator
Posts:
1,486
Location:
Alatri (Frosinone)

Status:


Fin dai tempi della HP 48, la maggior parte dei programmatori preferisce scrivere i propri programmi per la propria calcolatrice grafica con l'ausilio del computer, perché è molto più comodo e veloce. Per fare questo è stato necessario superare un piccolo ostacolo, l'insieme dei caratteri della calcolatrice non è lo stesso di quello di un computer, che è ASCII. Per risolvere questo piccolo problema sono stati quindi scritti dei programmi per la calcolatrice che convertono un file di testo ASCII in un file binario della calcolatrice e viceversa. (si trovano molti programmi con il codice sorgente User RPL in formato ASCII su www.hpcalc.org). Non entrerò nel dettaglio di questi programmi per la conversione, ma spiegherò semplicemente come usarli. In altre parole grazie a questo articolo saremo in grado di scrivere un programma in formato ASCII, per esempio con il notepad di MS Windows, e convertirlo in un formato leggibile ed eseguibile dalla calcolatrice HP 50g (valido anche per HP 49g/49g+) e viceversa convertire un file prodotto dalla calcolatrice in un file ASCII.
Questo metodo è molto usato con l'emulatore EMU48 per testare velocemente i programmi.
In questo modo sarà possibile per esempio, scrivere un programma User RPL con l'emulatore EMU48 e convertirlo in formato ASCII, postare il programma su un forum, dove chi è interessato potrà copiarlo e salvarlo in un file di testo, inviarlo alla sua calcolatrice, tramite scheda SD, dove sarà convertito memorizzato ed infine eseguito.
La conversione è possibile anche tramite il software HP 50g, 49g+ and 48gii Calculator PC Connectivity Kit (leggere la guida), ma che, con i programmi che introdurrò, sarà del tutto superfluo installare perché sarà sufficiente avere una scheda SD, rendendo in questo modo semplice trasferire programmi sulla calcolatrice in maniera del tutto indipendente dal sistema operativo.
I programmi che ci servono sono quelli proposti in un lungo articolo di John H Meyers su comp.sys.hp48 (http://groups.google.com/group/comp.sys.hp...e7ed90b3cf11c42), in formato ASCII ovviamente, prendiamo in considerazione questi due:

CODICE
@ 7-bit ascii string -> calc object
\<< \->STR 3 TRANSIO RCLF SIZE 3 >
#2F34Dh #3016Bh IFTE SYSEVAL + STR\-> \>> 'IN' STO


CODICE
@ Calc object -> 7-bit ascii string
\<< STD 64 STWS \->STR 3 TRANSIO RCLF SIZE 3 >
#2F34Fh #2FEC9h IFTE SYSEVAL \>> 'OUT' STO


Per chi vuole approfondire o usare anche gli altri programmi si legga l'articolo di John H Meyers per intero.
Come è possibile intuire alcune sequenze di caratteri rappresentano un carattere speciale della calcolatrice, per esempio la sequenza \-> rappresenta il carattere freccia [RS]+[0], oppure \<< e \>> rappresentano i caratteri delimitatori di programma [RS]+[+]. A fine articolo ho riportato una tabella con le sequenze dei caratteri più usati, la tabella completa si trova nell'appendice J dell'HP 50g AUR www.hpcalc.org/details.php?id=7141.
Per portarli sulla calcolatrice all'inizio dobbiamo scriverli a mano, comunque è abbastanza intuitivo scrivere solo il primo, cioè IN, che serve a convertire una sequenza ASCII in un oggetto leggibile dalla calcolatrice; e quindi importare OUT con copia incolla, mostrando fin da subito un esempio. Quindi scriviamo sulla nostra HP 50g il programma IN e memorizziamolo nella omonima variabile (attenzione nel digitare esattamente le stringhe alfa-numeriche):

a85

Ora importiamo il programma OUT, copiamo il testo dalla @ (sta a indicare che la riga è un commento) a STO compresi e incolliamolo nel notepad (o un altro editor ASCII), salviamo il file col nome per esempio di OUT.TXT, trasferiamolo sulla scheda SD e richiamiamolo sullo stack con RCL, otterremo la seguente schermata:

a86

Ora avviamo il programma IN con il tasto funzione F1, e OUT sarà automaticamente convertito e memorizzato nella omonima variabile:

a87

Mostriamo il contenuto di IN e OUT con RS+'nome della variabile', per far vedere che le differenze con la versione ASCII:

a88

Se avessimo voluto usare l'emulatore EMU48, semplicemente, sempre dopo aver scritto manualmente e memorizzato 'IN', una volta copiato il testo ASCII di 'OUT', incolliamolo sullo stack con la funzione 'Paste Stack' di EMU48 che si trova nel menu EDIT:

a89

La conversione con i programmi IN e OUT è molto semplice e comoda soprattutto per postare i programmi User RPL sui vari forum o via email...
Tuttavia per programmi più lunghi e complessi, da archiviare per esempio in www.hpcalc.org, è utile usare i cosidetti “file transfer headers” ovvero “intestazioni per il trasferimento dei file”. Cioè al programma scritto in ASCII, si aggiunge una riga con dei caratteri che indicano alla calcolatrice il modo corretto di interpretare le sequenze ASCII: “%%­HP: T(3)A(D)F(.);”. Il significato è il seguente:

T(3) "modo di traduzione 3" ("\<<" and "\>>" vengono interpretati come delimitatori di un programma...)
A(D) "angoli in gradi" (influisce solo sui vettori espressi in coordinate polari)
F(.) "segno di frazione" (indica che "." è il segno decimale nei numeri reali e la "," come segno di separazione per es. tra le coordinate di un vettore)

In questi articoli troverete ulteriori spiegazioni:
http://groups.google.com/group/comp.sys.hp...002d45b26cbcbde
http://groups.google.com/group/comp.sys.hp...7650fb6ff0b9d76.
Per tradurre programmi ASCII con una riga di intestazione nel formato leggibile della calcolatrice, ci sono altri programmi proposti da John H Meyers sempre nel suo famoso articolo citato prima. Comunque ho trovato molto utile per questo scopo altri due programmi:

ASCII to Binary Converter
www.hpcalc.org/details.php?id=3648

49G+ ASCII on SD
www.hpcalc.org/details.php?id=6017

Entrambi i pacchetti contegono la versione binaria e la versione codice sorgente dei vari programmi, a noi interessa installare i seguenti binari sulla calcolatrice (spero che chi legge sappia come fare):

ASCIIBIN.49 per il primo pacchetto;
TxtToObj e ObjToTxt per il secondo .

Memorizziamoli nelle variabili:

ASCIIBIN che rileva automaticamente se il file sullo stack della calolatrice è di tipo ASCII o binario e lo converte automaticamente nel formato alternativo;
TXTTOOBJ che converte un file in formato ASCII nel formato binario;
OBJTOTXT che fa l'opposto di TXTTOOBJ.

Facciamo un esempio, scarichiamo il programma Transfer Function Analysis da www.hpcalc.org/details.php?id=2183. Il pacchetto contiene sia la versione binaria sia la versione ASCII del programma (è una directory con una serie di comandi). Ora la versione binaria è solo per la serie HP 48 quindi non è installabile sulla HP 50g, mentre possiamo portare la versione ASCII del programma convertirlo e memorizzarlo. Ora copiamo il file TFA.ASC nella scheda SD e richiamiamolo sullo stack, oppure con EMU48 trasciniamo col mouse lo stesso file sullo schermo sulla prima linea dello stack:

a90

Ora o avviamo il programma ASCIIBIN (tasto F6 nel mio caso) oppure TXTTOOBJ, ottenendo la conversione desiderata:

a91

Quindi possiamo memorizzare il programma Transfer Function Analysis per esempio nel nome di directory TFA, e il gioco è fatto:

a92

Supponiamo ora di voler convertire un programma User RPL in formato ASCII, perchè per esempio vogliamo inserirlo in un forum. Dunque richiamiamo il contenuto del nostro programma sullo stack (nell'esempio è mostrato DIAGONALIZATION discusso qui http://helpcalculator.forumfree.net/?t=40714015):

a93

Convertiamo questo codice User RPL sia con OUT sia con ASCIIBIN (o OBJTOTXT), per far vedere cosa viene fuori:


a94

Come si vede chiaramente, nel livello 2 dello stack è stato convertito con OUT mentre nel livello 1 ho utilizzato ASCIIBIN, infatti è presente la linea di intestazione. Ora, se si utilizza EMU48 è sufficiente usare la funzione Copy Stack nel menu EDIT per copiare una delle due versioni e incollarla dove si vuole:

a95

Incollo qui le due versioni ASCII di DIAGONALIZATION:

CODICE
%%­HP: T(3)A(R)F(.);
\<< DUP EGV DROP SWAP OVER * SWAP / EXPAND \>>


CODICE
\<< DUP EGV DROP SWAP OVER * SWAP / EXPAND \>>


Se invece vogliamo salvare DIAGONALIZATION direttamente con la calcolatrice, è sufficiente salvare il programma convertito in un file tipo DIAGONALIZATION.TXT e inviarlo alla scheda SD, in questo formato può essere aperto da un editor di testo qualsiasi su PC:

a96

Questo articolo finisce qui, spero di essere stato chiaro. Avrei potuto essere molto più sintetico, ma non mi piace dare per scontato nulla, anche perchè questo articolo è rivolto principalmente ai nuovi utenti e a quelli poco avvezzi all'inglese.


SUPERGEMS

P.S. chi vuole può scaricare questo lungo articolo in formato PDF
www.box.net/shared/6x4705dmyh
oppure OpenOffice.org
www.box.net/shared/o6puadmaey.

CODICE
Num   Sym   Description
---   ---   -----------
128   \<)   angle symbol
131   \v/   square root
132   \.S   integral symbol
133   \GS   Greek Sigma (\GSLIST)
135   \pi   pi
136   \.d   derivative symbol
137   \<=   less or equal
138   \>=   greater or equal
139   \=/   unequal
141   \->   right arrow (\->LIST, \-> a b c)
142   \<-   left  arrow (\<-local)
143   \|v   down  arrow (\|vMATCH)
144   \|^   up    arrow (\|^MATCH)
156   \PI   capital  pi (\PILIST)
159   \oo   infinity
171   \<<   program delimiters
187   \>>
092   \\    backslash


Edited by supergems - 4/4/2016, 10:00
 
Top
0 replies since 5/9/2009, 10:16   1772 views
  Share