013:programas-microhobby

¡Esta es una revisión vieja del documento!


Microhobby 13. Año II, del 29 de enero al 04 de febrero de 1985

Para el tratamiento de textos en el Spectrum

Jesús Alonso Rodríguez

Una de las aplicaciones más interesantes de los ordenadores domésticos es el tratamiento de textos; y si hay un ordenador especialmente poco idóneo para esta aplicación, es sin duda el Spectrum; el teclado es lento, trabaja con sólo 32 columnas, y por si fuera poco, el BASIC interpretado es un lenguaje demasiado lento para las tareas que ha de llevar a cabo un editor de textos.

En primer lugar, hay que conseguir aumentar el número de columnas en pantalla, para lo cual se genera un nuevo juego de caracteres que permite 64 columnas de impresión; a continuación se diseñan algunas rutinas en código máquina para desarrollar tareas en las que el BASIC resulta lento, tales como transferencia de bloques, impresión de pantallas, etc.; y finalmente se escribe el resto del programa en BASIC. El resultado es el Editor de textos que presentamos aquí con el título de EDITEXT.

Composición del programa

El programa tiene dos partes fundamentales; la primera es un editor de página en curso o página cero, que incorpora una serie de facilidades tales como tabulación, párrafo adentrado, borrado de caracteres, ajuste automático de línea, caracteres españoles, acentuado de vocales, etc.

La segunda parte del programa la componen una serie de rutinas que permiten almacenar en memoria hasta 21 páginas de texto, leer las páginas almacenadas, pasarlas a impresora, o almacenarlas en cintas de cassette. Para todo esto se utilizan cinco rutinas en código máquina; la primera no es preciso comentarla ya que es ampliamente conocida por todos los usuarios del Spectrum; de las restantes se acompaña el listado assembler con un gran número de comentarios que permitirán al lector entender su funcionamiento.

El manejo del Editor no es complicado, después de la «carátula» aparece una página de instrucciones que recuerda los distintos comandos del editor de página en curso, aunque es más sencillo colocar sobre el teclado una plantilla como la que se adjunta. Las instrucciones están escritas sobre la página cero, por lo que se borran al utilizar el editor; no obstante, si desea guardarlas, siempre puede transferir la página en curso a la página 21 utilizando la opción 2 (observe la velocidad con que realiza la transferencia, 20 milisegundos); por lo demás, programa tiene la buena costumbre de indicar lo que va haciendo y pedir los datos que necesite.

La zona de ajuste corresponde a los últimos caracteres de la línea, se puede fijar entre uno y ocho, o cero si no se desea ajuste automático, el programa emite una nota aguda para indicar que ha entrado en zona de ajuste, y que por tanto, la pulsación de un guión (signo «menos») o un espacio, producirá un salto automático a nueva línea; CAPS SHIFT + 2 fija y libera las mayúsculas; CAPS SHIFT + 0 borra el último carácter de la línea en curso; SIMBOL SHIFT + 2 genera la ñ minúscula; SIMBOL SHIFT + 6 genera la Ñ mayúscula; ENTER salta a nueva línea; y CAPS SHIFT + SIMBOL SHIFT pasan a modo extendido.

Al situarse el teclado en modo extendido aparece la palabra EXT en el ángulo inferior derecho de la pantalla; en este modo puede usarse el fabulador, el párrafo adentrado, el final de página, y las vocales acentuadas.

Manejo del tabulador

Para usar el tabulador habrá primero que fijar los topes de tabulación; pase a modo extendido y pulse la tecla «1»; se encuentra ahora en rutina de tabulado, ahora lleve el cursor hasta el primer punto que desee tabular utilizando la tecla espaciadora; para fijar la tabulación pulse «T»; repita hasta un máximo de cuatro topes de tabulación; cuando haya fijado el cuarto se producirá un retorno automático al inicio de línea y saldrá de la rutina de tabulado; si desea fijar menos de cuatro topes pulse ENTER para salir de la rutina de tabulado y retornar al modo normal; es posible que su trabajo habitual le obligue a utilizar más de cuatro topes de tabulado. Esperamos que no encuentre problemas en alterar las líneas 7010, 7070, 7150, 7410, 7430 y 8020; el array «t(4)» almacena los topes de tabulación entre 0 y 63, y la variable «ct» los subíndices del array «t(4)»); una vez fijados los topes de tabulación cada vez que pulse «T» en modo extendido, desplazará el cursor hasta el siguiente tope de tabulación; para borrar los topes pulse «9» en modo extendido.

Margen adentrado

Si desea utilizar un margen izquierdo adentrado para un párrafo, coloque el cursor sobre el inicio del párrafo, pase a modo extendido y pulse «P»; ahora siga escribiendo normalmente; cada vez que pulse ENTER el cursor se situará en la columna donde estaba cuando pulsó «P», generando así un párrafo adentrado; para volver al margen izquierdo normal pase a modo extendido y pulse «B», que borrará el párrafo adentrado.

Para terminar la página pase a modo extendido y pulse «ENTER».

Si desea acentuar una vocal, púlsela en modo extendido, con lo que conseguirá la vocal acentuada.

Con el fin de aprovechar al máximo la memoria hemos omitido las sentencias REM, por lo que se adjunta un mapa de las distintas rutinas sobre el programa en BASIC, así como un mapa total de distribución de la memoria.

RUTINA PARA IMPRIMIR LA PAGINA CERO EN PANTALLA NOMBRE: C.M. (1.a parte). LONGITUD: 90 Bytes. ENTRADAS: Ninguna. DIRECCION DE ARRANQUE: 32595 d. SALIDAS: Texto de Pág. cero DIRECCION DE INICIO: 32589 d. a pantalla. TIEMPO DE EJECUCION: 1 seg. Código Direcc. Máquina Listado Assembler 32589 62/13 010 LB7 LD A,0D ;Carga Código ENTER 32591 215 020 RST10 ;Haz nueva línea 32592 35 030 INC HL ¡Incrementa puntero 32593 24,8 040 JR LB1 ¡Salta a LB1 32595 62,2 050 LD A,2 ¡Abre canal 32597 205,1,22 060 CALL1601 ¡número 2 32600 33,194,133 070 LD HL.85C2 ¡Inicializa puntero 32603 62,194 080 LB1 LD A,194 ¡Direcciona 32605 50,54,92 090 LD (5C36),A ¡primer 32608 62,126 100 LD A,126 ¡juego de 32610 50,55,92 110 LD (5C37),A ¡caracteres 32613 126 120 LD A,(HL) ¡Carga carácter 32614 254,255 130 CP FF ¡Si es 255 32616 40,60 140 JR Z,LB6 ¡salta a LB6 32618 126 150 LD A,(HL) ¡Carga carácter 32619 254,13 160 CP 0D ¡Si es 13 32621 40,222 170 JR Z,LB7 ¡salta a LB7 32623 126 180 LD A,(HL) ¡Carga carácter 32624 246,0 190 OR 0 ¡Si es cero 32626 40,42 200 JR Z,LB4 ¡salta a LB4 32628 215 210 LB2 RST 10 ¡Imprime carácter 32629 62,8 220 LD A,8 ¡Retrocede 32631 215 230 RST 10 ¡cursor 32632 35 240 INC HL ¡Incrementa puntero 32633 62,129 250 LD A,129 ¡Direcciona segundo 32635 50,55,92 260 LD (5C37) ¡juego de caracteres 32638 126 270 LD A,(HL) ¡Carga carácter 32639 254,255 280 CP FF ¡Si es 255 32641 40,35 290 JR Z,LB6 ¡salta a LB6 32643 126 300 LD A,(HL) ¡Carga carácter 32644 254,13 310 CP 0D ¡Si es 13 32646 40,197 320 JR Z,LB7 ¡salta a LB7 32648 126 330 LD A,(HL) ¡Carga carácter 32649 246,0 340 OR 0 ¡Si es cero 32651 40,21 350 JR Z,LB5 ¡salta a LB5 32653 215 360 LB3 RST 10 ¡Imprime carácter 32654 35 370 INC HL ¡Incrementa puntero 32655 229 380 PUSH HL ¡Guarda puntero 32656 33,66,139 390 LD HL.8B42 ¡Carga tope puntero 32659 193 400 POP BC ¡Carga puntero 32660 55 410 SCF ¡Acarreo a uno 32661 63 420 CCF ¡Acarrero a cero 32662 237,66 430 SBS HL,BC ¡Si es fin de pág. 32664 40,12 440 JR Z,LB6 ¡salta a LB6 32666 197 450 PUSH BC ¡Restituye 32667 225 460 POP HL ¡puntero 32668 24,189 470 JR LB1 ¡Salta a LB1 32670 62,32 480 LB4 LD A,20 ¡Carga espacio 32672 24,210 490 JR LB2 ¡Salta a LB2 32674 62,32 500 LB5 LD A,20 ¡Carga espacio 32676 24,231 510 JR LB3 ¡Salta a LB3 32678 201 520 LB6 RET ¡Retorna RUTINA PARA TRANSFERIR LA PAGINA CERO A CUALQUIER PAGINA DE ALMACENAMIENTO NOMBRE: C.M. (2.a parte) ENTRADAS: En las direcciones 32680 y 32681 se introduce la dirección de la página de destino (cuando se carga, estos valores quedan inicializados para tomar como destino la página uno). SALIDAS: La página cero es transferida a la página de destino. LONGITUD: 12 Bytes DIRECCION DE ARRANQUE: 32679 DIRECCION DE INICIO: 32679 TIEMPO DE EJECUCION: 20 miliseg. Código Direcc. Máquina Listado Assembler 32679 17,66,139 010 LD DE,8B42 ¡Carga destino 32682 33,194,133 020 LD HL.85C2 ¡Carga origen 32685 1,128,5 030 LD BC,0580 ¡Carga longitud 32688 237,176 040 LDIR ¡Transfiere incrementa y repite 32690 201 050 RET ¡Retorna y repite Mapa de memoria del EDITEXT. CAMPOS DE ENERGIA Francisco LORCA SALAS Spectrum 48 K Para ubicarnos en una central nuclear no hace falta contar con una gran imaginación aunque, en este proarama que veremos a continuación, se encuentre en cualquier espacio interestelar. Así pues, situémonos en esa central nuclear en donde nosotros seremos el guarda. Nuestra misión será la de procurar que los pequeños escapes que se producen, no salgan de las cuatro torres representadas en la pantalla. Si no lo conseguimos, iremos perdiendo un poco de energía con cada escape y, si éste es muy grande, perderemos una vida. A pesar de que disponemos de siete vi- das, las iremos perdiendo, también, cada vez que pulsemos fuego (0) fuera de los extremos rectangulares de la torre o si, en ese momento, no hay ningún escape en ella. La partida finaliza cuando se pierden las siete vidas de que disponemos. Para jugar, existen tres controles: arriba; «1» ó «7»; abajo: «2» ó «6»; fuego: «0».

  • 013/programas-microhobby.1292104129.txt.gz
  • Última modificación: d/m/Y H:i
  • por miguel