ZXPP, clon de Spectrum en una Papilio Pro
Moderador: Fundadores
- antoniovillena
- Demonio segundo orden
- Mensajes: 1596
- Registrado: 02 Abr 2013, 19:06
- Been thanked: 1 time
Re: ZXPP, clon de Spectrum en una Papilio Pro
Ha ampliado la respuesta: " [8/31, 18:55] McLeod: que replique el circuito de EAR del MSX
[8/31, 18:56] McLeod: que es el que conozco mas sofisticado
[8/31, 18:56] McLeod: pero que lo modifique para que funcione a 3.3v
[8/31, 18:56] McLeod: aunque
[8/31, 18:56] McLeod: con dos transistores hay de sobra"
[8/31, 18:56] McLeod: que es el que conozco mas sofisticado
[8/31, 18:56] McLeod: pero que lo modifique para que funcione a 3.3v
[8/31, 18:56] McLeod: aunque
[8/31, 18:56] McLeod: con dos transistores hay de sobra"
-
Kyp
- Hermano de Lucifer
- Mensajes: 3401
- Registrado: 30 Sep 2013, 14:54
- Ubicación: Madrid
- Has thanked: 31 times
- Been thanked: 163 times
Re: ZXPP, clon de Spectrum en una Papilio Pro
Recuerdo vagamente de cuando estudiaba electrónica haber hecho prácticas con operacionales. Incluso el otro día, haciendo recuento de chips, vi que tengo por ahí un uA741 que si no recuerdo mal es un amplificador operacional. Pero no se si sabría como usarloantoniovillena escribió:Hola kyp, yo de analógica no entiendo, pero le he preguntado a McLeod. Dice que pongas un amplificador operacional.
![Ofuscado =)](./images/smilies/sc_jembarassed.gif)
Bueno, miraré por ahí a ver si me inspiro.
Claro, lo subiré que ahí estará más a mano. De todas formas no es una modificación del ZX-Uno, es una implementación que he hecho yo desde cero. Lo único que he 'tomado prestado', al menos de momento, es el módulo del teclado PS/2 (la primera versión) aunque la he retocado un poco para quitar las cosas que no no soporta mi clon.antoniovillena escribió:Si no te importa puedes subir las modificaciones que has hecho al repositorio del zxuno, para que cualquier otro que tenga una papilio pro pueda probarlo
Cuando consiga hacer funcionar la SDRAM intentaré adaptar la parte del DivMMC. Ya he estado mirando como va.
- antoniovillena
- Demonio segundo orden
- Mensajes: 1596
- Registrado: 02 Abr 2013, 19:06
- Been thanked: 1 time
Re: ZXPP, clon de Spectrum en una Papilio Pro
Si, un 741 me suena a operacional. Básicamente te multiplica por un número muy alto la diferencia de voltaje de los terminales de entrada. Si necesitas reducir esa ganancia lo configuras en lazo cerrado, pero lo que a ti te interesa es que esté siempre en saturación, por tanto en lazo abierto.
Pues si es implementación independiente mejor aún. En este caso mejor contacta con Quest, que está muy activo últimamente y se le da bien portar cores al zxuno. Voy a informarle de este hilo.
Pues si es implementación independiente mejor aún. En este caso mejor contacta con Quest, que está muy activo últimamente y se le da bien portar cores al zxuno. Voy a informarle de este hilo.
-
sinclair200
- Moderador
- Mensajes: 10000
- Registrado: 28 Mar 2014, 18:25
- Ubicación: Madrid
- Has thanked: 8 times
- Been thanked: 178 times
Re: ZXPP, clon de Spectrum en una Papilio Pro
Resumiendo Kyp, esto es otro clon del spectrum por hard, o un emulador por hard?
Z80 INSIDE.........
WANTED:…………. CPC 6128 british
-
wilco2009
- Hermano de Lucifer
- Mensajes: 8156
- Registrado: 01 Abr 2013, 23:47
- Ubicación: Valencia
- Has thanked: 47 times
- Been thanked: 107 times
Re: ZXPP, clon de Spectrum en una Papilio Pro
Enhorabuena por esa adaptación!
"Aprender a volar es todo un arte. Aunque sólo hay que cogerle el truco. Consiste en tirarse al suelo y fallar".
Douglas Adams. Guía del autoestopista galáctico.
Douglas Adams. Guía del autoestopista galáctico.
- eltargui
- Demonio tercer orden
- Mensajes: 516
- Registrado: 29 Abr 2014, 16:33
Re: ZXPP, clon de Spectrum en una Papilio Pro
Muy bueno kyp. Esto quiero verlo el 25 en Parla.
ZX eltargui un blog dedicado a los micro-ordenadores Sinclair
-
Kyp
- Hermano de Lucifer
- Mensajes: 3401
- Registrado: 30 Sep 2013, 14:54
- Ubicación: Madrid
- Has thanked: 31 times
- Been thanked: 163 times
Re: ZXPP, clon de Spectrum en una Papilio Pro
Si que se le da bien, si. Ya he visto sus trabajos en el hilo del ZX-Unoantoniovillena escribió:Pues si es implementación independiente mejor aún. En este caso mejor contacta con Quest, que está muy activo últimamente y se le da bien portar cores al zxuno. Voy a informarle de este hilo.
![Riendo :))](./images/smilies/sc_jlaugh.gif)
![Riendo :))](./images/smilies/sc_jlaugh.gif)
![Riendo :))](./images/smilies/sc_jlaugh.gif)
Yo empecé así, intentando portar cores, pero el problema de la SDRAM es bastante insalvable y la BRAM de la FPGA se queda corta enseguida.
-
Kyp
- Hermano de Lucifer
- Mensajes: 3401
- Registrado: 30 Sep 2013, 14:54
- Ubicación: Madrid
- Has thanked: 31 times
- Been thanked: 163 times
Re: ZXPP, clon de Spectrum en una Papilio Pro
Es un clon por hard.sinclair200 escribió:Resumiendo Kyp, esto es otro clon del spectrum por hard, o un emulador por hard?
-
Kyp
- Hermano de Lucifer
- Mensajes: 3401
- Registrado: 30 Sep 2013, 14:54
- Ubicación: Madrid
- Has thanked: 31 times
- Been thanked: 163 times
Re: ZXPP, clon de Spectrum en una Papilio Pro
Cuenta con elloeltargui escribió:Muy bueno kyp. Esto quiero verlo el 25 en Parla.
![Muy Feliz :D](./images/smilies/sc_jgrin.gif)
-
Kyp
- Hermano de Lucifer
- Mensajes: 3401
- Registrado: 30 Sep 2013, 14:54
- Ubicación: Madrid
- Has thanked: 31 times
- Been thanked: 163 times
Re: ZXPP, clon de Spectrum en una Papilio Pro
Paso 03, juntando las piezas
Con la ULA parcialmente operativa ya tenemos todo lo necesario para sintetizar el Spectrum. Estos son los cinco módulos que necesitamos:
1. El generador de señales de reloj.
Usamos un DCM (digital clock manager) para generar, a partir del reloj interno de 32 MHz, las dos señales que usará nuestro clon, una de 25,175 MHz para la salida VGA y una de 14 MHz para la ULA. El módulo de la ULA dividirá por 4 la señal de 14 MHz para obtener los 3,5 MHz que conectaremos al módulo de la CPU.
Este módulo lo generamos con el asistente de creación de módulos del ISE, los IP cores.
2. La ULA.
Es el módulo que realizamos en el paso anterior. Lo he dividido en tres partes. El generador de salida de vídeo VGA, el generador de interrupciones de retrazo vertical, y la ULA en sí misma que agrupa los submódulos e implementa la lógica de almacenamiento del color del borde.
3. La CPU.
Me he tomado la libertad de usar los mismos archivos que el ZX-Uno, que a su vez están basados en el trabajo de otras personas. En los fuentes está la información de derechos y licencias, pero son de libre uso.
Si seguís el desarrollo del ZX-Uno habréis visto que no hay un core completamente exacto del Z-80. Este es el que parece que funciona mejor. Hay otro core que supuestamente es más exacto pero está escrito en un lenguaje HDL que no soporta el entorno de desarrollo gratuito de Xilinx (system verilog) así que, al igual que el equipo del ZX-Uno, no he podido probarlo.
4. La ROM.
Este módulo también lo generamos con el asistente de creación de módulos del ISE. Seleccionamos el IP core de "Block RAM/ROM" y creamos una ROM sencilla (un puerto) de 16K por 8 bits.
Aquí nos encontramos con un problema. Para tener algo más que una ROM vacía necesitamos un archivo de inicialización con el contenido de la misma. El asistente espera un archivo con extensión COE que no es más que un archivo de texto con un volcado de la ROM en un formato bastante simple.
He creado un programa que convierte los archivos BIN o ROM de cualquier emulador al formato COE. Lo incluyo en el paquete. Necesita .NET versión 4.
5. La RAM baja.
Al igual que la ROM, lo generamos con el asistente de creación de módulos del ISE. En este caso seleccionamos el tipo "True dual port RAM" de 16KB por 8 bits (una RAM con dos buses de datos y direcciones independientes). El resto de opciones son por defecto.
Ya sólo nos queda conectarlos entre sí. Para ello declaramos unas cuantas señales y asignamos cada cosa a donde corresponde. Creo que el código es bastante claro.
Lo único de especial son las líneas finales:
Lo primero es que tanto RESET como NMI son activas a nivel bajo y en la placa los botones funcionan al revés, por eso las invertimos con un NOT.
Luego la señal de escritura en la memoria es la combinación de MREQ y WR a nivel bajo junto con el valor "01" en las líneas A15 y A14.
Y por último, el bus de datos. Mientras que el los chips reales el bus de datos vale tanto para entrada como para salida, en los módulos van por separado. Por lo tanto tenemos que decidir cual de las salidas de los distintos dispositivos se conecta a la entrada de la CPU. Para ello hay que tener en cuenta si se está accediendo a la memoria (MREQ) o a un dispositivo de entrada/salida (IORQ) y si se está leyendo (RD). Además, si se accede a la memoria hay que seleccionar si es la ROM (A15:A14 = 00) o a la RAM baja (A15:A14 = 01).
Con estos cinco módulos conectados entre sí tenemos nuestro Spectrum operativo. Veremos que arranca, hace el borrado de la memoria y sale el mensaje de (C) 1982 Sinclair Research Ltd.
Pero no tenemos ninguna forma de interactuar con él
Continuara...![Diablo :twisted:](./images/smilies/icon_twisted.gif)
Con la ULA parcialmente operativa ya tenemos todo lo necesario para sintetizar el Spectrum. Estos son los cinco módulos que necesitamos:
1. El generador de señales de reloj.
Usamos un DCM (digital clock manager) para generar, a partir del reloj interno de 32 MHz, las dos señales que usará nuestro clon, una de 25,175 MHz para la salida VGA y una de 14 MHz para la ULA. El módulo de la ULA dividirá por 4 la señal de 14 MHz para obtener los 3,5 MHz que conectaremos al módulo de la CPU.
Este módulo lo generamos con el asistente de creación de módulos del ISE, los IP cores.
2. La ULA.
Es el módulo que realizamos en el paso anterior. Lo he dividido en tres partes. El generador de salida de vídeo VGA, el generador de interrupciones de retrazo vertical, y la ULA en sí misma que agrupa los submódulos e implementa la lógica de almacenamiento del color del borde.
3. La CPU.
Me he tomado la libertad de usar los mismos archivos que el ZX-Uno, que a su vez están basados en el trabajo de otras personas. En los fuentes está la información de derechos y licencias, pero son de libre uso.
Si seguís el desarrollo del ZX-Uno habréis visto que no hay un core completamente exacto del Z-80. Este es el que parece que funciona mejor. Hay otro core que supuestamente es más exacto pero está escrito en un lenguaje HDL que no soporta el entorno de desarrollo gratuito de Xilinx (system verilog) así que, al igual que el equipo del ZX-Uno, no he podido probarlo.
4. La ROM.
Este módulo también lo generamos con el asistente de creación de módulos del ISE. Seleccionamos el IP core de "Block RAM/ROM" y creamos una ROM sencilla (un puerto) de 16K por 8 bits.
Aquí nos encontramos con un problema. Para tener algo más que una ROM vacía necesitamos un archivo de inicialización con el contenido de la misma. El asistente espera un archivo con extensión COE que no es más que un archivo de texto con un volcado de la ROM en un formato bastante simple.
He creado un programa que convierte los archivos BIN o ROM de cualquier emulador al formato COE. Lo incluyo en el paquete. Necesita .NET versión 4.
5. La RAM baja.
Al igual que la ROM, lo generamos con el asistente de creación de módulos del ISE. En este caso seleccionamos el tipo "True dual port RAM" de 16KB por 8 bits (una RAM con dos buses de datos y direcciones independientes). El resto de opciones son por defecto.
Ya sólo nos queda conectarlos entre sí. Para ello declaramos unas cuantas señales y asignamos cada cosa a donde corresponde. Creo que el código es bastante claro.
Lo único de especial son las líneas finales:
Código: Seleccionar todo
reset <= not netRST;
nmi <= not netNMI;
wloram <= '1' when mreq = '0' and wr = '0' and a(15 downto 14) = "01" else '0';
d <= dula when iorq = '0' and rd = '0' and a(0) = '0'
else drom when mreq = '0' and rd = '0' and a(15 downto 14) = "00"
else dloram when mreq = '0' and rd = '0' and a(15 downto 14) = "01"
else (others => '1');
Luego la señal de escritura en la memoria es la combinación de MREQ y WR a nivel bajo junto con el valor "01" en las líneas A15 y A14.
Y por último, el bus de datos. Mientras que el los chips reales el bus de datos vale tanto para entrada como para salida, en los módulos van por separado. Por lo tanto tenemos que decidir cual de las salidas de los distintos dispositivos se conecta a la entrada de la CPU. Para ello hay que tener en cuenta si se está accediendo a la memoria (MREQ) o a un dispositivo de entrada/salida (IORQ) y si se está leyendo (RD). Además, si se accede a la memoria hay que seleccionar si es la ROM (A15:A14 = 00) o a la RAM baja (A15:A14 = 01).
Con estos cinco módulos conectados entre sí tenemos nuestro Spectrum operativo. Veremos que arranca, hace el borrado de la memoria y sale el mensaje de (C) 1982 Sinclair Research Ltd.
Pero no tenemos ninguna forma de interactuar con él
![Sorprendido :o](./images/smilies/sc_jshocked.gif)
Continuara...
![Diablo :twisted:](./images/smilies/icon_twisted.gif)
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.