Alquimista 1997. Esta es una recopilacin de la informacin recogida durante varios aos basada en un estudio ms o menos profundo de la calculadora CASIO FX-850P. Algunos captulos han sido proporcionados de manera desinteresada por terceras personas. Otros han sido completados en menor o mayor parte. Gracias a todos ellos. Todava pueden existir muchas ms funciones ocultas de la calculadora. Aqu se han intentado ver la mayora de ellas (puede que todas). No obstante el estudio de esta gua puede abrir nuevos horizontes en la comprensin de las estructuras de la calculadora. El lector experimentar un control ms elevado de la calculadora, para as dar uso segn su conveniencia. Precaucin: Al acceder a muchas de estas nuevas
posibilidades, acceso a memoria de sistema, punteros de sistema, etc, hay que tener un cuidado especial, ya que se corre el riesgo de alterar el sistema.
ANEXO I - GUA
Es aconsejable usar la interfaz de comunicaciones y transferir todos los datos de mucha importancia al PC. Aqu no se describe la interfaz de comunicaciones.
ANEXO I - GUA
direccin -32768 (-32768+65536) 32767 La memoria RAM de la calculadora es cclica y al igual que la memoria de un PC, posee diversas maneras de direccionamiento. Si queremos direccionar un byte en el segmento 0 y la posicin 1024, esta direccin se expresar de la siguiente manera : 0 :1024. No obstante esta no es la nica manera de representarla, si bien el mismo byte tambin podra ser direccionado por el par segmento :desplazamiento,1 :1008 2 :992 , etc... . De cualquier manera siempre nos referimos al byte 1024 del segmento 0 (tomando este segmento como absoluto), o lo que es lo mismo, a la direccin real.
ANEXO I - GUA
El clculo de la direccin real es el siguiente : 16 x N segmento+desplazamiento Ej.- direccin 2 : 256 Cuando se lee el byte en la direccin anterior no se lee el byte de la direccin 256, sino el byte de la direccin (16*2+256=288). Dependiendo del tipo de expansin de memoria RAM(RP-8 (8 Kb)), (RP-33(32 Kb) la memoria total puede ser de 16 Kb o de 40 Kb. Para el caso de memoria de 40 Kb el final de la RAM est en la direccin 40960. A partir de esta direccin la memoria se convierte en cclica, es decir, el byte 40960+1 ser como direccionar el principio de la memoria (0 :0). En resumen el byte 40960 (para el caso de tener la mxima ampliacin RAM) ser el fin de la capacidad de almacenar bytes, pero no el fin de la capacidad de direccionar ms all de este lmite. La siguiente figura muestra una representacin grfica de la memoria de la calculadora.
ANEXO I - GUA
ANEXO I - GUA
TABLA DE PUNTEROS
El sistema guarda la informacin primordial para el manejo de programas, variables, zonas de memoria especiales y punteros. Esta informacin es de un valor muy especial tanto para el usuario como para el sistema. Sabiendo utilizar los punteros se puede tomar un control casi total de la calculadora, as como lograr algunos efectos interesantes. Direcci n 0: 0000 0: 0512 0: 0768 0: 0512 0: 1024 0: 1610 0: 1613 0: 1616 0: 1619 0: 1627 0: 1628 0: 1629 0: 1630 Descripcin BUFFER de pantalla. BUFFER de entrada de comandos,0. BUFFER VALF( ) ( 155 bytes ),0. BUFFER de entrada de comandos,0. Modo de almacenamiento frmulas (Function Memory),0. Puntero del puntero del programa donde se ha realizado en el ltimo comando PB (compatibilidad PB-100). SEG+DIR de READ#. Puntero del puntero del ltimo programa en el que se ha estado en BASIC. Puntero parmetros para INPUT (Texto si hay, sino variable). Despus de una edicin si es 13 ha sido pulsado EXE, si es 253 se ha pulsado shift +EXE. =0 LIB apagado; >0 LIB encendido. Modo angular; 0=DEG; 1 =RAD; 2=GRA. Si es igual a 0 DEFM apagado; >0 DEFM encendido.
ANEXO I - GUA
0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0: 0:
1673 1676 1682 1685 1688 1691 1697 1700 1703 1706 1709 1712 1715 1718 1737 1750 1753 1759 1762 1767 1774 1776 1785 1820 1858
Puntero inicio de la pila de caracteres. Puntero fila de la pila de caracteres. Puntero cabeza de la Pila FOR NEXT. Puntero cabeza de la Pila GOSUB. Puntero cola de la Pila GOSUB. Puntero de FIN del rea de sistema. Puntero de inicio de la tabla de variables. Puntero del ltimo byte de variables. Puntero de primer byte de MEMO. Puntero de ltimo byte de MEMO. Puntero del puntero de MEMO. Puntero del puntero de P9 ( Tabla de punteros ). Puntero del puntero de P0 ( Tabla de punteros ). Direccin de punteros de la librera 5:63406. =2 PRT encendido. Puntero del ltimo comando de programa ejecutado. Puntero DATA Puntero ON ERROR GOTO =ERL ( 2 bytes ). =ERR ( 1 byte ). Lnea de programa ejecutndose, ltima editada o introducida (2 bytes ). Puntero del comando que se est ejecutando. ANS ( como variables, 8 bytes ). =4 CAPS encendido, =0 minsculas (slo lectura). Puntero del puntero del ltimo programa de librera ejecutado. Buffer PASS ( 8 bytes ASCIIZ =terminado en carcter 0 ). Fin de RAM Tabla de punteros de los programas de librera.
ANEXO I - GUA
LSB= Byte menos significativo del puntero MSB= Byte ms significativo del puntero BL = Segmento Bloque de memoria La frmula para obtener la direccin de memoria a la que apunta el puntero es la siguiente:
ANEXO I - GUA
P=PEEK(LSB)+256*PEEK(MSB) La variable P ser la direccin de memoria deseada. El Segmento Bloque se usar con la instruccin DEFSEG de BASIC. DEFSEG=BL*4096 De este modo tendremos una direccin de memoria con segmento: desplazamiento. El segmento 0 corresponde a la RAM y los segmentos 4, 5 a la ROM. Volviendo a la estructura de las variables calcularemos el inicio de la tabla de variables por el procedimiento descrito anteriormente: PI=PEEK1697+256*PEE1698 El punto de inicio PI es la direccin de memoria donde estar ubicada la primera variable. Usando tambin el puntero, ltimo byte de la tabla de variables, de la tabla de punteros tendremos la direccin donde termina la ltima variable. PF=PEEK1700+256*PEE1701
ANEXO I - GUA
Se han obviado los segmentos debido a que sabemos que las variables estn en la memoria RAM (DEFSEG=0).
ANEXO I - GUA
10
PI
Variable Variable
PF
Variable Variable
Cada estructura de variable tiene un tamao distinto segn el nombre de la variable y el tipo de variable.
Longitud del nombre de la variable*16+Tipo Nombre de la variable Direccin de la variable
=8 si es una matriz de
En esta direccin empezar el valor de la variable. La longitud del valor depender de si es un nmero o una cadena de texto (string). Esta direccin esta en notacin inversa. Un ejemplo prctico de tabla de variables es el siguiente listado de la memoria RAM. Hay dos variables numricas S y CH2 y una variable de tipo string CHAR$.
ANEXO I - GUA
11
Longitud nombre 14
(1*16+4=20=&H14)
Nombre 53
CHR$(53)=S
Direcci n 6E 27
&H276E
Hexadecimal/ Ascii
14 53 6E 27
.Sn'
34 43 48 32 76 27
34
(3*16+4=52=&H34)
43 48 32
C+H+2
76 27
&H2776
4CH2v'
40 43 48 41 52 C0 0C
40
(4*16+0)=64=&H40
43 48 41 52
C+H+A+R
C0 0C
&H0CC0
@CHAR.
Ntese que la ltima variable es de tipo string (CHAR$) y no aparece en memoria el carcter $. Los bytes en hexadecimal aparecen consecutivos:
14 53 6E 27 34 43 48 32 76 27 40 43 48 41 52 C0 0C
Mirando en la direccin de la variable podemos tener nmeros o cadenas de texto: Nmero: A.BCDEFGHIJKL*10xy
MN LT JK HI FG DE BC
1 BYTE
0A
ANEXO I - GUA
12
El exponente depende de si el nmero es mayor o igual a 1 y/o menor que cero. La variable T controla esta dependencia. T=(1 si el nmero es >=1) + (5 si el nmero es <0) MN es calculado con respecto a este parmetro. La tabla podra ser la siguiente: T 0 5 1 6 MN 100ABS(XY) 100ABS(XY) ABS(XY) ABS(XY)
Ejemplo 1: Variable XX=-0.23456789012 En memoria se hace una conversin a notacin cientfica: conversin: -2.3456789012E-1 Memoria:
99 05 12 90 78 56 34 02
ANEXO I - GUA
13
Ejemplo 2: Variable XX=-0.23456789012E-18 En memoria se hace una conversin a notacin cientfica: conversin: -2.3456789012E-19 Memoria:
81 05 12 90 78 56 34 02
Ejemplo 3: Variable XX=256789012E-18 En memoria se hace una conversin a notacin cientfica: conversin: 2.56789012E-10 Memoria:
90 00 00 12 90 78 56 02
ANEXO I - GUA
14
Este tipo de variable es mucho ms sencillo que la anterior. Slo se compone de la longitud de la cadena de texto ms su equivalente en ASCII
Longitud Letras ASCII
ANEXO I - GUA
15
La memoria ROM comienza en el segmento de bloque 4. Para acceder a esta direccin de memoria hay que usar la instruccin DEFSEG=4*4096. A partir de la zona aqu listada comienza la biblioteca de programas (libreras). En este bloque se muestra el inicio de la ROM. Se muestran en distintos colores algunas zonas importantes de la ROM.
Inicio de la ROM Direccin de inicio librera Direccin final de librera Puntero de cdigos de teclado cdigos de teclado
Dir. Hexadecimal
0000 0010 0020 0030 0040 0050 0060 0070 0080 0090 00A0 00B0 00C0 00D0 00E0 00F0 0100 0110 0120 0130 0140 0150 0160 43 00 FF 04 00 2D AD 00 3B 56 00 A5 86 00 3C 9B 15 15 14 14 14 18 00 4D 00 FF 24 00 2A 33 20 4D 43 00 A7 D3 20 93 99 78 6B 4B 6F 59 AB 00 04 04 FF E0 FE 08 35 00 4B 46 FE 0C D5 00 98 92 15 15 14 14 15 00 00 FF 40 FF 05 00 A1 38 F6 4A 44 00 9E D8 13 96 91 77 6C 49 6A 7A 00 00 FF 00 FF 24 DC 89 28 F2 49 52 DC 8C A4 F3 5B 24 15 15 14 16 15 00 00 01 04 FF E0 DB F5 87 0E 55 45 DB F5 9D 04 27 23 79 6D 81 9B 7F 00 00 56 60 FF 05 DA DF DA AE 1D 0F DA DF DA 83 02 0F 19 15 14 14 15 00 00 0B 01 FF BD 03 00 FC 80 1F 0F 03 00 FC AF 1F 1A A3 6E 6D 7C 67 00 00 1B 04 FF F7 2F 0D 2E 2C 4E 58 A8 FD 9C 3F 9F 9A 19 15 14 15 15 00 00 00 B0 FF 05 5E 2B 30 3A 42 5A A3 A6 D0 3E A0 8F 97 6F 82 93 7D 00 00 57 01 FF BD 8A 36 32 3D 48 53 8D D6 D2 40 95 90 18 15 14 14 18 7F 00 55 04 FF F7 F0 39 31 4C 47 41 F0 D9 D1 97 94 8E 9C 70 8D AC A7 CC 00 30 FF FF 05 FA 29 34 50 59 57 FA A2 D4 5C 26 22 15 14 17 15 18 7F 00 30 FF FF 00 DE 88 37 4F 54 51 DE 8B D7 5D 25 21 60 4A 47 63 A8 CE 00 30 FF 90 00 DD F4 85 12 1E FF DD F4 84 11 0B FF 15 14 14 14 18 7F 00 31 FF 05 06 00 00 81 1C FB 00 00 00 82 06 FB 00 AC A3 57 6C AA D2 00
ASCII
CM....V...WU0001 ...@..`........ ............... .$.$...... ...../^. -*...+69). 358(..02147 . .. :=LPO.. ;MKJIU..NBHGYT. VCFDRE..XZSAWQ.. ..... . .... . . ...?>@\].. <['.. &%. $#.. "!.. .x.w.y....`. .k.l.m.n.o.p.J. .K.I..m...G.W .o.j..|...c.l .Y.z..g.}... ......... ................
ANEXO I - GUA
16
0170 0180 0190 01A0 01B0 01C0 01D0 01E0 01F0 0200 0210 0220 0230 0240 0250 0260 0270 0280 0290 02A0 02B0 02C0 02D0 02E0 02F0 0300 0310 0320 0330 0340 0350 0360 0370 0380 0390 03A0 03B0 03C0 03D0 03E0 03F0 0400 0410 0420 0430 0440 0450 0460 0470 0480
00 B6 F7 FF B2 BA C2 CA D3 DB E3 EB EF F7 FF 07 0D 15 1D 25 29 48 6B 95 BB E7 0E 31 51 72 85 8F 8F 8F 8F 8F 90 3C 45 4E 62 72 EE 5B 20 20 49 20 41 20
00 FE 05 FF 03 03 03 03 03 03 03 03 03 03 03 04 04 04 04 04 04 04 04 04 04 04 05 05 05 05 05 05 05 05 05 05 05 E2 2D 4F 63 73 40 26 54 4C 4E 52 4C 43
00 05 DB FF B3 BB C3 CB D4 DC E4 EC F0 F8 00 08 0E 16 1E 26 2D 4C 6F 99 BF EC 14 35 56 76 89 8F 8F 8F 8F 8F 20 30 45 50 64 74 F0 5F 41 4F 54 4F 28 53
00 B6 F7 FF 03 03 03 03 03 03 03 03 03 03 04 04 04 04 04 04 04 04 04 04 04 04 05 05 05 05 05 05 05 05 05 05 2B 31 41 51 65 75 9F 27 4E 47 20 55 4D 52
00 FE 05 FF B4 BC C4 CC D5 DD E5 ED F1 F9 01 09 0F 17 1F 27 31 50 73 9E C4 F1 18 38 5A 7A 8F 8F 8F 8F 8F 8F 2D 32 42 52 66 76 E8 A5 20 20 46 4E 49 20
00 05 DB FF 03 03 03 03 03 03 03 03 03 03 04 04 04 04 04 04 04 04 04 04 04 04 05 05 05 05 05 05 05 05 05 05 2A 33 43 53 67 77 E4 5D 41 4C 52 44 44 20
00 B6 F7 FF B5 BD C5 CD D6 DE E6 ED F2 FA 02 09 10 18 20 28 35 54 7A A3 CA F5 1C 3C 5E 81 8F 8F 8F 8F 8F 8F 2F 34 44 54 68 78 E9 87 53 4E 41 28 24 54
00 FE 05 FF 03 03 03 03 03 03 03 03 03 03 04 04 04 04 04 04 04 04 04 04 04 04 05 05 05 05 05 05 05 05 05 05 E3 35 45 55 69 79 EA EF 4E 20 43 52 28 4F
00 05 FF FF B6 BE C6 CE D7 DF E7 ED F3 FB 03 09 11 19 21 29 39 59 81 A8 D1 F8 20 41 64 85 8F 8F 8F 8F 8F 8F 21 36 46 56 6A 7A EB 86 20 45 20 41 24 20
00 B6 FF FF 03 03 03 03 03 03 03 03 03 03 04 04 04 04 04 04 04 04 04 04 04 04 05 05 05 05 05 05 05 05 05 05 22 37 47 57 6B 3F 8D 53 41 58 41 4E 2C 20
00 FE FF FF B7 BF C7 CF D8 E0 E8 EE F4 FC 04 0A 12 1A 22 29 3D 5D 85 AF D8 FD 26 45 68 85 8F 8F 8F 8F 8F 8F 23 38 48 58 6C 2C 85 49 43 50 42 23 49 53
00 05 FF FF 03 03 03 03 03 03 03 03 03 03 04 04 04 04 04 04 04 04 04 04 04 04 05 05 05 05 05 05 05 05 05 05 24 39 49 59 6D 3B E5 4E 53 20 53 4C 4E 54
00 B6 FF FF B8 C0 C8 D0 D9 E1 E9 EE F5 FD 05 0B 13 1B 23 29 41 61 89 B2 DB 05 2B 49 6B 85 8F 8F 8F 8F 8F 8F 3E 2E 4A 5A 6E 3A E6 20 20 53 20 45 4B 45
00 FE FF F9 03 03 03 03 03 03 03 03 03 03 04 04 04 04 04 04 04 04 04 04 04 05 05 05 05 05 05 05 05 05 05 05 E0 E7 4B 8A 6F ED 25 43 41 51 53 4E 45 50
00 05 FF F7 B9 C1 C9 D2 DA E2 EA EF F6 FE 06 0C 14 1C 24 29 45 67 8F B7 E1 0A 2D 4D 6E 85 8F 8F 8F 8F 8F 90 3D 29 4C 8E 70 84 5C 4F 54 52 47 28 59 20
00 BD FF 05 03 03 03 03 03 03 03 03 03 03 04 04 04 04 04 04 04 04 04 04 04 05 05 05 05 05 05 05 05 05 05 05 E1 28 4D 61 71 DF EC 53 4E 20 4E 56 24 20
................ .......... ........... .............. ........ ........ ........ ........ ........ ........ ........ ........ ........ ........... ................ ................ ................ ................ ...... .!.".#.$. %.&.'.(.).).).). ).-.1.5.9.=.A.E. H.L.P.T.Y.].a.g. k.o.s.z..... ........ ........ ........... ........ .&.+.-. 1.5.8.<.A.E.I.M. Q.V.Z.^.d.h.k.n. r.v.z...... ........ ........ ........ ........ ........ ........ . +-*/!"#$>= <0123456789.)( E-EABCDEFGHIJKLM NOPQRSTUVWXYZa bcdefghijklmnopq rstuvwxyz?;: @ %\ [&_']SIN COS TAN ASN ACS ATN LOG LN EXP SQR INT FRAC ABS SGN ROUND(RAN#LEN(V AL(MID$($ INKEY$ CSR TO STEP
ANEXO I - GUA
17
0490 04A0 04B0 04C0 04D0 04E0 04F0 0500 0510 0520 0530 0540 0550 0560 0570 0580
54 52 4C 45 20 20 20 54 45 43 20 20 20 52 53 20
48 24 4C 58 52 49 45 4F 41 4C 50 4E 44 49 53 3F
45 28 42 54 45 4E 4E 52 52 45 4F 50 45 46 3F 3F
4E 44 45 20 54 50 44 45 20 41 4C 52 46 59 3F 3F
20 4D 45 20 55 55 20 20 53 52 28 28 4D 4C 3F 20
44 53 50 47 52 54 4F 44 45 20 48 3F 20 49 20 44
45 24 20 4F 4E 20 4E 41 54 44 59 3F 53 53 3F 49
47 28 4C 54 20 4D 20 54 20 45 50 3F 41 54 3F 4D
28 4D 45 4F 49 4F 52 41 3F 46 52 20 56 52 3F 20
48 49 54 20 46 44 45 20 3F 4D 45 4E 45 55 20 45
45 44 20 20 20 45 41 52 3F 20 43 43 4C 4E 57 52
58 24 46 47 50 20 44 45 20 26 28 52 4F 4E 52 41
24 28 4F 4F 52 53 20 4D 3F 48 46 28 41 45 49 53
28 24 52 53 49 54 52 20 3F 43 41 3F 44 57 54 45
53 2C 20 55 4E 4F 45 43 3F 55 43 3F 56 50 45 20
54 41 4E 42 54 50 53 4C 20 52 54 3F 45 41 23 3
THEN DEG(HEX$(ST R$(DMS$(MID$($A LLBEEP LET FOR N EXT GOTO GOSUB RETURN IF PRINT INPUT MODE STOP END ON READ RES TORE DATA REM CL EAR SET ??? ??? CLEAR DEFM &HCUR POL(HYPREC(FACT NPR(??? NCR(??? DEFM SAVELOADVE RIFYLISTRUNNEWPA SS??? ??? WRITE# ??? DIM ERASE :
ANEXO I - GUA
18
ANEXO I - GUA
19
La siguiente tabla incluye la localizacin de todos los programas de biblioteca, as como su longitud. Estos datos se han transmitido de la calculadora al ordenador PC usando la interfaz del presente proyecto, usando un programa similar al mostrado en la hoja anterior. El primer nmero antes de los dos puntos en los valores Inicio y Final es el bloque de ROM o segmento donde se encuentra la librera.
N. Librera
0400 0800 0900 1000 5010 5020 5040 5050 5060 5080 5090 5100 5200 5220 5230 5250 5260 5270
Inicio
4:01424 4:03286 4:04416 4:08268 4:09475 4:10181 4:10632 4:12287 4:13497 4:15487 4:16595 4:17770 4:23006 4:24276 4:25521 4:26378 4:27099 4:27952
Final
4:03285 4:04415 4:08267 4:09474 4:10180 4:10631 4:12286 4:13496 4:15486 4:16594 4:17769 4:23005 4:24275 4:25520 4:26377 4:27098 4:27951 4:28945
Longitud
1861 1129 3851 1206 0705 0450 1654 1209 1989 1107 1174 5235 1269 1244 0856 0720 0852 0993 bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes
ANEXO I - GUA
20
5280 5290 5300 5350 5510 5520 5530 5540 5550 5560 5570 5600 5605 5610 5615 5620 5625 5630 5635 5650 5655 5660 5665 5670 5675 5700 5705 5710 5715 5720 5725 5730 5735 5740
4:28946 4:29791 4:31030 4:33197 4:36467 4:37093 4:37485 4:37849 4:38359 4:39154 4:39588 4:41304 4:42142 4:42513 4:43124 4:43387 4:43985 4:44405 4:44737 4:45445 4:45715 4:46163 4:46602 4:46950 4:47338 4:47736 4:48014 4:48444 4:48790 4:49131 4:49476 4:49900 4:50306 4:50675
4:29790 4:31029 4:33196 4:36466 4:37092 4:37484 4:37848 4:38358 4:39153 4:39587 4:41303 4:42141 4:42512 4:43123 4:43386 4:43984 4:44404 4:44736 4:45444 4:45714 4:46162 4:46601 4:46949 4:47337 4:47735 4:48013 4:48443 4:48789 4:49130 4:49475 4:49899 4:50305 4:50674 4:51165
0844 1238 2166 3269 0625 0391 0363 0509 0794 0433 1715 0837 0370 0610 0262 0597 0419 0331 0707 0269 0447 0438 0347 0387 0397 0277 0429 0345 0340 0344 0423 0405 0368 0490
bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes
ANEXO I - GUA
21
5745 5750 5760 5800 5810 5820 5830 5840 5900 5910 5920 5930 5932 5934 5936 5938 5950 5960 5970 5980 6210 6220 6230 6240 6310 6320 6330 6410 6420 6430 6440 6450 6460 6500
4:51166 4:51537 4:52188 4:53605 4:54971 4:56759 4:58362 4:59958 4:61808 5:1166 5:3488 5:4375 5:5801 5:7003 5:8200 5:9508 5:10561 5:12474 5:13498 5:16383 5:17332 5:17677 5:18129 5:18578 5:19130 5:19633 5:20095 5:20642 5:21007 5:21477 5:21946 5:22516 5:22681 5:22880
4:51536 4:52187 4:53604 4:54970 4:56758 4:58361 4:59957 4:61807 5:1165 5:3487 5:4374 5:5800 5:7002 5:8199 5:9507 5:10560 5:12473 5:13497 5:16382 5:17331 5:17676 5:18128 5:18577 5:19129 5:19632 5:20094 5:20641 5:21006 5:21476 5:21945 5:22515 5:22680 5:22879 5:24426
0370 0650 1416 1365 1787 1602 1595 1849 4892 2321 0886 1425 1201 1196 1307 1052 1912 1023 2884 0948 0344 0451 0448 0551 0502 0461 0546 0364 0469 0468 0569 0164 0198 1546
bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes
ANEXO I - GUA
22
6510 6520 6530 6540 6610 6620 6630 6640 6650 6660 6670 6680 6710 6711 6712 6720 6721 6722 6730 6731 6732 6740 6741 6742 6750 6751 6752 6760 6761 6762 6770 6771 6772 K0630
5:24427 5:24452 5:24477 5:24502 5:24527 5:25310 5:26100 5:26861 5:27628 5:28698 5:29845 5:30458 5:31230 5:31257 5:31283 5:31309 5:31336 5:31362 5:31388 5:31415 5:31441 5:31467 5:31494 5:31520 5:31546 5:31573 5:31599 5:31625 5:31652 5:31678 5:31704 5:31731 5:31757 5:31783
5:24451 5:24476 5:24501 5:24526 5:25309 5:26099 5:26860 5:27627 5:28697 5:29844 5:30457 5:31229 5:31256 5:31282 5:31308 5:31335 5:31361 5:31387 5:31414 5:31440 5:31466 5:31493 5:31519 5:31545 5:31572 5:31598 5:31624 5:31651 5:31677 5:31703 5:31730 5:31756 5:31782 5:39375
0024 0024 0024 0024 0782 0789 0760 0766 1069 1146 0612 0771 0026 0025 0025 0026 0025 0025 0026 0025 0025 0026 0025 0025 0026 0025 0025 0026 0025 0025 0026 0025 0025 7592
bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes
ANEXO I - GUA
23
M6510 M6710 M6720 M6730 M6740 M6750 M6760 M6770 S6020 S6030 S6210 S6220 S6230 S6240 S6310 S6320 S6330 S6410 S6420 S6430 S6440
5:39376 5:43179 5:44182 5:45200 5:46340 5:47588 5:48887 5:49734 5:50666 5:51950 5:53239 5:53552 5:53900 5:54136 5:54702 5:54891 5:55008 5:55312 5:55661 5:56154 5:56676
5:43178 5:44181 5:45199 5:46339 5:47587 5:48886 5:49733 5:50665 5:51949 5:53238 5:53551 5:53899 5:54135 5:54701 5:54890 5:55007 5:55311 5:55660 5:56153 5:56675 5:57379
3802 bytes 1002 bytes 1017 bytes 1139 bytes 1247 bytes 1298 bytes 0846 bytes 0931 bytes 1283 bytes 1288 bytes 0312 bytes 0347 bytes 0235 bytes 0565 bytes 0188 bytes 0116 bytes 0303 bytes 0348 bytes 0492 bytes 0521 bytes 0703 bytes
ANEXO I - GUA
24
LIBRERAS NO DOCUMENTADAS
Existen varios programas de la biblioteca (libreras) no documentados. nmeros: 0400 calculadora 0800 ->Programa para la impresora 0900 -> Convertidor de PB100 a FX-850P Para acceder a los programas basta (desde el MODE 0) teclear el nmero y pulsar la tecla LIB. Es posible tambin acceder a la librera de men por su propio nmero de programa. K0630 -> Men de libreras Los listados siguientes corresponden a las libreras no documentadas: Librera: 0400
10 20 30 40 50 70 80 100
Estos
programas ->Programa
corresponden de testeo
a de
los la
Test de la calculadora
CLEAR:CLS:DEFSEG=0:K=PEEK(&H6B4)/4+PEEK(&H6B5)*64 IF K<32 THENK1=8:K2=K-K1 IF K=32 OR K=64 THENK1=32:K2=K-K1 IF K=40THENPOKE&H8000,10:POKE0,0:IFPEEK&HA000=10THENK1=32:K2=8 ELSEK1=8: K2=32 PRINT"Main";K1;TAB(8);"Kbyte Option";K2;"Kbyte";:PRINT:A=64:D=1:A1=0 GOSUB1000:A=A+A:D=(D+D)MOD256:IF A<K*1024 THEN70 FORI=1 TO9:A=K*1024-A1-1:IF I=5 OR I=9 THEND=&H80 ELSE D=&H20 GOSUB1010:IF A1=0 THENA1=1 ELSEA1=A1*2
ANEXO I - GUA
25
110 120 130 160 170 180 190 191 192 193 194
200 201 202 203 210 220 230 250 280 290 320 330 350 360 390 410 420 430 460 470 490 510 520 1000 1010 1020 1030 1000 0
NEXT A=K*1024-A1-1:GOSUB1000:A1=A1*2:IF A1<K*1024 THEN120 PRINT" OK RAM";:GOSUB10000:PRINT:DEFSEG=&H4000 ROM=(PEEK(4)+1+PEEK(5)*256)*2 IF PEEK(0)<>&H43 THENPRINT"NG ROM 1";:GOTO1030 IF ROM<>1024 THEN200 D1=PEEK(&H5955):D2=PEEK&HA6AA:D3=PEEK&HFFFF:DEFSEG=&H5000 D4=PEEK0:D5=PEEK&H5955:D6=PEEK&HA6AA IF PEEK&HFFFF<>&H20 THENPRINT"NG ROM 2";:GOTO1030 PRINT"OK 512K*2 ROM?";:PRINT PRINTRIGHT$(HEX$(D1),2);" ";RIGHT$(HEX$(D2),2);" ";RIGHT$(HEX$(D3),2);" "; RIGHT$(HEX$(D4),2);" ";RIGHT$(HEX$(D5),2);" ";RIGHT$(HEX$ (D6),2);"";:GOTO210 IF PEEK(ROM*128-1)<>&H20 THENPRINT"NG ROM 1";:GOTO1030 D1=PEEK&H5955:IF ROM=256 THEND2=PEEK&H26AA ELSE D2=PEEK&HA6AA PRINT"OK";STR$(ROM);"K ROM?";:PRINT PRINTRIGHT$(HEX$(D1),2);" ";RIGHT$(HEX$(D2),2);" "; GOSUB10000 CLS:FOR I=0 TO 63:PRINTCHR$(&HFF);:NEXT:LOCATE 0,0 DEFCHR$(&HFF)="FFFFFFFFFF":GOSUB10000:DEFCHR$ (&HFF)="0000000000": GOSUB10000 DEFCHR$(&HFF)="AA55AA55AA":GOSUB10000:DEFCHR$ (&HFF)="55AA55AA55":TRON: GOSUB10000:TROFF CLS:PRINT"Printer CHECK";:LPRINT:GOSUB10000 LPRINT"Main";K1;"Kbyte Option";K2;"Kbyte" FOR I=32 TO 255:IF I=&H7F THENI=&H80 LPRINTCHR$(I);:NEXT:LPRINT PRINT"RS 232C CHECK";:PRINT:GOSUB10000 OPEN "COM0:5,E,8,2,C,D,C,B,N" AS #1:PRINT#1,123:INPUT #1,D CLOSE:IF D<> 123 THENPRINT"NG RS 232C";:GOTO1030 PRINT"OK RS 232C";:GOSUB10000:PRINT PRINT"MT CHECK <REC>";:PRINT:GOSUB10000 OPEN "CAS0:TEST" FOR OUTPUT AS #1:PRINT#1,"ABC":CLOSE PRINT"MT <REW> and <PLAY>";:PRINT:GOSUB10000 OPEN "CAS0:TEST" FOR INPUT AS #1:INPUT #1,A$:CLOSE IF A$<>"ABC" THENPRINT"NG MT";:PRINT:GOTO1030 PRINT"OK MT";:PRINT END POKE A,D IF PEEKA=D THENRETURN IF A>=K1 THENPRINT"NG RAM 2"; ELSE PRINT "NG RAM 1"; BEEP:GOTO1030 BEEP:IF INPUT$(1,@)=CHR$(0) THEN10000ELSE RETURN
ANEXO I - GUA
26
DATA1E,28,A8,28,1E,0,2,7C,80,0,8,4,FE,80,80,0,20,40,80,0,C6,AA,92,82,C6, 72,8E,80,8E,72,AA,54,AA,54,AA,FE,FE,FE,FE,FE,1C,22,22,1C,22,7E,88,A4,A4, 58,20,1E,20,40,40,14,2A,2A,2A,0,3C,52,52,3C,0,3E,8,8,30,8,1C,22,22,5C,80, 18,26,3C,64,18,F8,88,F8,0,0 DATA48,F8,8,0,0,B8,A8,E8,0,0,A8,A8,F8,0,0,E0,20,F8,0,0,E8,A8,B8,0,0,F8,A8 ,B8,0,0,C0,80,F8,0,0,F8,A8,F8,0,0,E8,A8,F8,0,0,20,70,20,0,0,20,20,20,0,0,78 ,20,40,38,0,48,50,28,48,0,20, 20,0,0,F8,10,10,54,10,10 DATAA,4A,2A,1A,A,A,1A,2A,4A,A,28,68,38,2C,28,20,40,FE,40,20,10,38,54,10 ,10,8,4,FE,4,8,10,10,54,38,10,22,3C,20,3E,22,18,3A,7E,3A,18,38,7C,3E,7C,3 8,18,3C,7E,3C,18,18,7A,7E,7A,18,7C,44,44,44,7C,38,44,44,44,38,8,18,28,18 ,8,40,20,10,8,4,44,28,10,28,44 DATAFE,90,F0,92,FE,24,DC,54,7E,54,FE,A8,A8,AA,FE,FE,92,92,92,FE,50,50,7 E,90,10,84,F8,A0,A2,BC,12,7E,92,82,42,38,44,FE,44,28,22,22,FA,22,22,88,8 8,BE,88,88,3E,22,3E,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 CLS:PRINT"Down load .....";:a$=CHR$(27):b$=CHR$(0):LPRINTa$;":";b$;b$;b$;a$; "%"; CHR$(1);b$;:x=128:GOSUB60:x=224:GOSUB60:CLS:END LPRINTa$;"&";b$;CHR$(x);CHR$(x+31);:FORi=x TOx+31:LPRINTCHR$(139);: FORj=1TO5:READc$:LPRINTCHR$(VAL("&H"+c$));b$;:NEXT:LPRINTb$;:NEXT: RETURN
20
30
40
50
60
ANEXO I - GUA
27
MODE8:DEFSEG=0:GOTO110 GOSUB20 OPENp$ FORINPUTAS#1:IFASC(INPUT$(1,1))<>2 THENCLOSE:GOTO30 ELSERETURN IFg$="" THENRETURN ELSEGOSUB70:FORk=1 TOLEN(g$):k$=MID$(g$,k,1): MODE32(k$): NEXT:g$="":FORl=0 Tok-2:g$=g$+CHR$(PEEK(l+768)):NEXT: RETURN POKE768,0:POKE769,0:POKE1608,0:POKE1609,3:RETURN n=PEEK(e):e=e-1:RETURN n$="":a=2:a$="":j$="":i=0:p$="":m=512:f$="":c$="":o=0:g=0:e=0:d=0:e$ ="" p=0:b$="":k=0:g$="":c=0:w=0:u=0:v=0:s=0:o$="":i$="":q=0:h$="":r=0:m $="":k$="":h=0:f=0: t=0:l=0:b=0:x=0:y=0:n=0:d$="" IFPEEK(m)=32 THENm=m+1:GOTO200 IFPEEK(m)=4 ANDPEEK(m+1)=180 THENf$="VF":GOSUB2190:GOSUB2120: GOSUB2220: GOTO410 IFPEEK(m)<>4 ORPEEK(m+1)<>179 THENa n=PEEK(m+a):IFn=32 THENa=a+1:GOTO230 IFn=0 ORn=34 ORn=48 ORn=49 THENf$="PF":GOSUB2190:GOSUB2120: GOSUB2220: GOTO410 IFn=7 ANDPEEK(m+a+1)=187THENf$="AF":a=a+2:GOSUB2190:GOSUB2120: GOSUB2220:GOTO410 IFn=35 THENf$="MF":a=a+1:GOSUB2190:GOSUB2120 ELSEa n=PEEK(m+a) IFn=0 THENg=0:GOTO410 IFn=32 THENa=a+1:GOTO270 IFn=44 THENa=a+1:GOSUB2250:IFn=77 THENg=1:GOSUB2220 ELSEa ELSEa a=1709:o=(PEEK(a+1))*256+(PEEK(a))-1:f=o:e=o:h=o-FRE(1)+1 FORd=1867 TO1874:e$=e$+CHR$(PEEKd):NEXT b$="":a$="":OPENp$ FORINPUTAS#1:p=ASC(INPUT$(1,1)):IFp<144 THENCLOSE: GOTO460 b$=INPUT$(10,1):CLOSE IFp MOD16=15 THENa$="":GOTO510 FORk=1 TO8:j$=MID$(b$,k,1):IFj$<>CHR$(7) THENa$=a$+j$:NEXT i=ASC(MID$(b$,10)):c=VAL("&h"+MID$(HEX$(p),3,1))-8 IFc=<2 THENn$="MF":GOTO560 IFc=6 THENn$="VF":GOTO560 IFc=3ORc=7 THENn$="AF":GOTO560 n$="PF" g$=a$:GOSUB50:b$=g$:PRINTb$;TAB(9);n$;:PRINT IFf$<>n$ THEN460
ANEXO I - GUA
28
580 600 710 720 730 735 740 750 760 810 1010 1020 1030 1110 1130 1140 1160 1170 1180 1182 1184 1186 1188 1190 1192 1194 1196 1223 1225 1230 1240 2030 2040 2050 2060 2080 2090 2100 2120 2130 2140 2150
IFc$<>"" ANDc$<>b$ THEN460 ONc GOTO810,,,,810,810,810 GOSUB30 n=ASC(INPUT$(1,1)):IFn=255 ORn=241 THEN730 ELSEd$=d$+CHR$ (n):GOTO720 CLOSE:g$=d$:GOSUB50:d$=g$ IFLEN(d$)>8 THENREAD$ IFLEN(d$)<8 THENd$=d$+CHR$(0):GOTO740 IFe$=d$ THEN810 PASSd$ GOSUB30:MODE35(:CLOSE:f=PEEK(1609)*256+PEEK(1608)-1 IFf$="VF" THEN10010 ELSEPRINT"Converting..."; IFf$="MF" THEN6010 IFf$="PF" THEN1140 w=48:o$=HEX$(PEEK(1715)+PEEK(1716)*25615):POKE1616,VAL("&h"+RIGHT$( o$,2)): POKE1617,VAL("&h"+LEFT$(o$,2)) FORk=48 TO57:k$=CHR$(k):MODE30(k$):NEXT:GOTO1160 w=PEEK(PEEK(1611)*256+PEEK(1610)+8):k$=CHR$(w):MODE30(k$) q=0:x=0:y=0:l=0:GOSUB70:GOSUB2040:u=n:GOSUB90:v=n:o$=RIGHT$ (HEX$(v),2)+ RIGHT$(HEX$(u),2):o$=MID$(STR$ (VAL(o$)),2):s=PEEK(1609)*256+PEEK(1608) FORk=1 TOLEN(o$):POKE768+k-1,ASC(MID$ (o$,k,1)):s=s+1:NEXT:POKE768+k-1,0: i$=HEX$(s):POKE1609,VAL(LEFT$ (i$,2)):POKE1608,VAL(RIGHT$(i$,2)) GOSUB90 IFn=255 THEN1240 IFn=254 THENq=0:x=0:y=0:l=0:GOTO1225 IFn=7 THENy=y+1:IFy>=2 THENy=0:l=1:GOTO1225 IFy=1 THEN1225 IFn=167 THENx=1:GOTO1225 IFn*x*l=93 THENn=94:GOTO1223 IFn=165 ORn=151 THENq=SGN(n-151):GOTO1223 IFn*q=94 THENn=151:q=0 l=0 IFPEEK(1608)>=247 THEN5000 h$=CHR$(n):MODE32(h$):GOTO1180 GOSUB2080:MODE31(m$):GOTO1160 IFPEEK(m+a)=44 ANDPEEK(m+a+1)=77 THENg=1:RETURN e=o GOSUB90:IFn=224 THENw=w+1:GOTO2050 IFn=240 THENEND ELSERETURN m$=CHR$(w) r=e-f:t=o-r+1:MODE33(f+1,t,r):f=t-1:IF(FRE(1))-r<0 THEN20 RETURN n=PEEK(m+a):IFn=44 ANDf$="MF" THENRETURN IFn=0 THENRETURN IFn=32 THENa=a+1:GOTO2120 IFn<>34 THENa ELSEa=a+1
ANEXO I - GUA
29
2160 2170 2190 2195 2200 2220 2230 2250 5000 6010 6020 6030 6040 6060 6070 6075 6080 6090 6100 1001 0 1002 0 1003 0 1004 0 1005 0 1007 0 1008 0 1008 5 1009 0 1010 0 1011 0 1012 0 1013 0
n=PEEK(m+a):IFn=34 THENa=a+1:c$=LEFT$(c$,8):RETURN IFn=0 THENc$=LEFT$(c$,8):RETURN ELSEc$=c$+CHR$(n):a=a+1:GOTO2160 n=PEEK(m+a):IFn=48 ORn=49 THENp$="PMT"+CHR$(n)+":":a=a+1:RETURN IFn=32 THENa=a+1:GOTO2190 p$="PMT0:":RETURN n=PEEK(m+a):IFn=0 THENRETURN IFn=32 THENa=a+1:GOTO2220 ELSEa n=PEEK(m+a):a=a+1:IFn=32 THEN2250 ELSERETURN j$=j$+"ST error":GOTO5000 IFg=1THEN6040 RESTORE# RESTORE#"",1,6060:WRITE#:GOTO6030 RESTORE#CHR$(26),0,6060:READ$ GOSUB70:e=o GOSUB90:IFn=240 THENEND IFPEEK(1608)>=247 THEN5000 IFn<>255 THENh$=CHR$(n):MODE32(h$):GOTO6070 GOSUB2090:k=768:s=256*PEEK(1609)+PEEK(1608):l$="" IFk=s THENWRITE#l$:GOTO6060 ELSEl$=l$+CHR$ (PEEK(k)):k=k+1:GOTO6100 e=o:j=0:a=0:IFi\16>0 THEN10100 IFa=0 THENPRINT"GET ";(e-f-1)/8;"data";:PRINT:PRINT "Converting..."; IFe<f+5 THENEND GOSUB70:n=PEEK(e-7):IFn>10 THEN10070 FORk=0 TO7:GOSUB90:POKE768+k,n:NEXT:MODE34("A("+STR$(j) +")"+CHR$(0)): j=j+1: GOTO10030 a=n\16 FORk=0 TO7:GOSUB90:a=a-1:IFa>=0 THENMODE32(CHR$(n)) NEXT MODE34("A$("+STR$(j)+")"+CHR$(0)):j=j+1:GOTO10030 GOSUB90:b=n:a=30:IF(i\16)=14 THENa=62 PRINT"GET $,";(e-f-a-2)/8;"data";:PRINT:PRINT"Converting...";:GOSUB70 FORk=0 TOa:GOSUB90:b=b-1:IFb>=0 THENMODE32(CHR$(n)) NEXT:MODE34("$"+CHR$(0)):GOTO10030
ANEXO I - GUA
30
documentados en el manual. Es posible, desde BASIC, ejecutar comandos propios del sistema, como borrar programas programas. Estos comandos tienen el formato MODE 3x, siendo la x el comando especial. En realidad estos modos no se pueden ejecutar directamente desde la RAM, aunque s desde la ROM de la librera de funciones. Por esta razn hay que implementar una rutina que se encargue de los procedimientos bsicos: 1) 2) 3) Saltar a la ROM. Ejecutar el comando MODE 3x retornar a nuestro programa completos o introducir lneas nuevas de
Es absolutamente necesario no alterar o cambiar el nmero de algunas lneas del programa que vaya a usar el modo especial. Los comandos que afecten a la edicin de otros programas (introducir lneas, borrar, etc) deben de ejecutarse desde un programa inferior o en el mismo programa (usado para
ANEXO I - GUA
31
lneas
posteriores).
Por
ejemplo
podremos,
desde
el
programa 2, introducir lneas en el programa 3. Esto se debe a que a partir de un programa inferior se puede en uso. Los modos especiales son el MODE30 ( ), MODE31( ), MODE32 ( ), MODE33 ( ). reasignar la memoria (moviendo bloques de memoria) con facilidad sin alterar la ejecucin del programa
MODE30( )
Borra el programa especificado como si usramos el comando NEW de BASIC. Sintaxis : MODE30( k$ ) k$ : Parmetro de tipo string (cadena de texto). Introducir en k$ un valor entre 0 y 9. Nota: No sirve usar otra variable distinta a k$. (Se puede usar otra variable pero asignndosele despus a la variable k$. Ej.- P$=0:k$=P$)
ANEXO I - GUA
32
k$ tiene que ser un carcter no un entero. (Ej.- 0 no es correcto, hay que poner 0. Se va a emplear el ahorro de caracteres. 10 k$=5:GOSUB 20:END:REM borrar el programa 5 20 GOSUB 21 21 DEFSEG=0:a=PEEK1685+256*PEEK1686:FORb=0TO7:POKEa+b, VAL(MID$(20424700510004116024004,b*3+1,3:NEXT:FORb=0 TO1:Ifb;RETURNELSEa=PEEK1682+256*PEEK1683:POKEa,128: POKEa+1,24:POKEa+2,4:RETURN:NEXT Observacin: Hay que borrar desde un programa anterior al programa que deseamos borrar. Los programas a continuacin del programa borrado se desplazarn hacia adelante para ocupar el hueco dejado.
ANEXO I - GUA
33
MODE31( )
Introduce la lnea en formato ASCIIZ de la direccin 768 en el programa especificado. Sintaxis : MODE31( m$ ) m$ : Parmetro de tipo string (cadena de texto). Introducir en m$ un valor entre 0 y 9. Se coloca en el Buffer de la funcin VALF la lnea a introducir (en la direccin 768). La lnea estar en formato ASCIIZ, es decir, una cadena de texto terminada con el valor 0. Las lneas a implementar en el programa que ejecutemos sern: Iniciar la variable m$ con un valor entre 0 y 9 (Ej.- m$=5) 1140 GOSUB1150 1150 DEFSEG=0:p=PEEK1685+256*PEEK1686:POKEp+5,215:POKEp+6 :POKEp+7,4:POKE1608,0:POKE1609,3:RETURN 1160 RETURN Poner en la direccin de memoria 768 la lnea introducir
ANEXO I - GUA
34
MODE32( )
Similar al MODE30. Sintaxis : MODE32( k$ ) k$ : Parmetro de tipo string (cadena de texto). Introducir en k$ un valor entre 0 y 9. Nota: No sirve usar otra variable distinta a k$. (Se puede usar otra variable pero asignndosele despus a la variable k$. Ej.- P$=0:k$=P$) k$ tiene que ser un carcter no un entero. (Ej.- 0 no es correcto, hay que poner 0. Se va a emplear el ahorro de caracteres. 10 k$=5:GOSUB 20:END:REM borrar el programa 5 20 GOSUB 21 21 DEFSEG=0:a=PEEK1685+256*PEEK1686:FORb=0TO7:POKEa+b, VAL(MID$(204247005050000200117004,b*3+1,3:NEXT:FORb=0 TO1:Ifb;RETURNELSEa=PEEK1682+256*PEEK1683:POKEa,212: POKEa+1,17:POKEa+2,4:RETURN:NEXT
ANEXO I - GUA
35
MODE33( )
Copia de un bloque de bytes de una parte a otra de la memoria. Sintaxis : MODE33(Param1,Param2,Param3) Param1 : origen. Param2 : destino. Param3 : representa la direccin de memoria de origen ms un desplazamiento. (Param3-Param1)=n de bytes a copiar. Debido a su caracterstica de funcin oculta sta tiene que ser llamada de una manera un tanto especial. Los parmetros de entrada tienen que ser unas variables fijas. Param1= f+1 Param2= t Param3= r Todas las variables usadas son de tipo entero.
ANEXO I - GUA
36
Es obligatorio pasar los parmetros con los nombres de variables indicadas. MODE33(f+1,t,r) Representacin Grfica Ejemplo : Copiar de la zona de memoria 0 :1000h, 17 bytes, a la zona de memoria 0 :1 Param1 Param3=Param1+17 0 :1000h MEMORIA 0 :1 Param2
Descripcin detallada Esta funcin no puede ser accedida directamente desde el modo de operacin BASIC o modo CAL. Por esto se ha de
ANEXO I - GUA
37
acceder a esta funcin cediendo el control a un programa de la librera. Ser necesario preparar unas lneas especficas en el programa que quiera hacer uso de esta llamada al sistema. Esta llamada a sistema la realiza la calculadora en algunos programas de la librera (no descritos en el manual del propietario), exactamente en el programa 0900 y ms exactamente en la lnea 2090. Esta lnea se comporta en este programa, como una subrutina llamada por el comando GOSUB.
Debido a los parmetros existentes delante de la llamada a sistema MODE33(), es necesario volver a configurar estos, para adaptarlos a nuestros propsitos. Para esto tendremos que poner una lnea nmero 20 en nuestro programa BASIC con los comandos que se deseen. Las lneas siguientes pueden ser de distinta numeracin de las mostradas en el prximo ejemplo, pero su contenido debe de ser idntico.
ANEXO I - GUA
38
20 REM PONER AQU LOS COMANDOS QUE SE DESEEN 25 ON ERROR GOTO 20 30 GOSUB XX :RESUME ZZ Lnea que sigue a la XX XX POKE1759,92 :POKE1760,27 :POKE1761,4 :f=[P]-1 : e=([desp]-1)+[P] :o=[d]+(e-f)-1 :JCSOFT (poner cualquier expresin que provoque un error.) ZZ ........... Siendo : [P] el inicio de la cadena origen, [desp] el nmero de bytes a desplazar a partir de [P] y [d] la zona de memoria destino donde queremos situar el bloque de bytes. XX y ZZ representan nmeros de lnea cualesquiera (con la condicin de que ZZ>XX). NOTAS : las variables entre corchetes [P], [desp], [d] pueden ser cambiadas por las variables que deseemos. Las dems variables deben de ser las mismas que en el ejemplo anterior (f, e, o). Las sentencias POKE de la lnea XX son las encargadas de situar en el puntero de ON ERROR GOTO la direccin de memoria de la lnea 2090 del programa de librera 0900.
ANEXO I - GUA
39
Esta
direccin
es
la
4 :7004
que
se
expresa
como
Nota: Una aplicacin prctica del MODE31 y del MODE33 se puede ver en el captulo Paso de una Librera al programa P9.
ANEXO I - GUA
40
Donde PROGRAMA es el nmero de programa (0-9). INICIO es la zona de memoria donde comienza el programa. FIN es la zona de programa donde termina el programa. Una representacin de un programa podra ser la siguiente.
INICIO INICIO+x+1 INICIO+x+y+2 FIN Lon x y z 0 Num ab cd ef Car 32 32 32 BASIC (codificado) . . . Zero 0 0 0
ANEXO I - GUA
41
Dentro de cada lnea en la parte de BASIC codificado existen unos cdigos especiales para identificar las instrucciones o separarlas. Estos son los siguientes:
Carcter 1 2 3 4,5,6,7 Descripcin Dos puntos (: ) para separar instrucciones Comienzo de comentario (REM) o () Representa instrucciones de salto (GOTO,GOSUB, ON , THEN, ELSE). Va acompaado por un nmero de 2 bytes o por una variable. TOKENS (instrucciones BASIC codificadas)
ANEXO I - GUA
42
Tabla FOR La pila de esta instruccin est dispuesta de 26 en 26 bytes ( ver captulo Tabla de Punteros para encontrar la cabeza y la cola de la pila).
FOR Variable de control =Valor Inicial TO Valor Final [STEP incremento]: :NEXT
Memoria
Direccin+segment Step N lnea o separador tras el del FOR NEXT Direccin+segment o separador tras el FOR Direccin+segmento de la variable de control Valor Final
La estructura es la siguiente: Inicio de MEMO Registro 1, 13, 10 Registro 2, 13, 10 Registro n, 13, 10 26 x
Final de MEMO
ANEXO I - GUA
43
Los comandos BASIC se almacenan en la memoria de la calculadora en forma codificada, ocupando as menos espacio fsico en la RAM. El tamao ocupado por cada instruccin es de dos bytes. El primer byte indica el tipo de instruccin de que se trata (programacin general BASIC, operaciones matemticas, operaciones de cadenas de texto y entrada de teclado y por ltimo operadores lgicos, de bucles y de comparacin). El segundo byte es el identificador de la instruccin. Atendindonos al primer byte tendremos los siguientes valores segn el tipo:
Valor 04 05 06 07
Tipo Programacin general BASIC Operaciones matemticas Operaciones de cadenas de texto y entrada de teclado Operadores lgicos, de bucles y de comparacin
ANEXO I - GUA
44
A
Instruccin ABS ACS ALL AND ANGLE AS ASC ASN ATN Cdigo 5,123 5,111 7,187 7,196 4,110 7,188 5,148 5,110 5,112 carcter ASCII _{ _o _ _ _n _ _ _n _p
B
Instruccin BEEP Cdigo 4,112 carcter ASCII _p
C
Instruccin CALC$ CALCJMP CHR$ CLEAR CLOSE CLS COS CSR CUR Cdigo 6,173 4,159 6,160 4,106 4,114 4,113 5,108 7,184 5,99 carcter ASCII _ _ _ _j _r _q _l _ _c
D
Instruccin Cdigo carcter ASCII
ANEXO I - GUA
45
_ _v _w _x _8 _| _
E
Instruccin EDIT ELSE END EOF ERASE ERL ERR ERROR EXP Cdigo 4,111 *7,72 4,135 5,138 4,133 5,79 5,80 4,134 5,121 carcter ASCII _o _H _ _ _ _O _P _ _y
F
Instruccin FACT FIX FOR FRAC FRE Cdigo 5,103 5,126 4,129 5,127 5,141 carcter ASCII _g _~ _ _ _
G
Instruccin GOSUB GOTO Cdigo 4,74 4,73 carcter ASCII _J _I
H
ANEXO I - GUA
46
carcter ASCII _ _ _u _t _v _r _q _s
I
Instruccin IF INKEY$ INPUT INT Cdigo 4,141 6,168 6,155 5,125 carcter ASCII _ _ _ _}
K
Instruccin KEY Cdigo 6,169 carcter ASCII _
L
Instruccin LEFT$ LEN LET LIST LLIST LN LOAD LOG LPRINT Cdigo 6,158 5,149 4,143 4,87 4,88 5,119 4,89 5,120 4,164 carcter ASCII _ _ _ _W _X _w _Y _x _
ANEXO I - GUA
47
M
Instruccin MID MID$ MOD MODE Cdigo 6,154 6,156 7,199 4,176 carcter ASCII _ _ _ _
N
Instruccin NCR NEW NEXT NOT NPR Cdigo 5,171 4,107 4,130 7,195 5,170 carcter ASCII _ _k _ _ _
O
Instruccin ON OPEN OR OUT Cdigo 4,154 4,151 7,194 4,153 carcter ASCII _ _ _ _
P
Instruccin PASS PBGET PBLOAD PEEK PI POKE POL PRINT Cdigo 4,83 4,180 4,179 5,134 5,96 4,99 5,168 4,163 carcter ASCII _S _ _ _ _` _c _ _
ANEXO I - GUA
48
PUT
4,165
R
Instruccin RAN# READ REC REM RESTORE RESUME RETURN RIGHT$ RND ROUND RUN Cdigo 5,147 4,168 5,167 4,169 4,77 4,76 4,75 6,157 5,145 5,144 4,109 carcter ASCII _ _ _ _ _M _L K _ _ _ _m
S
Instruccin SAVE SET SGN SIN SQR STEP STOP STR$ Cdigo 4,108 4,172 5,124 5,107 5,122 7,192 4,174 6,161 carcter ASCII _l _k _| _k _z _ _ _
T
Instruccin TAB TAN THEN TO Cdigo 7,182 5,109 7,71 7,193 carcter ASCII _ _m _G _
ANEXO I - GUA
49
TROFF TRON
4,95 4,93
__]
V
Instruccin VAC VAL VALF VAR VERIFY Cdigo 4,122 5,150 5,146 4,178 4,96 carcter ASCII _z _ _ _ _`
W
Instruccin WRITE# Cdigo 4,78 carcter ASCII _N
X
Instruccin XOR Cdigo 7,198 carcter ASCII _
ANEXO I - GUA
50
Tabla de cdigos (TOKENS) :Orden numrico Primer Byte: 2 4 5 6 7 Byte 71 THEN 72 ELSE 73 GOTO 74 GOSUB 75 RETURN 76 RESUME 77 RESTORE 78 WRITE# 79 ERL 80 ERR 81 82 83 PASS 84 85 86 87 LIST 88 LLIST 89 LOAD 90 91 92 93 TRON 94 95 TROFF 96 VERIFY PI 97 98 99 POKE CUR 100 101 102 103 FACT 104 105
ANEXO I - GUA
51
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
SIN COS TAN ASN ACS ATN HYPSIN HYPCOS HYPTAN HYPASN HYPACS HYPATN LN LOG EXP SQR ABS SGN INT FIX FRAC
PEEK
ANEXO I - GUA
52
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185
VALF RAN# ASC LEN VAL OPEN OUT ON DEG CALCJMP CHR$ STR$ PRINT LPRINT PUT READ REM SET STOP MODE VAR PBLOAD PBGET TAB CSR REC POL NPR NCR HYP CALC$ HEX$ DMS$ MID INPUT MID$ RIGHT$ LEFT$
INKEY$ KEY
ANEXO I - GUA
53
186 187 188 189 190 191 192 193 194 195 196 197 198 199
ANEXO I - GUA
54
COMANDOS NUEVOS
En este captulo se van a tratar varios comandos o instrucciones BASIC que no estn documentadas en el manual de usuario. Es una pena que no se hayan incluido en el manual, ya que son de una gran utilidad. Instruccin: INPUT@n;Variable @ -> Carcter comodn n <=250) Variable -> perteneciente al rango a~z; A~Z;a$~z$;A$~Z$ Utilidad: Introducir un mximo nmero n de caracteres. El signo ? no aparece al pedir la variable. Ejemplo.10 PRINTEdad?;:INPUT@3;edad ->nmero perteneciente al rango (1<= n
Con esta instruccin no hay que comprobar que se introduzcan ms de tres caracteres. La instruccin se encarga de esto, librndonos as de programacin adicional.
ANEXO I - GUA
55
<=250) @ -> Carcter comodn. Utilidad: Para elegir opciones en los programas. Elimina un barrido al refrescar la pantalla. Para usar claves de acceso al programa, ya que introduce un mximo nmero n de caracteres sin ser visualizados. Ejemplo.5 10 GOTO100,200: GOTO 10 100 REM Introducir datos 200 REM Calcular Tambin se puede emplear la instruccin para provocar una pausa en el programa: 10 PRINTPulsa una tecla para seguir; 20 $=INPUT$(1,@) 30 REM continuar el programa PRINT(1) Introducir
datosTAB(0(2)Calcular; op=VAL(INPUT$(1,@)):ONop
ANEXO I - GUA
56
Instruccin: CALC$
Utilidad: Almacenar una frmula en la variable de tipo string (cadena de texto), que guarda su contenido en el rea de almacenamiento de frmulas ( Function Memory), desde un programa BASIC. Ejemplo.10 CALC$=AREA=BASE*ALTURA
Pulsando OUT (tecla de Function Memory) visualizaremos la frmula. Normalmente se acompaara esta variable con la funcin CALCJMP
Instruccin: CALCJMP
Utilidad: Realiza la funcin de la tecla CALC (Function Memory) asignando valores a las variables en la frmula. Ejemplo.10 CALC$=AREA=BASE*ALTURA 20 CALCJMP Nota: Esta funcin slo debe ser utilizada desde el MODE 0 (Modo CALC). Utilizarla desde el MODE 1 (Modo BASIC) generar un error de llamada a funcin no vlida (FC error)
ANEXO I - GUA
57
ANEXO I - GUA
58
Utilidad: Variable que define los 4 ltimos caracteres del cdigo ASCII de la calculadora. Para una mejor clarificacin ver captulo Cambiar Caracteres Ascii. Ejemplo.10 DEFCHR$(252)=FFFFFFFFFF 20 PRINT CHR$(252);
ANEXO I - GUA
59
ANEXO I - GUA
60
OPTIMIZACIN DE CARACTERES
A la hora de introducir los programas es posible reducir la memoria usada. Los espacios en blanco entre comandos son usados como bytes desperdiciados. Este ahorro de espacio puede resultar beneficioso para aquellos usuarios que no dispongan de la ampliacin de memoria RP-33. Al mismo tiempo el ahorro de bytes se traduce en ahorro de edicin, ya que podemos escribir casi todos los comandos e instrucciones juntos. Esto va a redundar en una perdida de legibilidad. Quizs este modo de programar debera de ser usado por programadores ms expertos. Se van a mostrar varios ejemplos de ahorro de bytes: Eliminacin de parntesis sobrantes, signos de
concatenacin, espacios en blanco entre instrucciones, puntos y comas, dobles instrucciones, etc... , son varios modos de reducir bytes: Eliminar parntesis antes de ( :, THEN, EOL) Eliminar comillas antes de (EOL)
ANEXO I - GUA
61
Eliminar ; detrs de PRINT Ejemplo 1: Sin ahorro: nombre+TAB(0); Con ahorro: 10 PRINTCHR$ (9Escribe tu nombreTAB(0; Ejemplo 2: Sin ahorro: Con ahorro: Ejemplo 3: Sin ahorro: Con ahorro: Ejemplo 4: Sin ahorro: Con ahorro: Ejemplo 5: Cuando hay una instruccin condicional del tipo: IF THEN GOTO 100 se puede reducir THEN GOTO por GOTO. Sin ahorro: 10 IF X>200 THEN GOTO 200 50 PRINT Z$;G$;X$;A$;B$;C$; 50 PRINTZ$G$X$A$B$C$; 200 ON ERROR GOTO 100 200 ONERRORGOTO100 1000 IF T>=9 THEN R$=A 1000 IFT9;R$=A 10 PRINT CHR$ (9);Escribe tu
ANEXO I - GUA
62
10 IFX>200GOTO200
Para estructuras complejas aqu tenemos el siguiente ejemplo. Sin ahorro: Con ahorro: 50 IF B=0 OR G$= THEN GOTO 30 ELSE IF X MOD 2+B MOD 2=0 THEN X=X/2 50 FB=0ORG$=GOTO30ELSEIFXMOD2+BM OD2 =0;X=X/2 Hay varios operadores que pueden ser substituidos: >= <= <> PI
En la estructura FOR I=A TO C no podremos reducir despus de la variable de inicio si esta es una letra. Sin ahorro: Con ahorro:
TO)
FOR I=1 TO 10 FOR H=A TO B FORI=1TO10 FORH=A TOB (Ntese el espacio entre A y
ANEXO I - GUA
63
Resumiendo: Existen bastantes maneras de ahorrar bytes en modo BASIC. El mtodo de ahorro es recomendable para aquellas calculadoras con poca memoria y para programadores ms expertos.
ANEXO I - GUA
64
Para cambiar un carcter hay separar en columnas el carcter. La primera columna equivale a un valor en hexadecimal, las cuatro filas de arriba forman medio byte y los tres inferiores, ms una fila virtual, el otro medio byte, y as sucesivamente para las dems columnas. Nada mejor que un ejemplo para aclararlo todo:
ANEXO I - GUA
65
Vamos a cambiar el carcter 252 por el siguiente signo (el smbolo de un condensador):
Separando las columnas tendremos: Para el pixel activo el valor es 1, cero para el apagado. 23*0= 0 22*0=0 21*0=0 20*1=1 23*0= 0 22*0=0 Fila virtual 21*0=0 20*0=0 23*0= 0 22*1=4 21*1=2 20*1=1 23*1= 8 22*1=4 2 *0=0 2 *0=0 66
0 1
Las dems columnas son iguales que las dos primeras, ya que el dibujo es simtrico. Uniendo todos los bytes nos quedara: 10 DEFCHR$(252)=107C007C10 De esta manera tenemos ya el carcter 252 creado. Para visualizarlo basta con usar : 20 PRINTCHR$(252; Este es un programa que ayudar a editar los caracteres.
8000 8005 8010 8020 8030 DATACreador de caracteres (DEFCHR$) REM redefine los 4 ultimos caracteres CLS:A$="0000000000":X=0:M=128:LOCATE1,1:PRINTCHR$(255; C=VALF("&H"+MID$(A$,X*2+1,2 B$=LEFT$(A$,X*2)+MID$(HEX$(C),3)+MID$
ANEXO I - GUA
67
(A$,X*2+3:PRINTCHR$(11CHR$(5B$; 8040 C$=LEFT$(A$,X*2)+MID$(HEX$(CXORM),3)+MID$ (A$,X*2+3:F=0:LOCATE3,1:PRINTMID$("",2+(0=(C ANDM,1; 8050 F=1-F:IFF;DEFCHR$(255)=C$ELSEDEFCHR$(255)=B$ 8060 T=ASC(KEY:IFT=0GOTO8050ELSEIFT=30ANDM<128;M=M*2ELSEIFT=31AN DM2 ;M=M\2ELSEIFT=29ANDX>0;A$=B$:X=X-1:GOTO8020ELSEIFT=28ANDX<4; 8065 8070 8075 8076 8077 8080 8090 8100 A$=B$:X=X+1:GOTO8020 IFT>27ANDT<32GOTO8030 IFT=13;C=C XORM IFT=244GOTO8090 IFT=245GOTO8100 IFT>64ANDT<91;LOCATE0,1:PRINTCHR$(T; GOTO8030 CALC$=B$:PRINTCHR$(11CHR$(6"CALC";:$=INPUT$(1,@:GOTO8030 ONERRORGOTO8105:DEFCHR$(252)=CALC$:$="Seguir, Borrar o CALC (S,B,C)?" :F=1:GOTO8110 8105 $="Seguir o Borrar (S,B) ?":F=0:RESUME8110 8110 PRINTCHR$(11CHR$(5$; 8120 $=INPUT$(1:IF$="S"GOTO8030ELSEIF$="B"GOTO8000ELSEIF$="C"ANDF=1 ;A$=CALC$:GOTO8020ELSE8120
Resumiendo: Con un poco de imaginacin se pueden crear caracteres que se adecuen a nuestras necesidades con relativa facilidad.
ANEXO I - GUA
68
programas ms
69
Para no tener que llevar la cuenta de los datos introducidos, usaremos el Function Memory (Funcin de Almacenamiento de frmulas). De este modo tendremos que introducir x lneas con los datos de Function Memory en el P9. Conviene vaciar el P9 totalmente, aunque no sera necesario. El programa de ejecucin normal sera: (el nmero de las lneas puede ser el que se desee).
4000 4001 4010 4015 4020 4030 4040 4050 REM Pasa programa de libreria a P9 CLS DEFSEG=0:P=PEEK1712+256*PEEK1713:I=PEEKP+256*PEE K(P+1:F=PEEK(P+3)+256*PEEK(P+4 CLS:PRINT"Numero de libreria ?"TAB(0;:INPUT@5;R$ CLS:DEFSEG=5*4096:FORD=63413TO2^16STEP15:S$=" FORN=D TOD-1+LEN(R$:S$=S$+CHR$(PEEKN:NEXT CLS:PRINTD-7;S$;:IFR$<>S$;NEXT:END CLS:D=D-7:A=PEEKD+256*PEEK(D+1:B=PEEK(D+3)+256* PEEK(D+4:IFB-A>FI;CALC$="DATA":FORN=1TO200:CALC$= CALC$+"J":NEXT:PRINT"Hay que introducir en P9"(B-A-F+I)\ 204+1TAB(0"veces la linea de OUT":END PRINT"Pasando"B-A"bytes";TAB(0; C=4096*PEEK(D+2:FORN=0TOB-A:DEFSEG=C:B=PEEK(A+N: DEFSEG=0:POKEI+N,B:PRINTCHR$(5N;:NEXT BEEP:CLS:END
Explicacin: En la lnea 4010 obtenemos el inicio y el final del P9, mirando en la tabla de punteros de programas (ver captulo Tabla de Punteros).
ANEXO I - GUA
70
La lnea 4015 es la de introduccin de la librera que deseamos pasar. Las siguientes hasta la 4040 son para comprobar la existencia de la librera. Busca en la tabla de punteros de librera, segmento 5 de memoria y mira en la tabla el numero de librera (ver captulo Localizacin de Libreras). Si existe contina, si no existe termina el programa. En la lnea 4050 llena el Function Memory con el comando DATA JJJJJJJJJJJJ. (J es un valor arbitrario). Indica al usuario que debe introducir x veces el valor de la Function Memory en el P9. Una vez hecho esto, cambiaremos al programa P9, y en BASIC editaremos las x lneas de la forma siguiente: Entraremos en el modo EDIT e introduciremos un nmero de lnea y a continuacin pulsaremos la tecla OUT y despus EXE. Conviene introducir los nmeros de lnea consecutivos para mayor claridad (Ej.- Nmeros de lneas 1,2,3,4.x) Una vez terminado este proceso volvemos de nuevo al programa nuestro y lo volvemos a ejecutar. Si el proceso anterior ha sido realizado correctamente el programa ir a las lneas finales, trasladando byte a byte el programa de la librera al P9.
ANEXO I - GUA
71
Estos procesos son bastante lentos debido a la propia velocidad del microprocesador de la calculadora y por la interaccin del usuario. Para reducir el tiempo de interaccin del usuario (editando el P9) est el siguiente programa que trabaja de una manera automtica. Est basado en el programa anterior, pero realizando las tareas de edicin usando llamadas a sistema (con lo que nos evitamos el engorro de la edicin).
10 999 1000 1140 1150 1160 2999 3000 3005 3010 3020 4000 4010 4015 4020 4030 4040 4050 CCAL$=CALC$:PRI=1:GOTO 4000 REM Insertar una linea en el P9 (llamada a Sistema MODE31) m$="9" GOSUB 1150 DEFSEG=0:PE=PEEK1685+256*PEEK1686:POKEPE+5,215: POKEPE+6,26:POKEPE+7,4:POKE1608,0:POKE1609,3:RETURN RETURN REM Pasar CALC$ al Buffer VALF (llamada a sistema MODE33) a=1024:b=768:c=LEN(CALC$):GOSUB 3005 GOSUB 3020:RESUME3010 RETURN DEFSEG=0:ONERRORGOTO 3020:POKE1759,92:POKE1760,27: POKE1761,4:f=a-1:e=c+f:o=b+c-1:jcsoft CLS:REM Pasa programa de libreria a P9 DEFSEG=0:P=PEEK1712+256*PEEK1713:I=PEEKP+256*PEEK (P+1:F=PEEK(P+3)+256*PEEK(P+4 IFPRI;CLS:PRINT"Numero de libreria ?"TAB(0;:INPUT@5;R$:PRI=0 CLS:DEFSEG=5*4096:FORD=63413TO2^16STEP15:S$=" FORN=D TOD-1+LEN(R$:S$=S$+CHR$(PEEKN:NEXT CLS:PRINTD-7;S$;:IFR$<>S$;NEXT:END CLS:D=D7:A=PEEKD+256*PEEK(D+1:B=PEEK(D+3)+256*PEEK
ANEXO I - GUA
72
(D+4:IFB-A>FI;CALC$="DATA":FORN=1TO200:CALC$=CALC$+ "J":NEXT:PRINT"Introduciendo en P9"(B-A-F+I)\204+1TAB(0" veces la linea de OUT";:in=(B-A-F+I)\204+1:GOTO 5000 PRINT"Pasando"B-A"bytes";TAB(0;:ONERRORGOTO 4060 C=4096*PEEK(D+2:FORN=0TOB-A:DEFSEG=C:B=PEEK(A+N: DEFSEG=0:POKEI+N,B:PRINTCHR$(5N;:NEXT BEEP:CLS:CALC$=CCAL$:END FOR R=1 TO in:AA$=CALC$:CALC$=STR$(R)+" "+CALC$: GOSUB 3000:GOSUB1000:CALC$=AA$:NEXTR GOTO 4000
Explicacin: Es vlido todo lo citado para el programa anterior menos en lo referente a la edicin. El proceso automtico seguido es el de llenar la variable CALC$ de Function Memory con el nmero de lnea y moverlo a la direccin 768 de la memoria (donde se encuentra el Buffer de la funcin VALF) usando la llamada a sistema MODE33 (ver captulo Llamadas de Sistema). Una vez hecho esto introducimos la lnea en el P9 con la llamada al sistema MODE31. Una vez terminado se pasar byte a byte la librera al P9.
ANEXO I - GUA
73
ANEXO I - GUA
74
10
ANEXO I - GUA
75
ELIMINAR CONTRASEA
A veces el uso de una contrasea entraa el riesgo de que sta permanezca en el olvido. La contrasea se almacena en la RAM como una cadena ASCIIZ de 8 bytes, es decir, una cadena de texto de 8 bytes ms el byte cero. El mtodo de eliminacin de la contrasea es de lo ms simple. Lo primero que hay que hacer es localizar la direccin de memoria donde se aloja la misma. Lo segundo es llenar el primer byte de esa direccin con el carcter cero. Para el primer paso en el captulo Tabla de Punteros podemos conocer la direccin donde se aloja la contrasea. Esta direccin es la 1867. Basta usar la instruccin POKE1867,0 y la contrasea estar eliminada. As de simple.
ANEXO I - GUA
76
ANEXO I - GUA
77
MEMO P9 P8 P7 P6 P5 P4 P3 P2 P1 P0
15 bytes
INICIO
B L
FINAL
B L
8 0
32
32
32
32
32
32
ANEXO I - GUA
78
Un ejemplo de programa para conocer la longitud de los programas podra ser el siguiente: Nota: No leemos la informacin de BL, ya que el segmento est en la RAM (DEFSEG=0). Si quisiramos hacer lo mismo con las libreras tendramos que usar DEFSEG=4*4096 o DEFSEG=5*4096.
10 20 30 40 50 CLEAR:DEFSEG=0:GOSUB100:P=PEEK1712+256*PEEK1713+DESP I=PEEKP+256*PEEK(P+1 F=PEEK(P+3)+256*PEEK(P+4 IFR;R$="MEMO"ELSER$="P"+P$ CLS:PRINT"Longitud: Fisica="F-I;TAB(8": Logica="F-I-1" bytes";:LOCATE2,1:PRINTR$: 100 GOTO10 CLS:PRINTCHR$(9"Longitud de programas"TAB(0"(M)EMO /N. PROGRAMA ?";: 110 120 130 140 150 INPUT@2;P$ PP=VAL(P$ IFP$="M";DESP=-15:R=1:RETURN IFPP<0ORPP>9GOTO100 IFASC(P$>57ORASC(P$<48GOTO100 DESP=15*(15-(PP+6:RETURN
ANEXO I - GUA
79
16 conectores
14 conectores
1
SPI W/R CS2 CS AD8 AD9 AD11 OE AD10 CS1 ID8 ID7 ID6 ID5 ID3 ID4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 /2
Read/Write Chip Select 2 Chip Select Direccin 8 Direccin 9 Direccin 11 Output Enable Direccin 10 Chip Select 1 Datos 8 Datos 7 Datos 6 Datos 5 Datos 3 Datos 4
VPP VPP CS3 AD12 AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 ID1 ID2 Vss Vss
Alimentacin Alimentacin Chip Select 3 Direccin 12 Direccin 7 Direccin 6 Direccin 5 Direccin 4 Direccin 3 Direccin 2 Direccin 1 Direccin 1 Datos 1 Datos 2 0 Voltios (Masa) 0 Voltios (Masa)
ANEXO I - GUA
80
CONECTOR DE PERIFRICOS
El esquema de conexin es el siguiente :
1 2
1 2 3 4 5 6 7 8 9
10 11 12 13 14
+5 V
BUSY. Impresora BUSY. Impresora preparada para recibir preparada para recibir datos datos
3 4 5
Entrada LOAD/RS 232C PSTB. Peticin de impresora. (Print Strobe) Control REM Cassette. =0 cassette en marcha Calculadora ON/OFF =0 Calculadora encendida IO5 IO6 IO7 IO8 AD1 bit 1 cursor OE 2 pasos a cero por
A cero al abrirse un canal de RS 232 C Salida SAVE/RS 232C IO4 IO3 IO2 IO1 bit 0 cursor AD0 bit 2 cursor AD2 RD/W R
6 7 8 9
10 11 12 13 14
15 15 GND 0V El conector de perifricos de la calculadora no es un cada carcter a impresora conector estndar. La marca CASIO tiene su propia interfaz
ANEXO I - GUA
81
de transmisin de datos y no est muy por la labor de vender conectores sueltos. Es un conector de 30 patillas (15 arriba - 15 abajo de forma totalmente paralelas). Las seales de este conector son niveles TTL de 0 a 5V frente a las de un conector RS-232. Sirve tanto para la comunicacin serie como para sacar datos a la impresora.
ANEXO I - GUA
82
ndice
INTRODUCCIN.........................................................................................................................................1 DIRECCIONAMIENTO DE LA MEMORIA RAM....................................................................................3 TABLA DE PUNTEROS..............................................................................................................................6 ALMACENAMIENTO DE VARIABLES Y PUNTEROS..........................................................................8 LISTADO DE LA MEMORIA ROM.........................................................................................................16 LOCALIZACIN DE LA BIBLIOTECA (LIBRERIAS).........................................................................19 LIBRERAS NO DOCUMENTADAS........................................................................................................25 LLAMADAS DE SISTEMA: MODOS ESPECIALES.............................................................................31 ESTRUCTURA INTERNA DE PROGRAMAS Y MEMO.......................................................................41 CODIFICACIN DE LOS COMANDOS BASIC.....................................................................................44 COMANDOS NUEVOS..............................................................................................................................55 CDIGOS DE TECLAS ESPECIALES.....................................................................................................60 OPTIMIZACIN DE CARACTERES.......................................................................................................61 CAMBIAR CARACTERES ASCII............................................................................................................65 PASO DE UN LIBRERA AL PROGRAMA P9........................................................................................69 ACCESO A LIBRERAS DESDE BASIC.................................................................................................74 ELIMINAR CONTRASEA......................................................................................................................76 OCULTAR EL BANCO DE DATOS(MEMO)..........................................................................................77 LONGITUD DE LOS PROGRAMAS........................................................................................................78 CONECTOR DE LA AMPLIACIN DE RAM (RP-33)...........................................................................80 CONECTOR DE PERIFERICOS...............................................................................................................81
ANEXO I - GUA
83