Freescape

By mohai

Paladin (1007)

Аватар пользователя mohai

24-01-2023, 16:35

Hola,

¿Creeis que un motor tipo Freescape para MSX o MSX2 sería posible?
Me refiero a un motor que diera un rendimiento aceptable, aunque fuera 1 frame por segundo.
Viendo las versiones para ordendores de 8 bits, como la de ZX Spectrum, Amstrad CPC o Commodore 64,
a mí me valdría una versión para MSX que fuera más o menos como éstas.
En estas versiones, los frames por segundo y el tamaño de la pantalla de juego son de risa, pero creo que aún así,
pueden enganchar.

Una versión para MSX1 podría ser a partir de la Spectrum, haciendo una conversión "a la antigua".
Así de repente, no veo cómo se podría mejorar en MSX1, ya que el código que hace el trabajo duro es
Z80 puro (supongo) y el volcado a vídeo sólo ralentizaría el resultado.

Tal vez una versión para MSX2, que use los comandos de líneas, puntos, etc. del VDP y la VRAM como
buffer, podría ser más fluida.
Lo digo desde la ignorancia, ya que nunca he programado el V9938 y no sé que rendimiento real
podría alcanzar.

¿Qué opináis?

Для того, чтобы оставить комментарий, необходимо регистрация или !login

By mohai

Paladin (1007)

Аватар пользователя mohai

24-01-2023, 16:52

Sé que para MSX hay algunos juegos que usan, mas o menos, la técnica de los objetos hechos con polígonos, como Chuck Yeager o Test Drive II, u otros con las típicas estructuras de "alambre", pero creo que ninguno que sea 100% tipo Freescape.

By Juan Luis

Master (143)

Аватар пользователя Juan Luis

28-01-2023, 05:58

Lo que yo he leído en el foro es que la arquitectura del MSX1 no es muy adecuada para juegos poligonales. Tras analizar como funciona el VDP del MSX1, el 9918 entendí el porqué. Aunque el MSX tiene una resolución y unas características "parecidas" a las del Spectrum, resolución 256x192, el Spectrum tiene la memoria de vídeo como parte de la RAM accesible por la CPU, el Z80, pero en el MSX la memoria de vídeo es sólo accesible por el VDP, y el Z80 tiene que cargar unos registros con la dirección de VRAM donde quieres colocar el dato y luego enviarle la información. En el caso del Spectrum basta con que el Z80 escriba directamente en la memoria de vídeo en la dirección que sea.

Además el VDP 9918 utiliza memorias que no son muy rápidas, y el refresco de pantalla se lleva casi todo el ancho de banda de la memoria de la VRAM del MSX, con lo que al enviar los datos por el puerto al VDP, el Z80 del MSX tiene que perder el tiempo ejecutando instrucciones NOPs tras cada byte enviado a la VRAM, o el VDP recibirá basura. Fernando García lo explica en uno de sus vídeos de desarrollo del MSX.

Por tanto, al dibujar polígonos, el MSX1 está en desventaja respecto a otros ordenadores de la época como el Amstrad CPC, Spectrum, etc., en los que la CPU puede acceder directamente a la VRAM. No estoy seguro, pero creo que el C64 también podía acceder a la memoria de vídeo sin penalización, que estaba compartida con el VIC-II. El VIC-II accedía en ciclos pares y la CPU en ciclos impares de acceso a memoria.

En el caso del MSX2, en el que el VDP 9938 tiene comandos hardware para dibujar líneas, y por tanto, se pueden acelerar los algoritmos de relleno de polígonos. Por tanto, la cosa cambia, y sí podría ser bastante más rápido ya que el VDP descarga de trabajo a la CPU. Es por ello que no se hicieron muchos juegos poligonales para el MSX1.

Yo pienso que sí, que en el MSX2 y en modelos posteriores se podrían haber hecho. Además no habría problemas de color clash trabajando en SCREEN 5 y SCREEN 8.

By mohai

Paladin (1007)

Аватар пользователя mohai

29-01-2023, 15:55

Si. Todo eso ya li sé. Que el MSX no puede acceder de forma directa a la VRAM, que tiene que hacer pausas cada x accesos, etc. Esa es una de las razones por las que muchas conversiones de Spectrum, resultan más lentas en MSX.
Pero resulta que, en el caso de 3D Kit, el peso del motor no está en la VRAM, si no en todos los cálculos que tiene que hacer el Z80. Creo que en este caso, Spectrum y MSX están empatados.
Comentar, como curiosidad, que los programadores del Kit, hicieron la primer versión para Amstrad CPC y luego portaron a Spectrum. Quedaron bastante contentos con el resultado pero, cuando hicieron la versión para Commodore 64, se encontraron con un procesador mucho más pobre en prestaciones apoyado por chips auxiliares, que en este caso no les sirvieron para nada. El resultado es que la versión de C64 es la más lenta de todas.

By mohai

Paladin (1007)

Аватар пользователя mohai

29-01-2023, 15:56

He estado viendo demos de gráficos poligonales (en el foro en Inglés hay algunos enlaces) y creo que una versión para MSX2 quedaría bastante decente

By Juan Luis

Master (143)

Аватар пользователя Juan Luis

30-01-2023, 09:58

Estoy completamente de acuerdo Mohai. Al tener el MSX2 un VDP capaz de dibujar líneas, si que se podría hacer un motor poligonal decente, pero en el MSX1 lo veo muy difícil.

Hace un par de días se celebró en Barcelona la RU de MSX en la Universitat Oberta de Catalunya, una de las reuniones de usuarios más importantes de los últimos años, con la presencia de Nishi, etc. Posiblemente también lo sepas. El vídeo de toda la reunión está colgado en YouTube:

MSX: Despertando vocaciones desde los años 80 (y sigue…)

En el trozo que va desde 3h20m hasta 4h04m hay un ponente que habla de muchos detalles del VDP 9918 del MSX1, y en una de las transparencias muestra como accedía el VDP a la memoria VRAM y los ciclos que dejaba el VDP para que la CPU le enviase información. Está en el instante 3h54m del vídeo. La CPU sólo le puede enviar información al VDP cada 32 píxels, que es poquísimo, y se ve en que emplea el VDP los ciclos de memoria en cada instante. Si no lo has visto échale un vistazo al vídeo porque está muy bien.

By mohai

Paladin (1007)

Аватар пользователя mohai

31-01-2023, 19:47

Gracias. Le echaré un vistazo

By mohai

Paladin (1007)

Аватар пользователя mohai

09-02-2023, 13:13

Ya he visto la conferencia.
Una pena que no hubiera tiempo suficiente, porque el VDP, la historia de su desarrollo, cómo trabaja internamente, cómo programarla, etc., dá para una conferencia mucho más larga.
He visto algún pequeño error, pero la idea es esa: el VDP deja poco tiempo de acceso a la CPU, mientras dibuja el área de gráficos, por eso es mejor usar el tiempo del dibujado del borde, para volcar muchos datos.
Esa es la razón por la que es muy difícil hacer efectos de raster con este VDP.

By mohai

Paladin (1007)

Аватар пользователя mohai

09-02-2023, 13:20

En el caso del Freescape y, posiblemente otros juegos, es que se usa un buffer lineal para dibujar la pantalla. Luego se vuelca a la VRAM del Spectrum, usando una tabla de conversión de posiciones, porque la VRAM del Spectrum no es lineal.
Creo que una conversión a MSX1 podría sacar ventaja de ésto, para mitigar en parte el retardo del volcado a VRAM, pasando por el VDP.