Iniciar sesión

Ver la versión completa : zx-poly



SplinterGU
26/06/2018, 05:01
51601

buscando spec256 me encontre con esto, no lo conocia, es un emulador de zx, con 4 cpus sincronizadas... soporta los siguientes modos graficos:

- 256x192 (2 colores por píxel en el bloque 8x8)
- 256x192 (16 colores por píxel)
- 512x384 (2 colores por píxel)

tambien incluye un editor de sprites para editar los sprites desde un z80 o un sna, y generar un zxp listo para correr en el emulador.

aca esta el link, estaria interesante convertir algunos juegos

https://github.com/raydac/zxpoly

chipan
26/06/2018, 05:17
Bueno, ahora ya se como sería un spectrum sin color clash. La paleta sigue siendo horrible pero los juegos ganan mucho.

masteries
26/06/2018, 10:53
https://www.gp32spain.com/foros/attachment.php?attachmentid=51601&stc=1

buscando spec256 me encontre con esto, no lo conocia, es un emulador de zx, con 4 cpus sincronizadas... soporta los siguientes modos graficos:

- 256x192 (2 colores por píxel en el bloque 8x8)
- 256x192 (16 colores por píxel)
- 512x384 (2 colores por píxel)

tambien incluye un editor de sprites para editar los sprites desde un z80 o un sna, y generar un zxp listo para correr en el emulador.

aca esta el link, estaria interesante convertir algunos juegos

https://github.com/raydac/zxpoly


Es muy interesante la calidad a nivel de gráficos, pero necesitan 4x Z80, ¡vaya pedazo de Spectrum! ¡Ni el SAM Coupé!

Por mi parte prefiero los motores multicolor, que habría que mirar si son capaces de eliminar el color clash, pero funcionan en un Spectrum real ( 48K o 128 K)
y aportan un colorido que a menos que juegues a las Tortugas Ninja 1, Dan Dare 3, Savage o Extreme va a ser imposible:


https://www.youtube.com/watch?v=PesX1EOC_Ko

swapd0
26/06/2018, 18:05
Ademas que se supone que también necesitas 4x 48kb de ram, no tiene sentido poner los 4 z80 en el mismo bus, irían a 1/4 de velocidad.

saboteur
26/06/2018, 18:11
Vale, ¿pero se puede fabricar de verdad? xD

swapd0
26/06/2018, 18:49
Yo nunca he tenido problema con el color clash del spectrum, esta claro que empeora un poco el juego y algunos los hacen monocromos para evitar problemas pero es parte de la gracia de la plataforma, es como los pixels gordos del cpc, o los parpadeos de la NES o la lentitud del msx XDXDXD

dj syto
26/06/2018, 21:07
Yo nunca he tenido problema con el color clash del spectrum, esta claro que empeora un poco el juego y algunos los hacen monocromos para evitar problemas pero es parte de la gracia de la plataforma, es como los pixels gordos del cpc, o los parpadeos de la NES o la lentitud del msx XDXDXD

No. La lentitud de los ports al msx no tenia gracia jajajja

SplinterGU
26/06/2018, 22:47
Ademas que se supone que también necesitas 4x 48kb de ram, no tiene sentido poner los 4 z80 en el mismo bus, irían a 1/4 de velocidad.

hasta donde lei, cada 1 tiene su propia memoria y una compartida...

swapd0
26/06/2018, 23:11
hasta donde lei, cada 1 tiene su propia memoria y una compartida...
Yo supongo que basicamente tienes el juego copiado 4 veces, pero la parte de los gráficos varia en cada bloque de memoria/CPU, y después la parte de la emulación coge los distintos bloques para generar los gráficos sin color clash.

SplinterGU
27/06/2018, 00:44
claro, cada cpu maneja 1 bit rgbB (donde B es el brillo), asi esta explicado en la pagina



ZX-Poly video mode, 256x192, 16 colors per pixel

Red from CPU0 memory
Green from CPU1 memory
Blue from CPU2 memory
Bright from CPU3 memory


https://github.com/raydac/zxpoly/wiki/Short-description-of-ZX-Poly-platform

masteries
27/06/2018, 21:38
claro, cada cpu maneja 1 bit rgbB (donde B es el brillo), asi esta explicado en la pagina



https://github.com/raydac/zxpoly/wiki/Short-description-of-ZX-Poly-platform

Tal y como lo explican, parece que es posible llevarlo a la realidad; sería muy curioso construirlo y tener un Spectrum con 4 CPUS; por otro lado, y doy por hecho que es así, incluye un mecanismo para esperar a los otros procesadores (¿de qué otra manera iban a sincronizar el software?) pues entonces, además de videojuegos podrías tener otro clase de programas funcionando con 4 hilos... ¡el Spectrum con multitarea real! jajaja

¿Sería posible un Doom en condiciones? ¿O un juego tipo Comanche que emplease Voxels?

Aunque el concepto parece que sólo ejecuta en paralelo el mismo programa pero dibujando de forma distinta en cada CPU

swapd0
27/06/2018, 22:38
Ejecuta el mismo programa en las 4 CPU, pero los gráficos están retocados en cada una y después se interpretan de forma conjunta, si no retocas los gráficos tienes exactamente lo mismo.

El problema que le veo es que es igual a cuando veías un juego de spectrum portado a los 16bits, solo veias mejores gráficos y sonido y ya esta, no se mejora en la jugabilidad. Si juegas a un juego de spectrum en el zx-poly tuneado seguro que te queda la misma sensación.

SplinterGU
28/06/2018, 02:25
Tal y como lo explican, parece que es posible llevarlo a la realidad; sería muy curioso construirlo y tener un Spectrum con 4 CPUS; por otro lado, y doy por hecho que es así, incluye un mecanismo para esperar a los otros procesadores (¿de qué otra manera iban a sincronizar el software?) pues entonces, además de videojuegos podrías tener otro clase de programas funcionando con 4 hilos... ¡el Spectrum con multitarea real! jajaja

¿Sería posible un Doom en condiciones? ¿O un juego tipo Comanche que emplease Voxels?

Aunque el concepto parece que sólo ejecuta en paralelo el mismo programa pero dibujando de forma distinta en cada CPU


en teoria podes tambien ejecutar los cpus por separado, creo que el tema de sincronismo no es tan perfecto, segun dice en la pagina, pueden desincronizarse... no da detalles al respecto, pero asi lo dice... quizas pueda ser por saltos en el codigo basados en datos de los graficos, que al ser diferentes en cada memoria pueda desincronizar la ejecucion, incluso si hay optimizaciones de graficos (compresion, etc) ya se desincroniza...

pero podria haber un juego especial usando los 4 cpus por separado...

incluso al autor se compara con spec256, y habla sobre que este ultimo soporta mejor la sincronizacion... el tema del spec256, es tambien un SIMD, pero en lugar de 4 cpus, tiene 2, 1 en 8 bits, y otra en 64 bits...

que pena que los del spec256 no hayan liberado los fuentes.


Ejecuta el mismo programa en las 4 CPU, pero los gráficos están retocados en cada una y después se interpretan de forma conjunta, si no retocas los gráficos tienes exactamente lo mismo.

El problema que le veo es que es igual a cuando veías un juego de spectrum portado a los 16bits, solo veias mejores gráficos y sonido y ya esta, no se mejora en la jugabilidad. Si juegas a un juego de spectrum en el zx-poly tuneado seguro que te queda la misma sensación.

yo disfrutaba a lo loco jugar en el zx...

masteries
28/06/2018, 10:52
Ejecuta el mismo programa en las 4 CPU, pero los gráficos están retocados en cada una y después se interpretan de forma conjunta, si no retocas los gráficos tienes exactamente lo mismo.

El problema que le veo es que es igual a cuando veías un juego de spectrum portado a los 16bits, solo veias mejores gráficos y sonido y ya esta, no se mejora en la jugabilidad. Si juegas a un juego de spectrum en el zx-poly tuneado seguro que te queda la misma sensación.

Ota cosa que si vemos, es que zx-poly tiene más potencia neta que un Atari STE, si he puesto la E a propósito, pero es mucho más difícil de aprovechar dado que el mecanismo de sincronismo no hila muy fino. Es un concepto curioso y funcional, pero multiplica por 4 los recursos del ordenador.

Y si Swapd0, sé a lo que te refieres, como ejemplo sirva Head Over Heels de Atari ST o Amiga, es el mismo de Spectrum pero re-coloreado.

swapd0
28/06/2018, 12:05
Ota cosa que si vemos, es que zx-poly tiene más potencia neta que un Atari STE
Lo dudo, teniendo en cuenta que el Z80 no tiene instrucciones de multiplicación y division, y solo opera con 8 bits (que se quedan cortos para muchas cosas) mientras que el 68000 puedes hacer sumas de 32bits con una sola instrucción aunque tarde mas que una de 16bits, pocos modos de direccionamiento que hace que tengas que escribir mas codigo, añádele el sonido por DMA, scroll por hardware, blitter...

Y que tener N procesadores no te hace ir N-veces mas rápido.

masteries
28/06/2018, 21:38
el Z80 no tiene instrucciones de multiplicación y division




Ya sólo con eso vaya tela, la verdad no me había documentado a este nivel; pero siempre pensé que el Z80 al menos multiplicaría números enteros...
(por eso de que es una versión optimizada del 8080).

¿entonces las multiplicaciones las hace a base de iterar sumas?

swapd0
28/06/2018, 21:56
Ya sólo con eso vaya tela, la verdad no me había documentado a este nivel; pero siempre pensé que el Z80 al menos multiplicaría números enteros...
(por eso de que es una versión optimizada del 8080).

¿entonces las multiplicaciones las hace a base de iterar sumas?
No creo ya que dependiendo del lo grande que sean los números tardarías mas, supongo que se hacen con sumas y desplazamientos. IIRC ningún procesador de 8 bits tiene instrucciones de multiplicaciones ni division.

De todas formas para el Elite en vez de usar matrices de rotacion y multiplicar vectores, usaban logaritmos. Log(a*b) = Log(a) + Log(b). Asi se ahorran las multiplicaciones.
http://www.gdcvault.com/play/1014628/Classic-Game-Postmortem

-----Actualizado-----

Y si no vas justo de memoria puedes usar esto, pero creo que solo funciona para números positivos. Sacado de una pagina sobre 6502.

;Fast Multiplication;
;The idea stems from Stephen Judd.
;You find it in The Fridge and in the C=Hacking magazine:
;
;Let f(x) = x^2 / 4. Then
;
; a*b = f(a+b) - f(a-b)
;
;You need 2 tables of squares with 9 bit input size and
;16 bit result size.
;
;You can save the building of the 2th complement
;
; EOR #$ff
; CLC
; ADC #1
;
;by shifting the second table 1 byte down and
;using the 1th complement:
;
; EOR #$ff
;
;This algorithm is very useful when you want to multiply
;multiple bytes by the same factor. Then you can set the
;zp addresses once and just modify the y register.
;With the same trick you can easily extend this algorithm
;to 16 bit. But if you want to be fast you will need more
;than the 8 zp addresses.

masteries
28/06/2018, 22:59
No creo ya que dependiendo del lo grande que sean los números tardarías mas, supongo que se hacen con sumas y desplazamientos. IIRC ningún procesador de 8 bits tiene instrucciones de multiplicaciones ni division.

De todas formas para el Elite en vez de usar matrices de rotacion y multiplicar vectores, usaban logaritmos. Log(a*b) = Log(a) + Log(b). Asi se ahorran las multiplicaciones.
http://www.gdcvault.com/play/1014628/Classic-Game-Postmortem

-----Actualizado-----

Y si no vas justo de memoria puedes usar esto, pero creo que solo funciona para números positivos. Sacado de una pagina sobre 6502.

;Fast Multiplication;
;The idea stems from Stephen Judd.
;You find it in The Fridge and in the C=Hacking magazine:
;
;Let f(x) = x^2 / 4. Then
;
; a*b = f(a+b) - f(a-b)
;
;You need 2 tables of squares with 9 bit input size and
;16 bit result size.
;
;You can save the building of the 2th complement
;
; EOR #$ff
; CLC
; ADC #1
;
;by shifting the second table 1 byte down and
;using the 1th complement:
;
; EOR #$ff
;
;This algorithm is very useful when you want to multiply
;multiple bytes by the same factor. Then you can set the
;zp addresses once and just modify the y register.
;With the same trick you can easily extend this algorithm
;to 16 bit. But if you want to be fast you will need more
;than the 8 zp addresses.

Encantado con la info, lo de emplear las reglas de los logaritmos en lugar de multiplicar (dado que no podían) es excelente; aunque debo dar por hecho que tendrán unas tablas de logaritmos precalculadas y luego con otra relación obtienen más valores o algo semejante.

Conozco un procesador de 8 bits que sí tiene instrucción de multiplicar y de dividir, de hecho la de multiplicar da como resultado un número de 16 bits, que se guarda en dos campos / registros de 8 bits. El procesador incluído como núcleo en el microcontrolador 8051, que data de 1980 por Intel:

8051 MUL instruction:

http://www.keil.com/support/man/docs/is51/is51_mul.htm

8051 DIV instruction:

http://www.keil.com/support/man/docs/is51/is51_div.htm

¿Así que el Z80 se encuentra en desventaja frente a un 8051? ¿El 8051 era mucho más "élite" que el Z80? Lo que si sé, es que el código máquina generado por un programa en C de 8051 en el que hagas cálculos con números de 32 bits ocupa más que el equivalente en Z80, ahora como hagas multiplicaciones y divisiones ya sabemos cual va a ser mejor; y luego para mover bloques de datos, en 8051 tienes lo básico, moverlos byte a byte a memoria externa cuesta 2 instrucciones por byte a mover.

Es un microcontrolador, pero le puedes colocar hasta 64 KB de RAM externa y con otros pines de entrada/salida puedes hacer bank switching y elevar esa cifra a 128 KB o a 256 KB pero sin despeinarte, y entonces ya tendrías convertido el 8051 en procesador de 8 bits. Es una práctica habitual, o al menos lo era, para los computadores en sistemas ferroviarios en los 80; había placas madre con un 8051, RAM externa, disquetera y adaptador de vídeo; además de puerto serie RS-422 y 485 Y se siguen usando, montando y reparando; como les funcionan no las cambian,

Ahora, a nivel de eficiencia en la ejecución de las intrucciones ya no sé quien gana, si el Z80 o el 8051


Por otra parte, gran parte de la magia del 68000 es que ya tiene lista la siguiente instrucción a ejecutar mientras está ejecutando la anterior... pipelining, creo que es el primero en llevar de esto,

SplinterGU
30/06/2018, 03:38
https://chuntey.wordpress.com/2013/10/02/how-to-write-zx-spectrum-games-chapter-15/

a veces con simples rotaciones de bits bastaba, depende por cuanto se queria multiplicar o dividir...

masteries
19/07/2018, 19:55
https://chuntey.wordpress.com/2013/10/02/how-to-write-zx-spectrum-games-chapter-15/

a veces con simples rotaciones de bits bastaba, depende por cuanto se queria multiplicar o dividir...

Mira Splinter que recientemente me he documentado sobre la CPU que montan los microcontroladores basados en ARM más humildes, aunque es una CPU de 32 bits... y resulta que la CPU ARM Cortex M0 no dispone de instrucción para dividir números, al menos tiene instrucción para multiplicar... pero lo de la división me ha dejado sorprendido.

swapd0
19/07/2018, 20:21
Supongo que porque es un microcontrolador y la division se usa "poco", les conviene ahorrar espacio, pero la multiplicacion la necesitas cada vez que accedes a un elemento mediante un indice.

futu-block
22/07/2018, 13:37
A ver, tanto modernuras de teles de 4k y el espectrum mueve 48k???

el mundo se está yendo al garete...