SHARP PC G850V.

Leng Año
Disp.
Exp.
Gráf.
Medidas
Z80 8Mhz BASIC, C, ASM 2001 32 K 30,1 K 6x24 48x144 No No No 260 gr 196x95x20 4xAA JAP
Resg.
Valor 1
Valor 2
Valor 3
I. Rareza
Observaciones
B *106 B *303 B *105s C *31s ASM *10s XX 90 € 135 € 200 € Modelo destacado

La SHARP PC G850V es una de las últimas calculadoras programables en BASIC de SHARP, y por tanto una de las más potentes. De hecho es una de las más conseguidas. Una gran calculadora con procesador Zilog Z80, que puede programarse además en ensamblador de Z80 y en un potente C.

Desgraciadamente, es una de tantas calculadoras que sólo se puso a la venta en Japón, y por tanto no hay casi bibliografía o documentación ni siquiera en Internet. No obstante con la documentación que aportaremos en esta página, más el documento PDF que hemos puesto como manual, se podrán aprovechar casi al máximo esta máquina. La recomendamos, ya que es una maravilla de la evolución de este tipo de ordenadores personales.

En cuanto a su empleo, tiene 4 modos principales, además del de calculadora científica: BASIC, Editor de Textos, C y Lenguaje ensamblador.
Para trabajar en BASIC basta con pulsar la tecla BASIC para entrar en el modo de programa "PROGRAM MODE" y ya está lista para que introduzcamos el programa BASIC que deseemos. Una vez terminemos, si volvemos a pulsar "BASIC" se pondrá en el modo de ejecución "RUN MODE" y tras introducir RUN y ENTER, se ejecutará el programa. El editor BASIC es independiente del editor de textos, y podremos salvar y cargar los programas en el sistema de archivo directamente desde el MODO de Programa con SAVE y LOAD.

En el MODO editor de textos, podremos editar ficheros de texto, así como los programas que introduzcamos en C, o Ensamblador.
Tiene además, como se ha comentado dos modos para poder programar en C y ensamblador "ASM". Los programas se introducen a través del editor de textos, y se ejecutan a través de los menús específicos a los que se accede tras pulsar las teclas C (SHIFT + TEXT) o ASMBL (SHIFT + BASIC) respectivamente.
La programación en BASIC y C es relativamente parecida (salvando las distancias), pero en la ejecución la calculadora se convierte en dos máquinas distintas, ya que el rendimiento en C es muy superior al BASIC.

En cuanto a la memoria, de fábrica trae 32 K, que junto con el sistema de archivos permite almacenar unos cuantos programas. La pantalla es una maravilla, siendo una de sus principales características,con 6 líneas de 24 caracteres mostrándose muy nítida. Pocas calculadoras tienen esa nitidez de pantalla. El teclado es adecuado y cómodo, con un formato QWERTY. El cuanto a tamaño y peso, es bastante acertado; habiéndose reducido el que presentan modelos anteriores como puede ser la G820. Es una máquina muy portable con una extraordinaria capacidad, buena pantalla y excelente potencia proporcionada por el procesador Z80.

Es un ordenador personal muy conseguido que tristemente marca el fin de una época en la que se da paso a otro tipo de aparatos como fueron las PDA,s. y porsteriormente los teléfonos inteligentes.

En las otras pestañas del cuerpo principal de esta página encontrarás como sacarle partido.


Características no documentadas y trucos.

Mediante el siguiente comando, "OUT &H69,6", la calculadora entrará en un modo de TEST de todos los sistemas. ¡CUIDADO! porque se borrarán todos los datos.

Programación en C.

Para la programación en C, veamos a través de unos pequeños pasos, como le podremos sacar partido. Para ver la lista completa de comandos C que soporta la calculadora, presionar sobre la pestaña "Referencia C".

1.- Primero hay que  escribir como un archivo de texto, el programa en C. Para ello, debemo acceder al editor de texto pulsando la tecla verde "TEXT". Aparecerá un menú así:

*** TEXT EDITOR ***
  Edit  Del    Print
  Sio   File    Basic    Rfile 
Si hay algún texto o programa en el editor, deberemos borrarlo pulsando la "D" de "Del".
Para empezar a introducir el programa, pulsamos "E" de "Edit". Nos aparecerá la esta pantalla:

TEXT EDITOR
<

En ella empezamos a introducir el código con líneas numeradas. Esto es un defecto a nuestro criterio bastante grande, ya que la programación C no debería llevar líneas de programa, como por ejemplo podemos hacer en la CASIO VX-4.
Para escribir, editar o corregir, se puede mover fácilmente por la pantalla a través de las teclas del cursor que hay abajo, al lado derecho del teclado.
Introducimos el siguiente programa de prueba de la izquierda (el segundo es otro ejemplo de un contador simple para que se vea otro programa un poco más complicado, pero en este primer ejemplo, nos centramos en el de la izquierda):
10 main()
20 {
30 printf("Mi primer programa. Hola Mundo.¥n");
40 printf("** Estupendo **¥n");
50 }
10 main()
20 {
30 int a;
40 clrscr();
50 a=1;
60 l1: gotoxy(1,1);
70 printf("%d",a);
80 a=a+a;
90 goto l1;
100 }
Hay que tener en cuenta que el salto de línea preceptivo en C "\n", lo debemos escribir tanto en las calculadoras Sharp, como en las Casio con el signo Yen, como "¥n".

2.- Una vez que hayamos terminado de introducir el programa, pulsamos la tecla "TEXT" de nuevo, luego "F" de File, y en la pantalla

<< PROGRAM FILE >>
  Save      Load      Kill      File


Pulsamos "S" de "Save" para salvar el programa en memoria. Nos pedirá el nombre que queremos darle al programa, así que introducimos "pruebac". Y ya está, ya hemos introducido nuestro primer programa y lo hemos salvado con el nombre "pruebac".

3.- Ahora vamos a ejecutarlo. Para ello, pulsamos las teclas "SHIFT" + "C". "C" es la tecla "TEXT" que en combinación con SHIFT abre el compilador. Nos aparecerá la pantalla:

  *** C ***
  Complile  Trace  Go  Stdout


Primero compilamos pulsando "C" de "Compile". Atención, se compilará el programa que tenemos en el editor en ese momento. Como lo acabamos de introducir no habrá problema, perosi no fiera así, en el menú "TEXT", deberemos ir a "LOAD", cargar el programa que queramos ejecutar e ir al compilador.

4.- Tras haberlo compilado, no tenemos más que ejecutarlo, en ese mismo menú del compilador pulsando la tecla "G" de "Go", y se ejecutará nuestro programa.

A continuación se relaciona la lista completade comandos que soporta el C de la G-850V:

void abort(void);
int abs(int x);
double acos(double x);
double acosh(double x);
void angle(unsigned n);
double asin(double x);
double asinh(double x);
double atan(double x);
double atanh(double x);
void breakpt(void);
void *calloc(unsigned n, unsigned size);
int circle(int x, int y, int r, double s-angle, double e-angle, double ratio, int reverse, unsigned short kind);
void clearerr(FILE * stream);
void clrscr(void);
double cos(double x);
double cosh(double x);
void exit(int status);
double exp(double x);
int fclose(FILE *stream);
int feof(FILE *stream);
int fflush(FILE * stream);
int fgetc(FILE *stream);
char *fgets(char *, int n, FILE *stream);
unsigned long flof(FILE *stream);
FILE *fopen(char *path, char *type);
int fprintf(FILE * stream, const char * format [, arg, …]);
int fputc(int c, FILE * stream);
int fputs(const char *s, FILE *stream);
void free(void *ptr);
int fscanf(FILE * stream, const char * format [, address, …]);
int gcursor(int x, int y);
int getc(FILE *stream);
int getch(void);
int getchar(void);
char *gets(char * s);
void gotoxy(unsigned x, unsigned y);
int gprint(char *image);
int isalnum(int c);
int isalpha(int c);
int iscntrl(int c);
int isdigit(int c);
int isgraph(int c);
int islower(int c);
int isprint(int c);
int ispunct(int c);
int isspace(int c);
int isupper(int c);
int isxdigit(int c);
int kbhit(void);
int line(int x1, int y1, int x2, int y2, int reverse, unsigned short mask, int rectangle);
double log(double x);
double log20(double x);
void *malloc(unsigned size);
int miniget(void);
void miniput(char byte);
int paint(int x, int y, unsigned short kind);
int pioget(void);
void pioput(char byte);
void pioset(char byte);
int point(int x, int y);
double pow(double x, double y);
int preset(int x, int y);
int printf(const char * format [, arg, …]);
int pset(int x, int y, int reverse);
int putc(int c, FILE * stream);
int putchar(int c);
int puts(const char *s);
int scanf(const char * format [, address, …]);
double sin(double x);
double sinh(double x);
int sprintf(char * s, const char * format [, arg, …]);
double sqrt(double x);
int sscanf(char * s, const char * format [, address, …]);
char *strcat(char * s1, const char *s2);
char *strchr(const char *s, int c);
int strcmp(const char *s1, const char *s2);
char *strcpy(const char *s1, const char *s2);
int strlen(const char *string);
double tan(double x);
double tanh(double x);
int tolower(int c);
int toupper(int c);

Programación en CASL.

El problema de la enseñanza de código de máquina (o su versión nemónica Ensamblador) es que al estar tan directamente relacionado con los rescursos de la máquina, y ejecutar directamente las instrucciones del procesador, si hay un error de programación, es muy frecuente que la máquina se cuelgue y no se pueda volver a controlar. Llegando en casos extremos a incluso perderse todo el contenido y teniendo como única solución el reseteo del ordenador y consiguiente borrado. Es normal que mientras se está desarrollando un programa, se equivoque alguna dirección del código, o no se prevea el final de un bucle, con lo que el programa se descontrola o se entra en un bucle sin fin del cual no se puede salir.

Para evitar esto, y crear un ambiente seguro y amigable para los alumnos japoneses, el Ministerio de Educación Japonés llegó a un acuerdo con las empresas electronicas del país (CASIO, SHARP, etc) por el cual se desarrollaba un estándar educativo llamado CASL mediante el cual se creaba un lenguaje de programación parecido al ensamblador, que corriera en una máquina virtual segura, de tal manera que si había fallos, se detectaban bien en el ensamblaje o se bloqueaban los efectos nocivos en ejecución.

De esta manera nace el lenguaje CASL, que corre en una máquina virtual llamada COMET. "COMET Assembly Specification Language". Es un pseudo lenguage ensamblador no relacionado con ninguna máquina o procesador en particular.

Características principales.

  • La máquina virtual COMET simula un ordenador de 16 bits que dispone de una memoria con direcciones que van desde 0 hasta 65535.
  • El tamaño de la palabra (word) es de 16 bits, es decir puede almacenar números de 0 a 66536 o negativos en notación de complemento a 2 de -32767 a +32768.
  • Las etiquetas son convertidas a direcciones durante el Ensamblado.
  • Valores: 12 (valor decimal), #100 (valor hexadecimal=256 decimal).
  • Todos los registros del procesador virtual son de 16 bits, excepto FR.
  • Dispone de 4 registros generales para empleo en la programación: GR0, GR1, GR2 y GR3.
  • Hay un registro GR4 que se encarga de almacenar la dirección de la pila del sistema (stack).
  • Hay un registro PC que almacena la dirección de ejecución actual del programa.
  • Hay un registro de flags FR de 2 bits, que almacena los flags del sistema para desbordamientos o para indicar los resultados de almacenamiento o aritméticos. Contiene 10 si el resultado es negativo, 00 si es positivo, ó 01 si es cero.
  • Hay dos registros más para control de la ejecución y depuración: BP para pausa, y BC para BREAK.
La estructura general de un programa CASL es parecida a la de uno en ensamblador. Como muestra, el típico programa "¡Hola Mundo!" sería así:

CODIGO CASL "¡Hola Mundo!":
---------------
10 ;Programa Hola Mundo.
20MUNDO START
30 OUT MENS,LONG
40 RET
50MENS DC '¡Hola Mundo!'
60LONG DC 12
70 END
Comentarios:
---------------
Línea de comentario.
Comienzo del programa llamado "MUNDO".
Imprimimos en pantalla el mensaje que hay en MENS con la longitud LONG.
Finaliza el programa y vuelve al control principal.
Etiqueta MENS donde se almacena el mensaje a presentar en pantalla.
Longitud del mensaje.
Fin del programa. No hay más código.

En las calculadoras Sharp de la serie G800, el programa se introduce en el editor de textos.
  • Cada línea va numerada.
  • Las etiquetas como  "MUNDO", "MENS" o "LONG" van a continuación del número de línea, sin espacio intermedio.
  • Las  Directivas del lenguaje o las instrucciones como START, RET, END, OUT, LD...., van después del número de línea, o etiqueta con un espacio.
  • Los comentarios se introducen en una línea después de la directiva ";". (línea 10).
  • Como se observa en el ejemplo, un programa comienza con una directiva START, y finaliza con END. Si la última línea no es END da error "OTHER ERROR".

Referencia CASL.

Directiva o instrucción Explicación
DIRECTIVAS de la máquina virtual COMET
START
Marca el inicio del programa.
Ejemplo: 10 START o 10NOMBREPROG  START
END
Marca el final del código del programa CASL. Es obligatorio ponerlo; si no, el ensamblador dará el error OTHER ERROR.
EXIT
Abandona la ejecución del programa y devuelve el control al sistema operativo del ordenador de bolsillo.
IN BUFFER, LONG
Entrada de caracteres desde el teclado. Al ejecutarse, almacenará el número de caracteres que se vayan pulsando marcado en LONG, a partir de la dirección  especificada en BUFFER.
Ejemplo:
10 START
20 IN BUFFER,LONG
25 EXIT
30BUFFER DS 4          ; inicialmente contendrá 4 ceros consecutivos
40LONG DC 4
50 END
OUT TEXTO, LONG
Presentará en pantalla el texto contenido a partir de la dirección TEXTO. El número de caracteres de texto viene marcado por LONG.
Ejemplo:
10 START
20 OUT TEXTO,LONG
25 EXIT
30TEXTO DC 'Hola'
40LONG DC 4
50 END
WRITE
Imprime en pantalla el contenido de los registros y espera la pulsación de una tecla. Muy útil para depuración del programa.
DC 'A'
Definición de una constante. Reserva espacio de memoria y asigna los datos.
Ejemplo:
100A DC 'A'   ;Almacena en la direccion establecida por la etiqueta A, el valor A
110TEXTO DC 'HOLA'   ; Almacena en la dirección establecida por la etiqueta TEXTO, 4 caracteres que forman la palabra "HOLA". Ocupa 4 direcciones consecutivas.
DS 5
Reserva un número de direcciones consecutivas de memoria para utilizar como almacenamiento.
Ejemplo: 100ALM DS 5   ; Reserva a partir de la dirección establecida por la etiqueta ALM, 5 direcciones de memoria.
INSTRUCCIONES del lenguaje Ensamblador CASL
LEA GRx, valor
Carga el registro especificado con el valor asignado. (valor puede ser una dirección). Es una carga directa de un valor en el registro especificado.
Ejemplo: LD GR1,#380. (GR1=#380 hexadecimal o GR1=896 decimal)
ST GRx, dir Almacena el contenido del registro especificado en la dirección marcada.
Ejemplo: ST GR1,#1006. (El contenido de GR1 se guarda en la dirección #1006. Si GR1 contenía #40, la dirección #1006 ahora contiene #40.
LD GRx, dir El contenido de la dirección marcada se carga en el registro especificado.
Ejemplo: LD GR1,#1006.
ADD GRx,dir
Suma el contenido almacenado en el registro GRx con el contenido de la dirección dir, y la suma es depositada en GRx. El registro FR de flags refleja el resultado: 10 si el resultado es negativo, 00 si es positivo, ó 01 si es cero (todo ello en binario, o 2,0,1 en decimal).
Ejemplo:
10 START
20 LD GR0,A          ; carga GR0 con el contenido de la direccion de la etiqueta A. La carga directa del registro podría ser LEA GR0,3
30 ADD GR0,B        ; suma el contenido de GR0 que es 3 al contenido de la dirección B que es 7, depositando la suma 10 en GR0. GR0=10.
40 EXIT
50A DC 3
60B DC 7
70 END
SUB GRx,dir
Resta el contenido almacenado en la dirección dir al contenido del registro GRx, y la resta es depositada en GRx. El registro FR de flags refleja el resultado.
Ejemplo:
10 START
20 LD GR0,A          ; carga GR0 con el contenido de la direccion de la etiqueta A. La carga directa del registro podría ser LEA GR0,11 ó LEA GR0,#B.
30 SUB GR0,B        ; le resta el contenido de GR0 que es 11 al contenido de la dirección B que es 6, depositando la suma 5 en GR0. GR0=5.
40 EXIT
50A DC 11
60B DC 6
70 END
AND GRx,dir
Realiza el AND lógico entre el contenido del registro especificado y el valor contenido en la dirección dir y lo deposita en el registro. El registro de flags FR se modifica de acuerdo al resultado.
Ejemplo:
10 START
20 LD GR0,A          ; carga GR0 con el contenido de la direccion de la etiqueta A. La carga directa del registro podría ser LEA GR0,19 ó LEA GR0,#13.
30 AND GR0,B        ; Realiza el AND lógico del contenido de GR0 que es 19 con el contenido de la dirección B que es 3, depositandolo en GR0. GR0=3.
40 EXIT
50A DC 19
60B DC 3
70 END
OR GRx,dir
Realiza el OR lógico entre el contenido del registro especificado y el valor contenido en la dirección dir y lo deposita en el registro. El registro de flags FR se modifica de acuerdo al resultado.
Ejemplo:
10 START
20 LD GR0,A          ; carga GR0 con el contenido de la direccion de la etiqueta A. La carga directa del registro podría ser LEA GR0,19 ó LEA GR0,#13.
30 OR GR0,B        ; Realiza el OR lógico del contenido de GR0 que es 19 con el contenido de la dirección B que es 3, depositandolo en GR0. GR0=23 ó GR0=#17.
40 EXIT
50A DC 19
60B DC 6
70 END
EOR GRx,dir Realiza el XOR lógico entre el contenido del registro especificado y el valor contenido en la dirección dir y lo deposita en el registro. El registro de flags FR se modifica de acuerdo al resultado.
Ejemplo:
10 START
20 LD GR0,A          ; carga GR0 con el contenido de la direccion de la etiqueta A. La carga directa del registro podría ser LEA GR0,19 ó LEA GR0,#13.
30 EOR GR0,B        ; Realiza el OR lógico del contenido de GR0 que es 19 con el contenido de la dirección B que es 3, depositandolo en GR0. GR0=21 ó GR0=#15.
40 EXIT
50A DC 19
60B DC 6
70 END
CPA GRx,dir Compara aritméticamente (con signo) el contenido del registro especificado con el contenido de la dirección dir, y modifica el registro de flags FR, de acuerdo al resultado.
CPL GRx,dir Compara LÓGICAMENTE (sin signo) el contenido del registro especificado con el contenido de la dirección dir, y modifica el registro de flags FR, de acuerdo al resultado.
SLA GRx,dir Traslado hacia la izquierda de tantos bits como los establecidos en el valor de la dirección, a excepción del bit de signo. Los lugares de la derecha nuevos son rellenados con ceros.El registro de flags FR se modifica de acuerdo al resultado.
Ejemplo:
10 START
20 LD GR0,A          ; carga GR0 con el contenido de la direccion de la etiqueta A. GR0=19=00010011
30 SLA GR0,2        ; Desplaza los bits 2 veces hacia la izquierda, rellenado con ceros los dos bits de la derecha. GR0=76=01001100
40 EXIT
50A DC 19
70 END
SRA GRx,dir Traslado hacia la derecha tantos bits, como los establecidos en el valor de la dirección, a excepción del bit de signo. Los lugares de la izquierda nuevos son rellenados el valor del bit de signo. El registro de flags FR se modifica de acuerdo al resultado.
Ejemplo:
10 START
20 LD GR0,A          ; carga GR0 con el contenido de la direccion de la etiqueta A. GR0=19=00010011
30 SRA GR0,2        ; Desplaza los bits 2 veces hacia la derecha, rellenado con el bit de signo los dos bits de la derecha. GR0=4=00000100
40 EXIT
50A DC 19
70 END
SLL GRx,dir Traslado hacia la izquierda de tantos bits como los establecidos en el valor de la dirección. Los lugares de la derecha nuevos son rellenados con ceros.El registro de flags FR se modifica de acuerdo al resultado.
SRL GRx,dir Traslado hacia la derecha tantos bits, como los establecidos en el valor de la dirección. Los lugares de la izquierda nuevos son rellenados cero. El registro de flags FR se modifica de acuerdo al resultado.
JPZ dir Salta a la dirección indicada, si el valor del resgistro de flags FR es cero(01) o positivo(00).
JMI dir Salta a la dirección indicada, si el valor del resgistro de flags FR es negativo (10).
JNZ dir Salta a la dirección indicada, si el valor del resgistro de flags FR no es cero (01).
JZE dir Salta a la dirección indicada, si el valor del resgistro de flags FR es cero (01).
JMP dir Salta a la dirección indicada de manera incondicional.
PUSH 0,GRx Almacena el valor del registro indicado en la pila. Modifica el valor del registro GR4 o SP de la pila.
POP GRx Recupera el último valor almacenado en la pila y lo carga en el registro indicado. Modifica el valor del registro GR4 o SP de la pila.
CALL dir Llama a una rutina que comienza en la dirección dir.
RET Marca el final de una rutina, saliendo de ella y volviendo a la dirección siguiente a la que fue llamada.

Programación Ensamblador.

Para programar en Ensamblador directamente hay que seguir el suguiente esquema. Hay que tener en cuenta que siempre que se programa en ensamblador se corre el riesgo de colgar totalmente el sistema y perder absolutamente todos los datos que contiene el ordenador, por lo que se recomienda muy encarecidamente, hacer primero una copia de seguridad. Los japoneses resolvieron este problema creando el lenguaje CASL, que no deja de ser un lenguaje muy parecido al ASM, pero en un ambiente protegido para evitar los cuelgues de la máquina. No obstante, el tema que nos ocupa es el ensamblador de Z80 de la Sharp PC-G850V, así que vamos a ello:

Esquema de programación en ASM:
En BASIC teclear MON y [ENTER]
a continuación USER 300 [ENTER]

Ir al editor de textos pulsando la tecla "TEXT", luego la E de "Edit" e introducimos el programa en ASM (Ensamblador).

Hemos preprarado este sencillo programa que comentaremos:
Normalmente la potencia del código de máquina se complementa con llamadas a direcciones de rutinas propias del sistema. Esto es lo que vamos a hacer, le diremos a la G850V que imprima la frase "MENSAJE DE PRUEBA" en la línea 3, columna 1. Para ello utilizaremos la rutina del sistema llamada "PRINT" que está en la dirección -BFF1H-. Esta rutina imprime una cadena cuya longitud debemos cargar en el registro B, la posición de la pantalla en el registro DE (x,y), y el inicio de la cadena a imprimir en el registro HL.

CODIGO ASM:
---------------
10 ORG 100H
20 LD B,17
30 LD DE,0301H
40 LD HL,CAD
50 CALL 0BFF1H
60 RET
70CAD:DB 'MENSAJE DE PRUEBA'
Comentarios:
---------------
Dirección de inicio del código
Cargamos en B la longitud de la cadena a imprimir
Cargamos en DE la posición de la pantalla. D=fila, E=col.
En HL dirección memoria texto a imprimir
Llamamos a la rutina "PRINT" del sistema
Fin del programa
Etiqueta que marca el inicio de la cadena
A continuación nos vamos al menú del ensamblador pulsando la tecla SHIFT + "ASMBL", una vez dentro pulsamos la "A" de Assembler, y finalmente otra vez la "A" de "Asm" para ensamblar el código que introdujimos en el editor. Si todo va bien nos dirá que ha generado una etiqueta (CAD), no hay errores y por tanto ha ensamblado al completo. (Ojo en la línea 70 ya que no puede haber espacio entre el número de línea y la etiqueta; sino dará error. Es "70CAD:DB .....", y no "70 CAD:DB .....".
Obtendremos esta pantalla:

Ahora volvemos a BASIC pulsando la tecla "BASIC" e introducimos un pequeño programa BASIC que llamará al código que hemos compilado y que se inicia en la dirección H100. Para ello tecleamos:
10 CLS
20 CALL &H100
Ahora ya estamos listos para ejecutar nuestro programa. Volvemos am modo de Ejecución pulsando otra vez la tecla "BASIC", escribimos "RUN" y al darle a [ENTER] nuestro programa se ejecutará y aparecerá "MENSAJE DE PRUEBA" en la tercera línea, 1ª columna.
*Nota: Si no queremos crear el programa BASIC podremos ejecutar el programa de dos formas: Desde BASIC tecleando "CALL &H100" o yendo al monitor de código máquina e introduciendo el comando "G0100".

Si no queremos escribir este programa BASIC, bastará teclear CALL &H100 y el código de máquina se ejecutará inmediatamente.

Llamada a la ROM del sistema muy útil.
Una interesantísima utilidad, sobre todo cuando estamos perdidos en la programación en ensamblador es colocar la siguiente llamada a la ROM en el punto conflictivo. "CALL 0BD03H", mostrará una pantalla con el contenido de todos los registros del procesador Z80 y esperará a que pulsemos una tecla.

Ejemplo completo. Prueba de rendimiento 3. Contador simple. Para terminar, vamos a programar en código de máquina uno de nuestros programas para medir el rendimiento de un aspecto de la máquina. Los test de rendimiento están descritos en esta página. En concreto, la prueba 3 es un simple contador que cuenta y muestra en pantalla los números del 1 al 10.000.
CODIGO ASM "Contador Simple":
---------------
10 ORG 100H
11 LD HL,1
15 LD (NUMERO),HL
20INI: LD HL,(NUMERO)
30 LD DE,PP
40 CALL NM2DEC
-------------
50 LD B,5
60 LD DE,0101H
70 LD HL,PP
80 CALL 0BFF1H
-------------
90 LD DE,(NUMERO)
100 INC DE
105 LD(NUMERO),DE
-------------
110 LD HL,10000
120 SBC HL,DE
280 JP NZ, INI
290 RET
300PP:DB 0,0,0,0,0
310NUMERO:DW 0001H
-------------
--Rutina:convierte núm en cadena caracteres--
-------------
1000NM2DEC: LD BC,-10000
1010 CAL NUM1
1015 LD BC,-1000
1018 CALL NUM1
1020 LD BC,-100
1030 CALL NUM1
1040 LD C,-10
1050 CALL NUM1
1060 LD C,B
1070NUM1: LD A,-1
1080NUM2: INC A
1090 ADD HL,BC
1100 JR C, NUM2
1120 SBC HL,BC
1125 ADD A,48
1130 LD (DE),A
1140 INC DE
1150 RET
Comentarios:
---------------
Dirección de inicio del código
Cargamos en HL el valor inicial del contador que es 1
Lo almacenamos en la dirección doble que hemos reservado más adelante llamada NUMERO
Comienzo del bucle. Cada iteración carga valor del contador que almacenamos en NUMERO
Carga en DE la dirección "PP" que es donde se convertirá el contador en cadena imprimible
Llamamos rutina que convierte contenido HL(contador ahora) en cadena de caracteres
-------------
Vamos a imprimir el contador en pantalla: 5 digitos
En coordenadas (1,1)
La cadena que representa el contador está en PP
Llamamos rutina sistema PRINT
-------------
Cargamos el contador en DE
Lo incrementamos
Lo volvemos a depositar en su lugar de almacenamiento
-------------
Cargamos HL con 10.000 para ver si el contador ha llegado ahí
Le restamos a HL el contador que estaba en DE
Si la resta no es cero (no ha llegado a 10000), repetimos el bucle
Fin de programa.
5 bytes para almacenar el contador convertido en cadena de caracteres
Lugar donde almacenamos el contador
-------------
-------------
-------------
1000NM2DEC: LD BC,-10000
1010 CAL NUM1
1015 LD BC,-1000
1018 CALL NUM1
1020 LD BC,-100
1030 CALL NUM1
1040 LD C,-10
1050 CALL NUM1
1060 LD C,B
1070NUM1: LD A,-1
1080NUM2: INC A
1090 ADD HL,BC
1100 JR C, NUM2
1120 SBC HL,BC
1125 ADD A,48
1130 LD (DE),A
1140 INC DE
1150 RET
A continuación mostramos una serie de rutinas muy útiles. El primer grupo son rutinas de la propia ROM de la G850V que podemos aprovechar para ahorrarnos mucha programación, el segundo son una serie de rutinas útiles en ASM que también nos servirán de ayuda. Para programar el "contador simple" de nuestro test de rendimiento 3, hemos echado mano de ambos grupos (ver programa completo en página de rendimiento Test 3).
Nombre rutina Dirección HEX. Descripción Registros a cargar Devuelve
Rutinas de la ROM de la Sharp PC-G850V
PRINT BFF1H Imprime una cadena en la pantalla. En B longitud cadena. DE posición (x,y). HL dirección de la cadena a imprimir. En C número de veces que haya habido que hacer scroll. DE posición final. HL dirección final tras lectura.
PUTCHR BE62H Imprime un carácter en la pantalla. En A el carácter. DE posición (x,y).
CONCHR BFEEH Imprime un carácter en la pantalla el número de veces definido en B. En A el carácter. B número de veces a repetir el carácter. DE posición (x,y).
INPUT BE53H Guarda la tecla pulsada en A sin esperar. Código en A según tabla que hay más abajo de códigos de teclado.
INPUT WAIT BCFDH Espera a que se pulse una tecla y guarda el código en A. Código en A según tabla que hay más abajo de códigos de teclado.
OFF BD2DH Apaga el Ordenador.
BASIC DELETE BCF1H Borra el programa BASIC en el editor BASIC.
TEXT DELETE BCF7H Borra lo que haya en el editor de texto.
STAT MODE BCBEH Cambia la calculadora al MODO STAT.
REG STATUS BD03H Muestra el estado de todos los registros del sistema y espera pulsación.
Rutinas ASM nuevas.
CLS Borrar pantalla. No existe en la ROM, por lo que se muestra una rutina completa que se puede llamar como CALL CLS, modificando los números de línea para adaptarlo a nuestro programa 210CLS:
220   XOR A
230   LD B,144
240   LD D,0
250   LD E,0
260   CALL 0BFEEH
270   RET
NUM2DEC Convierte un número de un registro a una cadena decimal. En HL número a convertir. En DE la dirección de donde queremos que se almacene la cadena resultante (ejemplo, si HL contiene el número "689", a partir de la dirección que contenga DE se almacenará 30 30 36 38 39, que son los caracteres ASCII en hexadecimal de la cadena "00689". Notar que obviamente se necesitan reservar 5 bytes para almacenar el número, ya que el número máximo es 65535). 1000NM2DEC:   LD BC,-10000
1010   CALL NUM1
1015   LD BC,-1000
1018   CALL NUM1
1020   LD BC,-100
1030   CALL NUM1
1040   LD C,-10
1050   CALL NUM1
1060   LD C,B
1070NUM1:   LD A,-1
1080NUM2:   INC A
1090   ADD HL,BC
1100   JR C, NUM2
1120   SBC HL,BC
1125   ADD A,48
1130   LD (DE),A
1140   INC DE
1150   RET
Tabla de correspondencia de pulsación de teclas:

0 1 2 3 4 5 6 7 8 9 A B C D E F
0 OFF Q W E R T Y U A S D F G H J
1 K Z X C V B N M , BASIC TEXT CAPS Cana TAB SPACE
2 ANS 0 . = + RETURN L ; CONST 1 2 3 -
3 M + I O INS 4 5 6 * R-CM P BS 7 8 9 /
4 ) NPR →DEG x2 yx ^ ( 1 / x MDF 2ndF sin cos ln log tan F⇔E
5 CLS ON
  • Hay que añadir 80H si se está presionando simultáneamente la tecla SHIFT. Ejemplo SHIFT + "B" da 95H.
  • Si se presionan dos o más teclas se obtiene el código 52h
El ordenador personal Sharp PC-G850V tiene extraordinarias y potentes herramientas que no llegaron casi a tener ninguna de las otras marcas. Además de 3 lenguajes de programación BASIC, C y ASM (sin contar con el CASL), también dispone de otras herramientas científicas o de programación.

Una de ellas es el MONITOR de lenguaje máquina, que nos ayuda a hacer seguimiento del contenido de la memoria, y en general a programar en código de máquina ASM.

Se accede al monitor tecleando el comando MON y [ENTER] tanto desde el modo ejecución(RUN), como el de programa(PRO) de BASIC.
Una vez dentro nos aparece la frase "MACHINE LANGUAJE MONITOR" en la parte superior, y un prompt de sistema que es un asterisco "*", a partir de aquí acepta comandos. Con la memoria protegida por contrseña no se puede acceder al monitor.

Los principales comandos y aspectos a tener en cuenta son:
  • Antes de nada, decir que todas las direcciones que se introduzcan se consideran en Hexadecimal. G100 será, "Ejecutar" a partir de &H100. Para introducir más de una dirección, éstas se separarán por comas ",". Ej. "*D0100, 01FF".
  • El lenguaje de máquina (ASM) es un lenguaje de bajo nivel que tiene acceso a todos los recursos del sistema, y por tanto es muy potente. Por contra, y lógicamente, no existe ningún tipo de protección, por lo que debe tenerse en cuenta que la ejecución de cualquier programa en código de máquina no depurado, puede colgar la máquina de manera irrecuperable o borrar todos los datos. Tenga en cuenta esto, y haga antes las correspondientes copias de seguridad.
  • USER 300 , USER300 ó USER0300 [ENTER]. Reserva espacio de memoria para los programas en ensamblador. Si no lo reservamos, al entrar en el ensamblador nos dará un error. A continuación mostrará un mensaje con el área reservada "FREE:0100-0300". Utilizado sin argumento, "USER" nos dará el mensaje de información del área reservada: "FREE:0100-0300" o "FREE:AREA NOT RESERVED" si no e hubiera reservado ninguna de antemano.
  • S0100. Modifica el contenido de la memoria a partir de la dirección introducida. Muestra lo siguiente "0100:28-" donde "0100" es la dirección y "28" es su contendio actual. Podemos introducir un nuevo valor y darle a ENTER, en cuyo caso habremos cambiado el contenido, o darle símplemente a ENTER, y sin variar el contenido irá a la siguiente dirección de memoria. Los datos están en HEXADECIMAL: "28" es &H28 que es 40 decimal.
  • G0100. Ejecuta un programa en código de máquina iniciándolo en la dirección introducida. (sin espacios). Como ejemplo, para llamar a los programas normalmente será G100 ó G0100. Tiene el efecto del mandato GOSUB de BASIC, es decir, ejecutará el código de máquina desde la dirección que introduzcamos hasta que encuentre una instrucción RET de código de máquina. Si no hay una instrucción RET el programa seguirá con resultados impredecibles.
  • GBD03. Ponemos esta llamada especial a una función de la ROM por ser muy útil. Muestra el estado actual de todos los registros del procesador. Para salir y volver al prompt del monitor pulse BREAK(ON).
  • D, D0200. Muestra el contenido de la memoria en tres columnas de datos. En la primera expone las direcciones de memoria en formato HEXADECIMAL, en la segunda el contenido HEXADECIMAL de la memoria, y en la tercera su representación en caracteres (los caracteres 00 a IF que no tienen representación se muestran como un punto "."). Si no se expecifica dirección como en "D", el volcado de memoria será desde la dirección 0100H. Se podrá ir moviendo por la memoria con las teclas del cursos arriba y abajo (↑ y ↓). Adicionalmente, debajo de la primera dirección de la columna de la izquierda, se muestra un número entre paréntesis (32), este número es el CHECKSUM de los 24 datos mostrados en la pantalla de la G850V, y nos servirá para detectar errores.
  • P. Activa o desactiva el modo IMPRESORA e ilumina el cartel "PRINT" que hay en la esquina abajo-derecha de la pantalla. No tendrá ningún efecto si no hay ninguna impresora conectada a la máquina.
  • BPD0110. Inserta un punto de parada de programa BREAKPOINT en la dirección marcada. Se pueden establecer sólo cuatro breakpoints, si se introduce un quinto se borrará el primero. Se ha de tener cuidado en que la dirección que se marque corresponda a una instrucción de código de máquina del programa, y no a un dato, ya que de esa manera no se conseguiría la acción de control y análisis del código que se pretente. Si se introduce BP sin dirección, se mostrarán los breapoints establecidos previamente.
    Con BP0 se borrarán todos los breakpoints introducidos. Un breakpoint se invalida después de su ejecución, por tanto, si establecemos uno dentro de un bucle, sólo se ejecutará en la primera ocasión.
    Nota: el contenido de la dirección cuando se ejecuta el breakpoint es reemplazado momentáneamente por F7H. Si se pulsa BREAK para salir, el contenido de esa dirección seguirá siendo F7 y deberá modificarlo manualmente para volver a recomponer su programa.
  • R. Recepción de datos por el puerto I/O (SIO). Se utiliza para trasnferir programas en código de máquina desde un PC. Si no se especifica dirección se cargará en la dirección contenida en los mismos datos transmitidos. Con R0100, los datos serán cargados a partir de 0100H.
  • W0100,01FF. Transmisión de datos al puerto I/O (SIO). Se utiliza para trasnferir programas en código de máquina desde la Sharp a un PC u otro dispositivo. W0100,01FF transferirá el contenido desde 0100H (primera dirección), hasta 01FF (última dirección).
  • Mensajes de error generados por el monitor.
  • Mensade de ERROR Descripción
    SYNTAX ERROR Comando con sintaxis incorrecta
    MEMORY ERROR Se ha intentado asignar un área de código máquina fuera del rango permitido. Este error también se produce cuando hay almacenados muchos programas BASIC que reducen el rango de almacenamiento y se intenta asignar más memoria para código de máquina de la que queda disponible.
    I/O DEVICE ERROR Error de transmisión o fallo en la operación de entrada/salida.
    OTHER ERROR Otros errores.
En esta sección comentaremos las posibilidades de comunicaciones del ordenador personal PC-G850V diferentes a las intefazes comerciales. Para ello, dedicaremos dos grandes apartados a describir como comunicar esta máquina con otras máquinas Sharp; y en segundo lugar, veremos como conectarla con un ordenador de sobremesa con interfaz USB, descartando la comunicación con interfaz Serie ya que los ordenadores actuales ya no la llevan.

Antes de nada hay que tener en cuenta lo siguiente:
  • La lógica estándar definida para la interfaz RS-232 Serie establece que las señales de datos (TXD y RXD) tienen lógica invertida, es decir, el 0 lo marca una señal positiva de +3 a 15V y el 1 lo marca una señal negativa de -3 a -15V. Para las señales de control, la lógica es inversa, es decir, el estado activo es positivo, y el inactivo negativo, igualmente en ese margen de voltaje. Las señales que van desde los -3V a los +3V no se consideran y se desprecian para evitar errores.
  • Atención, porque la lógica del conector de 11 pins de Sharp, aunque sigue el estándar RS-232 tiene dos diferencias muy significativas: (1) Toda la lógica está invertida, es decir al revés del estántar RS 232, y (2) las señales van únicamente e el rango entre 0 y 5V.
    • El pin 2 de la RS-232 RXD coincide con el pin 6 INVERTIDO de Sharp.
    • El pin 3 de la RS-232 TXD coincide con el pin 7 INVERTIDO de Sharp.
    • El pin 5 de la RS-232 SG (Masa o GND) coincide con el pin 3 de Sharp.
    • El pin 7 de la RS-232 RTS coincide con el pin 9 INVERTIDO de Sharp.
    • El pin 8 de la RS-232 CTS coincide con el pin 4 INVERTIDO de Sharp.
    • El pin 4 de la RS-232 DTR coincide con el pin 5 INVERTIDO de Sharp.
    • El pin 6 de la RS-232 DRS coincide con el pin 8 INVERTIDO de Sharp.
  • Señales superiores a voltaje +6V podrían dañar las calculadoras Sharp, por lo que obviamente, hay que evitar el rango que va de +6 a +15V y -6 a -15V, es decir, no se puede conectar directamente una calculadora Sharp a una interfaz Serie directamente, so pena de que la podamos fundir.

Cómo comunicar la Sharp PC-G850 con otras máquinas Sharp de su Serie.
Las máquinas de la serie, y por tanto con las que se puede conectar por este método son: G801, G802, G803, G813, G815, G820, G830, G850, G850S, G850V, G850VS, E200, E220, E500 Y E500S.
Aquí las conexiones son muy sencillas, no necesitan soldaduras, y no tendremos los problemas de compatibilidad con la interfaz Serie RS-232 (de señales invertidas ni de voltaje máximo), ya que conectaremos dos máquinas que tienen el mismo interfaz de Sharp de 11 pines (paso 2,54'').

Primero veremos una descripción del connector estándar de Sharp en todas estas calculadoras, que fueron las últimas programables en BASIC de de Sharp. En la imagen se muestra la descripción del conector, que suele estar en la parte izquierda de las máquinas, describiéndolo de arriba a abajo (el pin 1 es el del lado de la pantalla, y el 11 el del teclado).
Para conectar dos calculadoras bastará hacer las siguientes conexiones.

Veamos las conexiones, hay que conectar los siguiente 5 cables (ver en la imagen de la derecha):

• El pin 3 MASA(GND)de una máquina, con el 3 de la otra.
• El pin 6 RXD de una, con el 7 TXD de la otra. Los cruzamos.
• El pin 7 TXD de una, con el 6 RXD de la otra. Los cruzamos.
• El pin 4 RTS de una, con el 9 CTS de la otra. Los cruzamos.
• El pin 9 CTS de una, con el 4 RTS de la otra. Los cruzamos.

Nosotros lo hemos probado entre una G850V y una G820, funcionando a la perfección. Hemos transmitido tanto programas BASIC, como programas en código de máquina, siendo compatibles en un grado muy elevado. La G820, a pesar de en teoría no tener ensamblador (ver G820 para activarlo), le hemos pasado el programa de test "Contador simple" y lo ha ejecutado a la perfección, quedando patente, que casi todas estas máquinas son incluso compatible a nivel de rutinas de la ROM.

En las imágenes de abajo, ampliables en caso necesario pulsando sobre ellas, se puede observar la conexión que se ha hecho entre ambas utilizando cables estándar tipo arduino o para montajes electrónicos muy fácilmente adquiribles en ebay, banggood o aliexpress a un precio muy barato. En nuestro caso, y para trabajar más cómodo, hemos empalmado un cable macho-macho con uno hembra-macho para alargarlos. Se puede observar como se mantiene el cable gris claro, que es el que hemos utilizado para la masa(GND), y como los otros se cruzan dos a dos.
Ahora vamos a ver como transferir datos de una a otra:

Para tranferir ficheros de texto.
Puede ser texto, programas en C, CASL o en ensamblador, ya que todos ellos se gestionan con el editor de textos. Antes de nada, salvar los textos o programas que pudiera haber en el editor.
  1. Nos metemos en el editor de texto de ambas máquinas pulsando la tecla "TEXT".
  2. Cargamos en la Sharp 1, que es la que contiene el texto o programa a transmitir, el fichero en el editor, mediante la combinación de pasos "File" luego "Load" y cargamos el fichero deseado. (Evitar este paso si ya está en el editor)
  3. En ambas máquinas, y otra vez en el menú principal del editor, nos metemos en el menú SIO pulsando la S de "Sio"
  4. En la Sharp 1 EMISORA pulsamos S de "Save". Aparecerá en pantalla "--- SENDING ---".
  5. En la Sharp 2 RECEPTORA pulsamos L de "Load". Aparecerá en pantalla "--- RECEIVING ---".
  6. Una vez finalizada la transferencia, las pantallas volverán al menú << SIO >>. Eso indicará que ha finalizado la transferencia.
  7. Puede comprobar que en el editor de texto ya se ha transferido el texto o programa.
  8. Pudiera ser necesario modificar los parámetros de transmisión si se hubieran variado en las máquinas respecto a los que tiene por defecto después de un hardreset (1200 baudios, bits de datos=8, bit de parada=1, paridad=none, fin de línea=CR LF, fin de línea=1A, número de línea=yes). Para ello en el menú SIO pulsar "F" de format y comprobar que las dos máquinas tienen exactamente los mismos parámetros. Se aconseja dejar los que tienen por defecto y aumentar si se quiere únicamente la velocidad de transmisión de 1200 a 4800 (hay modelos que llegan a 9600, pero no todos), pero en ambos aparatos la misma.

Para tranferir programas BASIC.
Básicamente es igual, lo único que el programa BASIC se guarda en un editor especial al que se accede con la tecla BASIC, la cual alterna entre los modos ejecución y programa (RUN o PROGRAM), y por ello, hay que cargar el programa en el editor de TEXTOS normal y luego transferirlo como en el caso anterior. Antes de nada, salvar los textos o programas que pudiera haber en el editor.
  1. Nos metemos en el editor de texto de ambas máquinas pulsando la tecla "TEXT".
  2. En la Sharp 1, que es la que contiene el programa BASIC a transmitir, en el menú del editor de textos pulsamos la tecla B de "Basic" y a continuación la T de "Text←basic". Eso convertirá el programa en texto y lo cargará desde el editor BASIC al editor de TEXTOS. Desde aquí ya estamos igual que en caso anterior, por lo que continuamos con los mismos pasos.
  3. En ambas máquinas, y otra vez en el menú principal del editor, nos metemos en el menú SIO pulsando la S de "Sio"
  4. En la Sharp 1 EMISORA pulsamos S de "Save". Aparecerá en pantalla "--- SENDING ---".
  5. En la Sharp 2 RECEPTORA pulsamos L de "Load". Aparecerá en pantalla "--- RECEIVING ---".
  6. Una vez finalizada la transferencia, las pantallas volverán al menú << SIO >>. Eso indicará que ha finalizado la transferencia.
  7. Puede comprobar que en el editor de texto ya se ha transferido el texto o programa.
  8. Ahora, en la máquina Sharp 2 lo tenemos en el editor de TEXTOS, pero tenemos que pasarlo al de BASIC, para lo cual, en el menú de TEXTOS, pulsamos B de BASIC y de nuevo B de "Basic←text". Con esta orden, tendremos ya el programa BASIC en su editor específico y podemos ejecutarlo.

Cómo comunicar la Sharp PC-G850 con un ordenador PC.
Para las comunicaciones con un ordenador PC, hemos escogido un circuito muy barato, pero eficiente, el FT232RL que utiliza el chip de FTDI con EEPROM programable que es un interfaz de USB a TTL Serial. Se puede ver la imagen del circuito en la imagen de la izquierda. Se puede encontrar muy fácilemte en ebay, a un precio de 2 € si podéis esperar a que venga de China, o por 5 € si lo pedís a España, en cuyo caso llegará en 2 ó 3 días. Igual que en los casos anteriores necesitaremos sólo 5 cables tipo arduino, en este caso macho-hembra.

La placa FT232RL FTDI de la fotografía, que es la que recomendamos por su sencillez, capacidad de programación y posibilidades que ofrece, lleva un jumper para configurar las salidas de señal a 3,3V o a 5V. Lo dejamos como está, en la de 5V.

Como se comentó en la cabecera se este artículo, la lógica de señales de las Sharp es inversa, por lo que vamos a necesitar reprogramar la EEPROM del circuito y decirle que invierta las señales. Como acciones previas de configuración de nuestra placa:
  1. Descargamos el driver en http://www.ftdichip.com/Drivers/VCP.htm, escogiendo nuestro sistema operativo. Se ha probado en windows con el driver "CDM v2.12.10 WHQL Certified.exe"
  2. Una vez instalado, comprobamos el número de puerto serie que está emulando. Cuidado porque al enchufar la placa a diferentes puertos USB cambia el número de puerto serie COM4, COM5... Para comprobar el número de puerto, podemos utilizar esta pequeña utilidad industrologic.com/disk/utility/portfinder.exe, que nos dirá el puerto nuevo que acabamos de instalar (lo identificamos porque el fabricante "Manufacturer:FTDI". En el caso de la imagen e la derecha se ha instalado el puerto COM5).
  3. Una vez instalado el puerto, vamos a reprogramar la EEPROM de la placa para que genere las señales en lógica inversa (desgraciadamente esto hará que no podamos utilizar el circuito más que con las calculadoras Sharp. De todas formas esto no debe ser una preocupación ya que puede reprogramar las veces que se necesite el chip). Para ello instalamos el programa de reprogramación del mismo fabricante FT_PROG que se puede encontrar en http://www.ftdichip.com/Support/Utilities.htm. Lo descargamos y lo instalamos.
  4. Abrimos FT_PROG, le damos al icono de la lupa del menú "scan and parse" y aparecerá nuestro puerto serie. Pulsamos en las rama del árbol de la izquierda "hardware Specific" y luego en "Invert RS232 Signals" y rellenamos todas las casillas de inversión de la señales. Debe quedar como en la imagen de la derecha. Si no se es experto recomendamos no tocar nada más y le damos al icono del rayo "Program Devices", y ya está, ya lo hemos terminado de configurar.
  5. Cerramos todos los programas, desenchufamos la plaquita, y la volvemos a enchufar. Ya debe estar programada, configurada y lista para la comunicación con nuestras Sharp.

Ahora vamos a ver como nos comunicamos y transferimos programas entre las Sharp y el PC. Necesitamos un programa de comunicaciones de puerto serie. Como Windows ha dejado de tener en el sistema operativo el Hyperterminal, recomendamos dos programas muy sencillitos y que ocupan muy poco. EL primero es Term232 que se puede encontrar en http://industrologic.com/resource.htm#software, y el segundo es Putty que se puede encontrar en http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html.

Para transferir programas del ordenador hay que seguir los siguientes pasos:
  1. Abrimos el programa de comunicaciones. En este caso se ha utilizado Term232 por ser más configurable.
  2. Pulsamos el icono de la mano señalando el puerto RS232 de 9 pines para configurar los parámetros (señalado con un círculo rojo en la imagen inferior). Ponemos el puerto sobre el que se haya instalado nuestro circuito USD<>RS232 y podemos dejar los demás parámetros como están, ya que la opción por defecto coincide con la de las calculadoras Sharp. El único que se recomienda cambiar, además del puerto, es el de la velocidad. En el caso de la PC-G850V, ésta puede llegar hasta los 9600 baudios (ver imagen inferior con la pantalla de configuración).
  3. Si no lo hemos hecho antes, comprobamos los parámetros de transmisión de la Sharp. Recordamos que tiene por defecto después de un hardreset (1200 baudios, bits de datos=8, bit de parada=1, paridad=none, fin de línea=CR LF, fin de línea=1A, número de línea=yes). Para ello, ir al menú TEXT pulsado la tecla TEXT, luego para ir al menú SIO pulsar "S", y lurgo pulsar "F" de format y comprobar que tienen los mismos parámetros que hemos puesto en Term232 (Si no se ha modificado ninguno, tanto Term232 como las Sharp los tienen iguales). Se aconseja dejar los que tienen por defecto y aumentar si se quiere únicamente la velocidad de transmisión hasta los 9600 baudios.
  4. Para enviar un fichero del PC a la calculadora este debe estar en formato texto plano, en la Sharp pulsamos la tecla TEXT para entrar en el menú del editor de textos, luego "S" para entrar en el mení SIO, y L de "Load". En la calculadora aparecerá una pantalla con "--- RECEIVING ---" y se quedará a la espera de recibir datos. Vamos a Term232 y pulsamos el icono de la carpeta amarilla con la flecha hacia arriba (señalada en la imagen), cargamos en el menú de selección de ficheros el programa o texto que queremos transferir y ya está. Veremos como parpadea una luz en la placa hasta que finaliza la transferencia. Es posible que no se quite la pantalla de "--- RECEIVING ---" de manera automática. En ese caso, damos a la tecla BREAK(ON), y nos volvemos a meter en el editor con la tecla TEXT, si activamos la edición con la tecla "E" comprobaremos que el programa se ha transferido sin problemas. Si hemos transferido un programa BASIC, todavía tenemos que pasarlo al editor BASIC, para lo cual, en el menú de TEXTOS, pulsamos B de BASIC y de nuevo B de "Basic←text". Con esta orden, tendremos ya el programa BASIC en su editor específico y podemos ejecutarlo.
  5. Para enviar un fichero de la calculadora al PC, en Term232 pulsamos el icono de la carpeta amarilla con la flecha hacia abajo. Se abrirá una ventana para que demos el nombre del fichero al que queremos que se transfiera y donde podremos navegar hasta la carpeta en la que se almacenará. El Term232 se quedará a la espera de recibir datos. Vamos a la Sharp, tecla TEXT para ir al menú del Editor, Tecla S para ir a menú SIO y de nuevo tecla S de "Save". Veremos qcomo el texto del fichero va apareciendo en la venta de Term232 y a la vez se irá guardando en el fichero que le hayamos dicho. Una vez finalizada la transferencia volvemos a pulsar sobre el icono de la carpeta amarilla con la flecha hacia abajo para cerrarlo.
Seguir un procedimiento parecido en caso de emplear otro programa de comunicaciones, ya sea en Windows, Linux, MAC, o el sistema que tengamos.