022:utilidade

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
022:utilidade [d/m/Y H:i] – [Cómo se utiliza] miguel022:utilidade [d/m/Y H:i] (actual) – [Cómo se utiliza] miguel
Línea 22: Línea 22:
  
 Los «puristas» podrían objetar que con un solo juego sería suficiente, ya que el otro se podría obtener con simple rotación de las posiciones de memoria correspondientes; pero esto implicaría una mayor complejidad de la rutina en CM y una menor velocidad de ejecución. Los «puristas» podrían objetar que con un solo juego sería suficiente, ya que el otro se podría obtener con simple rotación de las posiciones de memoria correspondientes; pero esto implicaría una mayor complejidad de la rutina en CM y una menor velocidad de ejecución.
 +
 +{{ :022:utilidades_02.jpg|Estructura de la «a» minúscula en el juego de caracteres standar de la ROM del Spectrum.}}
  
 El método empleado es el siguiente: primero, abrimos el canal 2 (Pantalla superior), luego fijamos la posición de impresión (que viene dada por dos variables previamente almacenadas en el Buffer de impresora), a continuación, direccionamos el primer juego de caracteres (alterando los valores de la variable del sistema CHARS) y llamamos a la rutina de la ROM que nos permite imprimir un caracter (RST 10H). Seguidamente, retrocedemos una posición de caracter, direccionamos el segundo juego, e imprimimos el segundo caracter de nuestro mensaje, los dos se imprimirán en el mismo cuadrito («posición de caracter»), luego volvemos a direccionar el primer juego para imprimir el tercer caracter, y así sucesivamente hasta encontrar el código 255 que nos indica final de mensaje. Los códigos de los caracteres que componen el mensaje los vamos leyendo del Buffer de impresora donde habrán sido previamente almacenados por una pequeña rutina Basic que, al igual que en la impresión de rótulos de la cinta «Horizontes», sirve para dar entrada a la rutina en CM. Como se verá, los caracteres impares se imprimirán a la izquierda de cada «posición de caracter», utilizando el primer juego de caracteres, y los pares se imprimirán a la derecha, utilizando el segundo juego. Por ello, será necesario hacer OVER 1 antes de llamar a la rutina de impresión ya que si no al imprimirse los caracteres pares se borrarían los impares. El método empleado es el siguiente: primero, abrimos el canal 2 (Pantalla superior), luego fijamos la posición de impresión (que viene dada por dos variables previamente almacenadas en el Buffer de impresora), a continuación, direccionamos el primer juego de caracteres (alterando los valores de la variable del sistema CHARS) y llamamos a la rutina de la ROM que nos permite imprimir un caracter (RST 10H). Seguidamente, retrocedemos una posición de caracter, direccionamos el segundo juego, e imprimimos el segundo caracter de nuestro mensaje, los dos se imprimirán en el mismo cuadrito («posición de caracter»), luego volvemos a direccionar el primer juego para imprimir el tercer caracter, y así sucesivamente hasta encontrar el código 255 que nos indica final de mensaje. Los códigos de los caracteres que componen el mensaje los vamos leyendo del Buffer de impresora donde habrán sido previamente almacenados por una pequeña rutina Basic que, al igual que en la impresión de rótulos de la cinta «Horizontes», sirve para dar entrada a la rutina en CM. Como se verá, los caracteres impares se imprimirán a la izquierda de cada «posición de caracter», utilizando el primer juego de caracteres, y los pares se imprimirán a la derecha, utilizando el segundo juego. Por ello, será necesario hacer OVER 1 antes de llamar a la rutina de impresión ya que si no al imprimirse los caracteres pares se borrarían los impares.
  
 ==== Cómo cargar la rutina en Código Máquina ==== ==== Cómo cargar la rutina en Código Máquina ====
 +
 +{{ :022:utilidades_03.jpg|La «a» del primer juego de caracteres ocupa la parte izquierda de un caracter.}}
  
 El programa 1 es un cargador escrito en Basic que se encarga de almacenar en memoria tanto la rutina de impresión en CM como el juego de caracteres por duplicado bajando, asimismo, la RAMTOP para protegerlo. Tanto el programa en CM como los juegos de caracteres, se almacenan en posiciones de memoria distintas según se trate de la versión de 16 K o 48 K, pero no se preocupe por ello, ya que el programa 1 lo hace de forma automática chequeando la PRAMT. Si corre en una versión de 48 K, todo se almacenará a partir de la dirección 62642 dejando los 1.110 bytes superiores libres para las interfaces de impresora que los utilizan; por el contrario, si se trata de una versión de 16 K, todo se almacenará a partir de la dirección 30984 y se corregirán de forma automática los cuatro bytes de la rutina CM que direccionan los juegos de caracteres. El programa 1 es un cargador escrito en Basic que se encarga de almacenar en memoria tanto la rutina de impresión en CM como el juego de caracteres por duplicado bajando, asimismo, la RAMTOP para protegerlo. Tanto el programa en CM como los juegos de caracteres, se almacenan en posiciones de memoria distintas según se trate de la versión de 16 K o 48 K, pero no se preocupe por ello, ya que el programa 1 lo hace de forma automática chequeando la PRAMT. Si corre en una versión de 48 K, todo se almacenará a partir de la dirección 62642 dejando los 1.110 bytes superiores libres para las interfaces de impresora que los utilizan; por el contrario, si se trata de una versión de 16 K, todo se almacenará a partir de la dirección 30984 y se corregirán de forma automática los cuatro bytes de la rutina CM que direccionan los juegos de caracteres.
Línea 32: Línea 36:
  
 ==== Cómo se utiliza ==== ==== Cómo se utiliza ====
 +
 +{{ :022:utilidades_04.jpg|El segundo juego está desplazado a la derecha para conseguir situar en un solo caracter dos teclas.}}
  
 Incluya en sus programas la línea 9900 del listado del programa 1 y, donde pone LET w = USR (62642 -31658 * (v = 1)), cámbielo por: LET w = USR 62642 si su versión es de 48 K y por: LET w = USR 30984 si su versión es de 16 K. La primera línea de su programa deberá ser: Incluya en sus programas la línea 9900 del listado del programa 1 y, donde pone LET w = USR (62642 -31658 * (v = 1)), cámbielo por: LET w = USR 62642 si su versión es de 48 K y por: LET w = USR 30984 si su versión es de 16 K. La primera línea de su programa deberá ser:
Línea 50: Línea 56:
  
 Para los curiosos del Código Máquina, incluimos en la figura 1, el listado en Assembler de la rutina de impresión. Para los curiosos del Código Máquina, incluimos en la figura 1, el listado en Assembler de la rutina de impresión.
- 
-IMAGEN ---Estructura de la «a» minúscula en el juego de caracteres standar de la ROM del Spectrum. 
- 
-IMAGEN ---La «a» del primer juego de caracteres ocupa la parte izquierda de un caracter. 
- 
-IMAGEN ---El segundo juego está desplazado a la derecha para conseguir situar en un solo caracter dos teclas. 
- 
 ==== Desensamble de la rutina ==== ==== Desensamble de la rutina ====
  
  • 022/utilidade.1299784613.txt.gz
  • Última modificación: d/m/Y H:i
  • por miguel