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....
Sobre la contended memory
Moderador: Sir Cilve Sinclair
-
- Freddy Hardest
- Mensajes: 619
- Registrado: Vie Dic 28, 2007 2:14 pm
- Ubicación: Valencia
- Contactar:
Sobre la contended memory
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
Revista del ejército EE.UU. PS, agosto 1993.
Emulador JSpeccy
ZXBaremulator
- 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
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
-
- Freddy Hardest
- Mensajes: 619
- Registrado: Vie Dic 28, 2007 2:14 pm
- Ubicación: Valencia
- Contactar:
Re: Sobre la contended memory
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
Revista del ejército EE.UU. PS, agosto 1993.
Emulador JSpeccy
ZXBaremulator
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 16 invitados