Ayuda: Varios juegos de caracteres en VRAM

By Warchild

Paragon (1264)

Warchild's picture

01-06-2017, 21:00

Buenas, quisiera saber en Screen 4 cómo puedo tener varios juegos de caracteres guardados en VRAM y cambiar de uno a otro... una ayudita que no me aclaro... Question

Login or register to post comments

By Oniric-Factor

Expert (72)

Oniric-Factor's picture

02-06-2017, 12:02

Que yo sepa solo puedes tener tres, uno por banco. Aunque claro un msx 2 trae bastante más memoria que un msx 1. Supongo que puedes hacer un bload"",s o un copy con los datos de patrón y meterlos en alguna sección no usada y así tenerlos "en reserva". Interesante pregunta.

By Warchild

Paragon (1264)

Warchild's picture

03-06-2017, 02:12

Esa es la idea, ponerlos en una zona de la VRAM e ir cambiando de unos a otros. Pero no parece que se pueda hacer lo que pensaba, aunque siga sin aclararme. Sí alguien me pudiera explicar lo que dice este texto de la wiki donde hace referencia a Screen 2/4 se lo agradecería:

Control Register 4
This control register is common to all MSX generations and can be read/written with the MSX-BASIC instruction VDP(), using the value 4. It defines the base address of the Pattern Table.

On MSX1, value of bits 7 to 3 is always 0. Bits 2 to 0 give the base address for SCREEN 1, 3 and 0, width 1-40: the Pattern Table base address is equal to (Register 4) x 2048.

On MSX2/2+, value of bits 7 and 6 is always 0. Bits 5 to 0 give the base address for all concerned SCREENs, except 2 and 4.

For SCREEN 2 and 4, value of bits 1 and 0 is always 1. The base address is defined by bits 5 to 2 (only bit 2 on MSX1 for SCREEN 2)

By santiontanon

Paladin (688)

santiontanon's picture

03-06-2017, 06:43

Yo Screen 4 nunca lo he tocado, pq todo lo que hago es en MSX1, pero en Screen 2 es similar. Por defecto en Screen 2 y 4 las tablas de patrones están en las direcciones de memoria de video #0000 - #17FF (aquí hay 3 bancos de patrones, el primero de #0000 a #07FF, el segundo de #0800 a 0FFF, y el tercero de #1000 a #17FF). Pero eso se puede cambiar poniendo diferentes valores en el registro R#4. O sea que puedes copiar varias tablas de patrones más en la memoria de video, y luego cambiar de unas a otras cambiando el registro R#4 (que determina cual es la dirección de inicio de las tablas de patrones).

By Oniric-Factor

Expert (72)

Oniric-Factor's picture

11-06-2017, 23:03

Supongo que todo es cuestión de ver cuál es la última posición ocupada por la estructura documentada del sc4 y hacer el bload"",s después de esas direcciones, entendiendo que a partir de esa posición aún queda memoria disponible, aunque no esté documentada. Después es cuestión de cambiar el registro de marras para que apunte ahí.

By Warchild

Paragon (1264)

Warchild's picture

12-06-2017, 00:20

Posicionar los datos no es problema, es lo de "cambiar el registro de marras para que apunte ahí"... En el registro se usan 4 bits para indicar la dirección, así que en teoría se puede apuntar a 16 direcciones. Pero no llego a más, no sé a qué dirección apuntaría cada valor.

By santiontanon

Paladin (688)

santiontanon's picture

12-06-2017, 17:53

La dirección es el valor del registro 4 multiplicado por #800 (ignorando los bits 0 y 1), que es 2048, como dice el manual arriba que citas. Algunos ejemplos:

R4 = zz0000xx -> esto sería la dirección #000000*#800 = #00000
R4 = zz0001xx -> esto sería la dirección #000100*#800 = #02000
R4 = zz0011xx -> esto sería la dirección #001100*#800 = #06000
R4 = zz1000xx -> esto sería la dirección #100000*#800 = #10000

(donde los bits que he marcado con "x" siempre tienen que estar a "1" y los que he marcado con "z" siempre tienen que estar a "0").

By jrcp_kun

Paragon (1383)

jrcp_kun's picture

21-06-2017, 18:46

cuadon lo tengas por un ejemplo en asm para ver como funciona

By mohai

Paladin (754)

mohai's picture

27-12-2017, 17:52

Hola,
Mira, yo estuve haciendo unas pruebas hace tiempo y me preguntaba más o menos lo que tú:
¿Cómo se podría hacer un SET PAGE para SCREEN 4?
Te cuento la solución a groso modo, porque no tengo aquí los apuntes ni el código que hice en su día para ello:
Para escribir en una página u otra, se usa el registro de paginación del VDP, para elegir en que banco de 16 KB escribir.
Para mostrar una página u otra, basta cambiar sólo 2 registros: El puntero de la tabla de color y el puntero del generador de caracteres.
Puedes hacer pruebas muy fáciles en BASIC, VPOKEando en direcciones controladas y luego jugando con los registros del VDP. darás con ello en un momento.

My MSX profile