Instrucciones no documentadas del Z80
Moderador: CEZ
- Benway
- Site Admin
- Mensajes: 9241
- Registrado: 24 Dic 2005 10:18
- Ubicación: Madrid
- Contactar:
Instrucciones no documentadas del Z80
He encontrado esta web, que comenta cosas curiosas del asm del Z80, como, por ejemplo, cómo modificar independientemente los bytes de los registros IX e IY, o cómo hacer RLC (IX+nn) y LD B,(IX+nn) en una sola instrucción, o incluso hacer desplazamientos lógicos a la izquierda (SLL)... No tiene desperdicio...
http://www.geocities.com/SiliconValley/ ... 0undoc.htm
http://www.geocities.com/SiliconValley/ ... 0undoc.htm
- WoodMaster
- 32 bits
- Mensajes: 697
- Registrado: 13 Jul 2007 15:31
- Ubicación: Fi algharb alandalus
Y todas esas instrucciones no documentadas son estables?
En el 6502/10 hay instrucciones no documentadas pero algunas no son estables, hay unas que funcionan bien en unos ordenadores pero no en otros , debido a diferencias de versiones.
Es la programacion de demos hay mas libertad para jugar con las instables pero en juego hay que tener lo maximo de seguridad al usar instrucciones no documentadas.
En el 6502/10 hay instrucciones no documentadas pero algunas no son estables, hay unas que funcionan bien en unos ordenadores pero no en otros , debido a diferencias de versiones.
Es la programacion de demos hay mas libertad para jugar con las instables pero en juego hay que tener lo maximo de seguridad al usar instrucciones no documentadas.
- WoodMaster
- 32 bits
- Mensajes: 697
- Registrado: 13 Jul 2007 15:31
- Ubicación: Fi algharb alandalus
- Benway
- Site Admin
- Mensajes: 9241
- Registrado: 24 Dic 2005 10:18
- Ubicación: Madrid
- Contactar:
- Anjuel
- 256 bits
- Mensajes: 8771
- Registrado: 23 Dic 2004 16:36
- Ubicación: Torreznolandia
¿y qué pruebas has hecho si puede saberse?Benway escribió:Pues mira... me has pillado... pero acabo de hacer unas pruebas con el pasmo y el emulador de spectrum... y han funcionado a las mil maravillas
¿algo interesante?
- na_th_an
- 256 bits
- Mensajes: 11874
- Registrado: 22 Abr 2005 13:25
- Contactar:
Yo creo que puede ser porque los C64 montaron diferentes versiones de la CPU a lo largo de su vida comercial (6510, 8510 ...). Quizá estas versiones fueran 100% compatibles a nivel de API documentada, pero cambios internos hiciesen que algunas instrucciones no documentadas se comportasen de forma diferente.
Los ordenadores basados en Z80 es probable que no adolezcan de este problema porque las CPUs que montaban siempre son clones exactos del original de Zilog (fabricados por la propia Zilog o por compañías más baratas como NEC).
Los ordenadores basados en Z80 es probable que no adolezcan de este problema porque las CPUs que montaban siempre son clones exactos del original de Zilog (fabricados por la propia Zilog o por compañías más baratas como NEC).
- Benway
- Site Admin
- Mensajes: 9241
- Registrado: 24 Dic 2005 10:18
- Ubicación: Madrid
- Contactar:
Jejejeje... nah... nada "visible"... Toquetear los registros, ver el contenido después y cosas así...Anjuel escribió:¿y qué pruebas has hecho si puede saberse?Benway escribió:Pues mira... me has pillado... pero acabo de hacer unas pruebas con el pasmo y el emulador de spectrum... y han funcionado a las mil maravillas
¿algo interesante?
Ya quisiera yo saber más asm para hacer más cosas
- Karnevi
- CEZ Member
- Mensajes: 7916
- Registrado: 20 Nov 2004 00:11
- Ubicación: España
- Contactar:
- Benway
- Site Admin
- Mensajes: 9241
- Registrado: 24 Dic 2005 10:18
- Ubicación: Madrid
- Contactar:
- Anjuel
- 256 bits
- Mensajes: 8771
- Registrado: 23 Dic 2004 16:36
- Ubicación: Torreznolandia
- cht666cht
- 128 bits
- Mensajes: 2145
- Registrado: 06 Oct 2005 12:20
- Ubicación: Barcelona
No hace mucho estuve leyendo algunas cosillas sobre las instrucciones no documentadas del z80, y creo recordar que leí que funcionan bien en todos los z80 pero que en no se qué micro de zilog de 16 bits compatible con el z80 ya no.
Ahora que pienso creo que hablaba del MSX turbo, que lleva este micro de 16 bits de zilog (el R800, lo acabo de buscar )
Ahora que pienso creo que hablaba del MSX turbo, que lleva este micro de 16 bits de zilog (el R800, lo acabo de buscar )
- WYZ
- Site Admin
- Mensajes: 2356
- Registrado: 29 Dic 2004 21:17
- Ubicación: Cartagena (CT)
Me sorprendes Ben. ¿Ya estás pensando en meter en tus programas código no documentado?
Yo aun sigo descubriendo,o a veces recordando que existen) cosas como esta que vi escrita como opcodes el otro dia:
OUT [C],0
Tendrás que usar opcodes algunas veces, cuando el ensamblador no reconozca, como el ejemplo que te ponogo en el PASMO.
Yo aun sigo descubriendo,o a veces recordando que existen) cosas como esta que vi escrita como opcodes el otro dia:
OUT [C],0
Tendrás que usar opcodes algunas veces, cuando el ensamblador no reconozca, como el ejemplo que te ponogo en el PASMO.
- Benway
- Site Admin
- Mensajes: 9241
- Registrado: 24 Dic 2005 10:18
- Ubicación: Madrid
- Contactar:
Jajajaja... Nooooo... Es que estaba buscando información sobre el código documentado, y he visto esto en el Google... lo he leído, y me he quedado asombrado...WYZ escribió:Me sorprendes Ben. ¿Ya estás pensando en meter en tus programas código no documentado?
Pues no tengo yo "comandos" documentados que aprenderme primero ni nada...
- artaburu
- 64 bits
- Mensajes: 1139
- Registrado: 23 Dic 2004 20:54
- Ubicación: over the cuckoo's nest
- Contactar:
Yo he usado algunas de esas funciones indocumentadas y no me ha fallado en ningún CPC ni emu en los que he probado. Todo sea que haya alguno que tenga el procesador un poco cascado que no pasaría los controles de calidad y no funcionen, pero no es lo normal. Yo leí en algún lugar que esas funciones indocumentadas lo son por no poder garantizar que todos los procesadores las soporten, deben estar grabadas en la periferia del procesador y por eso deben ser más sensible a posibles fallos o errores del procesador. O algo.
Salu2,
Arta
Arta
- Guillian
- 32 bits
- Mensajes: 626
- Registrado: 02 Ene 2005 02:40
Así es. El R800 no acepta todas las instrucciones no documentadas del Z80, aunque curiosamente documenta, o hace oficiales, algunas de las que no lo eran.cht666cht escribió:No hace mucho estuve leyendo algunas cosillas sobre las instrucciones no documentadas del z80, y creo recordar que leí que funcionan bien en todos los z80 pero que en no se qué micro de zilog de 16 bits compatible con el z80 ya no.
Ahora que pienso creo que hablaba del MSX turbo, que lleva este micro de 16 bits de zilog (el R800, lo acabo de buscar )
Interesante documento sobre el funcionamiento del Z80:The Undocumented Z80 Documented
- davidcm
- 32 bits
- Mensajes: 547
- Registrado: 18 Sep 2007 22:25
- Ubicación: Barcelona
- Contactar:
Yo en ocasiones he utilizado instrucciones no documentadas de Z80, así como de otros sistemas sin problema alguno.
En general, se puede decir que utilizar instrucciones no documentadas en procesadores retro es más o menos seguro, hay que pensar que por aquél entonces no se hacían tantas revisiones de hardware como ahora (que de un mismo producto pueden salir 5 o más revisiones en un periodo de tiempo bastante bajo).
Al trabajar sobre sistemas retro tienes la ventaja de que tienes acceso a todas las revisiones posibles. Por ejemplo, en la época del A500 con el OCS, muchos juegos utilizaban instrucciones no documentadas del chip gráfico (Fat Agnus). Al salir la revisión ECS, que introducía a nivel hardware una serie de cambios importantes entre ellos el de Fat Agnus, que pasaba a llamarse Super Fat Agnus e incluir mejoras muy importantes en el blitter gráfico, una gran cantidad de juegos dejaron de funcionar (recuerdo concretamente Shadow of the Beast II y Double Dragon II, pero había bastantes más). Hoy en día, gracias a dios, existen poquísimas posibilidades por no decir nulas de que aparezca una nueva revisión del A500, con lo cual tienes acceso a todas las posibles variantes y puedes comprobar el código en todas ellas.
Volviendo al tema Z80... pues eso, que tienes la ventaja de que las revisiones de Z80 de 8-bits están más que probadas y requeteprobadas. En general, la Z80B era la revisión más común y las instrucciones no documentadas pueden por tanto compartirse entre Spectrum y Amstrad, por ejemplo. Sin embargo otras máquinas como Gameboy o Master System, utilizan distintas revisiones del procesador o incluso en algunos casos clones capados implementados por otras compañías y por tanto no soportan las instrucciones no documentadas.
Debemos tener muy claro que una instrucción no documentada no es más que el hecho de enviar un conjunto de impulsos en paralelo al procesador que, si bien no fueron previstos dentro de la especificación original, producen un resultado más o menos lógico debido al diseño de la circuitería. Esto implica, por tanto, que cualquier cambio por nimio que sea en la misma puede invalidar las instrucciones no documentadas actuales, y posiblemente crear otras de forma implícita. En otras palabras, las instrucciones no documentadas son mayoritariamente fruto de la casualidad y no del secretismo industrial, como bien se podría tender a pensar. En el mundo del software es distinto, las funcionalidades no documentadas (p.e., de MSDOS) sí son introducidas expresamente.
Lo cierto es que las instrucciones no documentadas se han utilizado de forma muy extendida en el software de entretenimiento y de hecho yo te recomiendo que las utilices siempre que te sean útiles a nivel de tamaño o velocidad, si bien cuando hagas ports a otras plataformas que compartan procesador deberías asegurarte de que el resultado es siempre el esperado.
Saludos.
En general, se puede decir que utilizar instrucciones no documentadas en procesadores retro es más o menos seguro, hay que pensar que por aquél entonces no se hacían tantas revisiones de hardware como ahora (que de un mismo producto pueden salir 5 o más revisiones en un periodo de tiempo bastante bajo).
Al trabajar sobre sistemas retro tienes la ventaja de que tienes acceso a todas las revisiones posibles. Por ejemplo, en la época del A500 con el OCS, muchos juegos utilizaban instrucciones no documentadas del chip gráfico (Fat Agnus). Al salir la revisión ECS, que introducía a nivel hardware una serie de cambios importantes entre ellos el de Fat Agnus, que pasaba a llamarse Super Fat Agnus e incluir mejoras muy importantes en el blitter gráfico, una gran cantidad de juegos dejaron de funcionar (recuerdo concretamente Shadow of the Beast II y Double Dragon II, pero había bastantes más). Hoy en día, gracias a dios, existen poquísimas posibilidades por no decir nulas de que aparezca una nueva revisión del A500, con lo cual tienes acceso a todas las posibles variantes y puedes comprobar el código en todas ellas.
Volviendo al tema Z80... pues eso, que tienes la ventaja de que las revisiones de Z80 de 8-bits están más que probadas y requeteprobadas. En general, la Z80B era la revisión más común y las instrucciones no documentadas pueden por tanto compartirse entre Spectrum y Amstrad, por ejemplo. Sin embargo otras máquinas como Gameboy o Master System, utilizan distintas revisiones del procesador o incluso en algunos casos clones capados implementados por otras compañías y por tanto no soportan las instrucciones no documentadas.
Debemos tener muy claro que una instrucción no documentada no es más que el hecho de enviar un conjunto de impulsos en paralelo al procesador que, si bien no fueron previstos dentro de la especificación original, producen un resultado más o menos lógico debido al diseño de la circuitería. Esto implica, por tanto, que cualquier cambio por nimio que sea en la misma puede invalidar las instrucciones no documentadas actuales, y posiblemente crear otras de forma implícita. En otras palabras, las instrucciones no documentadas son mayoritariamente fruto de la casualidad y no del secretismo industrial, como bien se podría tender a pensar. En el mundo del software es distinto, las funcionalidades no documentadas (p.e., de MSDOS) sí son introducidas expresamente.
Lo cierto es que las instrucciones no documentadas se han utilizado de forma muy extendida en el software de entretenimiento y de hecho yo te recomiendo que las utilices siempre que te sean útiles a nivel de tamaño o velocidad, si bien cuando hagas ports a otras plataformas que compartan procesador deberías asegurarte de que el resultado es siempre el esperado.
Saludos.
- decicoder
- 8 bits
- Mensajes: 18
- Registrado: 01 Sep 2007 09:24
Un caso práctico de instrucción no documentada
Hace un par de años descubri la instrucción in f,(c) en el pdf "The Undocumented Z80 Documented" de Sean Young
La instrución modifica algunos flags según lo que se haya en el puerto pero no modifica ningún registro. Y se me encendió la bombilla para hacer una nueva rutina de carga de alta velocidad para el Spectrum (ya conocía las ultracargas de Antonio Villena).
Y en las maquinas reales que he probado funciona exactamente como dice el Sean Young . En la mayoría (afortunadamente) de los emuladores también.
Hace un par de años descubri la instrucción in f,(c) en el pdf "The Undocumented Z80 Documented" de Sean Young
La instrución modifica algunos flags según lo que se haya en el puerto pero no modifica ningún registro. Y se me encendió la bombilla para hacer una nueva rutina de carga de alta velocidad para el Spectrum (ya conocía las ultracargas de Antonio Villena).
Y en las maquinas reales que he probado funciona exactamente como dice el Sean Young . En la mayoría (afortunadamente) de los emuladores también.