Humble48 - Clon Spectrum 48k

Proyectos de hardware con sus esquemáticos y si llevan software en fuente

Moderadores: cacharreo, Fundadores

Reglas del Foro
Aquí solo tienen cabida proyectos de hardware que incluyan siempre al menos sus esquemáticos para poder reproducirlos si llevan componentes electrónicos, y si es posible los ficheros del programa en que se hacen, los diseños de las placas, los gerber, etc. Si llevan algún tipo de software asociado debe estar diponible el código fuente

Para los que no cumplen estas condiciones se debe postear en el foro de proyectos generales.
Avatar de Usuario
jgilcas
Demonio tercer orden
Demonio tercer orden
Mensajes: 587
Registrado: 08 Abr 2013, 22:16
Has thanked: 4 times
Been thanked: 9 times

Re: Humble48 - Clon Spectrum 48k

Mensaje por jgilcas »

flopping escribió:Y hay algún planteamiento de hacer un 128k?, solo pregunto por si acaso, jejejejeeje.
Voto a favor :)
ZX48, ZX48+, ZX128+2, ZX128+3, OREL BK08, A500, MSX2, VIC-20, C64C, CPC464, CPC6128, GAMEBOY, GAMEBOY POCKET, GAMEBOY COLOR, NES, SNES, N64, GBA, GBASP, GBAMICRO, GAMECUBE, GAMEGEAR, SMS, SMS2, MD1, MD2, MEGACD, SATURN, DC, XBOX, XBOX360, TG-16
Avatar de Usuario
flopping
Fundador
Fundador
Mensajes: 9971
Registrado: 29 Mar 2013, 15:26
Ubicación: Valencia
Been thanked: 122 times
Contactar:

Re: Humble48 - Clon Spectrum 48k

Mensaje por flopping »

jgilcas escribió: 20 Ene 2018, 01:16
flopping escribió:Y hay algún planteamiento de hacer un 128k?, solo pregunto por si acaso, jejejejeeje.
Voto a favor :)
No nos hagamos ilusiones, no sé si hay alguna implementación “libre” de la ULA de un 128k, creo que algo hay, pero no sé si estará disponible, alguna idea?.
No me hago responsable de mis post pues estan escritos bajo la influencia del alcohol y drogas psicotropicas, por la esquizofrenia paranoide.
(C) 1982-2024, 42 años de ZX Spectrum.
http://www.va-de-retro.com/ un foro "diferente".

Mi juego, que puedes descargar desde aqui
Avatar de Usuario
Pachuquin
Demonio tercer orden
Demonio tercer orden
Mensajes: 828
Registrado: 18 Ene 2014, 00:51
Ubicación: Septem fratres

Re: Humble48 - Clon Spectrum 48k

Mensaje por Pachuquin »

No sé si están disponibles los fuentes del core de Spectrum para el Zx-Uno, pero sería una buena base para empezar.

Si no, he encontrado un par de proyectos que implementan un Spectrum 128K en VHDL. No sé lo bien implementados que están.

https://github.com/mikestir/fpga-spectrum

https://github.com/andykarpov/karabas-128

Y aquí un ruso que explica como ha pasado su implementación de un 48K a 128K añadiéndole el sistema de paginación, la gestión de la rom y del AY.

https://visuale.ru/blog/speccy-zhivee-vsekh-zhivykh

Seguramentre, @Kyp puede echar una mano en esto.
Imagen
BCH
Demonio tercer orden
Demonio tercer orden
Mensajes: 973
Registrado: 06 Sep 2014, 12:10
Ubicación: Barcelona
Been thanked: 4 times

Re: Humble48 - Clon Spectrum 48k

Mensaje por BCH »

En el paquete del codigo que he utilizado para el Humble tambien hay una implementacion para 128K.
Avatar de Usuario
flopping
Fundador
Fundador
Mensajes: 9971
Registrado: 29 Mar 2013, 15:26
Ubicación: Valencia
Been thanked: 122 times
Contactar:

Re: Humble48 - Clon Spectrum 48k

Mensaje por flopping »

BCH escribió: 20 Ene 2018, 11:15 En el paquete del codigo que he utilizado para el Humble tambien hay una implementacion para 128K.
Ummmm interesante, ;) ;) :P
No me hago responsable de mis post pues estan escritos bajo la influencia del alcohol y drogas psicotropicas, por la esquizofrenia paranoide.
(C) 1982-2024, 42 años de ZX Spectrum.
http://www.va-de-retro.com/ un foro "diferente".

Mi juego, que puedes descargar desde aqui
Avatar de Usuario
Kyp !Sinclair 1
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 3383
Registrado: 30 Sep 2013, 14:54
Ubicación: Madrid
Has thanked: 28 times
Been thanked: 148 times

Re: Humble48 - Clon Spectrum 48k

Mensaje por Kyp »

Mi core de ZX-Uno también implementa un 128K :D pero la implementación en FPGA es mucho más sencilla que la de CPLD y no vale tal cual. Lo bueno es que no hace falta porque tenemos la implementación de mcleod de todas las ULAs.

Lo de que no funcione con Z80s NMOS probablemente es por los valores de las resistencias que 'separan' los buses. Están pensados para chips de 5V y como la CPLD da menos nivel yo creo que falla porque se atenúan demasiado. Seguramente bajando un poco el valor funcionarían. Habría que probar con 330 ohm en vez de 470 ohm.

Lo malo del DivMMC es que está el esquema y el JED de la CPLD, pero no los fuentes. Eso te obliga a usar su distribución de pines. Tenemos el código del ZX-Uno pero como con la ULA, no es igual para una FPGA que para una CPLD. Lo bueno es que teniendo montada la placa se podrían hacer pruebas. Es una cosa que tengo pendiente de hacer.
Avatar de Usuario
Kyp !Sinclair 1
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 3383
Registrado: 30 Sep 2013, 14:54
Ubicación: Madrid
Has thanked: 28 times
Been thanked: 148 times

Re: Humble48 - Clon Spectrum 48k

Mensaje por Kyp »

He hecho pruebas y los timings son "regulares". La contienda está desplazada (probado con ulatest3) y el primer byte de pantalla se pinta en el t-state 14336 como correspondería a un "early-timing" (probado con btime). Yo creo que es más habitual que los programas esperen un "late-timing". En los ULA tests de la ROM de test de Brendam Alford se ven unas cuantas líneas rojas arriba de la pantalla que son un indicador de que los timings están mal. Otro síntoma es que no se puede jugar al Abusimbel porque es como si estuviera una tecla pulsada permanentemente. Eso puede ser por que no he hecho el fix del EAR o porque la ULA implementa un teclado issue 2 (tengo que hacer más pruebas).
Avatar de Usuario
zx81
Aspirante a demonio
Aspirante a demonio
Mensajes: 499
Registrado: 19 Oct 2013, 16:27
Ubicación: Valencia
Has thanked: 11 times
Been thanked: 2 times
Contactar:

Re: Humble48 - Clon Spectrum 48k

Mensaje por zx81 »

Kyp escribió: 22 Ene 2018, 16:57 He hecho pruebas y los timings son "regulares". La contienda está desplazada (probado con ulatest3) y el primer byte de pantalla se pinta en el t-state 14336 como correspondería a un "early-timing" (probado con btime). Yo creo que es más habitual que los programas esperen un "late-timing". En los ULA tests de la ROM de test de Brendam Alford se ven unas cuantas líneas rojas arriba de la pantalla que son un indicador de que los timings están mal. Otro síntoma es que no se puede jugar al Abusimbel porque es como si estuviera una tecla pulsada permanentemente. Eso puede ser por que no he hecho el fix del EAR o porque la ULA implementa un teclado issue 2 (tengo que hacer más pruebas).
El Abu Simbel necesita un teclado Issue 2, aunque hay versiones que funcionan con el Issue 3, no recuerdo cuales de todas las que están en WoS.

¿Has probado con floatspy para saber cómo va el bus flotante?. También el "IR_contention" aunque éste debería ir bien porque lo que depende de la CPU lo hace de luxe, claro... :)
Today's robots are very primitive, capable of understanding only a few simple instructions such as 'go left', 'go right' and 'build car'.
John Sladek

Emulador de Spectrum JSpeccy.
Emulador de Spectrum Bare-metal para las Raspberry PI ZXBaremulator
Avatar de Usuario
Kyp !Sinclair 1
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 3383
Registrado: 30 Sep 2013, 14:54
Ubicación: Madrid
Has thanked: 28 times
Been thanked: 148 times

Re: Humble48 - Clon Spectrum 48k

Mensaje por Kyp »

zx81 escribió: 22 Ene 2018, 18:26 El Abu Simbel necesita un teclado Issue 2, aunque hay versiones que funcionan con el Issue 3, no recuerdo cuales de todas las que están en WoS.
Hacía mención al Abu Simbel precisamente porque prácticamente es el primer juego que pruebo siempre y lo uso de test de teclado :))
La versión que uso es la de teclado tipo issue 3 que debería funcionar bien pero en éste caso no lo hace. Si se lee el puerto hFE debería dar b1011111 pero lee b11111111. Creo que puede ser porque no he hecho el fix del sonido que precisamente afecta a lo que se lee en ese bit. Y lo que se lee en ese puerto afecta a que funcione bien o no el Abu Simbel. Tengo que probar haciendo el fix.
zx81 escribió: 22 Ene 2018, 18:26 ¿Has probado con floatspy para saber cómo va el bus flotante?. También el "IR_contention" aunque éste debería ir bien porque lo que depende de la CPU lo hace de luxe, claro... :)
Esos no los tengo. ¿De dónde me los puedo bajar?

Ya puestos, me interesaría mucho afinar el core de la ULA tanto para el Humble como para el ZX-Uno. En todas partes habla de T-estados que supongo se usa mucho en emulación pero en la implementación está todo referenciado a los contadores horizontal y vertical y no estoy del todo seguro de estar haciéndolo bien al pasar de una referencia a otra.

Por ejemplo, la interrupción de retrazo vertical debería saltar en T-14336. En la implementación del Humble se activa en v=248 y h=0 durante 32 ciclos, de ahí que funcione como un early-timing. Lo que no me cuadra es que dure 32 ciclos. Según entiendo yo, la interrupción se mantiene activa 32 ciclos de reloj de CPU que equivalen a 64 ciclos del reloj de la ULA. En mi implementación se activa en v=248 y h=2 durante 64 pulsos de reloj de ULA. Lo de retrasarlo al 2 del contador horizontal es para que sea en T-14337 y funcione como un late-timing, creo.
Avatar de Usuario
zx81
Aspirante a demonio
Aspirante a demonio
Mensajes: 499
Registrado: 19 Oct 2013, 16:27
Ubicación: Valencia
Has thanked: 11 times
Been thanked: 2 times
Contactar:

Re: Humble48 - Clon Spectrum 48k

Mensaje por zx81 »

Kyp escribió: 23 Ene 2018, 11:29
zx81 escribió: 22 Ene 2018, 18:26 ¿Has probado con floatspy para saber cómo va el bus flotante?. También el "IR_contention" aunque éste debería ir bien porque lo que depende de la CPU lo hace de luxe, claro... :)
Esos no los tengo. ¿De dónde me los puedo bajar?

Ya puestos, me interesaría mucho afinar el core de la ULA tanto para el Humble como para el ZX-Uno. En todas partes habla de T-estados que supongo se usa mucho en emulación pero en la implementación está todo referenciado a los contadores horizontal y vertical y no estoy del todo seguro de estar haciéndolo bien al pasar de una referencia a otra.

Por ejemplo, la interrupción de retrazo vertical debería saltar en T-14336. En la implementación del Humble se activa en v=248 y h=0 durante 32 ciclos, de ahí que funcione como un early-timing. Lo que no me cuadra es que dure 32 ciclos. Según entiendo yo, la interrupción se mantiene activa 32 ciclos de reloj de CPU que equivalen a 64 ciclos del reloj de la ULA. En mi implementación se activa en v=248 y h=2 durante 64 pulsos de reloj de ULA. Lo de retrasarlo al 2 del contador horizontal es para que sea en T-14337 y funcione como un late-timing, creo.
Como sé que lo conoces, en el repo SVN del ZX-Uno tienes un directorio llamado software/tests donde, entre otros muchos programas tienes el floatspy.tap. Vale tanto para 48k como para 128k. El que no tienen en ese repo es el IR_Contention, te lo puedo enviar a ti o a quien corresponda para que lo añada al repo.

A ver, porque creo que con los timings tienes un pequeño lío. La interrupción salta en el instante T-0, justo en el momento en que comienza un nuevo cuadro de imagen. En el instante T-14336 o T-14337, según sea early o late timing, se dibuja el primer byte de pantalla, que no es lo mismo. Creo que el Timex permite cambiar la interrupción, o la tiene, no sé bien, para que suceda justo cuando va a dibujar la pantalla, pero eso no es estándar Spectrum.

La INT se mantiene activa 32 ciclos de reloj Z80 (36 ciclos en el 128/+2, pero no en los +2a/+3) porque, en el peor caso, la instrucción más costosa en tiempo del Z80 creo que eran 24 ciclos, no recuerdo exactamente ahora, y eso sin contención. Como la INT se samplea al final de la ejecución de cada instrucción, el peor caso es empezar la ejecución de esa instrucción en el último ciclo del cuadro anterior.
Como la INT, a diferencia de NMI, se atiende por nivel y no pr flanco, hay que tener cuidado para no activar las interrupciones antes de hora o te volvería a saltar.

Lo de early-late timing no tiene mucha importancia. Mis dos emuladores son early y van ni más apañaos. :D
Today's robots are very primitive, capable of understanding only a few simple instructions such as 'go left', 'go right' and 'build car'.
John Sladek

Emulador de Spectrum JSpeccy.
Emulador de Spectrum Bare-metal para las Raspberry PI ZXBaremulator
Responder

Volver a “Proyectos de hardware abiertos”