Página 4 de 16

Re: Core de Spectrum alternativo

Publicado: 20 Sep 2016, 09:43
por Kyp
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.

Re: Core de Spectrum alternativo

Publicado: 20 Sep 2016, 09:58
por chernandezba
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)

Re: Core de Spectrum alternativo

Publicado: 20 Sep 2016, 22:58
por Kyp
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.

Re: Core de Spectrum alternativo

Publicado: 20 Sep 2016, 23:58
por chernandezba
Si quieres échale un vistazo a mi código a ver si te sirve de ayuda:

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

Re: Core de Spectrum alternativo

Publicado: 21 Sep 2016, 00:02
por mcleod_ideafix
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)

Re: Core de Spectrum alternativo

Publicado: 21 Sep 2016, 19:37
por Kyp
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: RE: Re: Core de Spectrum alternativo

Publicado: 21 Sep 2016, 20:00
por antoniovillena
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.

Re: Core de Spectrum alternativo

Publicado: 21 Sep 2016, 20:26
por Kyp
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.

Re: Core de Spectrum alternativo

Publicado: 21 Sep 2016, 22:36
por Kyp
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:

Re: Core de Spectrum alternativo

Publicado: 30 Sep 2016, 18:07
por Kyp
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 148 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