Proposición de gráfica externa para ZX Spectrum

Sinclair QL, ZX81, +2, +3, 128K ...
Avatar de Usuario
radastan
Amiga 2500
Amiga 2500
Mensajes: 4542
Registrado: 11 Jun 2007, 19:29
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Sega Genesis/Megadrive
Primera consola: TV Games/Pong Clone
Ubicación: Córdoba
Gracias dadas: 9 veces
Gracias recibidas: 40 veces
Contactar:

Re: Proposición de gráfica externa para ZX Spectrum

Mensajepor radastan » 02 Mar 2014, 21:33

Pues dime entonces que debo hacer para activar la ULAPlus y este modo de vídeo. Por lo que me comentas los pixels están intercambiados en cada byte, ¿no? quiero decir que el primero es el segundo y así sucesivamente. No pasa nada porque yo moveré todo byte a byte (no estoy con tiempo como para currarme esto en condiciones). Quiere decir que horizontalmente los sprites se moverán de dos en dos pixels (cada 4 pixels del ZX Spectrum original). No está mal.

Edición especial de Misco Jones en marcha... "Misco Jones en el Templo Mojino".
Yo tengo una máquina del tiempo, se llama ZX Spectrum, siempre me devuelve a los buenos momentos.
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝

Avatar de Usuario
Zardoz
MSX Turbo R
MSX Turbo R
Mensajes: 283
Registrado: 09 Sep 2013, 19:04
Sistema Favorito: (Otro)
primer_sistema: (Otro)
consola_favorita: Nintendo NES/Clónica
Primera consola: Nintendo NES/Clónica
Ubicación: Madrid
Contactar:

Re: Proposición de gráfica externa para ZX Spectrum

Mensajepor Zardoz » 02 Mar 2014, 22:01

mcleod_ideafix escribió:El modo "radastaniano" tiene las siguientes características:
- Resolución de 128x96 píxeles cuadrados, aspect ratio de la pantalla: 4:3
- Dentro de cada byte, los bits 4 a 7 contienen el color del pixel más a la izquierda, y 0 a 3, el color del pixel de más a la derecha
- Los colores se toman de las 16 primeras entradas (0 a 15) de la paleta de ULAplus

Pues puede que "exporte" el modo "radastaniano" a la computadora de Trillek, ahora que veo que queda bastante bien y tiene un layout en la memoria bastante sencillo. PD: Ahora mismo se esta planteando seriamente poder usar también un Z80 como cpu...
Yep, I have a blog :zardoz.es
Emulador DCPU-16 VM
Emulador Trillek

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 54 veces
Contactar:

Re: Proposición de gráfica externa para ZX Spectrum

Mensajepor mcleod_ideafix » 02 Mar 2014, 22:41

radastan escribió:Pues dime entonces que debo hacer para activar la ULAPlus y este modo de vídeo.

ULAplus usa dos puertos: el 48955 y el 65339 (en decimal, en hexadecimal son $BF3B y $FF3B). Para activar ULAplus + modo radastaniano haces:

Código: Seleccionar todo

OUT 48955,64: OUT 65339,3


Para volver al modo estándar,

Código: Seleccionar todo

OUT 48955,64: OUT 65339,0


Para establecer los colores en la paleta, mírate la documentación de la ULAplus. Pero vamos, es coger y hacer:

Código: Seleccionar todo

OUT 48955,indice: OUT 65339,color


Donde "indice" es un valor de 0 a 63 (0 a 15 para el modo radastaniano ya que el resto de entradas no se usan) y color es un color codificado en formato GGGRRRBB

El color del borde se toma de los 8 primeros índices, del 0 al 7, según el valor que pongas en el puerto de siempre, el $FE.

radastan escribió:Por lo que me comentas los pixels están intercambiados en cada byte, ¿no? quiero decir que el primero es el segundo y así sucesivamente.

El primer pixel está en las posiciones 7 a 4 del primer byte, y el segundo pixel en las posiciones 3 a 0 de ese mismo primer byte. Es el orden lógico, ¿no? En el modo original, el primer pixel no está en el bit 0 del primer byte, sino en el bit 7 del primer byte, el segundo en el bit 6 y así sucesivamente.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
radastan
Amiga 2500
Amiga 2500
Mensajes: 4542
Registrado: 11 Jun 2007, 19:29
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Sega Genesis/Megadrive
Primera consola: TV Games/Pong Clone
Ubicación: Córdoba
Gracias dadas: 9 veces
Gracias recibidas: 40 veces
Contactar:

Re: Proposición de gráfica externa para ZX Spectrum

Mensajepor radastan » 02 Mar 2014, 23:39

mcleod_ideafix escribió:
radastan escribió:Por lo que me comentas los pixels están intercambiados en cada byte, ¿no? quiero decir que el primero es el segundo y así sucesivamente.

El primer pixel está en las posiciones 7 a 4 del primer byte, y el segundo pixel en las posiciones 3 a 0 de ese mismo primer byte. Es el orden lógico, ¿no? En el modo original, el primer pixel no está en el bit 0 del primer byte, sino en el bit 7 del primer byte, el segundo en el bit 6 y así sucesivamente.


Efectivamente, pero es debido a que generalmente el bit de menor peso siempre se pone a la derecha en un byte a la hora de representarlo.

Pero vamos, que no lo cambies porque no va a suponer ningún cambio para mi ponerlo en un lado u otro, yo voy a trabajar con bytes y me da lo mismo. Lo único es que quede claro para no volverme loco al hacer conversiones de PC a ZX Uno.

Para empezar voy a adaptar una rutina sencilla de tiles de 8x8 pixels (equivalente a la de 16x16 del ZX Spectrum) y otra de sprites de 8x12 (creo que es el tamaño adecuado).
Yo tengo una máquina del tiempo, se llama ZX Spectrum, siempre me devuelve a los buenos momentos.
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 54 veces
Contactar:

Re: Proposición de gráfica externa para ZX Spectrum

Mensajepor mcleod_ideafix » 03 Mar 2014, 00:05

radastan escribió:Lo único es que quede claro para no volverme loco al hacer conversiones de PC a ZX Uno.

Fíjate que de esta forma, los BMP que se guardan con 4bpp coinciden en formato con como se representan en el ZX-Uno (salvando el pequeño detalle de que los BMP se guardan desde la última línea a la primera), así que si guardas tus sprite sheets como BMP's con paleta de 16 colores, son directablemente usables en el ZX-Uno.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: Proposición de gráfica externa para ZX Spectrum

Mensajepor antoniovillena » 03 Mar 2014, 21:26

Es posible hacer una conversión de FASE para este modo gráfico. Eso sí, tendrías que currarte la parte no gráfica del código (colisiones, inercia, gravedad, movimiento de enemigos, etc...). Los tiles y sprites serían de 4x4 y la velocidad sería la misma, es decir, 50fps y 8 sprites simultáneos con bus flotante, o sin límite de sprites simultáneos con video shadow.

-- Actualizado 03 Mar 2014, 21:29 --

Es más, podría usar coordenadas ficticias de 256x192 y de esta forma sacar el mismo juego para ambas plataformas tan sólo haciendo tiles y sprites alternativos.

Avatar de Usuario
radastan
Amiga 2500
Amiga 2500
Mensajes: 4542
Registrado: 11 Jun 2007, 19:29
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Sega Genesis/Megadrive
Primera consola: TV Games/Pong Clone
Ubicación: Córdoba
Gracias dadas: 9 veces
Gracias recibidas: 40 veces
Contactar:

Re: Proposición de gráfica externa para ZX Spectrum

Mensajepor radastan » 03 Mar 2014, 23:27

Es que esa es la idea, que el modo de vídeo sea fácilmente aprovechable desde Z88DK y similares, reaprovechando todo el código sin problemas.

Pero vamos, que si me parpadean un poco los sprites no pasa nada, es una prueba para ver como queda un juego en este modo.
Yo tengo una máquina del tiempo, se llama ZX Spectrum, siempre me devuelve a los buenos momentos.
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: Proposición de gráfica externa para ZX Spectrum

Mensajepor antoniovillena » 04 Mar 2014, 01:16

Precisamente la parte no aprovechable del código de FASE es la que está escrita.

ZX-81
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 130
Registrado: 04 Ene 2013, 16:43
Sistema Favorito: Spectrum +2
primer_sistema: ZX81
consola_favorita: Nintendo DS/3DS
Primera consola: Sega Genesis/Megadrive
Ubicación: La orilla del mar Mediterráneo
Gracias dadas: 16 veces
Gracias recibidas: 39 veces
Contactar:

Re: Proposición de gráfica externa para ZX Spectrum

Mensajepor ZX-81 » 13 Mar 2014, 18:15

Cuidado con los valores de activación del ULA+ porque, aunque no conozco implementación alguna que lo cumpla, ya está asignado el valor 3 como comando de selección:

https://github.com/cheveron/sebasic4/wiki/ULAplus-Support

Ando intentando encontrar la especificación de algo así como la ULA++ que permite el uso de 80 columnas de texto con el Basic de Andrew Owen porque me va por la cabeza que algo afecta a lo que estáis pensando.

Por otro lado, una irregularidad del ULA+ es que, aunque no está en puertos susceptibles de entrar en contienda con la ULA estándar, tienen la misma contención que el puerto $FE. La otra cuestión que encuentro peliaguda, si me permitís la observación, es el cambio de la organización de pantalla, que pasa del modo "tradicional" al modo lineal. Se supone que ULA+ tiene la ventaja de que se pueden recolorear los juegos ya existentes simplemente cambiando la paleta de colores y activando el modo correspondiente. Pero el modo radastaniano obliga a escribir el código de forma específica para él, sin posibilidad de compatibilidad inmediata (y sencilla) con el modo tradicional.
Todo espacio de dimensión finita distinta de cero con producto interno tiene una base ortonormal. Tiene sentido, cuando no piensas sobre ello.
Profesor de Matemáticas U.C. Berkeley

Empieza a jugar sin tener que compilar: JSpeccy
Emulador bare-metal para la Raspberry PI 2/3: ZXBaremulator

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 54 veces
Contactar:

Re: Proposición de gráfica externa para ZX Spectrum

Mensajepor mcleod_ideafix » 14 Mar 2014, 22:02

Por partes:

- El bit 1 efectivamente está asignado para un supuesto modo HLS, que no está implementado en ninguno de los clones que actualmente soportan ULAplus que yo sepa. Dado que esto es un experimento restringido al prototipo de ZXUno y a un solo juego, y que no hay soft que use este modo HLS, las probabilidades de colisión con el software existente son 0.

- No es en absoluto irregular que los puertos de ULAplus tengan la misma contienda que el puerto $FE. De hecho, si no fuera así, no podría implementarse en una ULA física (para Spectrum 48K).

- El modo de 80 columnas de texto viene de usar el modo de resolucion de 512x192 pixels, que existe en el Timex desde mucho antes de hablarse decla ULAplus. Para activar ese modo, OUT 255,6 en un clon que soporte estos modos.

- La ULAplus es una cosa y el modo radastaniano, otra distinta. El hecho de que compartan puerto de E/S es por una simple cuestión de comodidad (los puertos propios de ZXUno aun no estaban implementados), y porque he aprovechado parte del flujo de datos de ULAplus para implementar este modo (ver esquema publicado un poco antes en este hilo). Así, el que sea un modo completamente aparte de los demás, con su layout propio, no afecta a la ULAplus, porque de hecho, no forma parte de su especificación. Terminado el experimento, y si el modo radastaniano puede quedarse en el core final, no tengo problema en mover su esquema de activación a uno de los registros del ZXUno y aquí no ha pasado nada :) . Como ves, el modo radastaniano no es más que otro modo añadido, como lo son también los modos HiRes y HiColour que están presentes en el core de ZXUno y que no tienen nada que ver con ULAplus (aunque puedan usar sus... "servicios"). Es más, Andrew Owen ya me habló hace tiempo de ofrecer una activación alternativa de los modos Timex usando también los registros de la ULAplus.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista


Volver a “Sinclair/Spectrum”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 11 invitados