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.