ESP27 con opción monocromática
ESP27 con opción monocromática
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:
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,
Dadas las limitaciones que se nos presenta en el 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:
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.
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:
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,
Dadas las limitaciones que se nos presenta en el 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:
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 142 veces
-
- SPECTRUM.ZX1
- (335.75 KiB) Descargado 134 veces
Re: ESP27 con opción monocromática
He modificado la paleta de tonalidades monocromáticas por otra similar pero que tiene en cuenta los colores brillantes, 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.
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 138 veces
-
- SPECTRUM.ZX1
- (335.75 KiB) Descargado 140 veces
- desUBIKado
- Mensajes: 1002
- Registrado: 05 Ago 2016, 22:33
Re: ESP27 con opción monocromática
@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.
De esa forma ese core tendría las funcionalidades del cambio de paleta y del chip SAA1099, cosa que no tiene el core oficial.
Re: ESP27 con opción monocromática
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í:
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 144 veces
-
- SPECTRUM_sram_ext.ZX1
- (335.75 KiB) Descargado 136 veces
Re: ESP27 con opción monocromática
@azesmbog слишком ленивый, чтобы делать запросы на гитхабе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?
Но если уважаемый spark2k06 хочет это добавить, то я могу добавить в его последнюю версию модуль SAA1099 и упаковать в архив zip
или добавить альтернативный zDMA. На выбор.
Re: ESP27 con opción monocromática
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 repositorioazesmbog escribió: ↑06 Jun 2021, 14:50@azesmbog слишком ленивый, чтобы делать запросы на гитхабе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?
Но если уважаемый spark2k06 хочет это добавить, то я могу добавить в его последнюю версию модуль SAA1099 и упаковать в архив zip
или добавить альтернативный zDMA. На выбор.
Re: ESP27 con opción monocromática
Сделал конфигурацию в отдельной папке 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 файлами и плагин для проигрывания.
в 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
Re: ESP27 con opción monocromática
Muchasazesmbog 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 файлами и плагин для проигрывания.
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
Re: ESP27 con opción monocromática
assign uart_reset = (!wifi_switcher) ? 1'b0 : 1'bz;
Интересное решение ))
Но я давно думал немного о другом.
Надо бы добавить сигнал в module control_enable_options
например
output wire disable_wifi
и завести его в zxunoreg, чтобы можно было включать или отключать через .zxunocfg
Re: ESP27 con opción monocromática
La opción de control de WiFi por software es algo que se ha mencionado en el grupo del Telegram del , 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,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
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.