HispaMSX

Re: [hispamsx] Dudas de programación

2003-11-30 18:56:01
Bueno, ahora sí que sí, voy a hacer un jueguecillo y estoy totalmente 
entumecido, programáticamente hablando... así que me irán surgiendo 
dudas, la mayoría muy tontas y una mínima parte rozando el ridículo :)

Pues ante la duda, la más... Ah no, que esto no pega aquí. Bueno, siempre al 
principio 
se tienen dudas. Eso sí, antes de empezas a avasallar, intenta siempre 
encontrar una 
respuesta por algún lado, y si no lo consigues, al menos que hayas adquirido la 
suficiente información como para que luego, al escribir el mensaje con tu 
pregunta, se 
note que te has informado. No se trata de que te solucionemos las cosas desde 
cero ;)
 
Me gustaría hacer un conversacional. Mis MSX son de la primera 
generación y estoy un poco pegao en el basic de la segunda. ¿Es 
posible mezclar texto y gráficos en pantalla? Busco algo similar al 
modo VGA 320x200x256 colores, que recuerdo sí podía hacer mezclas 

Bien, en MSX1 sólo podrás conseguir 16 variaciones de color, 15 si no contamos 
el 
transparente. La resolución en screen 2 horizontal es de 256 pixels, mientras 
que la 
vertical es de 192. Luego te queda

256x192x16. Hey! Pero con esto puedes hacer muuuuchas cosas.

A ver. Es posible mezclar gráficos con texto en MSX1, puesto que en realidad, 
el texto 
no deja de ser otro gráfico, o un gráfico no deja de ser un carácter de tipo 
texto con otra 
definición. Hablemos del modo SCREEN 2, perfectamente compatible con los MSX de 
primera generación. En este modo puedes definir una serie de patrones que 
contienen 
información sobre el carácter o gráfico (que en esencia viene a ser lo mismo). 
Supongamos la letra A y el típico patrón 8x8

0 0 1 1 0 0 0
0 1 0 0 1 0 0
1 0 0 0 0 1 0
1 1 1 1 1 1 0
1 0 0 0 0 1 0
1 0 0 0 0 1 0
1 0 0 0 0 1 0
0 0 0 0 0 0 0

Bueno, eso creo que parece ser una A. Si no lo veis bien, igual es problema de 
la 
fuente, pero yo lo veo correctamente con la fuente por defecto que tengo.

Tenemos que para cada caracter, podemos definir su forma con 8 bytes. Para cada 
uno 
de los bytes, existe otro byte aparte con la información del color. El nibble 
más 
significativo (un nibble son cada uno de las partes de 4 bits en las que se 
divide un 
byte, con lo cual existe el alto o más significativo, y el bajo o menos 
significativo), 
contiene el índice al color de la paleta de 16 colores con e que serán pintados 
los bits 
de ese byte que estén a 0. Mientras que el nibble inferior contiene el índice 
al color de 
la paleta con el que serán pintado los bits de ese byte que estén a 1. Esto te 
limita a 
que en una misma linea de un patrón no pueden haber más de 2 colores, aunque 
según 
Armanodo esto no es una limitación, simplemente es así ;).

Así pues, tenemos una tabla de patrones, donde definimos las formas, una tabla 
de 
colores, donde definimos los colores con que se pintarán esos patrones. Lo 
único que 
nos falta es una tabla donde digamos qué patrón concreto va en cada sitio de la 
pantalla, y esto es la tabla de nombres de patrón.

En la tabla de patrones es donde se le dice qué patrón va en una posición 
determinada. 
Por ejemplo: Supongamos que tenemos el patrón del caracter A definido en la 
posición 
100 de la tabla de patrones. Ahora supongamos que queremos poner en la décima 
columna de la segunda fila la letra A. Veamos cómo sería.

Supongamos que la tabla de nombres comienza en TNOMBRES. Teniendo en cuenta 
que cada carácter ocupa 8 pixels de ancho, el número de carácteres total que 
nos cabe 
horizontalmente es de 256/8 = 32 carácteres. El caracter de la fila 0 columna 0 
corresponderá a TNOMBRES + 0, y el de la fila 0 columna 31 corresponderá a 
TNOMBRES + 31. Así pues, el de la fila Y, columna X corresponde a TNOMBRES + 
32*FILA + COLUMNA. En el ejemplo anterior: TNOMBRES + 32*2+10 = TNOMBRES + 
74 iría la letra A, es decir, el valor 100, que es donde se encuentra definido 
el patrón de 
la A.

Pero el screen 2 es aún más complicado que eso. Resulta que no tiene una tabla 
de 
patrones, si no 3, y no tiene una tabla de colores sino 3, y evidentemente no 
tiene una 
tabla de nombres, sino 3. Por qué? Porque digamoos que la pantalla está 
dividida en 3. 
Así, cada zona de la pantalla tiene una tabla de nombres, con lo cual, si en 
una 
posición cualquiera del primer tercio de la pantalla encuentras el valor 100, a 
la hora de 
dibujarlo, el VDP irá a buscar la información en la primera tabla de patrones, 
mientras 
que si ese valor 100 está en la segunda tabla de nombres (segundo tercio de 
pantalla), 
irá a buscarlo en la segunda tabla de patrones. Esto permite que podamos tener 
definidos simultaneamente 256x3 = 768 carácteres!!! Aunque claro, no podremos 
moistrarlos todos a la vez. Es más, si quieres mostrar un mismo carácter en la 
parte de 
arriba y en la de abajo, deberás definirlo tanto en el patrón 0 como en el 2 
(primero y 
tercero).

De todas maneras, yo te aconsejo que definas unos patrones correspondientes a 
las 
letras de abecedario, números y signos de puntuación en el tercer patrón, 
puesto que 
ahí será donde irá el texto. Además puedes definir otros patrones en la misma 
tabla de 
patrones que definan marcos de texto, para hacer más bonita la presentación. 
Los otros 
2 tercios los puedes usar para definir patrones con información gráfica.

cuando programaba en pascal. Si es posible hacerlo, ¿existe algún 
comando en basic del msx2 para definir un ventana de texto, de manera 
que pueda escribir con scroll incluído en la mitad inferior de la 
pantalla? Como en las aventuras conversacionales tradicionales, ya 
sabéis a qué me refiero.

No, no exite ninguno, pero puedes hacerlo tú mismo ;).

Otra solución es hacerla en SCREEN 2, y así que sea compatible con los 
MSX de la primera generación. En este caso, al pasar gráficos con el 
comversor BMP2MSX, creo las imágenes .sc2 pero no sé cómo cargarlas en 
la VRAM, supongo que sera un bload, ¿cierto?

Ten cuidado que cuando cargues el bitmap transformado, esté realizado de tal 
forma 
que te conserve siempre los colores de las letras del texto (blanco y negro 
principalmente), y que el gráfico ocupe solamente los 2 primeros tercios. 
Además, te 
aconsejaría que primero cargaras el gráfico, y después definieras los patrones 
de las 
letras, números y signos de puntuación en el tercer patrón, por si al cargar la 
imagen 
los patrones de la tabla de patrones tercera se sobreescribieran.


Un saludo y gracias :)


Ale! Creo que acabo de perder el significado de la palabra patrón XDDD.

David.



<Anterior en la conversación] Conversación actual [Siguiente en la conversación>