ESP27 con opción monocromática

Avatar de Usuario
spark2k06
Mensajes: 1188
Registrado: 12 Feb 2016, 13:58

ESP27 con opción monocromática

Mensaje por spark2k06 » 23 May 2021, 10:46

Hola,

Como parte de mi fase de aprendizaje programando FPGAs, he llevado a cabo una modificación en el core de Spectrum para permitir la selección de diferentes salidas de video monocromáticas, característica que siempre me ha gustado porque proporciona otra experiencia retro y puede traer recuerdos con monitores CRT monocromáticos antiguos:

Imagen

Las opciones disponibles son verde, ámbar y blanco y negro, aparte de color, que sería la salida de vídeo por defecto al arrancar el core, y se intercambia de uno a otro con la tecla END. Para llevar a cabo la implementación, he estudiado el módulo que desarrolló @mcleod_ideafix en el core de Amstrad CPC para salida monocromática verde, fuentes que muy generosamente me ha facilitado en privado, y del cual he aprendido mucho, :gracias!:

Dadas las limitaciones que se nos presenta en el :zxuno: original, con 3 bits de profundidad por color de RGB, no es posible más que ofrecer 7 intensidades de un color diferentes. Esto plantea un verdadero reto en la representación gráfica de sistemas cuya paleta de colores es mayor, en los cuales dicha carencia puede ser más o menos fácil disimular.

Concretamente en el Spectrum, sin entrar en modos especiales como el ULA plus, disponemos de la siguiente paleta de colores:

Imagen

15 colores contando el color negro, y de los cuales, la mitad son los mismos pero de mayor intensidad. Además en la imagen se muestran ordenados de menor a mayor luminancia. El cálculo de la luminancia se obtiene a partir de una simple formula que pondera los valores de RGB:

0.2126*R + 0.7152*G + 0.0722*B

Con tan pocos niveles de intensidad disponibles, no merece la pena, ni creo que sea posible implementar este cálculo. Por ese motivo, la mejor opción es hacer una conversión directa según su luminancia. He optado por no hacer distinción entre un mismo color y su correspondiente de mayor intensidad, entre otras cosas porque no se pueden representar por la limitación comentada, y representar paletas como la del ULA plus es impensable. Los fuentes los he dejado disponibles en el siguiente repositorio de mi cuenta de GitHub.

He pensado que, tal vez, de alguna forma ingeniosa mediante la implementación de un framebuffer, sea posible crear algún tipo de efecto intercambiando rápidamente diferentes tipos de colores que pueda engañar al ojo humano... es una opción que podría ser interesante investigar, aunque de haberlo, este tipo de efectos podrían tener más sentido en monitores CRT, dudo mucho que en TFT/LCD tengan efecto.

Bueno, sin más, adjunto el core en este mismo post por si alguien está interesado en probarlo.
Adjuntos
COREx.ZX1
(336 KiB) Descargado 139 veces
SPECTRUM.ZX1
(335.75 KiB) Descargado 130 veces

Avatar de Usuario
spark2k06
Mensajes: 1188
Registrado: 12 Feb 2016, 13:58

Re: ESP27 con opción monocromática

Mensaje por spark2k06 » 31 May 2021, 06:35

He modificado la paleta de tonalidades monocromáticas por otra similar pero que tiene en cuenta los colores brillantes, :gracias!: por la sugerencia @desUBIKado, lo cierto es que queda mucho mejor.

Se seguirán produciendo colisiones, pero esta vez entre los colores brillantes y el siguiente color no brillante de la paleta original del Spectrum. He probado varios juegos y portadas, y lo cierto es que se trata de una selección de paleta monocromática mucho más acertada.

Adjunto core con el cambio y actualizo los fuentes correspondientes en mi repositorio de GitHub.
Adjuntos
COREx.ZX1
(336 KiB) Descargado 136 veces
SPECTRUM.ZX1
(335.75 KiB) Descargado 138 veces

Avatar de Usuario
desUBIKado
Mensajes: 1002
Registrado: 05 Ago 2016, 22:33

Re: ESP27 con opción monocromática

Mensaje por desUBIKado » 01 Jun 2021, 00:22

@azesmbog ¿podrías hacer un pull request al repositorio de spark2k06 con tu código para añadir soporte del chip SAA1099?

De esa forma ese core tendría las funcionalidades del cambio de paleta y del chip SAA1099, cosa que no tiene el core oficial.

Avatar de Usuario
spark2k06
Mensajes: 1188
Registrado: 12 Feb 2016, 13:58

Re: ESP27 con opción monocromática

Mensaje por spark2k06 » 06 Jun 2021, 10:09

Facilito la versión para memoria externa aquí mismo. También he añadido una carpeta adicional en mi repositorio de GitHub para facilitar el sintetizado del mismo:

https://github.com/spark2k06/zxuno/tree ... 4_ext_sram

Para que no falle, es importante deshabilitar los módulos WiFi y MIDI del fichero de configuración /common/config.vh, tal que así:

Código: Seleccionar todo

// The following two defines are taken into account only if LOAD_ROM_FROM_FLASH_OPTION is not defined
`define DEFAULT_SYSTEM_ROM "128en.hex"
`define DEFAULT_DIVMMC_ROM "esxdos088.hex"
//`define MIDI_SYNTH_OPTION
//`define UART_ESP8266_OPTION
`define PZX_PLAYER_OPTION
`define VGA_OUTPUT_OPTION
`define CPU_TURBO_OPTION
`define DIVMMC_SUPPORT
`define ZXUNO_DMA_SUPPORT
`define ULA_TIMEX_SUPPORT
Adjuntos
COREx_sram_ext.ZX1
(336 KiB) Descargado 141 veces
SPECTRUM_sram_ext.ZX1
(335.75 KiB) Descargado 134 veces

azesmbog
Mensajes: 319
Registrado: 17 Feb 2016, 23:07

Re: ESP27 con opción monocromática

Mensaje por azesmbog » 06 Jun 2021, 14:50

desUBIKado escribió:
01 Jun 2021, 00:22
¿podrías hacer un pull request al repositorio de spark2k06 con tu código para añadir soporte del chip SAA1099?
@azesmbog слишком ленивый, чтобы делать запросы на гитхабе :)
Но если уважаемый spark2k06 хочет это добавить, то я могу добавить в его последнюю версию модуль SAA1099 и упаковать в архив zip :)
или добавить альтернативный zDMA. На выбор.

Avatar de Usuario
spark2k06
Mensajes: 1188
Registrado: 12 Feb 2016, 13:58

Re: ESP27 con opción monocromática

Mensaje por spark2k06 » 06 Jun 2021, 15:12

azesmbog escribió:
06 Jun 2021, 14:50
desUBIKado escribió:
01 Jun 2021, 00:22
¿podrías hacer un pull request al repositorio de spark2k06 con tu código para añadir soporte del chip SAA1099?
@azesmbog слишком ленивый, чтобы делать запросы на гитхабе :)
Но если уважаемый spark2k06 хочет это добавить, то я могу добавить в его последнюю версию модуль SAA1099 и упаковать в архив zip :)
или добавить альтернативный zDMA. На выбор.
Sin problema, clona mi repositorio de GitHub a un fichero Zip y actualízalo, luego puedes adjuntarlo aquí y ya me encargo yo de actualizar mi repositorio ;-)

azesmbog
Mensajes: 319
Registrado: 17 Feb 2016, 23:07

Re: ESP27 con opción monocromática

Mensaje por azesmbog » 06 Jun 2021, 20:04

Сделал конфигурацию в отдельной папке zxuno_v4_saa
в config.vh добавил `define SAA1099 и закомментировал //`define PZX_PLAYER_OPTION - не хватает места на все))
в audio_management.v добавил два канала для SAA
По модулю saa1099s.v могу пояснить следущее:
Этот модуль переделан из saa1099.sv от Sorgelig-a - он более точен, чем от многоуважаемого mcleod_ideafix,
но я не до конца уверен, что я правильно его преобразовал из SystemVerilog в обычный Verilog.
Так что при желании есть что улучшить :)
Ну и добавил каталог для проверки с saa1099 файлами и плагин для проигрывания.
Adjuntos
zxuno_ spark2k06.zip
(1.19 MiB) Descargado 142 veces

Avatar de Usuario
spark2k06
Mensajes: 1188
Registrado: 12 Feb 2016, 13:58

Re: ESP27 con opción monocromática

Mensaje por spark2k06 » 08 Jun 2021, 13:05

azesmbog escribió:
06 Jun 2021, 20:04
Сделал конфигурацию в отдельной папке zxuno_v4_saa
в config.vh добавил `define SAA1099 и закомментировал //`define PZX_PLAYER_OPTION - не хватает места на все))
в audio_management.v добавил два канала для SAA
По модулю saa1099s.v могу пояснить следущее:
Этот модуль переделан из saa1099.sv от Sorgelig-a - он более точен, чем от многоуважаемого mcleod_ideafix,
но я не до конца уверен, что я правильно его преобразовал из SystemVerilog в обычный Verilog.
Так что при желании есть что улучшить :)
Ну и добавил каталог для проверки с saa1099 файлами и плагин для проигрывания.
Muchas :gracias!:

He actualizado esta versión en mi repositorio de GitHub:

https://github.com/spark2k06/zxuno/tree ... s/spectrum

Adjunto aquí mismo también los binarios. Por cuestiones de espacio en la FPGA, las opciones ahora son las siguientes:

1. Core para memoria SRAM externa, con SAA1099 y carga de PZX
2. Core para memoria SRAM interna, con SAA1099, WiFi y MIDI pero sin carga de PZX
3. Core para memoria SRAM interna, con WiFi, MIDI y carga de PZX pero sin SAA1099

Por otro lado:

1. Con el addon WiFi y la señal de Reset del mismo disponible, ahora es posible activarlo y desactivarlo pulsando F11. Por defecto se inicia desactivado. @Mejias3D ha sugerido algo interesante, y es añadir un pequeño icono de WiFi identificativo en la parte superior derecha, aunque no lo he implementado, y es posible que por cuestiones de espacio no se pueda. Por el momento yo no me voy a meter con ello, si alguien se anima, adelante ;-)

2. Ahora el modo Turbo (28Mhz), que también funciona con la tecla F12, se activa y desactiva en el momento de soltar la tecla... manteniéndose el último estado seleccionado.

Y eso es todo, yo por el momento no planeo llevar a cabo más cambios.

A disfrutarlo!
Adjuntos
binaries.zip
(1.12 MiB) Descargado 137 veces

azesmbog
Mensajes: 319
Registrado: 17 Feb 2016, 23:07

Re: ESP27 con opción monocromática

Mensaje por azesmbog » 08 Jun 2021, 22:56

spark2k06 escribió:
08 Jun 2021, 13:05
1. Con el addon WiFi y la señal de Reset del mismo disponible, ahora es posible activarlo y desactivarlo pulsando F11.
assign uart_reset = (!wifi_switcher) ? 1'b0 : 1'bz;
Интересное решение ))
Но я давно думал немного о другом.
Надо бы добавить сигнал в module control_enable_options
например
output wire disable_wifi
и завести его в zxunoreg, чтобы можно было включать или отключать через .zxunocfg

Avatar de Usuario
spark2k06
Mensajes: 1188
Registrado: 12 Feb 2016, 13:58

Re: ESP27 con opción monocromática

Mensaje por spark2k06 » 09 Jun 2021, 06:51

azesmbog escribió:
08 Jun 2021, 22:56

assign uart_reset = (!wifi_switcher) ? 1'b0 : 1'bz;
Интересное решение ))
Но я давно думал немного о другом.
Надо бы добавить сигнал в module control_enable_options
например
output wire disable_wifi
и завести его в zxunoreg, чтобы можно было включать или отключать через .zxunocfg
La opción de control de WiFi por software es algo que se ha mencionado en el grupo del Telegram del :zxuno: , sin embargo también se ha comentado que podría ser más inseguro. En principio yo sí prefiero mantenerlo como lo tenemos ahora, pero el código es libre. Por cierto, el control de la línea uart_reset ha sido idea de @yombo, que olvidé mencionarlo, :gracias!:

Por sugerencia de @desUBIKado, he añadido una opción de core adicional en mi repositorio de GitHub. Se trataría de un core para memoria SRAM interna, con SAA1099 y carga de PZX pero sin MIDI ni WiFi. Este core sería para los ZX-Uno 2M VGA que hizo ManuFerHi que tenían 2MB de memoria interna, pero a los que no puso conector de expansión, por lo cual no necesitan ni WiFi ni MIDI.

Por último, he reorganizado el código para que la opción de monocromo también sea opcional desde el fichero de configuración config.vh.

Responder