Página 1 de 2

Core de SAM Coupé para ZX-Uno

Publicado: 28 Sep 2015, 03:25
por mcleod_ideafix
El hilo original lo escribí en Zona de Pruebas. Aquí sólo pondré los posts alusivos a la evolución del core. Las respuestas, reacciones, consejos y demás, leerlos allí.
Enlace original: http://www.zonadepruebas.com/viewtopic.php?f=29&t=6443

Bueno, pues para no ensuciar más el hilo del ZX-Uno, abro éste con los progresos que vaya obteniendo sobre la clonación/implementación/llámalo como quieras, del SAM Coupé en la FPGA del ZX-Uno.

Hasta ahora mismo, esto es lo que he conseguido, no sin pelearme con el puñetero core T80:
Imagen

Si no he llegado a esta pantalla antes ha sido, como decía, por el core T80. No solo estaba mal el tema de los timings del ciclo de bus de E/S, sino que la señal WAIT no se comporta como debe, parando a la CPU cuando le da la gana, dicho mal y pronto. He intentado arreglarlo, pero no he llegado más allá de poder hacer escrituras y lecturas de memoria correctas, pero fallando a veces en el ciclo de búsqueda de instrucción, cuando ésta debe cogerse de la RAM.

Así que buscando por ahí alguna versión más decente del T80, me he encontrado con que este fallo de WAIT es bastante común y el personal no se pone de acuerdo sobre qué versión del T80 es la mejor, así que he buscado desde el principio, y me he descargado el TV80: un core basado en el T80, pero hecho todo en Verilog (¡bien!) y que además está más actualizado (último commit en el 2012, frente al T80 que tiene el último commit en el 2008). En las notas del autor veo que se ha concentrado especialmente en arreglar el problema de WAIT.

Lo he probado y ha funcionado a la primera :)

Lo siguiente es ver qué pasa con el MODO 2, que no se muestra bien (los modos 1 y 3 sí van), arreglar unos glitches en el MODO 4 que hace que salgan unas rayas verticales cada 8 píxeles (justo cuando se supone que debe cargarse el registro de desplazamiento con nuevos datos

Ah! Y escribir un nuevo core de teclado. El que hay ahora mismo es heredado del Spectrum y no cubre todas las teclas del SAM, por lo que no puedo escribir la mayoría de signos de puntuación, necesarios para poder escribir comandos y probar más cosas.

Hay sonido tipo BEEP, pero no existe aún el SAA1099. Este tendré que escribirlo desde 0. No sé si hacer eso primero, o implementar el soporte para tarjeta SD emulando a una CF para poder usar Atom Lite. Si empiezo por esto último tendré a mi disposición almacenamiento masivo para hacer más pruebas, incluyendo pruebas de sonido con el core SAA que escriba, pero por otra parte, un controlador SD emulando a una CF tiene tela marinera. Ahora mismo, con esto que veis en pantalla, ocupo el 36% de la FPGA. Estoy acariciando la idea de usar como controlador SD a un pequeño coprocesador que incluya dentro del core, en lugar de hacerlo a pelo, con máquinas de estado. Del máster que hice el año pasado tengo implementados hasta tres procesadores completos en Verilog. De cada uno de ellos hice un emulador software y un ensamblador para escribir programas. Quizás alguno de ello sea lo suficientemente pequeño y flexible como par convertirlo en microcontrolador empotrado que maneje la SD

EDITO: las letras ya están en su sitio. Culpa mía por haber malinterpretado el offset donde comienza la pantalla relativo al contenido del registro VMPR, y es que el manual técnico da a entender que el offset no es 0000h sino 4000h, cuando en realidad sí que es 0000h. Hay un fallo de timing con la interrupción ráster (la que se dispara en la línea que quieras). Creo que la disparo demasiado tarde. Cosa de repasar los cronogramas que saqué del SAM "de verdad" :)
Imagen

Re: Core de SAM Coupé para ZX-Uno

Publicado: 28 Sep 2015, 03:27
por mcleod_ideafix
El TEST 2 está disponible, y con él:

- Soporte de teclado completo. Delicadito, pero completo. Con "delicadito" quiero decir que pasa como en el Spectrum: que si pulsas dos teclas en el teclado PS/2, pongamos, mayúsculas y la tecla del punto, para sacar los dos puntos, hay que asegurarse de que la tecla de las mayúsculas sea la primera que se pulsa y la última que se suelta. Si no, se queda "atascada" y en el caso del Coupé, en lugar de repetirte esa tecla ad infinitum, se queda el sistema medio lelo. Si os pasa eso, pulsad NMI (Ctrl-Alt-F5) y entonces la tecla que se quedó atascada se autorrepetirá pudiendo volver a pulsarla para callarla. Algún día arreglaremos esto. De momento, teclear con cuidadito :)

- El cassette, como ya comprobó Quest, funciona. ¡Y cómo funciona! Los 6MHz del Z80 ejecutando rutinas en ROM se notan, de forma que es posible cargar bloques de datos a 4 veces la velocidad del Spectrum sin que el SAM se despeine. Vale que no son las ultracargas de Antonio, pero no está nada mal, la verdad. Ya vereis.

- Arregladas (eso espero) algunas inconsistencias de timing con las interrupciones ráster. Una chorridemo que escribí hace años queriendo parecerse a la Shock Megademo, y que en el SAM se puede hacer con una sola mano y sin darse importancia, ya saca las rayas de color en su sitio. El efecto se puede ver aquí:
https://twitter.com/zxprojects/status/6 ... 1536779264

Y de momento no hay más: no hay disco, por supuesto, ni hay sonido SAA1099, ni DAC en el puerto paralelo. Si os apañais con el BEEP y amigos, pues estupendo. El sonido de carga aún no se escucha por el altavoz porque no se ha implementado ningún mixer. Probablemente lo deje para cuando implemente el SAA. Como hay rayitas en el borde, de momento nos apañamos (¡¡que sólo estamos en el segundo test!!)

Lo que sí podemos probar es la calidad gráfica del SAM Coupé. Pero esto se verá mejor en el video adjunto. Las utilidades y programas que se mencionan ahí ya han sido subidas al repositorio. En el apartado software/tools teneis el BMP2SCR y en software/playtap está el PLAYTAP, en código fuente y compilado para OSX y Win32. Recordad que PLAYTAP es una utilidad de línea de comandos. Si haceis doble clic en su icono no pasará nada.

NOTA: si vais a probar vuestras propias imágenes, escaladas antes a 256x192 con vuestro editor gráfico favorito. El BMP2SCR puede escalar una imagen también, pero el resultado no es tan bueno como el que produce un programa tal como Photoshop, Paint Sop Pro, GIMP o el mismo Irfanview, que dan más opciones de reescalado. Fijaos que en el video, la versión de la imagen que escojo ya está a 256x192 :)

phpBB [media]

Re: Core de SAM Coupé para ZX-Uno

Publicado: 28 Sep 2015, 03:28
por mcleod_ideafix
Quest escribió:Genial :) completo y con vidas infinitas ya da un poco menos de rabia jugar a él :lol:
Tendría que haber especificado que el que subí era demo. Ya corregiré los nombres de archivo en esos casos.
Y en el core TEST3 ya he corregido los errores de timing con la interrupción de linea y los valores de HPEN y LPEN. Ahora se ve mejor. Sigue haciendo unos extraños cuando pasa de pantalla o se mata una vida, pero el efecto "split screen" que usa para poner una paleta diferente a la parte de marcadores de la parte inferior de la pantalla ya lo hace bien.

Imagen

El TEST3 ya está disponible

Sobre lo que comentas del ProDOS: no, no hay nada implementado. Los puertos 128 y 129 dan $FF, lo esperado cuando no hay expansión de memoria, y el bit 7 de HMPR está a 0 para indicar que no hay expansión de memoria. No sé qué puede estar pasando.
EDITO: ya sé qué pasa: el bit 7 de HMPR se usa para habilitar la memoria externa. En un SAM Coupé, al habilitar ese bit se deshabilita la memoria interna para cualquier dirección a partir de 8000h. Yo no hago esa deshabilitación, y por tanto el ProDOS siempre "ve" memoria (ve la interna) aunque se habilite el susodicho bit 7. Y está arreglado :)

-- Actualizado 08 Ago 2015, 16:56 --

Con el core TEST3, tenemos:

Efecto 1: El fuego inferior, que quema la hoja no sale. SIGUE SIN SALIR.
Efecto 2: El efecto de los bobs solo se ve en la parte inferior de la pantalla, y con parpadeos y saltos raros. SIGUE PASANDO.
Efecto 6: Truecolor images. Funciona, pero antes de pasar la segunda capa a cada imagen, la imagen tiembla hacia la izquierda varias veces. Luego se estabiliza y se ve bien. ARREGLADO. SE VE PERFECTO.
Efecto 10: Justo después de los greets, deberían salir plasmas multicolor ondeantes del final, cuando se va formando "THE END", pero solo salen muy muy lentamente unas lineas horizontales, de 2 o 3 colores, sin moverse. Si esperas mucho rato (como unos 5 minutos o más) se va formando "THE END" entre medio de las lineas horizontales estáticas.[/quote]. ARREGLADO. SE VE PERFECTO.

Tengo la sospecha que el extraño que hace Manic Miner cuando cambia de pantalla o cuando te matan, y lo que ocurre en el efecto 2 vienen del mismo problema. Quest, ¿qué me puedes decir, que no venga en el manual técnico del SAM Coupé, sobre cómo se usan los registos HMPR, LMPR y VMPR?

EDITO: qué soso se me hace ahora ver el arranque del ZX-Uno con el core de Spectrum, con la cantidad de colores en alta resolución que tiene el SAM Coupé :P

Re: Core de SAM Coupé para ZX-Uno

Publicado: 28 Sep 2015, 03:29
por mcleod_ideafix
El TEST 3 ya tiene sonido SAA1099. Al menos, una versión preliminar que he escrito hoy domingo de un tirón :) . Las envolventes aún no están implementadas, pero todo lo demás sí (sus 6 canales, los 2 generadores de ruido, los 6 mezcladores estéreo, etc). A un nivel superior hay otro mezclador que lleva la señal del SAA y la mezcla con la de EAR, MIC y el BEEPER, así que se sigue escuchando el sonido "de 1 bit", y esta vez también se escucha MIC.

Prince of Persia, y alguna otra cosa que he probado, suena estupendamente, incluso sin las envolventes. No sé qué juegos harán uso de ella.

Manic Miner hace una cosa extraña: el sonido de la pantalla de presentación se escucha sin problemas. Le das a ENTER para jugar y el sonido de juego también es correcto. Sin embargo, cuando terminas la partida y vuelves a la pantalla inicial, se han perdido notas. No veo nada raro en el core del SAA1099 para que pase esto. Puede ser algo relacionado con las envolventes que aún no están (pero la primera vez sí funciona) o.... estoy empezando a sospechar que no tiene nada que ver con el SAA y es en realidad algún tipo de corrupción de memoria, que igual tiene algo que ver con el extraño que hace este juego cuando pierdes una vida o cambias de pantalla, en donde en la parte inferior, por un momento, se ve lo mismo que en la parte superior.

Re: Core de SAM Coupé para ZX-Uno

Publicado: 28 Sep 2015, 03:29
por mcleod_ideafix
Quest escribió:No obstante, revisando el repositorio de Opencores http://opencores.org/project,a-z80 veo que está prácticamente todo en Verilog, salvo algunas cositas.
Todo lo que sean archivos .sv o .vh son SystemVerilog, y de esos vi un montón en el repositorio...
Quest escribió:Por cierto, si se te ocurre alguna cosa más (yo sigo mirando cosas útiles para volcar) que pueda resultar útil para el testeo o debug del core actual, dímelo y lo voy pasando a cinta, es por ahorrarte tiempo y que no tengas que hacer conversiones a cinta, mientras haces otras cosas (además de tener vida, comer, pasear, dormir, claro :D :D)
Puessssss.... lo de los trackers estaría bien para terminar de pulir el SAA1099 :)

-- Actualizado 10 Ago 2015, 14:58 --

He actualizado el core TEST 3 con unos añadidos al SAA1099 para mejorar el rango dinámico: en los dos mezcladores finales hay un sistema de compresión gobernado por una pequeña ROM de 256 posiciones, que guarda los valores de "gamma" para aplicar al sonido. Aún no tenemos envolventes, sorry.

Se puede cambiar esta ROM generando otra con el programa gen_curva_compresor.c En él hay una constante GAMMA que está ahora mismo al valor 0.75. El rango de valores posibles es 0 < GAMMA <= 1. Si es 1, no hay compresión, y la mezcla es completamente lineal. Si se acerca mucho a 0, habrá mucha compresión.

Que haya mucha compresión significa que cuando la música en origen es muy bajita, el sistema la amplifica mucho, y a medida que su volumen sube, el factor de amplificación es menor hasta que llega un punto en que no se amplifica nada y se queda como está. La cantidad de amplificación en valores bajos depende de este valor GAMMA: cuanto más cercano a 0, más amplificación.

Podeis probar por tanto variando dentro de sus límites el valor de GAMMA, ejecutando de nuevo el programa, que creará un fichero .hex con los valores para la ROM, y en pantalla aparecerá la relación entre valores de entrada (de 0 a 186) y valores de salida (de 0 a 255). En la entrada, aunque es de 8 bits, nunca habrá valores mayores de 186, ya que son 6 canales los que se mezclan, con un rango de 0 a 31 cada uno, lo que nos da un valor máximo de entrada de 31*6 = 186. Por eso en la ROM los valores que corresponden a las posiciones 187 a 255 valen todos 255: en realidad el sistema nunca llega a usarlos.

Sobre los fallos en Tetris y en el efecto truecolor de SCDIT... no sé qué he hecho con VMPR o con HPEN o con LPEN o vaya usté a saber, que no consigo que se vuelva a ver la franja con el texto desplazándose. Tengo que tirar de repositorio a ver qué hice o qué no hice en el core en el que sí funcionaba eso.

Con todo, es usable, y jugable :) ¡Para llevar 10 días escribiendo la descripción en Verilog tampoco se puede pedir más! (bueno, sí, que alguien traduzca el A-80 a Verilog, o al menos, a EDIF)

Re: Core de SAM Coupé para ZX-Uno

Publicado: 28 Sep 2015, 03:30
por mcleod_ideafix
Test 4 del SAM Coupé. Sigo limando fallos en el core SAA1099. Al menos, ahora el teclado no se atasca, o eso espero. El mismo "apaño" se lo he añadido al core de Spectrum, en el test 19.

Re: Core de SAM Coupé para ZX-Uno

Publicado: 24 May 2016, 15:35
por weirdocollector
Hola !

Sorgelig en el foro MIST ha lanzado un core de SAM COUPE , basado en el del ZX UNO, que soporta imágenes de disco de sóla lectura (MGT, SDF,ESDF).

Tal vez sea posible añadir esta característica también al core ZX UNO?

Re: Core de SAM Coupé para ZX-Uno

Publicado: 07 Ago 2016, 23:38
por Turrican
Hello!
Where I can find tape programs for SAM Coupe? It´s very hard to find.
WinTZX is a good program to load TAP files on SAM.

Thanks!

Re: Core de SAM Coupé para ZX-Uno

Publicado: 08 Ago 2016, 03:16
por mcleod_ideafix
Turrican escribió:Hello!
Where I can find tape programs for SAM Coupe? It´s very hard to find.
WinTZX is a good program to load TAP files on SAM.

Thanks!
Take a look at our repository, directory software/SamCoupe

Re: Core de SAM Coupé para ZX-Uno

Publicado: 08 Ago 2016, 14:22
por Turrican
All loaded OK with WinTZX.

Thanks!