Mostrando entradas con la etiqueta spectrum. Mostrar todas las entradas
Mostrando entradas con la etiqueta spectrum. Mostrar todas las entradas

jueves, 6 de abril de 2023

ESP32 Emulador ZX SPECTRUM - Vídeo PAL

  Página principal

ESP32
Emulador
ZX SPECTRUM - PAL


Cada uno tiene mitificado el ordenador en el cual empezó, y el mio es el ZX SPECTRUM.
Otro circuito que encontré para hacer con el ESP32 es un emulador de Spectrum.
    https://github.com/sdima1357/spectrum128_esp32_usb_host_pal_tv
Existe otro emulador pero la salida es por VGA, es mucha de mejor su calidad de video, pero no se podría conectar a televisiones antiguas.
El entorno de desarrollo es MX21, es una distribución basada en Debian, pero bastante mas actualizada, recomiendo que la probéis.

$ python3 --version
Python 3.9.2

$ uname -a
Linux mx21 6.0.0-6mx-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.0.12-1~mx21+1 (2022-12-15) x86_64 GNU/Linux

El primer paso es instalar el entorno de desarrollo ESP, esto me dio mucho trabajo, hasta que descubrí que con la última versión la 5, producía errores en la compilación, por lo que tuve que instalar la versión 4.4.4

mkdir -p ~/esp
cd ~/esp
git clone -b v4.4.4 --recursive https://github.com/espressif/esp-idf.git
cd ~/esp/esp-idf
./install.sh esp32

cd esp-idf/
. ./export.sh

Este último paso ./export.sh configura el entorno del terminal, si se cierra el terminal deberemos volver a ejecutarlo.

Ahora nos toca bajar el emulador desde la página del proyecto.

cd ..
git clone https://github.com/sdima1357/spectrum128_esp32_usb_host_pal_tv

No metemos en el directorio del proyecto y lo compilamos y grabamos el ejecutable en la ESP32 .

cd spectrum128_esp32_usb_host_pal_tv-main/
idf.py -p /dev/ttyUSB0 flash

Si todo fue bien, después de un rato de compilación, grabará los ficheros *.bin en el ESP32, para luego reiniciarse.
....
....
Writing at 0x000665df... (100 %)
Wrote 368880 bytes (223758 compressed) at 0x00010000 in 5.2 seconds (effective 567.4 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 103...
Writing at 0x00008000... (100 %)
Wrote 3072 bytes (103 compressed) at 0x00008000 in 0.1 seconds (effective 377.3 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...
Done

Si tenemos conectado la salida de vídeo a un televisor, veremos que arranca el emulador de el Spectrum.
Aconsejo que no conectéis la tarjeta SD la primera vez, de esta forma entraremos en el menú de selección de tipo 48K/128K
Tal y como compilamos las fuentes originales, el brillo es muy bajo, por lo que decidí estudiar el código.
En el fichero smain.c debemos retocar un poco el código para aumentar los niveles de salida de video.
Existen 2 líneas una comentada y otra descomentada, cambiarlas de forma que queden así.

//#define IRE(_x)            ((uint32_t)(((_x)+40)*255/3.3/147.5) << 8)   // 3.3V DAC
#define IRE(_x)          ((uint32_t)(((_x)+40)*255*2/3.3/147.5) << 8)   // 3.3V DAC

Esto lo que hace es cambiar los niveles iniciales de la señal de vídeo.
Ahora el nivel de brillo es bastante mejor, y aún se podría poner mejor, pero no he querido retocar el código original.

Las ROMS de programas del Spectrum deberán grabarse dentro de un directorio z48 si son del modelo 48K y en un directorio z128 si son del modelo de 128K.
Todo esto está documentado en el fichero README.md que se encuentra en las fuentes.
En este mismo fichero se explica la conexiones del ESP32 al teclado y a la SD.

1 Analog color PAL-TV 50 Hz output: (GPIO25)
2 Two  (bitband) USB-HID controllers (DP/DM) GPIO16/ GPIO17 - USB 1 GPIO18/ GPIO19 - USB 2
3 Emulation  AY-3-8910 (GPIO27)
4 SDCard control (.tap .z80 .sna) read pins:
    PIN_NUM_MISO 2
    PIN_NUM_MOSI 15
    PIN_NUM_CLK 14
    PIN_NUM_CS 13
5 Screen width F4/F5
6 Tape speed normal/fast F11/F12


Esquema de conexión.


He utilizado la placa de mi anterior montaje.


Menú de selección de ROMS


Jugando al JET PAC.


Muestra de una línea de la señal PAL.

Ya puedo jugar a mi juego preferido en el ZX Spectrum   PENETRATOR
Como podemos observar, la calidad del video compuesto no es el mejor, y sobre todo si utilizamos las pantalla planas, pero se puede jugar perfectamente.

Gracias Samsonov Dima


Saludos.
Juan Galaz



Bibliografía:

https://github.com/sdima1357
https://github.com/sdima1357/spectrum128_esp32_usb_host_pal_tv




miércoles, 9 de septiembre de 2020

Multi ROM para ZX Spectrum con EEPROM 49F002 o 39SF020


Multi ROM
ZX Spectrum

49F002 o 39SF020


El el anterior artículo había diseñado un grabador de EEPROM ardrom.html.
Este artículo se basa en:  http://trastero.speccy.org/cosas/droy/cartuchos/cartuchos_s.htm
En este caso voy a utilizar unas EEPROM de 256 Kytes (49F002 o 39SF020), por lo cual se conseguirán 16 páginas de 16 Kbytes, que serán las que sustituyan a la ROM original del Spectrum.
Las diferentes páginas (16) se van a seleccionar mediante 4 microinteruptores.
Estos microinterruptores tienen lógica inversa, por lo que para la página cero  debemos tener en ON los cuatro microinterruptores.
Cuando se inserta el cartucho se deshabilita la ROM interna del ZX Spectrum, mediante la colocación de la línea /ROMCS a 1.
El circuito detecta cuando las direcciones A14-A15 están a 0, además de que MREQ esta a 0 (acceso a memoria, tiene lógica inversa). En este caso se habilita la EEPROM, donde sustituye a la ROM original.


Esquema del circuito.




Circuito impreso, donde solo existe un puente con cable.



En mi caso he grabado 5 ROMS.

1111 -Rom original.
0111 -Rom gw03v33.rom , en esta ROM debemos teclear todos los caracteres del lenguaje Basic.
1011 -Rom 48-plus4.rom , ROM amstrad donde debemos teclear todos los caracteres del lenguaje Basic.
0011 -Rom CHESS.ROM .
1101 -Rom JETPAC.ROM .


Este pequeño ordenador me da aún juego después de 35 años, algo debe tener este ordenador.

Dibujo de pista C.I.


Bibliografía:

http://trastero.speccy.org/cosas/droy/cartuchos/cartuchos_s.htm

http://trastero.speccy.org/cosas/droy/droy.htm#cartuchos
https://k1.spdns.de/Vintage/Sinclair/82/Doityourself/IF2%20cartridges/
http://trastero.speccy.org/cosas/JL/InterfazROMexterno/InterfazROM.html



Saludos.
Juan Galaz




jueves, 13 de agosto de 2020

O.T.L.A. Project Amplificador para ZXSpectrum

O.T.L.A. Project
Amplificador para ZXSpectrum


Todos tenemos un pasado, y en mi pasado está el ZXSpectrum, fue mi primer ordenador.
El estar cargando los programas desde las cintas es una experiencia que la gente joven desconoce.
En el  tiempo que tardaban los programas en cargar se podía uno hacer un bocadillo, y aún sobraba tiempo.
Y estábamos contentos si no se producía ningún error de carga, las cintas alguna vez daban problemas.
El caso que en estos días he estado cachareando con el Spectrum, y en mi anterior montaje había realizado un cargador de programas desde una SD. zxard.html
Como una cosa traen a otra, mirando por internet encontré un programa que prometía reducir el tiempo de carga de los programas del ZXSpectrum a 30 segundos. Esto me parecía bastante difícil, pero había que probarlo.
El proyecto se encuentra en: https://code.google.com/archive/p/otla/wikis/ProyectoOtla.wiki
Existe una página que explica bastante bien todos los pasos:
https://sites.google.com/site/hyperkingproject/tutoriales/modificaciones/compresiondejuegosdespectrumaaltavelocidadotla

Para crear el audio debemos utilizar el programa llamado O.T.L.A. que transforma diferentes formatos a un fichero de mp3.

El programa funciona en Windows, aunque yo lo he probado en Linux con Wine y funciona perfectamente.
Soporta varios formatos, pero el que menos problemas me ha dado fue el Z80, que es una imagen de memoria.
Como podéis observar no solo sirve para el Spectrum, funciona para MSX, CPC y Z81.
Existen numerosas opciones, pero yo no he tocado nada respecto a las que vienen prefijadas.
Cargamos el fichero en formato Z80 y luego lo transformamos en un fichero MP3.
El fichero ya lo podemos utilizar tanto con la salida de audio del PC como con un MÓVIL o TABLET.

Aquí me encontré el primer problema, los niveles de audio.
En algunos modelos de PC o MÓVIL  las salidas de audio no suele superar 1V, esto ya pasaba con algunos cassetes que no servían para los Spectrum. He tenido que crear un adaptador/amplificador de niveles de audio, solo emplea un transistor, condensadores y resistencias, es el típico amplificador.
Para la alimentación he utilizado un conector USB, de esta forma puedo utilizar un cargador común de Red,  o una POWER-BANK como en mi caso.




Circuito montado.


También podéis mirar en otros modelos de móvil si la salida tiene suficiente nivel de audio, yo he encontrado uno que tenía retirado. WIKO lubi3 , se puede encontrar desde 15€ y funciona de maravilla para reproducir MP3.


Las pruebas son sorprendentes, nunca pensé que se pudiera cargar tan rápido los programas, 30 segundos.
No he probado a modificar ninguna opción, me he quedado paralizado por la sorpresa, me sobra cualquier otra prueba.
He reproducido los MP3 generados tanto en el PC como en un MÓVIL funcionando perfectamente, eso sí, debemos de ajustar los niveles de audio, pero eso ya nos pasaba cuando utilizábamos las cassettes.
LARGA VIDA AL ZX SPECTRUM

 


otla_bin_win_2.2.0.zip

VIDEO DE LA PRUEBA

Saludos.
Juan Galaz


Bibliografía:

https://code.google.com/archive/p/otla/wikis/ProyectoOtla.wiki
https://sites.google.com/site/hyperkingproject/tutoriales/modificaciones/compresiondejuegosdespectrumaaltavelocidadotla

domingo, 2 de agosto de 2020

TZXDuino Arduino - ZXSpectrum


TZXDuino
Arduino - ZXSpectrum


En los años 80 compré mi primer ordenador, el ZXSpectrum.
Era mi primer contacto con los ordenadores, y después de muchos años aún sigo con la programación.
Aprendí  a programar en Basic, por lo cual tengo mucho cariño al Basic y sigo pensando que es muy buen lenguaje de programación.
El oír el audio de los programas cargando en el ordenador, aún me emociono.
El otro día descubrí el proyecto TZXDuino, era una especie de casete que transforma los ficheros TAP en audio que lee el Spectrum.
Es fácil de realizar y bastante barato.  Se necesita un arduino, LCD, SD, 5 botones, y algunos componentes mas.
El proyecto original utiliza un amplificador LM386, como no tenía este Chip, he modificado el esquema y utilizo un transistor común.
El proyecto original está en: https://github.com/sadken/TZXDuino
También se han creado muchos proyectos paralelos para cargar programas de MSX,  Amstrad, C64, etc...
Este montaje solo lo he probado en ZXSpectrum, funcionando perfectamente.
También he cambiado el módulo adaptador SD por unas resistencias que adaptan los niveles de la SD al Arduino.
Como podéis ver lo he modificado para ser lo más simple y batato posible.



Con el adaptador SD







Con las resistencias adaptadoras de voltajes.
Se  repite el esquema debido a que los esquemas que se hacen con  Tritzing son bastante malos.

He colocado un puente con un condensador para filtrar la señal de salida, en el caso de Spectrum utilizado funciona igual, pero en otros modelos puede ayudar a leer mejor los programas.
Me hubiese gustado colocar un potenciómetro en vez de las dos resistencias, pero no he querido complicar el circuito.

Con el filtro.

sin el filtro.


Montado todo en un circuito impreso.


Funcionando el circuito.

Tenemos que colocar todos los ficheros TAP en el directorio raíz de la tarjeta SD.
Con los pulsadores de circuito seleccionaremos el fichero correspondiente que se quiere reproducir.
Existe un menú con opciones que podremos seleccionar para las diferentes configuraciones.
Como hay varias versiones del TZXDuino, incluyo los que he utilizado en este montaje, y es la que he probado en el Spectrum..
La alimentación se puede realizar de diferentes formas, desde el USB del arduino, con adaptador de un cargador común a la Red,  con una POWER-BANK como en mi caso. También mediante una pila de 9V colocada al pin  del arduino Vin,  (admite entre 5 y 12V).
El consumo del circuito está entre los 30 a 35 mA.

PROGRAMA





VIDEO

Saludos.
Juan Galaz


Bibliografía:

https://github.com/sadken/TZXDuino
https://github.com/rcmolina/MaxDuino_v1.56
https://auamstrad.es/hardware/conoce-el-maxduino/
Colección de ficheros TAP  http://biotoxin.speccy.org/p.html