Core alternativo de Kyp
Re: Core de Spectrum alternativo
Pues si, ha sido realmente fácil. He cogido el archivo multiboot.v, lo he añadido al proyecto, he definido una tecla y añadido una nueva señal al manejador del teclado para activar el master reset, y ya está funcionando
Ahora estoy intentando que funcione el DivMMC. El caso es que se activa la ROM al arrancar y me muestra el nombre de la tarjeta SD pero luego parece que da error al leer el primer archivo (pasa muy rápido) y luego se cuelga al pulsar la NMI. Debo estar haciendo algo mal en el mapeo de la ROM/RAM.
Ahora estoy intentando que funcione el DivMMC. El caso es que se activa la ROM al arrancar y me muestra el nombre de la tarjeta SD pero luego parece que da error al leer el primer archivo (pasa muy rápido) y luego se cuelga al pulsar la NMI. Debo estar haciendo algo mal en el mapeo de la ROM/RAM.
- chernandezba
- Mensajes: 841
- Registrado: 02 Oct 2015, 23:35
Re: Core de Spectrum alternativo
Si te sirve de algo, en las especificaciones del mapeo de memoria en divide/divmmc dice algo así como "se mapea después de leer el opcode" o "se mapea después de ejecutar el opcode"... No recuerdo exactamente que decía, lo que sí que se es que en ZEsarUX, si lo hacía como decía la especificación, no funcionaba. Donde decía "antes" tuve que hacer un "después" (o al revés). Quizá te sirva de pista
Lo de la NMI no lo probaria hasta que no estés seguro que carga todo correctamente (al menos que puedas hacer un .ls). Si no hace ni tan siquiera eso, la NMI no te funcionará pues no habrá cargado el archivo NMI.SYS (esxdos necesita cargar ese archivo para gestionar la nmi, sino, la nmi simplemente resetea la máquina)
Lo de la NMI no lo probaria hasta que no estés seguro que carga todo correctamente (al menos que puedas hacer un .ls). Si no hace ni tan siquiera eso, la NMI no te funcionará pues no habrá cargado el archivo NMI.SYS (esxdos necesita cargar ese archivo para gestionar la nmi, sino, la nmi simplemente resetea la máquina)
Re: Core de Spectrum alternativo
En teoría se mapea la ROM después del ciclo M1 de la CPU. La operación dura 4 pulsos de reloj. M1 se activa al comienzo del T1 y se desactiva al final de T2. Durante T3 y T4 se hace el refresco. Es decir, el cambio de ROM se hace cuando M1 se desactiva, a la mitad del ciclo. En el siguiente ciclo, ya sea otro M1 o un acceso a la memoria de otro tipo, se debe leer/escribir ya en la memoria del divmmc. Creo que eso es lo que hace mi código y debería funcionar bien.
Mi sospecha va más por que no debo estar mapeando el 'trozo' correcto de ROM o RAM. Según yo entiendo, si se accede a los primeros 8K se debería mapear la ROM excepto si estamos en modo MAPRAM en cuyo caso se mapea la página 3 de la RAM en vez de la ROM. Si se accede a los segundos 8K se mapea la página seleccionada de RAM.
Al arrancar empieza a cargar el primer módulo, ESXDOS.SYS, e inmediatamente continua con el reset. No llega ni a intentar cargar el NMI.SYS.
Mi sospecha va más por que no debo estar mapeando el 'trozo' correcto de ROM o RAM. Según yo entiendo, si se accede a los primeros 8K se debería mapear la ROM excepto si estamos en modo MAPRAM en cuyo caso se mapea la página 3 de la RAM en vez de la ROM. Si se accede a los segundos 8K se mapea la página seleccionada de RAM.
Al arrancar empieza a cargar el primer módulo, ESXDOS.SYS, e inmediatamente continua con el reset. No llega ni a intentar cargar el NMI.SYS.
- chernandezba
- Mensajes: 841
- Registrado: 02 Oct 2015, 23:35
Re: Core de Spectrum alternativo
Si quieres échale un vistazo a mi código a ver si te sirve de ayuda:
https://sourceforge.net/p/zesarux/code/ ... diviface.c
https://sourceforge.net/p/zesarux/code/ ... diviface.c
- mcleod_ideafix
- Mensajes: 831
- Registrado: 27 Sep 2015, 00:14
- Ubicación: Jerez de la Frontera
- Contactar:
Re: Core de Spectrum alternativo
Recuerda que ESXDOS necesita 128KB de SRAM en DivMMC para funcionar por completo (si no usas el menú NMI y lo haces todo por linea de comandos, te basta con 32KB de SRAM)
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA
Re: Core de Spectrum alternativo
Estoy usando los bits 5 a 0 del registro de control del divmmc, es decir, 512 KB.
He dividido los 2 Mb de SRAM en cuatro bloques de 512 KB. El primero es la RAM del Specturm (solo uso 64K, de momento), el segundo entero para el DivMMC, y lo que queda de momento no lo uso.
He dividido los 2 Mb de SRAM en cuatro bloques de 512 KB. El primero es la RAM del Specturm (solo uso 64K, de momento), el segundo entero para el DivMMC, y lo que queda de momento no lo uso.
- antoniovillena
- Mensajes: 2621
- Registrado: 27 Sep 2015, 20:41
Re: RE: Re: Core de Spectrum alternativo
En ZX-Uno tiene 512kb de SRAM. La pcb acepta memorias de 2mb pero el precio de momento es prohibitivo.Kyp escribió:Estoy usando los bits 5 a 0 del registro de control del divmmc, es decir, 512 KB.
He dividido los 2 Mb de SRAM en cuatro bloques de 512 KB. El primero es la RAM del Specturm (solo uso 64K, de momento), el segundo entero para el DivMMC, y lo que queda de momento no lo uso.
Re: Core de Spectrum alternativo
Pues igual va a ser eso
No se de donde me he sacado lo de los dos megas
---Edito---
Supongo que lo de los 2 MB es por los 21 pines definidos en el UCF. Supongo que no se usan todos.
No se de donde me he sacado lo de los dos megas
---Edito---
Supongo que lo de los 2 MB es por los 21 pines definidos en el UCF. Supongo que no se usan todos.
Última edición por Kyp el 21 Sep 2016, 22:37, editado 1 vez en total.
Re: Core de Spectrum alternativo
Pues sí, era eso. He cambiado los bloques a 128K y casi, casi, funciona. Arranca, detecta la tarjeta, carga los tres .SYS diciendo OK (estoy usando la versión 0.8.5), el comando .ls me devuelve bien el listado de archivos, al pulsar la NMI me sale el browser y puedo seleccionar un archivo... pero no carga bien. He probado varios juegos y la pantalla, por ejemplo, sale bien casi todo menos alguna que otra línea con basura, y al final da un R Tape Loading Error.
Ya casi está
Ya casi está
Re: Core de Spectrum alternativo
Bueno, pues por fin tengo un core operativo. Adjunto lo dejo por si algún valiente quiere probar :
Importante. Emula solo un Spectrum 48K sin contención de memoria, con DivMMC y salida RGB/CVBS 15 KHz.
El mapeado del teclado es diferente:
- MAYUSCULAS izquierdo = CS
- MAYUSCULAS derecho = SS
- Cursores = CS+5..8
- Escape = CS+Space
- Teclas 0..9, A..Z y ENTER como en el Spectrum.
- F5 = NMI
- F11 = HardReset (reiniciar el ZX-Uno para que arranque la BIOS)
- F12 o Ctrl+Alt+Del = SoftReset (reiniciar el Spectrum)
Aquí están los fuentes del proyecto:
https://1drv.ms/f/s!Aj2oYYIgITnQkDGJqFjaBwlgIxUU
El procedimiento es el habitual. Descomprimir y copiar el archivo CORE9.ZX1 a la tarjeta SD y actualizar desde la BIOS.Importante. Emula solo un Spectrum 48K sin contención de memoria, con DivMMC y salida RGB/CVBS 15 KHz.
El mapeado del teclado es diferente:
- MAYUSCULAS izquierdo = CS
- MAYUSCULAS derecho = SS
- Cursores = CS+5..8
- Escape = CS+Space
- Teclas 0..9, A..Z y ENTER como en el Spectrum.
- F5 = NMI
- F11 = HardReset (reiniciar el ZX-Uno para que arranque la BIOS)
- F12 o Ctrl+Alt+Del = SoftReset (reiniciar el Spectrum)
Aquí están los fuentes del proyecto:
https://1drv.ms/f/s!Aj2oYYIgITnQkDGJqFjaBwlgIxUU
Última edición por Kyp el 30 Sep 2016, 19:01, editado 1 vez en total.