CODINGAMSTRAD SEMANAL ★ CÓMO CREAR JUEGOS DE CARACTERES DE CUALQUIER TAMAÑO ★

Cómo crear juegos de caracteres de cualquier tamaño
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

Cuando empezamos este curso de Código Máquina, vimos una rutina que nos permitía imprimir cualquier mensaje en pantalla utilizando las rutinas del firmware. Hoy estudiaremos, precisamente, el mismo tema, pero esta vez nos olvidaremos completamente de las rutinas del sistema, creando de esta forma nuestras propias rutinas de impresión de textos en pantalla.

Para ello, lo primero que deberemos hacer será crear nuestro propio juego de caracteres, es decir, crear los gráficos correspondientes a cada letra y a cada número o símbolo que deseemos imprimir.

Otra solución más sencilla que generar nuestros propios gráficos, sería tomar la definición de los caracteres que posee nuestro ordenador, y colocarlos en una posición de memoria determinada.

Ahora bien, lo verdaderamente interesante en el caso de utilizar una rutina de impresión independiente del sistema es que podemos generar definiciones de caracteres de cualquier dimensión.

En el momento de crear nuestros gráficos, deberemos tener en cuenta el modo de pantalla en el que se van a utilizar, ya que los gráficos generados para un determinado modo no serán utilizables en ningún otro modo.

Así pues, si diseñamos nuestro juego de caracteres para modo 1, éstos no servirán ni para modo 0 ni para modo 2.

En nuestro caso hemos preparado seis gráficos correspondientes a los números del cero al cinco. Estos gráficos están preparados para ser imprimidos en modo 2, por lo que no serán válidos para los demás modos.

La causa de haber preparado únicamente estos gráficos es por problemas de espacio, ya que para la definición de cada carácter, son necesarios ocho bytes.

Una vez hecho esto, lo primero que deberemo hacer será confeccionar una rutina que nos permita imprimir en pantalla. En nuestro caso, tomaremos una rutina que ya ha sido explicada en un capítulo anterior de este mismo curso, por lo que no daremos más detalles sobre la misma.

Ya tenemos, pues, las dos condiciones básicas e imprescindibles para imprimir caracteres en pantalla sin la utilización de las rutinas del sistema, veamos pues cómo deberemos proceder para conseguir escribir textos en la pantalla de nuestro ordenador.

Como la mayoría de las rutinas que hemos visto, ésta necesitará también de unos parámetros iniciales, y dado que se trata de una rutina de impresión de caracteres, estos datos iniciales deberán ser, cómo no, las coordenadas de pantalla y la dirección del texto a imprimir.

Estos parámetros iniciales deberemos introducirlos en las variables o registros que indicamos a continuación:

Posición en pantalla.....Variable Posic

Dirección del texto ......Registro HL

Una vez definidas estas condiciones iniciales, se entra en un bucle en el que se van leyendo los caracteres que componen el texto, y se envían a la rutina de impresión esta operación se repite hasta que encontramos el valor 255, que indicará el final del texto.

Así pues, después de cada cadena que deseemos imprimir, deberemos colocar el indicador de fin de texto para que nuestra rutina deje de imprimir.

Esta rutina quedaría de la siguiente forma escrita en lenguaje Ensamblador:

CARAC: LD A,(HL) Tomamos el valor
CP 255 ; Comparamos con 255
RET Z ; Retorna si es 255
PUSH HL ; Preservamos el registro HL
CALL PRINT ; Llamamos a impresión
POP HL ; Recuperamos HL
INC HL ; Incrementamos el puntero
JR CARAC ; Se repite el proceso

Seguidamente nos encontramos con la rutina encargada de calcular los parámetros iniciales necesarios con los que se debe llamar a la rutina de impresión en pantalla, es decir, la dirección del gráfico a imprimir y su posición.

Esta rutina permite crear caracteres de diferentes tamaños que darán una mejor presentación a nuestros programas

Dado que nuestro texto lo introducimos mediante los códigos ASCII de los caracteres que deseamos imprimir, deberemos amoldar los valores de los caracteres a la forma en que los hayamos almacenado en memoria.

En nuestro caso, dado que el primer carácter que hemos definido en memoria es el «0», cuyo código ASCII es el 48, lo primero que deberemos hacer será restarle a cada código enviado el valor 47, para que de esta forma el primer gráfico definido (el 0) corresponda al código número 1.

En el caso de que deseáramos definir las letras mayúsculas, entonces deberíamos restar al código de cada carácter el valor 64, ya que el código ASCII de la letra A es el 65.

Una vez acoplado el código de cada carácter, de forma que sea distinguible por nuestra rutina, deberemos comprobar que dicho valor no se encuentre fuera de los límites que nosotros hemos previsto.

Así pues, si nosotros hemos definido únicamente 10 caracteres, deberemos chequear que el código que se envíe no sea mayor de 10 ni menor de 1 una vez modificado, ya que de lo contrario no se encontraría en memoria.

Esto lo podemos hacer de la forma que indicamos a continuación:

SUB 47 ; Se corrige el valor ASCII
CP 0
RET Z ; Se retorna si no está dentro del límite establecido
CP 7
RET NC ; Se retorna si es mayor que el número de caracteres definidos

Una vez realizadas estas modificaciones y comprobaciones, pasaremos a calcular la dirección del gráfico en memoria a partir del nuevo código calculado.

Así pues, cargaremos el registro doble HL con la dirección donde empiezan los gráficos menos ocho, ya que cada uno de los gráficos ocupa ocho bytes.

Por tanto, para calcular la dirección del gráfico deseado deberemos sumar ocho bytes el número de veces que indique el código del carácter.

Para lo cual cargaremos el registro DE con dicho valor, y se lo sumaremos al registro HL el número de veces que indique el valor correspondiente al carácter.

Esto lo haremos mediante un bucle utilizando el registro B de la forma que se indica a continuación:

LD HL, NUMERS-8
LD DE,8
LD B,A
BUC: ADD HL,DE
DJNZ BUC

En este momento tenemos la dirección del gráfico a imprimir en el registro HL, pero para llamar a nuestra rutina de impresión, dicha dirección deberá estar contenida en el registro DE, para ello deberemos hacer:

EX DE,HL

Seguidamente deberemos cargar en el registro HL, las coordenadas de impresión en pantalla, para lo cual cargaremos dicho registro con el valor que indique la variable Posic.

En este momento estamos en condiciones de llamar a nuestra propia rutina de impresión, que se encargaría de imprimir el carácter deseado en pantalla, pero antes de hacerlo preservaremos el registro HL, conteniendo la posición de impresión.

PUSH HL
CALL IMPRE

Cuando se retorne de la rutina de impresión, recuperaremos el contenido de HL, e incrementaremos la coordenada horizontal para que el próximo carácter a imprimir se sitúe a continuación de éste.

Una vez hecho, colocaremos este nuevo valor en la variable Posic, en la cual se almacenarán dichas coordenadas.

POP HL
INC L
LD (POSIC),HL
RET

Debemos decir, por último, que nuestra rutina de impresión está preparada en este momento para imprimir caracteres de un byte de ancho por ocho de alto, pero se puede utilizar para cualquier otra dimensión de gráfico haciendo unas pequeñas modificaciones.

Si, por ejemplo, hubiéramos definido caracteres de dos bytes de ancho por ocho de alto, deberíamos cargar en el registro HL la dirección de los gráficos menos 16, que es la longitud de cada gráfico; asimismo, cargaríamos DE con dicho valor.

También deberíamos tener en cuenta que ahora tendríamos que incrementar la coordenada horizontal en dos cada vez que se imprimiese un carácter.

Por último, deberíamos modificar los valores con los que se carga la altura y anchura de los gráficos en la rutina de impresión propiamente dicha, y que ya se ha explicado en algún capítulo anterior.

AS

★ PUBLISHERS: Hobby Press , Amstrad Semanal
★ YEAR: 1987
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: AMSTRAD SEMANAL 1987
★ AUTOR: Alberto SUÑER
 



★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
 » Como  crear  juegos  de  caracteres  de  cualquier  tamano    (Amstrad  Semanal)    SPANISH    LISTINGDATE: 2026-07-05
DL: 1
TYPE: PDF
SiZE: 612Ko
NOTE: Supplied by archive.org ; 2 pages/PDFlib v1.6

Je participe au site:
» Pour ce titre nous ne disposons de fichier executable sur CPC (Dump, Saisie du listing) , alors si vous avez ça dans vos cartons ou vous désirez usé vos petit doigts boudinés sur votre clavier faites le nous savoir.
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.732-desktop/c
Page créée en 221 millisecondes et consultée 19 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.