Core alternativo de Kyp

Avatar de Usuario
Kyp
Mensajes: 240
Registrado: 18 May 2016, 20:16

Re: Core de Spectrum alternativo

Mensaje por Kyp » 20 Sep 2016, 09:43

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 :D

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.

Avatar de Usuario
chernandezba
Mensajes: 841
Registrado: 02 Oct 2015, 23:35

Re: Core de Spectrum alternativo

Mensaje por chernandezba » 20 Sep 2016, 09:58

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)
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
Kyp
Mensajes: 240
Registrado: 18 May 2016, 20:16

Re: Core de Spectrum alternativo

Mensaje por Kyp » 20 Sep 2016, 22:58

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.

Avatar de Usuario
chernandezba
Mensajes: 841
Registrado: 02 Oct 2015, 23:35

Re: Core de Spectrum alternativo

Mensaje por chernandezba » 20 Sep 2016, 23:58

Si quieres échale un vistazo a mi código a ver si te sirve de ayuda:

https://sourceforge.net/p/zesarux/code/ ... diviface.c
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
mcleod_ideafix
Mensajes: 831
Registrado: 27 Sep 2015, 00:14
Ubicación: Jerez de la Frontera
Contactar:

Re: Core de Spectrum alternativo

Mensaje por mcleod_ideafix » 21 Sep 2016, 00:02

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

Avatar de Usuario
Kyp
Mensajes: 240
Registrado: 18 May 2016, 20:16

Re: Core de Spectrum alternativo

Mensaje por Kyp » 21 Sep 2016, 19:37

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.

Avatar de Usuario
antoniovillena
Mensajes: 2621
Registrado: 27 Sep 2015, 20:41

Re: RE: Re: Core de Spectrum alternativo

Mensaje por antoniovillena » 21 Sep 2016, 20:00

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.
En ZX-Uno tiene 512kb de SRAM. La pcb acepta memorias de 2mb pero el precio de momento es prohibitivo.

Avatar de Usuario
Kyp
Mensajes: 240
Registrado: 18 May 2016, 20:16

Re: Core de Spectrum alternativo

Mensaje por Kyp » 21 Sep 2016, 20:26

Pues igual va a ser eso :silbando: :rofl!:
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.

Avatar de Usuario
Kyp
Mensajes: 240
Registrado: 18 May 2016, 20:16

Re: Core de Spectrum alternativo

Mensaje por Kyp » 21 Sep 2016, 22:36

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á :roll:

Avatar de Usuario
Kyp
Mensajes: 240
Registrado: 18 May 2016, 20:16

Re: Core de Spectrum alternativo

Mensaje por Kyp » 30 Sep 2016, 18:07

Bueno, pues por fin tengo un core operativo. Adjunto lo dejo por si algún valiente quiere probar :silbando: :
CORE9.zip
(67.82 KiB) Descargado 486 veces
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.

Responder