Instrucciones no documentadas del Z80

Si tienes alguna duda y crees que alguien podría resolverla, ponla aquí. || If you have any doubt about programming, post it here.

Moderador: CEZ

Responder
Avatar de Usuario
Benway
Site Admin
Site Admin
Mensajes: 9241
Registrado: 24 Dic 2005 10:18
Ubicación: Madrid
Contactar:

Instrucciones no documentadas del Z80

Mensaje por Benway »

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
Un saludo.
Imagen - Imagen - Imagen
Avatar de Usuario
WoodMaster
32 bits
32 bits
Mensajes: 697
Registrado: 13 Jul 2007 15:31
Ubicación: Fi algharb alandalus

Mensaje por WoodMaster »

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.
Avatar de Usuario
Benway
Site Admin
Site Admin
Mensajes: 9241
Registrado: 24 Dic 2005 10:18
Ubicación: Madrid
Contactar:

Mensaje por Benway »

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 :D
Un saludo.
Imagen - Imagen - Imagen
Avatar de Usuario
WoodMaster
32 bits
32 bits
Mensajes: 697
Registrado: 13 Jul 2007 15:31
Ubicación: Fi algharb alandalus

Mensaje por WoodMaster »

Benway solo he hablado de lo que sé el 6502 :) en el z80 puede ser que no existan ese problemas que he comentao :)
Avatar de Usuario
Benway
Site Admin
Site Admin
Mensajes: 9241
Registrado: 24 Dic 2005 10:18
Ubicación: Madrid
Contactar:

Mensaje por Benway »

Yo no tengo mucha idea de asm, ya sabes... Pero en el documento ese no dicen nada de inestabilidades (:D)... Lo mismo algún "contertulio" sabe algo al respecto...
Un saludo.
Imagen - Imagen - Imagen
Avatar de Usuario
Anjuel
256 bits
256 bits
Mensajes: 8771
Registrado: 23 Dic 2004 16:36
Ubicación: Torreznolandia

Mensaje por Anjuel »

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 :D
¿y qué pruebas has hecho si puede saberse?
¿algo interesante?

:mrgreen:
Avatar de Usuario
na_th_an
256 bits
256 bits
Mensajes: 11874
Registrado: 22 Abr 2005 13:25
Contactar:

Mensaje por na_th_an »

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).
Avatar de Usuario
Benway
Site Admin
Site Admin
Mensajes: 9241
Registrado: 24 Dic 2005 10:18
Ubicación: Madrid
Contactar:

Mensaje por Benway »

Anjuel escribió:
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 :D
¿y qué pruebas has hecho si puede saberse?
¿algo interesante?

:mrgreen:
Jejejeje... nah... nada "visible"... Toquetear los registros, ver el contenido después y cosas así...

Ya quisiera yo saber más asm para hacer más cosas :( :P
Un saludo.
Imagen - Imagen - Imagen
Avatar de Usuario
Karnevi
CEZ Member
CEZ Member
Mensajes: 7916
Registrado: 20 Nov 2004 00:11
Ubicación: España
Contactar:

Mensaje por Karnevi »

Benway escribió:Ya quisiera yo saber más asm para hacer más cosas :( :P
Se me ocurren varios... Umm, nada nada... :P
Un saludo,
Karnevi - webmaster
http://computeremuzone.com
Avatar de Usuario
Benway
Site Admin
Site Admin
Mensajes: 9241
Registrado: 24 Dic 2005 10:18
Ubicación: Madrid
Contactar:

Mensaje por Benway »

:roll:
Un saludo.
Imagen - Imagen - Imagen
Avatar de Usuario
Anjuel
256 bits
256 bits
Mensajes: 8771
Registrado: 23 Dic 2004 16:36
Ubicación: Torreznolandia

Mensaje por Anjuel »

Bonito avatar, ben... :mrgreen:
Avatar de Usuario
cht666cht
128 bits
128 bits
Mensajes: 2145
Registrado: 06 Oct 2005 12:20
Ubicación: Barcelona

Mensaje por cht666cht »

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 :))
Avatar de Usuario
WYZ
Site Admin
Site Admin
Mensajes: 2356
Registrado: 29 Dic 2004 21:17
Ubicación: Cartagena (CT)

Mensaje por WYZ »

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.
WYZPlayer

DREAM OVER
INSERT COIN
Avatar de Usuario
Benway
Site Admin
Site Admin
Mensajes: 9241
Registrado: 24 Dic 2005 10:18
Ubicación: Madrid
Contactar:

Mensaje por Benway »

WYZ escribió:Me sorprendes Ben. ¿Ya estás pensando en meter en tus programas código no documentado?
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...

Pues no tengo yo "comandos" documentados que aprenderme primero ni nada... :lol:
Un saludo.
Imagen - Imagen - Imagen
Avatar de Usuario
artaburu
64 bits
64 bits
Mensajes: 1139
Registrado: 23 Dic 2004 20:54
Ubicación: over the cuckoo's nest
Contactar:

Mensaje por artaburu »

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
Avatar de Usuario
Guillian
32 bits
32 bits
Mensajes: 626
Registrado: 02 Ene 2005 02:40

Mensaje por Guillian »

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 :))
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.

Interesante documento sobre el funcionamiento del Z80:The Undocumented Z80 Documented
Avatar de Usuario
davidcm
32 bits
32 bits
Mensajes: 547
Registrado: 18 Sep 2007 22:25
Ubicación: Barcelona
Contactar:

Mensaje por davidcm »

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.
Avatar de Usuario
decicoder
8 bits
8 bits
Mensajes: 18
Registrado: 01 Sep 2007 09:24

Mensaje por decicoder »

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.
Responder