SHARP PC-G820.

Leng Año
Disp.
Exp.
Gráf.
Medidas
Z80 3,54Mhz BASIC, CASL, ASM 1996 8 K 6,8 K 4x24 No No No No 362 gr 215x103x21 4xAA
Resg.
Valor 1
Valor 2
Valor 3
I. Rareza
Observaciones
B *42 B *121 B *224s ASM *18s XX 70 € 95 € 150 € Bajo coste, derivada de G801<E200

La SHARP PC G820 es una calculadora que se deriva de la G801, la cual, a su vez es un modelo de bajo coste de la E-200. La G820 está bastante capada ya que de fábrica sólo trae BASIC y CASL. No obstante, se puede activar la programción de Ensamblador con un comando oculto. Se accede al MODO ENSAMBLADOR, si desde el modo programa de BASIC se introduce CALL #5, &HC000.
Tras ese comando, aparecerá la pantalla:

 ***** ASSEMBLER *****
  user area=NOT RESERVED
  work area=29794bytes
<   Asm   Display    Print >

Es una calculadora programable en BASIC bastante potente gracias al procesador compatible Z80.

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, en esta página intentaremos llenar esas lagunas. En cuanto al manual, serviría el de la E200, si no fuera porque esas máquinas sólo se comercializaron en Alemania, y por tanto los manuales que se pueden encontrar en Internet están en alemán.

En cuanto a su empleo, tiene 4 modos principales, además del de calculadora científica: BASIC, Editor de Textos, CASL y Lenguaje ensamblador(oculto).
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 Ensamblador.
Tiene además, como se ha comentado dos modos para poder programar en CASL y el ya citado oculto 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 CASL (SHIFT + TEXT) o mediante el comando CALL #5, &HC000 introducido en modo programa, respectivamente.


En cuanto a la memoria, de fábrica trae 8 K, de los que sólo hay disponibles 6,8. La pantalla es de 4 líneas de 24 caracteres, no disponiendo de modo gráfico. De hecho los píxeles son discontinuos, agrupados en bloques de caracteres de 7x5 píxeles. El teclado es adecuado y cómodo, con un formato QWERTY. El cuanto a tamaño y peso, es acertado; aunque un poquito grande. Es una máquina portable con una buena capacidad, aceptable pantalla y buena potencia proporcionada por el procesador Z80.


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.

En principio esta máquina se vendió sin el lenguaje de programación Ensamblador, pero lo tiene oculto, siendo posible acceder a él si desde el modo RUN de BASIC se introduce CALL #5, &HC000. Y voilá, nuestra máquina se potencia enormemente con las posibilidades que abre este lenguaje.

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-G820, 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 G820 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, así que desde el modo RUN de BASIC introducimos CALL #5, &HC000. 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:
object:0100H-011CH
size :001DH( 29)bytes
label : 1
error : 0 complete !
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.

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 G820 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,96
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 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
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-G820 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, CASL y ASM , también dispone de otras potentes herramientas científicas o de programación.

Una de estas herramientas 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. Para ver todas las posibilidades del monitor, ver la descripción que hacemos de él en la máquina G850V, si bien aquella tiene una pantalla de 6 líneas en vez de 4, las funcionalidades son las mismas.

Se accede al monitor tecleando el comando MON y [ENTER] desde el modo ejecución 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.

los principales comandos que conocemos son:
  • USER 300 [ENTER]. Reserva espacio de memoria para los programas en ensamblador. Si no lo reservamos, al entrar en el ensamblador nos dará un error.
  • G"Dirección de memoria en HEX". 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.
  • D. Muestra el contenido de memoria en tres bloques de datos. En el primero se muestran las direcciones de memoria en HEX, en el segundo el contenido hexadecimal de la memoria, y en el tercero su representación en caracteres.