External ROMs +3 (ROMsde un +2A en un +2 gris) ¡Funcionando!
Publicado: Mar Ago 09, 2016 1:54 pm
Llevo un tiempo en un proyecto para hacer funcionar las ROMs de un +2A/+3e en un +2 gris mediante un interface externo que maneja las llamadas a los puertos $1FFD y $7FFD.
Las utilidades de esto pueden ser varias, pero la mejor que se me ocurre es que de esa manera puedes utilizar un interface de disquetera compatible con un +2A o también un interface IDE compatible con el proyecto +3e.
El hecho es que un +2A es poco más que un +2 gris con 4 páginas de ROM en lugar de 2, por lo que no esperaba grandes problemas en este tema.
A saber, y a grandes rasgos, las diferencias principales entre los dos sistemas son las siguientes, aunque no parece que ninguna de ellas pueda representar un problema para mi objetivo.
- El +2 gris tiene bus flotante como el 48K, a diferencia del +2A.
- Las páginas de memoria contenidas en el +2 gris son las impares (1,3,5 y 7). En el +2 negro son las páginas 4,5,6 y 7 (contando en ambos casos a partir de 0)
- En el +2 negro, la ULA tiene acoplo directo con la CPU en el bus de datos. De ahí que ninguna interfaz de teclado, o interfaz de joystick que mapee posiciones de joystick a pulsaciones de tecla, funcione en el +2 negro.
- En el +2 negro desaparece la función del puerto FFh (indocumentado, pero usado en algunos juegos para detectar cuándo la ULA está pintando la pantalla).
- En el +2A el puerto de expansión tiene algunos pines cambiados, como por ejemplo desaparece ROMCS y aparecen ROM1OE y ROM2OE.
El cambio en el bus ya lo he tenido en cuenta, por lo que no es un problema y el resto de diferencias parecen irrelevantes.
El hecho es que mi interface funciona a la perfección como ROM externa de un +2A, pero cuando lo pincho en un +2 gris me arranca en modo 48K.
Con un analizador lógico, he hecho una traza de la ejecución de las escrituras a los puertos $1FFD y $7FFD para ver en qué momento cambia a la página 3 y se queda definitivamente allí, y el resultado es que hace 24 escrituras a dichos puertos idénticas en ambos ordenadores y luego el +2A continúa haciendo escrituras y el +2 gris se queda en la página 3 (Basic) por lo que ya no vuelve a hacer ninguna escritura más.
¿Alguien conoce la forma de poder trazar esas escrituras de puertos en un emulador para ver si así puedo averiguar dónde está el problema?
Y ya que estamos, si a alguien se le ocurre dónde puede estar el problema y me puede echar un cable, se lo agradecería.
Esta es la secuencia en un +2A (los tiempos están contados a partir de la primera escritura de puerto que se produce)
Las utilidades de esto pueden ser varias, pero la mejor que se me ocurre es que de esa manera puedes utilizar un interface de disquetera compatible con un +2A o también un interface IDE compatible con el proyecto +3e.
El hecho es que un +2A es poco más que un +2 gris con 4 páginas de ROM en lugar de 2, por lo que no esperaba grandes problemas en este tema.
A saber, y a grandes rasgos, las diferencias principales entre los dos sistemas son las siguientes, aunque no parece que ninguna de ellas pueda representar un problema para mi objetivo.
- El +2 gris tiene bus flotante como el 48K, a diferencia del +2A.
- Las páginas de memoria contenidas en el +2 gris son las impares (1,3,5 y 7). En el +2 negro son las páginas 4,5,6 y 7 (contando en ambos casos a partir de 0)
- En el +2 negro, la ULA tiene acoplo directo con la CPU en el bus de datos. De ahí que ninguna interfaz de teclado, o interfaz de joystick que mapee posiciones de joystick a pulsaciones de tecla, funcione en el +2 negro.
- En el +2 negro desaparece la función del puerto FFh (indocumentado, pero usado en algunos juegos para detectar cuándo la ULA está pintando la pantalla).
- En el +2A el puerto de expansión tiene algunos pines cambiados, como por ejemplo desaparece ROMCS y aparecen ROM1OE y ROM2OE.
El cambio en el bus ya lo he tenido en cuenta, por lo que no es un problema y el resto de diferencias parecen irrelevantes.
El hecho es que mi interface funciona a la perfección como ROM externa de un +2A, pero cuando lo pincho en un +2 gris me arranca en modo 48K.
Con un analizador lógico, he hecho una traza de la ejecución de las escrituras a los puertos $1FFD y $7FFD para ver en qué momento cambia a la página 3 y se queda definitivamente allí, y el resultado es que hace 24 escrituras a dichos puertos idénticas en ambos ordenadores y luego el +2A continúa haciendo escrituras y el +2 gris se queda en la página 3 (Basic) por lo que ya no vuelve a hacer ninguna escritura más.
¿Alguien conoce la forma de poder trazar esas escrituras de puertos en un emulador para ver si así puedo averiguar dónde está el problema?
Y ya que estamos, si a alguien se le ocurre dónde puede estar el problema y me puede echar un cable, se lo agradecería.
Esta es la secuencia en un +2A (los tiempos están contados a partir de la primera escritura de puerto que se produce)
Y esta otra la de un +2 grisTime[s] PÁGINA
0 1
0,109147917 1
0,217023917 1
0,325888167 1
0,434311083 1
0,531340167 1
0,628369167 1
0.725398250000000 1
0.822429250000000 1
0.822641250000000 1
0.822853250000000 1
0.823065333333333 1
0.823277333333333 1
0.823506000000000 1
0.823735000000000 1
0.823965083333333 1
0.824886500000000 2
0.824886583333333 3
0.824914416666667 3
0.825973166666667 3
0.825991416666667 1
0.826669583333333 3
0.826685083333333 3
0.834488750000000 3
0.834506750000000 3
0.854481666666667 3
0.854499666666667 3
0.874475083333333 3
0.874493166666667 3
0.879126833333333 3
0.879142333333333 1
0.879318000000000 3
0.879333500000000 3
0.879996083333333 2
0.879996166666667 3
0.880025916666667 1
0.880164916666667 1
0.880165000000000 0
0.880165083333333 1
0.880182166666667 3
0.880692750000000 3
0.880728000000000 1
0.880870416666667 1
0.880885916666667 3
0.881399916666667 3
0.881435166666667 1
0.881577583333333 3
0.881593083333333 3
Time[s] PÁGINA
0.000000000000000 1
0.121065666666667 1
0.121065666666667 1
0.218094750000000 1
0.339160166666667 1
0.436189166666667 1
0.557256000000000 1
0.654285000000000 1
0.775641666666667 1
0.872672666666667 1
0.872885000000000 1
0.873102916666667 1
0.873315000000000 1
0.873530083333333 1
0.873745500000000 1
0.873961250000000 1
0.874429250000000 2
0.875232250000000 3
0.875247750000000 3
0.876281166666667 3
0.876296666666667 1
0.876883666666667 3
0.876899166666667 3