Sobre la contended memory

Emuladores y aplicaciones que ayudarán a la perpetuación del Spectrum y su software en el futuro

Moderador: Sir Cilve Sinclair

Responder
zx81
Freddy Hardest
Mensajes: 619
Registrado: Vie Dic 28, 2007 2:14 pm
Ubicación: Valencia
Contactar:

Sobre la contended memory

Mensaje por zx81 » Lun Ene 14, 2008 9:31 pm

Durante los últimos días he seguido trabajando para mejorar la emulación de la CPU en el JaS. Tantas cosas he tocado que, a decir verdad, ahora no sé exactamente como integrar el nuevo núcleo Z80 en el emulador....

Ahora, además de los tests de ZEXALL el core Z80 también pasa los tests de fuse 0.9.0, o mejor sería decir que pasa todos los tests excepto las BIT n,(HL) y las INI/IND/INIR/INDR/OUTI/OUTD/OUTIR/OUTDR porque el core de fuse no implementa algunos bits de funcionamiento verdaderamente surrealista. Yo lo he intentado, veremos si algún día sirve para algo el esfuerzo.

Implementar un core Z80 que más o menos funcione es laborioso, pero no excesivamente complicado. Donde se complican las cosas de verdad es al intentar emular el funcionamiento de la 'contended memory' del Spectrum. El problema es que además de hacer lo que hace la Z80 hay que hacerlo en el mismo orden para que haya posibilidades de que las cosas funcionen. No basta con decir LD BC,nn tarda 10 ciclos, así que en el manejo de esa instrucción, t_estados += 10. Sería largo describir la de veces que he tenido que volver sobre mis pasos y remodificar cosas ya tocadas anteriormente.

Aún así tengo dudas, tan serias como para que me tocara repasar todo el core del Z80 para arreglar algunas cosas que no sé si alguien del foro tiene más claras que yo. La FAQ de C.S.S. tiene un tratamiento bastante extenso acerca del problema de la ordenación de las operaciones a realizar para la mayoría de instrucciones.

Mi duda viene por el lado de si Fuse se pasa un poco al intentar emular algunas cosas. Veamos un ejemplo, tomado de la FAQ antes mencionada:

La instrucción INC/DEC (HL), según el manual de referencia de Zilog (por lo demás, un manual con más erratas de lo tolerable), se ejecuta en 3 ciclos máquina y tarda 11 T-estados, que se reparten en 4,4,3. Pero la FAQ los divide en:

pc:4, hl:3, hl:1,hl(write):3

ese hl:1 suelto deduzco debe ser lo que tarda la CPU en incrementar/decrementar el valor extraído de la dirección apuntada por HL. Bien, ese estado fuse lo convierte en un estado contended, como si hubiera acceso a la RAM. De la documentación del proyecto zxdesign creo deducir que solo el estado M1 es contended, lo que significaría que fuse hace trabajo de más.

¿Alguien ha sido lo suficientemente osado como para haber probado este tipo de "detalles"?. ¿Porqué debería ser contended ese estado?. ¿Ideas?.

Tengo más dudillas de implementación, pero con este ladrillo creo que basta por hoy.... :D
Debido al fallo de un mecanismo, el lanzagranadas M203 se te podía disparar cuando menos lo esperaras, lo que te habría hecho bastante impopular entre lo que quedara de tu unidad.
Revista del ejército EE.UU. PS, agosto 1993.

Emulador JSpeccy
ZXBaremulator

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Sobre la contended memory

Mensaje por mcleod_ideafix » Mar Ene 15, 2008 1:14 am

zx81 escribió:¿Porqué debería ser contended ese estado?. ¿Ideas?.

No veo razón para que ese estado en concreto sea contended, ya que es el estado en que se modifica lo leído en memoria a través de HL. El Z80 tarda 3 ciclos de reloj en lecturas y escrituras, y ese estado cae entre las dos operaciones. Lo único que se me ocurre es que hubiera un fallo en el diseño del microprograma del Z80, y se "olvidaran" de subir MREQ durante la ejecución de ese estado (cosa improbable pero... quien sabe!) confundiendo a la ULA.

Todo es cuestión de coger un osciloscopio o analizador lógico y ver la traza de un chorro de instrucciones DEC (HL), primero en memoria no contenida, para comprobar cuándo se accede realmente a memoria en esta instrucción, sin interferencias de la ULA.
Web: ZX Projects | Twitter: @zxprojects

zx81
Freddy Hardest
Mensajes: 619
Registrado: Vie Dic 28, 2007 2:14 pm
Ubicación: Valencia
Contactar:

Re: Sobre la contended memory

Mensaje por zx81 » Mar Ene 15, 2008 8:56 am

mcleod_ideafix escribió:Todo es cuestión de coger un osciloscopio o analizador lógico y ver la traza de un chorro de instrucciones DEC (HL), primero en memoria no contenida, para comprobar cuándo se accede realmente a memoria en esta instrucción, sin interferencias de la ULA.

Ese es el paso imposible para mi.... :(
Debido al fallo de un mecanismo, el lanzagranadas M203 se te podía disparar cuando menos lo esperaras, lo que te habría hecho bastante impopular entre lo que quedara de tu unidad.
Revista del ejército EE.UU. PS, agosto 1993.

Emulador JSpeccy
ZXBaremulator

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 16 invitados