Problemas con EXP25

Avatar de Usuario
Uto
Mensajes: 1394
Registrado: 17 Dic 2015, 16:39

Re: Problemas con EXP25

Mensaje por Uto » 30 Jun 2017, 21:17

antoniovillena escribió:
Uto escribió:Por lo que veo algo chungo pasa si se pone la BIOS a 28Mhz ¿no?
El core es inestable a esa velocidad. La BIOS desde los comienzos se ajustó a velocidad máxima (28MHz). Lo que pasa es que los cores hasta el EXP25 ignoraban ese setting y se ponían a 14MHz. Por eso tuve que hacer esa rectificación.

Sí, eso he imaginado. Lo que no sabía es que el core fuera inestable a 28, pensaba que ya estaba OK.

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

Re: Problemas con EXP25

Mensaje por mcleod_ideafix » 30 Jun 2017, 21:46

Uto escribió:Por lo que veo algo chungo pasa si se pone la BIOS a 28Mhz ¿no?
El acceso a la flash SPI no está soportado para 28 MHz. Para el resto de periféricos (accesibles en modo usuario) no hay problema.
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
Uto
Mensajes: 1394
Registrado: 17 Dic 2015, 16:39

Re: Problemas con EXP25

Mensaje por Uto » 01 Jul 2017, 01:08

mcleod_ideafix escribió:
Uto escribió:Por lo que veo algo chungo pasa si se pone la BIOS a 28Mhz ¿no?
El acceso a la flash SPI no está soportado para 28 MHz. Para el resto de periféricos (accesibles en modo usuario) no hay problema.
No parece un grave problema para juegos o utilidades que puedan aprovecharlos, pero ojo, .romsupgr y .upgrade se ponen también a 28mhz y escriben en la flash. No sé qué tipo de inestabilidad tienen pero escribir inestablemente en la flash - especialmente en el caso de .upgrade que la escribe entera - parece peligroso,

Avatar de Usuario
Uto
Mensajes: 1394
Registrado: 17 Dic 2015, 16:39

Re: Problemas con EXP25

Mensaje por Uto » 01 Jul 2017, 11:33

Pues acabo de probar a hacer un .romsback en el EXP25, y aunque en teoría el código lo pone a 28Mhz, parece funcionar bien. Digo que lo pone a 28 porque lee el scandblcrtl y lo escribe después de hacerle un AND $3f y un OR $c0, y eso es poner los dos bits superiores a 1, es decir, a 28Mhz (en los cores Txx 14).

No me atrevo a hacer un .romsupgr la verdad, ¿quizá simplemente el core es inestable al acceder a la SPI flash a 28Mhz en determinadas circunstancias? O quizá es que tengo un ROMSBACK muy antiguo y no lo pone a 11 sino a 01 o algo así :roll:

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

Re: Problemas con EXP25

Mensaje por mcleod_ideafix » 02 Ago 2017, 14:51

Uto escribió:No me atrevo a hacer un .romsupgr la verdad, ¿quizá simplemente el core es inestable al acceder a la SPI flash a 28Mhz en determinadas circunstancias? O quizá es que tengo un ROMSBACK muy antiguo y no lo pone a 11 sino a 01 o algo así :roll:
O quizás el problema de las BIOS antiguas con el EXP25 no tiene nada que ver con el acceso a la Flash a 28 MHz. Eso fue una conjetura que hice, en base a los efectos que observé, pero podría ser otra cosa.

Por ejemplo: algo que no es un fallo de hardware en sí, pero que puede dar lugar a fallos de software es que tengas una rutina de interrupción que dure muy poquito. En el Spectrum el pulso de interrupción es de 64 estados de reloj de pixel (correspondientes a 32 estados de reloj de la CPU a velocidad normal). Desde que se dispara la interrupción hasta que es reconocida y se empieza a ejecutar la rutina de gestión de interrupciones pasan unos 20 ciclos de reloj (o más si es IM 2). Si la rutina de interrupción dura menos de 12 ciclos, cuando termine, aún no habrán pasado los 32 ciclos desde que se disparó, y por tanto la señal INT seguirá a nivel bajo, lo que significa que volverá a dispararse inmediatamente (INT se dispara por nivel, no por flanco). Que esto sea perjudicial o no para el programa, depende del propio programa.

En condiciones estándar, una rutina de interrupción dura bastante más de 12 ciclos, así que nunca se dispara otra inmediatamente, PEEEERO a 28 MHz (8 veces la velocidad normal), resulta que hay más probablidades de que una rutina de interrupción no demasiado larga termine antes de que se acaben los 32 ciclos de reloj (que desde el punto de vista de la velocidad de 28 MHz serían 256 ciclos de reloj). Si en la BIOS hay alguna rutina de interrupción este podría ser el caso.

Esto me da la idea de que probablemente sea buena idea acortar el pulso de interrupción para que siempre sean 32 ciclos de reloj de CPU, independientemente de la velocidad que tenga la CPU en cada momento. Probablemente no arregle nada con las BIOS antiguas, pero sí que mejorará la compatibilidad del core a 28 MHz con software preexistente el cual pretendamos acelerar.
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
Uto
Mensajes: 1394
Registrado: 17 Dic 2015, 16:39

Re: Problemas con EXP25

Mensaje por Uto » 02 Ago 2017, 17:11

Pues yo diría que va más por ahí, porque la BIOS tiene un IM 1 como tercera instrucción, y con IM 1 lo que ocurre es una interrupción enmascarable que llama a RST 38h, lo cual nos lleva en la BIOS a la rutina que lee el teclado y coloca lo actualmente pulsado en una variable, que el resto de la BIOS se encarga de leer cuando hace falta.

No es sorprendente por tanto que la BIOS se resetee cuando la rutina de interrupción termina, o inmediatamente si tienes pulsada una tecla. Quizá sea algo solucionable dentro de esa rutina, o quizá sea mejor que hagas tú eso que has dicho y que aunque mi cerebro ahora mismo no da para entenderlo, seguramente es muy sabio :-D

Responder