Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
cursos:ensamblador:lenguaje_5 [08-08-2007 09:40] – sromero | cursos:ensamblador:lenguaje_5 [24-01-2024 11:55] (actual) – [Enlaces] sromero | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
- | |||
====== Lenguaje Ensamblador del Z80 (V) ====== | ====== Lenguaje Ensamblador del Z80 (V) ====== | ||
+ | \\ | ||
===== Puertos de E/S y Tabla de Opcodes ===== | ===== Puertos de E/S y Tabla de Opcodes ===== | ||
+ | En este capítulo se introducirán las instrucciones '' | ||
- | En este capítulo se introducirán las instrucciones **IN** y **OUT** | + | Finalmente, |
- | de los puertos | + | |
- | permitirá | + | |
- | (teclado, altavoz, controladora | + | |
- | | + | \\ |
- | veremos algunos ejemplos de //opcodes no documentados//, | + | ===== Los puertos E/S ===== |
- | la mayoría de instrucciones, | + | |
+ | Como ya vimos en su momento, el microprocesador Z80 se conecta mediante los puertos de entrada/ | ||
- | ===== LOS PUERTOS E/S ===== | + | \\ |
- | + | ||
- | + | ||
- | Como ya vimos en su momento, el microprocesador Z80 se conecta | + | |
- | mediante los puertos de entrada/ | + | |
- | externos (teclado, cassette y altavoz de audio), pudiendo leer el | + | |
- | estado de los mismos (leer del teclado, leer del cassette) y escribir | + | |
- | en ellos (escribir en el altavoz para reproducir sonido, escribir en | + | |
- | el cassette) por medio de estas conexiones conocidas como "//I/O Ports//" | + | |
{{ cursos: | {{ cursos: | ||
+ | \\ | ||
- | Aunque para nosotros el teclado o el altavoz puedan ser parte del | + | Aunque para nosotros el teclado o el altavoz puedan ser parte del ordenador, para el Z80, el microprocesador en sí mismo, son tan externos a él como el monitor o el joystick. Nuestro microprocesador accede a todos estos elementos externos mediante una serie de patillas (buses de datos y direcciones) que son conectadas eléctricamente a todos los elementos externos con los que queremos que interactúe. La memoria, el teclado, el altavoz, o los mismos pines del bus trasero del Spectrum, se conectan al Z80 y éste nos permite su acceso a través de dichas líneas, o de los puertos de entrada/ |
- | ordenador, para el Z80, el microprocesador en sí mismo, son tan | + | |
- | externos a él como el monitor o el joystick. Nuestro microprocesador | + | |
- | accede a todos estos elementos externos mediante una serie de patillas | + | |
- | (buses de datos y direcciones) que son conectadas eléctricamente a | + | |
- | todos los elementos externos con los que queremos que interactúe. La | + | |
- | memoria, el teclado, el altavoz, o los mismos pines del bus trasero | + | |
- | del Spectrum, se conectan al Z80 y éste nos permite su acceso a través | + | |
- | de dichas líneas, o de los puertos de entrada/ | + | |
+ | Otros sistemas utilizan lo que se conoce como // | ||
+ | En el caso del Spectrum no es así, los puertos no están mapeados sobre ninguna dirección de la RAM sino que debemos leerlos y escribir en ellos manualmente con las instrucciones '' | ||
- | ===== IN Y OUT ===== | + | \\ |
+ | ===== IN y OUT ===== | ||
- | Ya conocemos la existencia y significado de los puertos y su conexión | + | Ya conocemos la existencia y significado de los puertos y su conexión con el microprocesador. Sólo resta saber: ¿cómo accedemos a un puerto tanto para leer como para escribir desde nuestros programas en ensamblador? |
- | con el microprocesador. Sólo resta saber: ¿cómo accedemos a un puerto | + | |
- | tanto para leer como para escribir desde nuestros programas en | + | |
- | ensamblador? | + | |
- | La respuesta la tienen los comandos | + | La respuesta la tienen los comandos |
- | | + | |
- | sea directamente, | + | |
\\ | \\ | ||
- | **IN registro, (C)** \\ | + | **in r, (c)** \\ |
- | Leemos el puerto | + | Leemos el puerto |
- | En realidad, pese a que teóricamente el Spectrum sólo tiene acceso a puertos | + | |
- | E/S de 8 bits (0-255), para acceder a los puertos, | + | |
- | de BC en el bus de direcciones. | + | |
+ | \\ | ||
**IN A, (puerto)** \\ | **IN A, (puerto)** \\ | ||
- | | + | |
- | ocasión, el Spectrum pone en el bus de direcciones el valor del registro | + | |
- | de 16 bits formado por A y C (en lugar de BC). | + | |
\\ | \\ | ||
\\ | \\ | ||
+ | | ||
- | Por ejemplo, | + | Si por contra el puerto es una variable que cambia (por ejemplo, |
- | instrucción IN vistos anteriormente) son equivalentes: | + | |
- | <code asm> | + | Por ejemplo, estas 2 lecturas |
- | ; Forma 1 | + | |
- | LD BC, FFFEh | + | |
- | IN A, (C) ; A = Lectura | + | |
- | ; Forma 2 | + | <code z80> |
- | LD A, FFh | + | ; Forma 1 |
- | IN A, (FEh) ; A = Lectura de puerto | + | ld bc, $fffe |
+ | in a, (c) ; | ||
+ | |||
+ | ; Forma 2 | ||
+ | ld a, $ff | ||
+ | in a, ($fe) ; A = Lectura de puerto | ||
</ | </ | ||
- | | + | |
- | el puerto es un valor de 16 bits y se carga en el registro BC. | + | |
- | De la misma forma, podemos escribir un valor en un puerto con sus equivalentes | + | De la misma forma, podemos escribir un valor en un puerto con sus equivalentes |
\\ | \\ | ||
Línea 88: | Línea 65: | ||
Escribimos en " | Escribimos en " | ||
- | **OUT (C), registro** \\ | + | \\ |
- | Escribimos en el puerto " | + | **out (c), r** \\ |
- | valor de BC en el bus de direcciones). | + | Escribimos en el puerto " |
\\ | \\ | ||
\\ | \\ | ||
- | Curiosamente, | + | Como se explica en el excelente documento "//The Undocumented Z80 Documented//" |
- | Undocumented Z80 Documented//" | + | |
- | opcodes no documentados del Z80), los puertos del Spectrum son | + | |
- | oficialmente de 8 bits (0-255) aunque realmente se pone o bien BC o | + | |
- | bien (A*256)+PUERTO en el bus de direcciones, | + | |
- | se pueden acceder a todos los 65536 puertos disponibles. | + | |
La forma en que estas instrucciones afectan a los flags es la siguiente: | La forma en que estas instrucciones afectan a los flags es la siguiente: | ||
Línea 107: | Línea 79: | ||
| | ||
| | ||
- | IN A, (n) |- - - - - -| | + | in a, (n) |- - - - - -| |
- | IN r, (C) |* * * P 0 -| | + | in r, (c) |* * * P 0 -| |
- | OUT (C), r |- - - - - -| | + | out (c), r |- - - - - -| |
- | OUT (n), A |- - - - - -| | + | out (n), a |- - - - - -| |
</ | </ | ||
- | | + | |
+ | | ||
+ | \\ | ||
+ | ===== La ULA y los dispositivos I/O del Spectrum ===== | ||
- | ===== INSTRUCCIONES DE PUERTO REPETITIVAS E INCREMENTALES ===== | + | Como acabamos de ver, mediante las instrucciones '' |
+ | Pero ¿qué dispositivos I/O tenemos en el Spectrum? | ||
+ | |||
+ | En un Spectrum básico sin ningún hardware de expansión conectado al slot trasero, tendremos los siguientes dispositivos a los que nos puede interesar acceder para hacer juegos y programas: | ||
+ | |||
+ | * El **teclado**. Concretamente, | ||
+ | |||
+ | * El **altavoz** (o // | ||
+ | |||
+ | * El **cassette**, | ||
+ | |||
+ | * El **color del borde**, que es un conjunto de 3 bits (por tanto, 8 colores diferentes) que nos permite cambiar el color actual del borde con '' | ||
+ | |||
+ | Todos estos dispositivos básicos, los que vienen de serie con un Spectrum, están conectados a la ULA, y los accederemos a través de ella. | ||
+ | |||
+ | Por otra parte, los dispositivos que se conectan al conector de expansión trasero tendrán su propio puerto para leerlos y escribir en ellos, que deberemos consultar en la documentación técnica del fabricante de dicho dispositivos si queremos hacer código que lo use. Por ejemplo, el **Kempston Mouse** utiliza los puertos $fbdf (coordenada X del ratón), $ffdf (coordenada Y del ratón) y $fadf para el estado de los botones. | ||
+ | |||
+ | Y ahora viene una peculiaridad: | ||
+ | |||
+ | * Puerto = **$XXFE** => Selecciona acceso a los dispositivos conectados a la ULA (**XX** indicará el dispositivo). | ||
+ | * Puerto = **$NNNN** => Siendo **NNNN** un valor impar, selecciona el acceso al dispositivo indicado por ese valor. | ||
+ | |||
+ | Por eso, utilizaremos un valor **$XXFE** para seleccionar la ULA, y será el valor de **XX** (la parte alta de BC) la que marcará qué dispositivo exacto de la ULA se quiere acceder. | ||
+ | |||
+ | La mayoría de los puertos que veremos en código de Spectrum que accede a puertos acaban por este motivo en $fe. | ||
+ | |||
+ | Por ejemplo, para leer el estado de las diferentes filas del teclado usaremos la instrucción '' | ||
+ | |||
+ | En cambio, todas las direcciones de BC impares (bit 0 a 1), se utilizan para acceder a otros dispositivos diferentes de la ULA que podamos tener conectados al bus de expansión. Se puede apreciar en el ejemplo del Kempston Mouse que hemos visto hace un momento que todos sus puertos son impares (acaban en **$df**). | ||
+ | |||
+ | Para escribir tenemos otra peculiaridad. Si queremos escribir en un dispositivo externo diferente de la ULA, utilizaremos un valor de BC impar, y podremos escribir en él por ejemplo el valor del registro A. Para acceder a otros dispositivos que no sean la ULA, necesitaremos usar '' | ||
+ | |||
+ | Pero en el caso de escribir en dispositivos conectados a la ULA, la escritura está " | ||
+ | |||
+ | De nuevo la parte baja de BC selecciona la ULA con el valor *$fe* pero en este caso, realmente no seleccionamos un puerto al que escribir sino que la parte alta es ignorada y el valor de A llega directamente a la ULA con el siguiente significado: | ||
+ | |||
+ | \\ | ||
+ | |< 50% >| | ||
+ | ^ Bit ^ 7 ^ 6 ^ 5 ^ 4 ^ 2 ^ 1 ^ 0 ^ | ||
+ | | '' | ||
+ | | '' | ||
+ | \\ | ||
+ | |||
+ | A lo largo de este y los siguientes capítulos veremos cómo utilizar estos bits. | ||
+ | |||
+ | \\ | ||
+ | ===== Instrucciones de puerto repetitivas e incrementales ===== | ||
- | Al igual que LD carga un valor de un origen a un destino, y tiene sus correspondientes | + | Al igual que '' |
- | instrucciones incrementales (LDI "carga e incrementa", | + | |
- | repetitivas (LDIR " | + | |
- | repite BC veces" | + | |
Así: | Así: | ||
- | * **IND** : | + | * **ind** : |
* Leemos en la dirección de memoria apuntada por HL ([HL]) el valor contenido en el puerto C. | * Leemos en la dirección de memoria apuntada por HL ([HL]) el valor contenido en el puerto C. | ||
* Decrementamos HL. | * Decrementamos HL. | ||
* Decrementamos B | * Decrementamos B | ||
- | * **INI** : | + | * **ini** : |
* Leemos en la dirección de memoria apuntada por HL ([HL]) el valor contenido en el puerto C. | * Leemos en la dirección de memoria apuntada por HL ([HL]) el valor contenido en el puerto C. | ||
* Incrementamos HL. | * Incrementamos HL. | ||
* Decrementamos B | * Decrementamos B | ||
- | * **OUTD** : | + | * **outd** : |
* Escribimos en el puerto C el valor de la dirección de memoria apuntada por HL ([HL]) | * Escribimos en el puerto C el valor de la dirección de memoria apuntada por HL ([HL]) | ||
* Decrementamos HL. | * Decrementamos HL. | ||
* Decrementamos B | * Decrementamos B | ||
- | * **OUTI** : | + | * **outi** : |
* Escribimos en el puerto C el valor de la dirección de memoria apuntada por HL ([HL]) | * Escribimos en el puerto C el valor de la dirección de memoria apuntada por HL ([HL]) | ||
* Incrementamos HL. | * Incrementamos HL. | ||
* Decrementamos B | * Decrementamos B | ||
- | Y sus versiones repetitivas | + | Y sus versiones repetitivas |
- | función que sus hermanas incrementales, | + | |
Las afectaciones de flags de estas funciones son las siguientes: | Las afectaciones de flags de estas funciones son las siguientes: | ||
Línea 158: | Línea 175: | ||
| | ||
| | ||
- | INI |? * ? ? 1 ?| | + | ini |? * ? ? 1 ?| |
- | IND |? * ? ? 1 ?| | + | ind |? * ? ? 1 ?| |
- | OUTI |? * ? ? 1 ?| | + | outi |? * ? ? 1 ?| |
- | OUTD |? * ? ? 1 ?| | + | outd |? * ? ? 1 ?| |
- | INDR |? 1 ? ? 1 ?| | + | indr |? 1 ? ? 1 ?| |
- | INIR |? 1 ? ? 1 ?| | + | inir |? 1 ? ? 1 ?| |
- | OTDR |? 1 ? ? 1 ?| | + | otdr |? 1 ? ? 1 ?| |
- | OTIR |? 1 ? ? 1 ?| | + | otir |? 1 ? ? 1 ?| |
</ | </ | ||
- | Nota: Pese a que la documentación oficial dice que estas instrucciones no | + | Nota: Pese a que la documentación oficial dice que estas instrucciones no afectan al Carry Flag, las pruebas hechas a posteriori y recopiladas en la información disponible sobre Opcodes No Documentados del Z80 sugieren que sí que son modificados. |
- | afectan al Carry Flag, las pruebas hechas a posteriori y recopiladas en | + | |
- | la información disponible sobre Opcodes No Documentados del Z80 sugieren que | + | |
- | sí que son modificados. | + | |
+ | \\ | ||
+ | ===== Algunos puertos E/S comunes ===== | ||
+ | Para terminar con el tema de los puertos de Entrada y Salida, vamos a hacer referencia a algunos puertos disponibles en el Sinclair Spectrum (algunos de ellos sólo en ciertos modelos). | ||
+ | Como veremos en capítulo dedicado al teclado, existe una serie de puertos E/S que acceden directamente a la lectura del estado de las diferentes teclas de nuestro Spectrum. Leyendo del puerto adecuado, y chequeando en la respuesta obtenida el bit concreto asociado a la tecla que queremos consultar podremos conocer si una determinada tecla está pulsada (0) o no pulsada (1), como podemos ver en el siguiente ejemplo: | ||
- | + | < | |
- | + | ; Lectura de la tecla " | |
- | + | ORG 50000 | |
- | ===== ALGUNOS PUERTOS E/S COMUNES ===== | + | |
- | + | ||
- | + | ||
- | Para terminar con el tema de los puertos de Entrada y Salida, vamos a hacer | + | |
- | referencia a algunos puertos disponibles en el Sinclair Spectrum (algunos de | + | |
- | ellos sólo en ciertos modelos). | + | |
- | + | ||
- | Como veremos en capítulo dedicado al teclado, existe una serie de puertos | + | |
- | E/S que acceden directamente a la lectura del estado de las diferentes teclas | + | |
- | de nuestro Spectrum. Leyendo del puerto adecuado, y chequeando en la respuesta | + | |
- | obtenida el bit concreto asociado a la tecla que queremos consultar podremos | + | |
- | conocer si una determinada tecla está pulsada (0) o no pulsada (1), como | + | |
- | podemos ver en el siguiente ejemplo: | + | |
- | + | ||
- | < | + | |
- | ; Lectura de la tecla " | + | |
- | ORG 50000 | + | |
bucle: | bucle: | ||
- | LD BC, $DFFE ; Semifila " | + | ld bc, $dffe ; Semifila " |
- | IN A, (C) ; Leemos el puerto | + | in a, (c) ; Leemos el puerto |
- | | + | |
- | JR Z, salir ; Si esta a 0 (pulsado) salir. | + | jr z, salir ; Si esta a 0 (pulsado) salir. |
- | | + | |
salir: | salir: | ||
- | RET | + | ret |
+ | |||
+ | END 50000 | ||
</ | </ | ||
- | El anterior ejemplo lee constantemente el puerto $DFFE a la espera de | + | El anterior ejemplo lee constantemente el puerto |
- | que el bit 0 de la respuesta obtenida de dicha lectura sea 0, lo que quiere | + | |
- | decir que la tecla " | + | |
- | Aunque los veremos en su momento en profundidad, estos son los puertos | + | La parte baja de **$dffe** (es decir, **$fe**) especifica al Z80 que queremos acceder a alguno de los puertos |
- | asociados | + | |
+ | | ||
- | ^ Puerto ^ Bits: ^ D4 ^ D3 ^ D2 ^ D1 ^ D0 ^ | + | \\ |
- | | 65278d (FEFEh) | Teclas: | " | + | |< 60% >| |
- | | 65022d (FDFEh) | Teclas: | " | + | ^ Puerto ^ Bits: ^ D4 ^ D3 ^ D2 ^ D1 ^ D0 ^ |
- | | 64510d (FBFEh) | Teclas: | " | + | | 65278d ($fefe) | Teclas: | " |
- | | 63486d (F7FEh) | Teclas: | " | + | | 65022d ($fdfe) | Teclas: | " |
- | | 61438d (EFFEh) | Teclas: | " | + | | 64510d ($fbfe) | Teclas: | " |
- | | 57342d (DFFEh) | Teclas: | " | + | | 63486d ($f7fe) | Teclas: | " |
- | | 49150d (BFFEh) | Teclas: | " | + | | 61438d ($effe) | Teclas: | " |
- | | 32766d (7FFEh) | Teclas: | " | + | | 57342d ($dffe) | Teclas: | " |
- | + | | 49150d ($bffe) | Teclas: | " | |
- | + | | 32766d ($7ffe) | Teclas: | " | |
- | El bit 6 de los puertos que hemos visto para el teclado tiene un valor | + | \\ |
- | aleatorio, excepto cuando se pulsa PLAY en el cassette, y es a través | + | |
- | de dicho bit de donde podremos obtener los datos a cargar. | + | |
- | La escritura | + | El bit 6 de los puertos que hemos visto para el teclado tiene un valor aleatorio, excepto cuando se pulsa PLAY en el cassette, |
- | y a la señal | + | |
- | controlan //el color del borde//, como podemos ver en el siguiente ejemplo: | + | |
+ | La escritura en el puerto **$00fe** permite //acceder al altavoz// (bit 4) y a la señal de audio para grabar a cinta (bit 3). Los bits 0, 1 y 2 controlan //el color del borde//, como podemos ver en el siguiente ejemplo: | ||
- | < | + | < |
- | ; Cambio del color del borde al pulsar espacio | + | ; Cambio del color del borde al pulsar espacio |
- | ORG 50000 | + | ORG 50000 |
- | LD B, 6 ; 6 iteraciones, | + | ld b, 6 ; 6 iteraciones, |
bucle: | bucle: | ||
- | LD A, $7F ; Semifila B a ESPACIO | + | ld a, $7f ; Semifila B a ESPACIO |
- | IN A, ($FE) ; Leemos el puerto | + | in a, ($fe) ; Leemos el puerto |
- | | + | |
- | JR NZ, bucle ; Si esta a 1 (no pulsado), esperar | + | jr nz, bucle ; Si esta a 1 (no pulsado), esperar |
- | LD A, B ; A = B | + | ld a, b ; A = B |
- | | + | |
- | suelta_tecla: | + | suelta_tecla: |
- | LD A, $7F ; Semifila B a ESPACIO | + | ld a, $7f ; Semifila B a ESPACIO |
- | IN A, ($FE) ; Leemos el puerto | + | in a, ($fe) ; Leemos el puerto |
- | | + | |
- | JR Z, suelta_tecla | + | jr z, suelta_tecla |
- | | + | |
salir: | salir: | ||
- | RET | + | ret |
- | | + | |
</ | </ | ||
\\ | \\ | ||
- | {{ cursos: | + | {{ cursos: |
\\ | \\ | ||
- | El puerto | + | El puerto |
- | permitiendo cambiar el modelo de páginas de memoria (algo que | + | |
- | no vamos a ver en este capítulo). | + | |
- | Los puertos | + | Los puertos |
- | modelos que dispongan de él, así como el RS232/MIDI y el interfaz | + | |
- | AUX. | + | |
- | | + | |
- | y los puertos | + | |
- | aquellos modelos de Spectrum que dispongan de ella. | + | |
- | | + | |
- | Salida en el //capítulo 8 sección 23 del manual del +2A y +3//, disponible | + | |
- | online en World Of Spectrum. | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ===== TABLA DE INSTRUCCIONES, | + | |
+ | \\ | ||
+ | ===== Tabla de instrucciones, | ||
- | A continuación se incluye una tabla donde se hace referencia a las instrucciones | + | A continuación se incluye una tabla donde se hace referencia a las instrucciones del microprocesador Z80 (campo Mnemonic), los ciclos de reloj que tarda en ejecutarse (campo Clck), el tamaño en bytes de la instrucción codificada (Siz), la afectación de Flags (SZHPNC), el opcode y su descripción en cuanto a ejecución. |
- | del microprocesador Z80 (campo Mnemonic), los ciclos de reloj que tarda en ejecutarse | + | |
- | (campo Clck), el tamaño en bytes de la instrucción codificada (Siz), la afectación | + | |
- | de Flags (SZHPNC), el opcode y su descripción en cuanto a ejecución. | + | |
- | La tabla forma parte de un documento llamado "**The Complete Z80 OP-Code Reference**", | + | La tabla forma parte de un documento llamado "**The Complete Z80 OP-Code Reference**", |
- | de //Devin Gardner//. | + | |
\\ | \\ | ||
Línea 308: | Línea 288: | ||
|Mnemonic | |Mnemonic | ||
--------------+----+---+------+------------+---------------------+----------------------- | --------------+----+---+------+------------+---------------------+----------------------- | ||
- | |ADC A,r | 4 | 1 |***V0*|88+rb | + | |adc a,r | 4 | 1 |***V0*|88+rb |
- | |ADC A,N | 7 | 2 | |CE XX | + | |adc a,N | 7 | 2 | |CE XX |
- | |ADC A,(HL) | 7 | 1 | |8E | | + | |adc a,(hl) | 7 | 1 | |8E | |
- | |ADC A,(IX+N) | 19 | 3 | |DD 8E XX | | + | |adc a,(ix+n) | 19 | 3 | |DD 8E XX | |
- | |ADC A,(IY+N) | 19 | 3 | |FD 8E XX | | + | |adc a,(iy+n) | 19 | 3 | |FD 8E XX | |
- | |ADC HL,BC | 15 | 2 |**?V0*|ED 4A |Add with Carry | + | |adc hl,bc | 15 | 2 |**?V0*|ED 4A |Add with Carry |
- | |ADC HL,DE | 15 | 2 | |ED 5A | + | |adc hl,de | 15 | 2 | |ED 5A |
- | |ADC HL,HL | 15 | 2 | |ED 6A | + | |adc hl,hl | 15 | 2 | |ED 6A |
- | |ADC HL,SP | 15 | 2 | |ED 7A | + | |adc hl,sp | 15 | 2 | |ED 7A |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |ADD A,r | 4 | 1 |***V0*|80+rb | + | |add a,r | 4 | 1 |***V0*|80+rb |
- | |ADD A,N | 7 | 2 | |C6 XX | + | |add a,N | 7 | 2 | |C6 XX |
- | |ADD A,(HL) | 7 | 1 | |86 | | + | |add a,(hl) | 7 | 1 | |86 | |
- | |ADD A,(IX+N) | 19 | 3 | |DD 86 XX | | + | |add a,(ix+n) | 19 | 3 | |DD 86 XX | |
- | |ADD A,(IY+N) | 19 | 3 | |FD 86 XX | | + | |add a,(iy+n) | 19 | 3 | |FD 86 XX | |
- | |ADD HL,BC | 11 | 1 |--? | + | |add hl,bc | 11 | 1 |--? |
- | |ADD HL,DE | 11 | 1 | |19 | | + | |add hl,de | 11 | 1 | |19 | |
- | |ADD HL,HL | 11 | 1 | |29 | | + | |add hl,hl | 11 | 1 | |29 | |
- | |ADD HL,SP | 11 | 1 | |39 | | + | |add hl,sp | 11 | 1 | |39 | |
- | |ADD IX,BC | 15 | 2 |--?-0*|DD 09 |Add (IX register) | + | |add ix,bc | 15 | 2 |--?-0*|DD 09 |Add (IX register) |
- | |ADD IX,DE | 15 | 2 | |DD 19 | + | |add ix,de | 15 | 2 | |DD 19 |
- | |ADD IX,IX | 15 | 2 | |DD 29 | + | |add ix,ix | 15 | 2 | |DD 29 |
- | |ADD IX,SP | 15 | 2 | |DD 39 | + | |add ix,sp | 15 | 2 | |DD 39 |
- | |ADD IY,BC | 15 | 2 |--?-0*|FD 09 |Add (IY register) | + | |add iy,bc | 15 | 2 |--?-0*|FD 09 |Add (IY register) |
- | |ADD IY,DE | 15 | 2 | |FD 19 | + | |add iy,de | 15 | 2 | |FD 19 |
- | |ADD IY,IY | 15 | 2 | |FD 29 | + | |add iy,iy | 15 | 2 | |FD 29 |
- | |ADD IY,SP | 15 | 2 | |FD 39 | + | |add iy,sp | 15 | 2 | |FD 39 |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |AND r | 4 | 1 |***P00|A0+rb | + | |and r | 4 | 1 |***P00|A0+rb |
- | |AND N | 7 | 2 | |E6 XX | + | |and N | 7 | 2 | |E6 XX |
- | |AND (HL) | 7 | 1 | |A6 | | + | |and (hl) | 7 | 1 | |A6 | |
- | |AND (IX+N) | 19 | 3 | |DD A6 XX | | + | |and (ix+n) | 19 | 3 | |DD A6 XX | |
- | |AND (IY+N) | 19 | 3 | |FD A6 XX | | + | |and (iy+n) | 19 | 3 | |FD A6 XX | |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |BIT b,r | 8 | 2 |?*1?0-|CB 40+8*b+rb|Test Bit | + | |bit b,r | 8 | 2 |?*1?0-|CB 40+8*b+rb|Test Bit |
- | |BIT b,(HL) | 12 | 2 | |CB 46+8*b | + | |bit b,(hl) | 12 | 2 | |CB 46+8*b |
- | |BIT b,(IX+N) | 20 | 4 | |DD CB XX 46+8*b | + | |bit b,(ix+N) | 20 | 4 | |DD CB XX 46+8*b |
- | |BIT b,(IY+N) | 20 | 4 | |FD CB XX 46+8*b | + | |bit b,(iy+N) | 20 | 4 | |FD CB XX 46+8*b |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |CALL NN | 17 | 3 |------|CD XX XX |Unconditional Call | + | |call NN | 17 | 3 |------|CD XX XX |Unconditional Call |
- | |CALL C,NN |17/1| 3 |------|DC XX XX |Conditional Call |If Carry = 1 | | + | |call c,NN |17/1| 3 |------|DC XX XX |Conditional Call |If Carry = 1 | |
- | |CALL NC,NN | + | |call nc,NN |
- | |CALL M,NN |17/1| 3 | |FC XX XX | |If Sign = 1 (negative)| | + | |call m,NN |17/1| 3 | |FC XX XX | |If Sign = 1 (negative)| |
- | |CALL P,NN |17/1| 3 | |F4 XX XX | |If Sign = 0 (positive)| | + | |call p,NN |17/1| 3 | |F4 XX XX | |If Sign = 0 (positive)| |
- | |CALL Z,NN |17/1| 3 | |CC XX XX | |If Zero = 1 (ans.=0) | + | |call z,NN |17/1| 3 | |CC XX XX | |If Zero = 1 (ans.=0) |
- | |CALL NZ,NN | + | |call nz,NN |
- | |CALL PE,NN | + | |call pe,NN |
- | |CALL PO,NN | + | |call po,NN |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |CCF | 4 | 1 |--? | + | |ccf | 4 | 1 |--? |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |CP r | 4 | 1 |***V1*|B8+rb | + | |cp r | 4 | 1 |***V1*|B8+rb |
- | |CP N | 7 | 2 | |FE XX | + | |cp N | 7 | 2 | |FE XX |
- | |CP (HL) | 7 | 1 | |BE | | + | |cp (hl) | 7 | 1 | |BE | |
- | |CP (IX+N) | 19 | 3 | |DD BE XX | | + | |cp (ix+n) | 19 | 3 | |DD BE XX | |
- | |CP (IY+N) | 19 | 3 | |FD BE XX | | + | |cp (iy+n) | 19 | 3 | |FD BE XX | |
- | |CPD | 16 | 2 |****1-|ED A9 | + | |cpd | 16 | 2 |****1-|ED A9 |
- | |CPDR |21/1| 2 |****1-|ED B9 | + | |cpdr |21/1| 2 |****1-|ED B9 |
- | |CPI | 16 | 2 |****1-|ED A1 | + | |cpi | 16 | 2 |****1-|ED A1 |
- | |CPIR |21/1| 2 |****1-|ED B1 | + | |cpir |21/1| 2 |****1-|ED B1 |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |CPL | 4 | 1 |--1-1-|2F | + | |cpl | 4 | 1 |--1-1-|2F |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |DAA | 4 | 1 |***P-*|27 | + | |daa | 4 | 1 |***P-*|27 |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |DEC A | 4 | 1 |***V1-|3D | + | |dec a | 4 | 1 |***V1-|3D |
- | |DEC B | 4 | 1 | |05 | | + | |dec b | 4 | 1 | |05 | |
- | |DEC C | 4 | 1 | |0D | | + | |dec c | 4 | 1 | |0D | |
- | |DEC D | 4 | 1 | |15 | | + | |dec d | 4 | 1 | |15 | |
- | |DEC E | 4 | 1 | |1D | | + | |dec e | 4 | 1 | |1D | |
- | |DEC H | 4 | 1 | |25 | | + | |dec h | 4 | 1 | |25 | |
- | |DEC L | 4 | 2 | |2D | | + | |dec l | 4 | 2 | |2D | |
- | |DEC (HL) | 11 | 1 | |35 | | + | |dec (hl) | 11 | 1 | |35 | |
- | |DEC (IX+N) | 23 | 3 | |DD 35 XX | | + | |dec (ix+n) | 23 | 3 | |DD 35 XX | |
- | |DEC (IY+N) | 23 | 3 | |FD 35 XX | | + | |dec (iy+n) | 23 | 3 | |FD 35 XX | |
- | |DEC BC | 6 | 1 |------|0B | + | |dec bc | 6 | 1 |------|0B |
- | |DEC DE | 6 | 1 | |1B | | + | |dec de | 6 | 1 | |1B | |
- | |DEC HL | 6 | 1 | |2B | | + | |dec hl | 6 | 1 | |2B | |
- | |DEC SP | 6 | 1 | |3B | | + | |dec sp | 6 | 1 | |3B | |
- | |DEC IX | 10 | 2 |------|DD 2B | + | |dec ix | 10 | 2 |------|DD 2B |
- | |DEC IY | 10 | 2 | |FD 2B | + | |dec iy | 10 | 2 | |FD 2B |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |DI | 4 | 1 |------|F3 | + | |di | 4 | 1 |------|F3 |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |DJNZ $+2 | + | |djnz $+2 |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |EI | 4 | 1 |------|FB | + | |ei | 4 | 1 |------|FB |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |EX (SP),HL | 19 | 1 |------|E3 | + | |ex (sp),hl | 19 | 1 |------|E3 |
- | |EX (SP),IX | 23 | 2 |------|DD E3 | + | |ex (sp),ix | 23 | 2 |------|DD E3 |
- | |EX (SP),IY | 23 | 2 | |FD E3 | + | |ex (sp),iy | 23 | 2 | |FD E3 |
- | |EX AF,AF' | + | |ex af,af' |
- | |EX DE,HL | 4 | 1 |------|EB | + | |ex de,hl | 4 | 1 |------|EB |
- | |EXX | 4 | 1 |------|D9 | + | |exx | 4 | 1 |------|D9 |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |HALT | 4 | 1 |------|76 | + | |halt | 4 | 1 |------|76 |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |IM 0 | 8 | 2 |------|ED 46 | + | |im 0 | 8 | 2 |------|ED 46 |
- | |IM 1 | 8 | 2 | |ED 56 | + | |im 1 | 8 | 2 | |ED 56 |
- | |IM 2 | 8 | 2 | |ED 5E | + | |im 2 | 8 | 2 | |ED 5E |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |IN A,(N) | 11 | 2 |------|DB XX | + | |in a,(N) | 11 | 2 |------|DB XX |
- | |IN (C) | 12 | 2 |***P0-|ED 70 | + | |in (c) | 12 | 2 |***P0-|ED 70 |
- | |IN A,(C) | 12 | 2 |***P0-|ED 78 | + | |in a,(c) | 12 | 2 |***P0-|ED 78 |
- | |IN B,(C) | 12 | 2 | |ED 40 | + | |in b,(c) | 12 | 2 | |ED 40 |
- | |IN C,(C) | 12 | 2 | |ED 48 | + | |in c,(c) | 12 | 2 | |ED 48 |
- | |IN D,(C) | 12 | 2 | |ED 50 | + | |in d,(c) | 12 | 2 | |ED 50 |
- | |IN E,(C) | 12 | 2 | |ED 58 | + | |in e,(c) | 12 | 2 | |ED 58 |
- | |IN H,(C) | 12 | 2 | |ED 60 | + | |in h,(c) | 12 | 2 | |ED 60 |
- | |IN L,(C) | 12 | 2 | |ED 68 | + | |in l,(c) | 12 | 2 | |ED 68 |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |INC A | 4 | 1 |***V0-|3C | + | |inc a | 4 | 1 |***V0-|3C |
- | |INC B | 4 | 1 | |04 | | + | |inc b | 4 | 1 | |04 | |
- | |INC C | 4 | 1 | |0C | | + | |inc c | 4 | 1 | |0C | |
- | |INC D | 4 | 1 | |14 | | + | |inc d | 4 | 1 | |14 | |
- | |INC E | 4 | 1 | |1C | | + | |inc e | 4 | 1 | |1C | |
- | |INC H | 4 | 1 | |24 | | + | |inc h | 4 | 1 | |24 | |
- | |INC L | 4 | 1 | |2C | | + | |inc l | 4 | 1 | |2C | |
- | |INC BC | 6 | 1 |------|03 | + | |inc bc | 6 | 1 |------|03 |
- | |INC DE | 6 | 1 | |13 | | + | |inc de | 6 | 1 | |13 | |
- | |INC HL | 6 | 1 | |23 | | + | |inc hl | 6 | 1 | |23 | |
- | |INC SP | 6 | 1 | |33 | | + | |inc sp | 6 | 1 | |33 | |
- | |INC IX | 10 | 2 |------|DD 23 | + | |inc ix | 10 | 2 |------|DD 23 |
- | |INC IY | 10 | 2 | |FD 23 | + | |inc iy | 10 | 2 | |FD 23 |
- | |INC (HL) | 11 | 1 |***V0-|34 | + | |inc (hl) | 11 | 1 |***V0-|34 |
- | |INC (IX+N) | 23 | 3 |***V0-|DD 34 XX |Increment | + | |inc (ix+n) | 23 | 3 |***V0-|DD 34 XX |Increment |
- | |INC (IY+N) | 23 | 3 | |FD 34 XX | | + | |inc (iy+n) | 23 | 3 | |FD 34 XX | |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |IND | 16 | 2 |?*??1-|ED AA | + | |ind | 16 | 2 |?*??1-|ED AA |
- | |INDR |21/1| 2 |?1??1-|ED BA | + | |indr |21/1| 2 |?1??1-|ED BA |
- | |INI | 16 | 2 |?*??1-|ED A2 | + | |ini | 16 | 2 |?*??1-|ED A2 |
- | |INIR |21/1| 2 |?1??1-|ED B2 | + | |inir |21/1| 2 |?1??1-|ED B2 |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |JP $NN | 10 | 3 |------|C3 XX XX |Unconditional Jump | + | |jp $NN | 10 | 3 |------|C3 XX XX |Unconditional Jump |
- | |JP (HL) | 4 | 1 |------|E9 | + | |jp (hl) | 4 | 1 |------|E9 |
- | |JP (IX) | 8 | 2 |------|DD E9 | + | |jp (ix) | 8 | 2 |------|DD E9 |
- | |JP (IY) | 8 | 2 | |FD E9 | + | |jp (iy) | 8 | 2 | |FD E9 |
- | |JP C,$NN | + | |jp c,$NN |
- | |JP NC,$NN |10/1| 3 | |D2 XX XX | |If Carry = 0 | | + | |jp nc,$NN |10/1| 3 | |D2 XX XX | |If Carry = 0 | |
- | |JP M,$NN | + | |jp m,$NN |
- | |JP P,$NN | + | |jp p,$NN |
- | |JP Z,$NN | + | |jp z,$NN |
- | |JP NZ,$NN |10/1| 3 | |C2 XX XX | |If Zero = 0 (non-zero)| | + | |jp nz,$NN |10/1| 3 | |C2 XX XX | |If Zero = 0 (non-zero)| |
- | |JP PE,$NN |10/1| 3 | |EA XX XX | |If Parity = 1 (even) | + | |jp pe,$NN |10/1| 3 | |EA XX XX | |If Parity = 1 (even) |
- | |JP PO,$NN |10/1| 3 | |E2 XX XX | |If Parity = 0 (odd) | | + | |jp po,$NN |10/1| 3 | |E2 XX XX | |If Parity = 0 (odd) | |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |JR $N+2 | 12 | 2 |------|18 XX | + | |jr $N+2 | 12 | 2 |------|18 XX |
- | |JR C,$N+2 |12/7| 2 |------|38 XX | + | |jr c,$N+2 |12/7| 2 |------|38 XX |
- | |JR NC,$N+2 | + | |jr nc,$N+2 |
- | |JR Z,$N+2 |12/7| 2 | |28 XX | + | |jr z,$N+2 |12/7| 2 | |28 XX |
- | |JR NZ,$N+2 | + | |jr nz,$N+2 |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |LD I,A | 9 | 2 |------|ED 47 | + | |ld i,a | 9 | 2 |------|ED 47 |
- | |LD R,A | 9 | 2 | |ED 4F | + | |ld r,a | 9 | 2 | |ED 4F |
- | |LD A,I | 9 | 2 |**0*0-|ED 57 | + | |ld a,i | 9 | 2 |**0*0-|ED 57 |
- | |LD A,R | 9 | 2 | |ED 5F | + | |ld a,r | 9 | 2 | |ED 5F |
- | |LD A,r | 4 | 1 |------|78+rb | + | |ld a,r | 4 | 1 |------|78+rb |
- | |LD A,N | 7 | 2 | |3E XX | + | |ld a,N | 7 | 2 | |3E XX |
- | |LD A,(BC) | 7 | 1 | |0A | | + | |ld a,(bc) | 7 | 1 | |0A | |
- | |LD A,(DE) | 7 | 1 | |1A | | + | |ld a,(de) | 7 | 1 | |1A | |
- | |LD A,(HL) | 7 | 1 | |7E | | + | |ld a,(hl) | 7 | 1 | |7E | |
- | |LD A,(IX+N) | 19 | 3 | |DD 7E XX | | + | |ld a,(ix+n) | 19 | 3 | |DD 7E XX | |
- | |LD A,(IY+N) | 19 | 3 | |FD 7E XX | | + | |ld a,(iy+n) | 19 | 3 | |FD 7E XX | |
- | |LD A,(NN) | 13 | 3 | |3A XX XX | | + | |ld a,(NN) | 13 | 3 | |3A XX XX | |
- | |LD B,r | 4 | 1 | |40+rb | + | |ld b,r | 4 | 1 | |40+rb |
- | |LD B,N | 7 | 2 | |06 XX | + | |ld b,N | 7 | 2 | |06 XX |
- | |LD B,(HL) | 7 | 1 | |46 | | + | |ld b,(hl) | 7 | 1 | |46 | |
- | |LD B,(IX+N) | 19 | 3 | |DD 46 XX | | + | |ld b,(ix+n) | 19 | 3 | |DD 46 XX | |
- | |LD B,(IY+N) | 19 | 3 | |FD 46 XX | | + | |ld b,(iy+n) | 19 | 3 | |FD 46 XX | |
- | |LD C,r | 4 | 1 | |48+rb | + | |ld c,r | 4 | 1 | |48+rb |
- | |LD C,N | 7 | 2 | |0E XX | + | |ld c,N | 7 | 2 | |0E XX |
- | |LD C,(HL) | 7 | 1 | |4E | | + | |ld c,(hl) | 7 | 1 | |4E | |
- | |LD C,(IX+N) | 19 | 3 | |DD 4E XX | | + | |ld c,(ix+n) | 19 | 3 | |DD 4E XX | |
- | |LD C,(IY+N) | 19 | 3 | |FD 4E XX | | + | |ld c,(iy+n) | 19 | 3 | |FD 4E XX | |
- | |LD D,r | 4 | 1 | |50+rb | + | |ld d,r | 4 | 1 | |50+rb |
- | |LD D,N | 7 | 2 | |16 XX | + | |ld d,N | 7 | 2 | |16 XX |
- | |LD D,(HL) | 7 | 1 | |56 | | + | |ld d,(hl) | 7 | 1 | |56 | |
- | |LD D,(IX+N) | 19 | 3 | |DD 56 XX | | + | |ld d,(ix+n) | 19 | 3 | |DD 56 XX | |
- | |LD D,(IY+N) | 19 | 3 | |FD 56 XX | | + | |ld d,(iy+n) | 19 | 3 | |FD 56 XX | |
- | |LD E,r | 4 | 1 | |58+rb | + | |ld e,r | 4 | 1 | |58+rb |
- | |LD E,N | 7 | 2 | |1E XX | + | |ld e,N | 7 | 2 | |1E XX |
- | |LD E,(HL) | 7 | 1 | |5E | | + | |ld e,(hl) | 7 | 1 | |5E | |
- | |LD E,(IX+N) | 19 | 3 | |DD 5E XX | | + | |ld e,(ix+n) | 19 | 3 | |DD 5E XX | |
- | |LD E,(IY+N) | 19 | 3 | |FD 5E XX | | + | |ld e,(iy+n) | 19 | 3 | |FD 5E XX | |
- | |LD H,r | 4 | 1 | |60+rb | + | |ld h,r | 4 | 1 | |60+rb |
- | |LD H,N | 7 | 2 | |26 XX | + | |ld h,N | 7 | 2 | |26 XX |
- | |LD H,(HL) | 7 | 1 | |66 | | + | |ld h,(hl) | 7 | 1 | |66 | |
- | |LD H,(IX+N) | 19 | 3 | |DD 66 XX | | + | |ld h,(ix+n) | 19 | 3 | |DD 66 XX | |
- | |LD H,(IY+N) | 19 | 3 | |FD 66 XX | | + | |ld h,(iy+n) | 19 | 3 | |FD 66 XX | |
- | |LD L,r | 4 | 1 | |68+rb | + | |ld l,r | 4 | 1 | |68+rb |
- | |LD L,N | 7 | 2 | |2E XX | + | |ld l,N | 7 | 2 | |2E XX |
- | |LD L,(HL) | 7 | 1 | |6E | | + | |ld l,(hl) | 7 | 1 | |6E | |
- | |LD L,(IX+N) | 19 | 3 | |DD 6E XX | | + | |ld l,(ix+n) | 19 | 3 | |DD 6E XX | |
- | |LD L,(IY+N) | 19 | 3 | |FD 6E XX | | + | |ld l,(iy+n) | 19 | 3 | |FD 6E XX | |
- | |LD BC,(NN) | 20 | 4 |------|ED 4B XX XX |Load (16-bit) | + | |ld bc,(NN) | 20 | 4 |------|ED 4B XX XX |Load (16-bit) |
- | |LD BC,NN | 10 | 3 | |01 XX XX | | + | |ld bc,NN | 10 | 3 | |01 XX XX | |
- | |LD DE,(NN) | 20 | 4 | |ED 5B XX XX | | + | |ld de,(NN) | 20 | 4 | |ED 5B XX XX | |
- | |LD DE,NN | 10 | 3 | |11 XX XX | | + | |ld de,NN | 10 | 3 | |11 XX XX | |
- | |LD HL,(NN) | 20 | 3 | |2A XX XX | | + | |ld hl,(NN) | 20 | 3 | |2A XX XX | |
- | |LD HL,NN | 10 | 3 | |21 XX XX | | + | |ld hl,NN | 10 | 3 | |21 XX XX | |
- | |LD SP,(NN) | 20 | 4 | |ED 7B XX XX | | + | |ld sp,(NN) | 20 | 4 | |ED 7B XX XX | |
- | |LD SP,HL | 6 | 1 | |F9 | | + | |ld sp,hl | 6 | 1 | |F9 | |
- | |LD SP,IX | 10 | 2 | |DD F9 | + | |ld sp,ix | 10 | 2 | |DD F9 |
- | |LD SP,IY | 10 | 2 | |FD F9 | + | |ld sp,iy | 10 | 2 | |FD F9 |
- | |LD SP,NN | 10 | 3 | |31 XX XX | | + | |ld sp,NN | 10 | 3 | |31 XX XX | |
- | |LD IX,(NN) | 20 | 4 | |DD 2A XX XX | | + | |ld ix,(NN) | 20 | 4 | |DD 2A XX XX | |
- | |LD IX,NN | 14 | 4 | |DD 21 XX XX | | + | |ld ix,NN | 14 | 4 | |DD 21 XX XX | |
- | |LD IY,(NN) | 20 | 4 | |FD 2A XX XX | | + | |ld iy,(NN) | 20 | 4 | |FD 2A XX XX | |
- | |LD IY,NN | 14 | 4 | |FD 21 XX XX | | + | |ld iy,NN | 14 | 4 | |FD 21 XX XX | |
- | |LD (HL),r | 7 | 1 |------|70+rb | + | |ld (hl),r | 7 | 1 |------|70+rb |
- | |LD (HL),N | 10 | 2 | |36 XX | + | |ld (hl),N | 10 | 2 | |36 XX |
- | |LD (BC),A | 7 | 1 | |02 | | + | |ld (bc),a | 7 | 1 | |02 | |
- | |LD (DE),A | 7 | 1 | |12 | | + | |ld (de),a | 7 | 1 | |12 | |
- | |LD (NN),A | 13 | 3 | |32 XX XX | | + | |ld (NN),a | 13 | 3 | |32 XX XX | |
- | |LD (NN),BC | 20 | 4 | |ED 43 XX XX | | + | |ld (NN),bc | 20 | 4 | |ED 43 XX XX | |
- | |LD (NN),DE | 20 | 4 | |ED 53 XX XX | | + | |ld (NN),de | 20 | 4 | |ED 53 XX XX | |
- | |LD (NN),HL | 16 | 3 | |22 XX XX | | + | |ld (NN),hl | 16 | 3 | |22 XX XX | |
- | |LD (NN),IX | 20 | 4 | |DD 22 XX XX | | + | |ld (NN),ix | 20 | 4 | |DD 22 XX XX | |
- | |LD (NN),IY | 20 | 4 | |FD 22 XX XX | | + | |ld (NN),iy | 20 | 4 | |FD 22 XX XX | |
- | |LD (NN),SP | 20 | 4 | |ED 73 XX XX | | + | |ld (NN),sp | 20 | 4 | |ED 73 XX XX | |
- | |LD (IX+N),r | 19 | 3 | |DD 70+rb XX | | + | |ld (ix+n),r | 19 | 3 | |DD 70+rb XX | |
- | |LD (IX+N),N | 19 | 4 | |DD 36 XX XX | | + | |ld (ix+n),N | 19 | 4 | |DD 36 XX XX | |
- | |LD (IY+N),r | 19 | 3 | |FD 70+rb XX | | + | |ld (iy+n),r | 19 | 3 | |FD 70+rb XX | |
- | |LD (IY+N),N | 19 | 4 | |FD 36 XX XX | | + | |ld (iy+n),N | 19 | 4 | |FD 36 XX XX | |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |LDD | 16 | 2 |--0*0-|ED A8 |Load and Decrement | + | |ldd | 16 | 2 |--0*0-|ED A8 |Load and Decrement |
- | |LDDR |21/1| 2 |--000-|ED B8 | + | |lddr |21/1| 2 |--000-|ED B8 |
- | |LDI | 16 | 2 |--0*0-|ED A0 |Load and Increment | + | |ldi | 16 | 2 |--0*0-|ED A0 |Load and Increment |
- | |LDIR |21/1| 2 |--000-|ED B0 | + | |ldir |21/1| 2 |--000-|ED B0 |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |NEG | 8 | 2 |***V1*|ED 44 | + | |neg | 8 | 2 |***V1*|ED 44 |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |NOP | 4 | 1 |------|00 | + | |nop | 4 | 1 |------|00 |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |OR r | 4 | 1 |***P00|B0+rb | + | |or r | 4 | 1 |***P00|B0+rb |
- | |OR N | 7 | 2 | |F6 XX | + | |or N | 7 | 2 | |F6 XX |
- | |OR (HL) | 7 | 1 | |B6 | | + | |or (hl) | 7 | 1 | |B6 | |
- | |OR (IX+N) | 19 | 3 | |DD B6 XX | | + | |or (ix+n) | 19 | 3 | |DD B6 XX | |
- | |OR (IY+N) | 19 | 3 | |FD B6 XX | | + | |or (iy+n) | 19 | 3 | |FD B6 XX | |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |OUT (N),A | 11 | 2 |------|D3 XX | + | |out (N),a | 11 | 2 |------|D3 XX |
- | |OUT (C),0 | 12 | 2 |------|ED 71 | + | |out (c),0 | 12 | 2 |------|ED 71 |
- | |OUT (C),A | 12 | 2 |------|ED 79 | + | |out (c),a | 12 | 2 |------|ED 79 |
- | |OUT (C),B | 12 | 2 | |ED 41 | + | |out (c),b | 12 | 2 | |ED 41 |
- | |OUT (C),C | 12 | 2 | |ED 49 | + | |out (c),c | 12 | 2 | |ED 49 |
- | |OUT (C),D | 12 | 2 | |ED 51 | + | |out (c),d | 12 | 2 | |ED 51 |
- | |OUT (C),E | 12 | 2 | |ED 59 | + | |out (c),e | 12 | 2 | |ED 59 |
- | |OUT (C),H | 12 | 2 | |ED 61 | + | |out (c),h | 12 | 2 | |ED 61 |
- | |OUT (C),L | 12 | 2 | |ED 69 | + | |out (c),l | 12 | 2 | |ED 69 |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |OUTD | 16 | 2 |?*??1-|ED AB | + | |outd | 16 | 2 |?*??1-|ED AB |
- | |OTDR |21/1| 2 |?1??1-|ED BB | + | |otdr |21/1| 2 |?1??1-|ED BB |
- | |OUTI | 16 | 2 |?*??1-|ED A3 | + | |outi | 16 | 2 |?*??1-|ED A3 |
- | |OTIR |21/1| 2 |?1??1-|ED B3 | + | |otir |21/1| 2 |?1??1-|ED B3 |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |POP AF | 10 | 1 |------|F1 | + | |pop af | 10 | 1 |------|F1 |
- | |POP BC | 10 | 1 | |C1 | | + | |pop bc | 10 | 1 | |C1 | |
- | |POP DE | 10 | 1 | |D1 | | + | |pop de | 10 | 1 | |D1 | |
- | |POP HL | 10 | 1 | |E1 | | + | |pop hl | 10 | 1 | |E1 | |
- | |POP IX | 14 | 2 |------|DD E1 | + | |pop ix | 14 | 2 |------|DD E1 |
- | |POP IY | 14 | 2 | |FD E1 | + | |pop iy | 14 | 2 | |FD E1 |
- | |PUSH AF | 11 | 1 |------|F5 | + | |push af | 11 | 1 |------|F5 |
- | |PUSH BC | 11 | 1 | |C5 | | + | |push bc | 11 | 1 | |C5 | |
- | |PUSH DE | 11 | 1 | |D5 | | + | |push de | 11 | 1 | |D5 | |
- | |PUSH HL | 11 | 1 | |E5 | | + | |push hl | 11 | 1 | |E5 | |
- | |PUSH IX | 15 | 2 |------|DD E5 | + | |push ix | 15 | 2 |------|DD E5 |
- | |PUSH IY | 15 | 2 | |FD E5 | + | |push iy | 15 | 2 | |FD E5 |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |RES b,r | 8 | 2 |------|CB 80+8*b+rb|Reset bit |m=m& | + | |res b,r | 8 | 2 |------|CB 80+8*b+rb|Reset bit |m=m& |
- | |RES b,(HL) | 15 | 2 |------|CB 86+8*b | + | |res b,(hl) | 15 | 2 |------|CB 86+8*b |
- | |RES b,(IX+N) | 23 | 4 |------|DD CB XX 86+8*b | + | |res b,(ix+N) | 23 | 4 |------|DD CB XX 86+8*b |
- | |RES b,(IY+N) | 23 | 4 |------|FD CB XX 86+8*b | + | |res b,(iy+N) | 23 | 4 |------|FD CB XX 86+8*b |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |RET | 10 | 1 |------|C9 | + | |ret | 10 | 1 |------|C9 |
- | |RET C | + | |ret c |
- | |RET NC |11/5| 1 | |D0 | |If Carry = 0 | | + | |ret nc |11/5| 1 | |D0 | |If Carry = 0 | |
- | |RET M | + | |ret m |
- | |RET P | + | |ret p |
- | |RET Z | + | |ret z |
- | |RET NZ |11/5| 1 | |C0 | |If Zero = 0 (non-zero)| | + | |ret nz |11/5| 1 | |C0 | |If Zero = 0 (non-zero)| |
- | |RET PE |11/5| 1 | |E8 | |If Parity = 1 (even) | + | |ret pe |11/5| 1 | |E8 | |If Parity = 1 (even) |
- | |RET PO |11/5| 1 | |E0 | |If Parity = 0 (odd) | | + | |ret po |11/5| 1 | |E0 | |If Parity = 0 (odd) | |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |RETI | 14 | 2 |------|ED 4D | + | |reti | 14 | 2 |------|ED 4D |
- | |RETN | 14 | 2 |------|ED 45 | + | |retn | 14 | 2 |------|ED 45 |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |RLA | 4 | 1 |--0-0*|17 | + | |rla | 4 | 1 |--0-0*|17 |
- | |RL r | 8 | 2 |**0P0*|CB 10+rb |Rotate Left |m={CY, | + | |rl r | 8 | 2 |**0P0*|CB 10+rb |Rotate Left |m={CY, |
- | |RL (HL) | 15 | 2 | |CB 16 | + | |rl (hl) | 15 | 2 | |CB 16 |
- | |RL (IX+N) | 23 | 4 | |DD CB XX 16 | | + | |rl (ix+n) | 23 | 4 | |DD CB XX 16 | |
- | |RL (IY+N) | 23 | 4 | |FD CB XX 16 | | + | |rl (iy+n) | 23 | 4 | |FD CB XX 16 | |
- | |RLCA | 4 | 1 |--0-0*|07 | + | |rlca | 4 | 1 |--0-0*|07 |
- | |RLC r | 8 | 2 |**0P0*|CB 00+rb |Rotate Left Circular |m=m< | + | |rlc r | 8 | 2 |**0P0*|CB 00+rb |Rotate Left Circular |m=m< |
- | |RLC (HL) | 15 | 2 | |CB 06 | + | |rlc (hl) | 15 | 2 | |CB 06 |
- | |RLC (IX+N) | 23 | 4 | |DD CB XX 06 | | + | |rlc (ix+n) | 23 | 4 | |DD CB XX 06 | |
- | |RLC (IY+N) | 23 | 4 | |FD CB XX 06 | | + | |rlc (iy+n) | 23 | 4 | |FD CB XX 06 | |
- | |RLD | 18 | 2 |**0P0-|ED 6F | + | |rld | 18 | 2 |**0P0-|ED 6F |
- | |RRA | 4 | 1 |--0-0*|1F | + | |rra | 4 | 1 |--0-0*|1F |
- | |RR r | 8 | 2 |**0P0*|CB 18+rb |Rotate Right | + | |rr r | 8 | 2 |**0P0*|CB 18+rb |Rotate Right |
- | |RR (HL) | 15 | 2 | |CB 1E | + | |rr (hl) | 15 | 2 | |CB 1E |
- | |RR (IX+N) | 23 | 4 | |DD CB XX 1E | | + | |rr (ix+n) | 23 | 4 | |DD CB XX 1E | |
- | |RR (IY+N) | 23 | 4 | |FD CB XX 1E | | + | |rr (iy+n) | 23 | 4 | |FD CB XX 1E | |
- | |RRCA | 4 | 1 |--0-0*|0F | + | |rrca | 4 | 1 |--0-0*|0F |
- | |RRC r | 8 | 2 |**0P0*|CB 08+rb |Rotate Right Circular|m=-> | + | |rrc r | 8 | 2 |**0P0*|CB 08+rb |Rotate Right Circular|m=-> |
- | |RRC (HL) | 15 | 2 | |CB 0E | + | |rrc (hl) | 15 | 2 | |CB 0E |
- | |RRC (IX+N) | 23 | 4 | |DD CB XX 0E | | + | |rrc (ix+n) | 23 | 4 | |DD CB XX 0E | |
- | |RRC (IY+N) | 23 | 4 | |FD CB XX 0E | | + | |rrc (iy+n) | 23 | 4 | |FD CB XX 0E | |
- | |RRD | 18 | 2 |**0P0-|ED 67 | + | |rrd | 18 | 2 |**0P0-|ED 67 |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |RST 0 | 11 | 1 |------|C7 | + | |rst 0 | 11 | 1 |------|C7 |
- | |RST 08H | 11 | 1 | |CF | | + | |rst 08H | 11 | 1 | |CF | |
- | |RST 10H | 11 | 1 | |D7 | | + | |rst 10H | 11 | 1 | |D7 | |
- | |RST 18H | 11 | 1 | |DF | | + | |rst 18H | 11 | 1 | |DF | |
- | |RST 20H | 11 | 1 | |E7 | | + | |rst 20H | 11 | 1 | |E7 | |
- | |RST 28H | 11 | 1 | |EF | | + | |rst 28H | 11 | 1 | |EF | |
- | |RST 30H | 11 | 1 | |F7 | | + | |rst 30H | 11 | 1 | |F7 | |
- | |RST 38H | 11 | 1 | |FF | | + | |rst 38H | 11 | 1 | |FF | |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |SBC r | 4 | 1 |***V1*|98+rb | + | |sbc r | 4 | 1 |***V1*|98+rb |
- | |SBC A,N | 7 | 2 | |DE XX | + | |sbc a,N | 7 | 2 | |DE XX |
- | |SBC (HL) | 7 | 1 | |9E | | + | |sbc (hl) | 7 | 1 | |9E | |
- | |SBC A,(IX+N) | 19 | 3 | |DD 9E XX | | + | |sbc a,(ix+n) | 19 | 3 | |DD 9E XX | |
- | |SBC A,(IY+N) | 19 | 3 | |FD 9E XX | | + | |sbc a,(iy+n) | 19 | 3 | |FD 9E XX | |
- | |SBC HL,BC | 15 | 2 |**?V1*|ED 42 | + | |sbc hl,bc | 15 | 2 |**?V1*|ED 42 |
- | |SBC HL,DE | 15 | 2 | |ED 52 | + | |sbc hl,de | 15 | 2 | |ED 52 |
- | |SBC HL,HL | 15 | 2 | |ED 62 | + | |sbc hl,hl | 15 | 2 | |ED 62 |
- | |SBC HL,SP | 15 | 2 | |ED 72 | + | |sbc hl,sp | 15 | 2 | |ED 72 |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |SCF | 4 | 1 |--0-01|37 | + | |scf | 4 | 1 |--0-01|37 |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |SET b,r | 8 | 2 |------|CB C0+8*b+rb|Set bit |m=mv{2^b} | + | |set b,r | 8 | 2 |------|CB C0+8*b+rb|Set bit |m=mv{2^b} |
- | |SET b,(HL) | 15 | 2 | |CB C6+8*b | + | |set b,(hl) | 15 | 2 | |CB C6+8*b |
- | |SET b,(IX+N) | 23 | 4 | |DD CB XX C6+8*b | + | |set b,(ix+N) | 23 | 4 | |DD CB XX C6+8*b |
- | |SET b,(IY+N) | 23 | 4 | |FD CB XX C6+8*b | + | |set b,(iy+N) | 23 | 4 | |FD CB XX C6+8*b |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |SLA r | 8 | 2 |**0P0*|CB 20+rb |Shift Left Arithmetic|m=m*2 | + | |sla r | 8 | 2 |**0P0*|CB 20+rb |Shift Left Arithmetic|m=m*2 |
- | |SLA (HL) | 15 | 2 | |CB 26 | + | |sla (hl) | 15 | 2 | |CB 26 |
- | |SLA (IX+N) | 23 | 4 | |DD CB XX 26 | | + | |sla (ix+n) | 23 | 4 | |DD CB XX 26 | |
- | |SLA (IY+N) | 23 | 4 | |FD CB XX 26 | | + | |sla (iy+n) | 23 | 4 | |FD CB XX 26 | |
- | |SRA r | 8 | 2 |**0P0*|CB 28+rb |Shift Right Arith. | + | |sra r | 8 | 2 |**0P0*|CB 28+rb |Shift Right Arith. |
- | |SRA (HL) | 15 | 2 | |CB 2E | + | |sra (hl) | 15 | 2 | |CB 2E |
- | |SRA (IX+N) | 23 | 4 | |DD CB XX 2E | | + | |sra (ix+n) | 23 | 4 | |DD CB XX 2E | |
- | |SRA (IY+N) | 23 | 4 | |FD CB XX 2E | | + | |sra (iy+n) | 23 | 4 | |FD CB XX 2E | |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |SLL r | 8 | 2 |**0P0*|CB 30+rb |Shift Left Logical* | + | |sll r | 8 | 2 |**0P0*|CB 30+rb |Shift Left Logical* |
- | |SLL (HL) | 15 | 2 | |CB 36 | + | |sll (hl) | 15 | 2 | |CB 36 |
- | |SLL (IX+N) | 23 | 4 | |DD CB XX 36 | | + | |sll (ix+n) | 23 | 4 | |DD CB XX 36 | |
- | |SLL (IY+N) | 23 | 4 | |FD CB XX 36 | | + | |sll (iy+n) | 23 | 4 | |FD CB XX 36 | |
- | |SRL r | 8 | 2 |**0P0*|CB 38+rb |Shift Right Logical | + | |srl r | 8 | 2 |**0P0*|CB 38+rb |Shift Right Logical |
- | |SRL (HL) | 15 | 2 | |CB 3E | + | |srl (hl) | 15 | 2 | |CB 3E |
- | |SRL (IX+N) | 23 | 4 | |DD CB XX 3E | | + | |srl (ix+n) | 23 | 4 | |DD CB XX 3E | |
- | |SRL (IY+N) | 23 | 4 | |FD CB XX 3E | | + | |srl (iy+n) | 23 | 4 | |FD CB XX 3E | |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |SUB r | 4 | 1 |***V1*|90+rb | + | |sub r | 4 | 1 |***V1*|90+rb |
- | |SUB N | 7 | 2 | |D6 XX | + | |sub N | 7 | 2 | |D6 XX |
- | |SUB (HL) | 7 | 1 | |96 | | + | |sub (hl) | 7 | 1 | |96 | |
- | |SUB (IX+N) | 19 | 3 | |DD 96 XX | | + | |sub (ix+n) | 19 | 3 | |DD 96 XX | |
- | |SUB (IY+N) | 19 | 3 | |FD 96 XX | | + | |sub (iy+n) | 19 | 3 | |FD 96 XX | |
+-------------+----+---+------+------------+---------------------+----------------------+ | +-------------+----+---+------+------------+---------------------+----------------------+ | ||
- | |XOR r | 4 | 1 |***P00|A8+rb | + | |xor r | 4 | 1 |***P00|A8+rb |
- | |XOR N | 7 | 2 | |EE XX | + | |xor N | 7 | 2 | |EE XX |
- | |XOR (HL) | 7 | 1 | |AE | | + | |xor (hl) | 7 | 1 | |AE | |
- | |XOR (IX+N) | 19 | 3 | |DD AE XX | | + | |xor (ix+n) | 19 | 3 | |DD AE XX | |
- | |XOR (IY+N) | 19 | 3 | |FD AE XX | | + | |xor (iy+n) | 19 | 3 | |FD AE XX | |
--------------+----+---+------+------------+---------------------+----------------------- | --------------+----+---+------+------------+---------------------+----------------------- | ||
Línea 701: | Línea 681: | ||
| cc |Condition (C, | | cc |Condition (C, | ||
| d | | d | ||
- | | dst | + | | dst |
| e | | e | ||
- | | m |Any register r, (HL) or (xx+d) | + | | m |Any register r, (hl) or (xx+d) |
| n | | n | ||
| nn |Two-byte expression (0 to 65535) | | nn |Two-byte expression (0 to 65535) | ||
| pp |Register pair BC, DE, IX or SP | | | pp |Register pair BC, DE, IX or SP | | ||
- | | qq |Register pair AF, BC, DE or HL | | + | | qq |Register pair AF, BC, de or HL | |
- | | qq' | + | | qq' |
| r | | r | ||
| rr |Register pair BC, DE, IY or SP | | | rr |Register pair BC, DE, IY or SP | | ||
- | | s |Any register r, value n, (HL) or (xx+d) | + | | s |Any register r, value n, (hl) or (xx+d) |
- | | src | + | | src |
- | | ss |Register pair BC, DE, HL or SP | | + | | ss |Register pair BC, DE, hl or SP | |
| xx |Index register IX or IY | | | xx |Index register IX or IY | | ||
| + - * / ^ |Add/ | | + - * / ^ |Add/ | ||
Línea 728: | Línea 708: | ||
Unos apuntes sobre esta tabla: | Unos apuntes sobre esta tabla: | ||
- | 1.- En instrucciones como "ADC A, r" | + | 1.- En instrucciones como '' |
- | En este caso, el opcode final se obtendría sumando a "88h" un valor de 0 a 7 según | + | |
- | el registro al que nos referimos: | + | |
- | ^ Registro ^ Valor RB ^ | + | |< 40% 50% 50% >| |
+ | ^ Registro ^ Valor rb ^ | ||
| A | 7 | | | A | 7 | | ||
| B | 0 | | | B | 0 | | ||
Línea 742: | Línea 721: | ||
| (HL) | 6 | | | (HL) | 6 | | ||
- | Por ejemplo, | + | Por ejemplo, |
- | 2.- En los saltos hay 2 tiempos de ejecución diferentes (por ejemplo, 10/1). En este | + | 2.- En los saltos hay 2 tiempos de ejecución diferentes (por ejemplo, 10/1). En este caso el valor más alto (10) son los t-estados o ciclos que toma la instrucción cuando el salto se realiza, y el más bajo (1) es lo que tarda la instrucción cuando no se salta al destino. Como véis, a la hora de programar una rutina que tenga saltos o bifurcaciones, |
- | caso el valor más alto (10) son los t-estados o ciclos que toma la instrucción cuando | + | |
- | el salto se realiza, y el más bajo (1) es lo que tarda la instrucción cuando no se | + | |
- | salta al destino. Como véis, a la hora de programar una rutina que tenga saltos o | + | |
- | bifurcaciones, | + | |
- | produzca la mayoría de las veces, no produzca un salto. | + | |
3.- La descripción de las afectaciones de flags son las siguientes: | 3.- La descripción de las afectaciones de flags son las siguientes: | ||
Línea 766: | Línea 740: | ||
</ | </ | ||
+ | \\ | ||
+ | ===== Instrucciones no documentadas del Z80 ===== | ||
- | ===== INSTRUCCIONES NO DOCUMENTADAS DEL Z80 ===== | + | En Internet podemos encontrar gran cantidad de documentación acerca del Z80 y su juego de instrucciones, |
+ | No obstante, existen una serie de instrucciones u opcodes que el microprocesador puede ejecutar y que no están detallados en la documentación oficial de Zilog. Con respecto a esto, tenemos la suerte de disponer de algo que los programadores de la época del Spectrum no tenían: una descripción detallada de las instrucciones no documentadas del Z80. Aunque la mayoría son instrucciones repetidas de sus versiones documentadas, | ||
- | En Internet podemos encontrar gran cantidad | + | ¿Por qué existen estos opcodes y no fueron documentados? |
- | y su juego de instrucciones, incluyendo las especificaciones oficiales | + | |
- | microprocesador | + | |
- | No obstante, existen una serie de instrucciones u opcodes que el microprocesador | + | ¿Cuál es la utilidad |
- | puede ejecutar y que no están detallados en la documentación oficial | + | |
- | Con respecto a esto, tenemos la suerte de disponer de algo que los programadores | + | |
- | de la época del Spectrum no tenían: una descripción detallada | + | |
- | no documentadas del Z80. Aunque | + | |
- | versiones documentadas, | + | |
- | le podamos sacar alguna utilidad. | + | |
- | ¿Por qué existen estos opcodes y no fueron documentados? | + | El juego Sabre Wulf, por ejemplo, utiliza una de estas instrucciones en la determinación del camino |
- | ellos no fueron considerados como " | + | |
- | de Zilog no los documentaron, o tal vez sean simplemente un resultado no previsto | + | |
- | de la ejecución del Z80 porque los diseñadores no pensaron | + | |
- | pudieran llegarle dichos códigos. El caso es que para el microprocesador existen | + | |
- | " | + | |
- | caso algunos de ellos realizan funciones válidas mientras | + | |
- | a ejecutar 2 instrucciones NOP, por ejemplo. | + | |
- | ¿Cuál es la utilidad de estas instrucciones para los programadores? | + | Los "// |
- | sinceros, como programadores | + | |
- | Si haces tus programas desde cero con un programa ensamblador, éste se encargará | + | |
- | de la conversión de instrucciones estándar a opcodes, aunque | + | |
- | la existencia de estas instrucciones. Para los programadores de emuladores y de | + | |
- | desensambladores, el conocimiento | + | |
- | El juego Sabre Wulf, por ejemplo, utiliza una de estas instrucciones en la determinación | + | \\ |
- | del camino de uno de los enemigos en pantalla (la instrucción SLL, que veremos a | + | ==== Prefijo $CB ==== |
- | continuación), | + | |
- | mal este juego hasta que incluyeron dicha instrucción en la emulación. | + | |
- | Los "// | + | Por ejemplo, los opcodes |
- | que hacen unas determinadas operaciones y que no están incluídos en la "lista oficial" | + | |
- | que hemos visto hasta ahora. Todos los ejemplos que veremos a continuación están | + | |
- | extraídos del documento "The Undocumented Z80 Documented" | + | |
+ | |< 40% 50% 50% >| | ||
+ | ^ OPCODE ^ INSTRUCCION ^ | ||
+ | | $CB $30 | sll b | | ||
+ | | $CB $31 | sll c | | ||
+ | | $CB $32 | sll d | | ||
+ | | $CB $33 | sll e | | ||
+ | | $CB $34 | sll h | | ||
+ | | $CB $35 | sll l | | ||
+ | | $CB $36 | sll (hl) | | ||
+ | | $CB $37 | sll a | | ||
+ | '' | ||
- | ==== Prefijo CB ==== | + | \\ |
+ | ==== Prefijos $DD y $FD ==== | ||
- | Por ejemplo, los opcodes CB 30, CB 31, CB 32, CB 33, CB 34, CB 35, CB 36 y CB 37 | + | En general, una instrucción |
- | definen | + | |
- | ^ OPCODE ^ INSTRUCCION ^ | + | * Si la instrucción usaba el registro HL, éste se sustituye por IX (excepto en las instrucciones '' |
- | | CB 30 | SLL B | | + | * Cualquier uso de (HL) se reemplaza por (IX+d), excepto '' |
- | | CB 31 | SLL C | | + | * Cualquier acceso a H se reemplaza por IXh (byte alto de IX), excepto en el uso de (ix+d). |
- | | CB 32 | SLL D | | + | * Cualquier acceso a L se reemplaza por IXl (byte alto de IX), excepto en el uso de (ix+d). |
- | | CB 33 | SLL E | | + | |
- | | CB 34 | SLL H | | + | |
- | | CB 35 | SLL L | | + | |
- | | CB 36 | SLL (HL) | | + | |
- | | CB 37 | SLL A | | + | |
- | **SLL (Shift Logical Left)** funciona exactamente igual que SLA salvo porque pone a | + | Por ejemplo: |
- | 1 el bit 0 (mientras que SLA lo ponía a 0). | + | |
+ | |< 40% 50% 50% >| | ||
+ | ^ Sin el prefijo $DD ^ Con el Prefijo $DD ^ | ||
+ | | ld hl, 0 | ld ix, 0 | | ||
+ | | ld h, a | ld ixh, a | | ||
+ | | ld h, (hl) | ld h, (ix+d) | | ||
- | ==== Prefijos DD y FD ==== | + | El caso de $FD es exactamente igual que el de $DD, pero usando el registro IY en lugar del IX. |
+ | \\ | ||
+ | ==== Prefijo ED ==== | ||
- | En general, | + | Hay una gran cantidad de instrucciones '' |
- | excepto por las siguientes reglas: | + | |
- | * Si la instrucción usaba el registro HL, éste se sustituye por IX (excepto en las instrucciones EX DE, HL y EXX). | + | |< 40% 50% 50% >| |
- | * Cualquier uso de (HL) se reemplaza por (IX+d), excepto JP (HL). | + | ^ OPCODE ^ INSTRUCCION ^ |
- | * Cualquier acceso a H se reemplaza por IXh (byte alto de IX), excepto en el uso de (IX+d). | + | | $ED $4C | neg | |
- | * Cualquier acceso a L se reemplaza por IXl (byte alto de IX), excepto en el uso de (IX+d). | + | | $ED $4E | im 0 | |
+ | | $ED $44 | neg | | ||
+ | | $ED $45 | retn | | ||
+ | | $ED $5C | neg | | ||
+ | | $ED $5D | retn | | ||
+ | | $ED $64 | neg | | ||
+ | | $ED $65 | retn | | ||
+ | | $ED $66 | im 0 | | ||
+ | | $ED $6C | neg | | ||
+ | | $ED $6D | retn | | ||
+ | | $ED $6E | im 0 | | ||
+ | | $ED $70 | in (c) / in f,(c) | | ||
+ | | $ED $71 | out (c),0 | | ||
+ | | $ED $74 | neg | | ||
+ | | $ED $75 | retn | | ||
+ | | $ED $76 | im1 | | ||
+ | | $ED $77 | nop | | ||
+ | | $ED $7C | neg | | ||
+ | | $ED $7D | retn | | ||
+ | | $ED $7E | im2 | | ||
+ | | $ED $7F | nop | | ||
- | Por ejemplo: | + | Aparte de los duplicados de '' |
- | ^ Sin el prefijo DD ^ Con el Prefijo DD ^ | + | < |
- | | LD HL, 0 | LD IX, 0 | | + | $ED $70 |
- | | LD H, A | LD IXh, A | | + | </ |
- | | LD H, (HL) | LD H, (IX+d) | | + | |
- | | + | |
- | El caso de FD es exactamente igual que el de DD, pero usando | + | Esta instrucción lee el puerto C, pero no almacena |
- | ==== Prefijo ED ==== | + | \\ |
+ | ==== Prefijos $DD $CB y $FD $CB ==== | ||
- | Hay una gran cantidad de instrucciones | + | Las instrucciones de prefijo "$DD $CB" y "$FD $CB" no documentadas almacenan el resultado de la operación de la instrucción equivalente |
- | la misma función que sus equivalentes | + | |
- | son leídos y decodificados, resultando, a niveles prácticos, equivalentes a 2 instrucciones | + | |
- | NOP. Veamos algunos de ellos: | + | |
- | ^ OPCODE ^ INSTRUCCION ^ | + | Así, supongamos el siguiente opcode sí documentado: |
- | | ED 4C | NEG | | + | |
- | | ED 4E | IM 0 | | + | |
- | | ED 44 | NEG | | + | |
- | | ED 45 | RETN | | + | |
- | | ED 5C | NEG | | + | |
- | | ED 5D | RETN | | + | |
- | | ED 64 | NEG | | + | |
- | | ED 65 | RETN | | + | |
- | | ED 66 | IM 0 | | + | |
- | | ED 6C | NEG | | + | |
- | | ED 6D | RETN | | + | |
- | | ED 6E | IM 0 | | + | |
- | | ED 70 | IN (C) / IN F,(C) | | + | |
- | | ED 71 | OUT (C),0 | | + | |
- | | ED 74 | NEG | | + | |
- | | ED 75 | RETN | | + | |
- | | ED 76 | IM1 | | + | |
- | | ED 77 | NOP | | + | |
- | | ED 7C | NEG | | + | |
- | | ED 7D | RETN | | + | |
- | | ED 7E | IM2 | | + | |
- | | ED 7F | NOP | | + | |
+ | < | ||
+ | $DD $CB $01 $06 rlc (ix+$01) | ||
+ | </ | ||
- | Aparte de los duplicados | + | Si hacemos |
- | curiosas y que nos pueden ser de utilidad. Por ejemplo: | + | |
- | < | + | < |
- | ED 70 | + | ld d, (ix+$01) |
+ | rlc d | ||
+ | ld (ix+$01), d | ||
</ | </ | ||
+ | La notación que sugiere //Sean Young// para estos opcodes es: '' | ||
- | Esta instrucción lee el puerto C, pero no almacena | + | Con el prefijo $FD $CB ocurre igual que con $DD $CB, salvo que se usa el registro IY en lugar de IX. |
- | ningún | + | |
- | resultado leído. Puede ser interesante si sólo nos interesa, por ejemplo, si el | + | |
- | valor leído es cero o no (flag Z), y no queremos perder un registro para almacenar | + | |
- | el resultado. | + | |
- | + | ||
+ | \\ | ||
+ | ===== Ortogonalidad del juego de instrucciones ===== | ||
- | ==== Prefijos DDCB y FDCB ==== | + | Como ya se ha comentado anteriormente, |
- | Las instrucciones DDCB y FDCB no documentadas almacenan el resultado de la | + | Es muy probable que en algún momento estemos programando, escribamos '' |
- | operación de la instrucción equivalente sin prefijo (si existe dicho resultado) | + | |
- | en uno de los registros de propósito general: B, C, D, E, H, L, ninguno o A, | + | |
- | según los 3 bits más bajos del último byte del opcode (000=B, 001=C, 010=D, etc). | + | |
- | Así, supongamos | + | El motivo es muy sencillo: el Z80 es una CPU de 8 bits, y por simplicidad interna de su microcódigo, |
- | < | + | No obstante, podemos simular muchas de estas " |
- | DD CB 01 06 RLC (IX+01h) | + | |
+ | < | ||
+ | ld hl, de ; Esta instruccion no existe en Z80 | ||
</ | </ | ||
- | Si hacemos los 3 últimos bits de dicho opcode 010 (010), el resultado de la | + | No podemos hacer esto, pero sí que podemos hacer lo siguiente: |
- | operación se copia al registro D (010 = D en nuestra definición anterior), con | + | |
- | lo que realmente, en lugar de "RLC (IX+01h)" | + | |
- | < | + | < |
- | LD D, (IX+01h) | + | push de |
- | RLC D | + | pop hl |
- | LD (IX+01h), D | + | |
</ | </ | ||
- | La notación que sugiere //Sean Young// para estos opcodes es: "RLC (IX+01h), D". | + | O, mejor aún, algo más eficiente: |
+ | <code z80> | ||
+ | ld h, d | ||
+ | ld l, e | ||
+ | </ | ||
- | Con el prefijo FDCB ocurre igual que con DDCB, salvo que se usa el registro IY | + | Estas soluciones alternativas son tan comunes |
- | en lugar de IX. | + | |
+ | Estas instrucciones "no permitidas" | ||
- | ===== DE LA TEORIA A LA PRACTICA ===== | + | Como no todos los programas ensambladores las aceptan, **mi recomendación es que no las uses**, y que añadas el flag ''< |
+ | Lo que sí es útil para nosotros es conocer estas posibilidades para poder usarlas en nuestros programas. Escribir manualmente en nuestro código las instrucciones alternativas para ejecutar la tarea que o comando que necesitamos ejecutar. | ||
- | Con este capítulo hemos cubierto el 99% de las instrucciones | + | Veamos las "FAKE INSTRUCTIONS" |
- | por el microprocesador Z80. Con la excepción | + | |
- | del Z80 y sus aplicaciones, | + | |
- | básicas para formar cualquier programa o rutina en ensamblador. | + | |
- | No obstante, todavía quedan por delante muchas horas de programación | + | |< 50% 50% 50% >| |
- | para dominar este lenguaje, así como diferentes técnicas, trucos, | + | ^ Instrucción\\ no existente ^ Alternativa ^ |
- | rutinas y mapas de memoria que nos permitan dibujar nuestros gráficos, | + | | ld bc, bc | ld b, b\\ ld c, c | |
- | realizar rutinas complejas, utilizar el sistema | + | | ld bc, de | ld b, d\\ ld c, e | |
- | microprocesador para realizar controles | + | | ld bc, hl | ld b, h\\ ld c, l | |
- | programas, o reproducir sonido. | + | | ld bc, ix | ld b, ixh\\ ld c, ixl | |
+ | | ld bc, iy | ld b, YH\\ ld c, iyl | | ||
+ | | ld bc, (hl) | ld c, (hl)\\ inc hl\\ ld b, (hl)\\ dec hl | | ||
+ | | ld bc, (ix+nn) | ld c, (ix+nn)\\ ld b, (ix+NN+1) | | ||
+ | | ld bc, (iy+nn) | ld c, (iy+nn)\\ ld b, (iy+NN+1) | | ||
+ | | ld de, bc | ld d, b\\ ld e, c | | ||
+ | | ld de, de | ld d, d\\ ld e, e | | ||
+ | | ld de, hl | ld d, h\\ ld e, l | | ||
+ | | ld de, ix | ld d, ixh\\ ld e, ixl | | ||
+ | | ld de, iy | ld d, YH\\ ld e, iyl | | ||
+ | | ld de, (hl) | ld e, (hl)\\ inc hl\\ ld d, (hl)\\ dec hl | | ||
+ | | ld de, (ix+nn) | ||
+ | | ld de, (iy+nn) | ||
+ | | ld hl, bc | ld h, b\\ ld l, c | | ||
+ | | ld hl, de | ld h, d\\ ld l, e | | ||
+ | | ld hl, hl | ld h, h\\ ld l, l | | ||
+ | | ld hl, ix | push ix\\ pop hl | | ||
+ | | ld hl, iy | push iy\\ pop hl | | ||
+ | | ld hl, (ix+nn) | ||
+ | | ld hl, (iy+nn) | ||
+ | | ld ix, bc | ld ixh, b\\ ld ixl, c | | ||
+ | | ld ix, de | ld ixh, d\\ ld ixl, e | | ||
+ | | ld ix, hl | push hl\\ pop ix | | ||
+ | | ld ix, ix | ld ixh, ixh\\ ld ixl, ixl | | ||
+ | | ld ix, iy | push iy\\ pop ix | | ||
+ | | ld iy, bc | ld iyh, b\\ ld iyl, c | | ||
+ | | ld iy, de | ld iyh, d\\ ld iyl, e | | ||
+ | | ld iy, hl | push hl\\ pop iy | | ||
+ | | ld iy, ix | push ix\\ pop iy | | ||
+ | | ld iy, iy | ld iyh, YH\\ ld iyl, iyl | | ||
+ | | ld (hl), bc | ld (hl), c\\ inc hl\\ ld (hl), b\\ dec hl | | ||
+ | | ld (hl), de | ld (hl), e\\ inc hl\\ ld (hl), d\\ dec hl | | ||
+ | | ld (ix+nn), bc | ld (ix+nn), c\\ ld (ix+NN+1), b | | ||
+ | | ld (ix+nn), de | ld (ix+nn), e\\ ld (ix+NN+1), d | | ||
+ | | ld (ix+nn), hl | ld (ix+nn), l\\ ld (ix+NN+1), h | | ||
+ | | ld (iy+nn), bc | ld (iy+nn), c\\ ld (iy+NN+1), b | | ||
+ | | ld (iy+nn), de | ld (iy+nn), e\\ ld (iy+NN+1), d | | ||
+ | | ld (iy+nn), hl | ld (iy+nn), l\\ ld (iy+NN+1), h | | ||
+ | |< 50% 50% 50% >| | ||
+ | ^ Instrucción\\ no existente ^ Alternativa ^ | ||
+ | | adc de, bc | ex de, hl\\ adc hl, bc\\ ex de, hl | | ||
+ | | adc de, de | ex de, hl\\ adc hl, hl\\ ex de, hl | | ||
+ | | adc de, de | rl e\\ rl d (-7T) | | ||
+ | | adc de, hl | ex de, hl\\ adc hl, de\\ ex de, hl | | ||
+ | | adc de, sp | ex de, hl\\ adc hl, sp\\ ex de, hl | | ||
+ | | add de, bc | ex de, hl\\ add hl, bc\\ ex de, hl | | ||
+ | | add de, de | ex de, hl\\ add hl, hl\\ ex de, hl | | ||
+ | | add de, de | srl e\\ rl d (-3T) | | ||
+ | | add de, hl | ex de, hl\\ add hl, de\\ ex de, hl | | ||
+ | | add de, sp | ex de, hl\\ add hl, sp\\ ex de, hl | | ||
+ | | sbc de, bc | ex de, hl\\ sbc hl, bc\\ ex de, hl | | ||
+ | | sbc de, de | ex de, hl\\ sbc hl, hl\\ ex de, hl | | ||
+ | | sbc de, hl | ex de, hl\\ sbc hl, de\\ ex de, hl | | ||
+ | | sbc de, sp | ex de, hl\\ sbc hl, sp\\ ex de, hl | | ||
+ | | sub de, bc | or a\\ ex de, hl\\ sbc hl, bc\\ ex de, hl | | ||
+ | | sub de, de | or a\\ ex de, hl\\ sbc hl, hl\\ ex de, hl | | ||
+ | | sub de, de | ld de, 0 (-17T) | | ||
+ | | sub de, hl | or a\\ ex de, hl\\ sbc hl, de\\ ex de, hl | | ||
+ | | sub de, sp | or a\\ ex de, hl\\ sbc hl, sp\\ ex de, hl | | ||
+ | | sub hl, bc | or a\\ sbc hl, bc | | ||
+ | | sub hl, de | or a\\ sbc hl, de | | ||
+ | | sub hl, hl | or a\\ sbc hl, hl | | ||
+ | | sub hl, hl | ld hl, 0 (-9T) | | ||
+ | | sub hl, sp | or a\\ sbc hl, sp | | ||
+ | |< 50% 50% 50% >| | ||
+ | ^ Instrucción\\ no existente ^ Alternativa ^ | ||
+ | | rl bc | rl c\\ rl b | | ||
+ | | rl de | rl e\\ rl d | | ||
+ | | rl hl | rl l\\ rl h | | ||
+ | | rr bc | rr b\\ rr c | | ||
+ | | rr de | rr d\\ rr e | | ||
+ | | rr hl | rr h\\ rr l | | ||
+ | | sla bc | sla c\\ rl b | | ||
+ | | sla de | sla e\\ rl d | | ||
+ | | sla hl | add hl, hl | | ||
+ | | sll bc | sli c\\ rl b | | ||
+ | | sll de | sli e\\ rl d | | ||
+ | | sll hl | sli l\\ rl h | | ||
+ | | sli bc | sli c\\ rl b | | ||
+ | | sli de | sli e\\ rl d | | ||
+ | | sli hl | sli l\\ rl h | | ||
+ | | sra bc | sra b\\ rr c | | ||
+ | | sra de | sra d\\ rr e | | ||
+ | | sra hl | sra h\\ rr l | | ||
+ | | srl bc | srl b\\ rr c | | ||
+ | | srl de | srl d\\ rr e | | ||
+ | | srl hl | srl h\\ rr l | | ||
- | ===== FICHEROS ===== | + | |< 50% 50% 50% >| |
+ | ^ Instrucción\\ no existente ^ Alternativa ^ | ||
+ | | ldi bc, (hl) | ld c, (hl)\\ inc hl\\ ld b, (hl)\\ inc hl | | ||
+ | | ldi bc, (ix+NN) | ld c, (ix+nn)\\ inc ix\\ ld b, (ix+nn)\\ inc ix | | ||
+ | | ldi bc, (iy+NN) | ld c, (iy+nn)\\ inc iy\\ ld b, (iy+nn)\\ inc iy | | ||
+ | | ldi de, (hl) | ld e, (hl)\\ inc hl\\ ld d, (hl)\\ inc hl | | ||
+ | | ldi de, (ix+NN) | ld e, (ix+nn)\\ inc ix\\ ld d, (ix+nn)\\ inc ix | | ||
+ | | ldi de, (iy+NN) | ld e, (iy+nn)\\ inc iy\\ ld d, (iy+nn)\\ inc iy | | ||
+ | | ldi hl, (ix+NN) | ld l, (ix+nn)\\ inc ix\\ ld h, (ix+nn)\\ inc ix | | ||
+ | | ldi hl, (iy+NN) | ld l, (iy+nn)\\ inc iy\\ ld h, (iy+nn)\\ inc iy | | ||
+ | | ldi (hl), bc | ld (hl), c\\ inc hl\\ ld (hl), b\\ inc hl | | ||
+ | | ldi (hl), de | ld (hl), e\\ inc hl\\ ld (hl), d\\ inc hl | | ||
+ | | ldi (ix+NN), bc | ld (ix+nn), c\\ inc ix\\ ld (ix+nn), b\\ inc ix | | ||
+ | | ldi (ix+NN), de | ld (ix+nn), e\\ inc ix\\ ld (ix+nn), d\\ inc ix | | ||
+ | | ldi (ix+NN), hl | ld (ix+nn), l\\ inc ix\\ ld (ix+nn), h\\ inc ix | | ||
+ | | ldi (iy+NN), bc | ld (iy+nn), c\\ inc iy\\ ld (iy+nn), b\\ inc iy | | ||
+ | | ldi (iy+NN), de | ld (iy+nn), e\\ inc iy\\ ld (iy+nn), d\\ inc iy | | ||
+ | | ldi (iy+NN), hl | ld (iy+nn), l\\ inc iy\\ ld (iy+nn), h\\ inc iy | | ||
+ | | ldi a, (bc) | ld a, (bc)\\ inc bc | | ||
+ | | ldi a, (de) | ld a, (de)\\ inc de | | ||
+ | | ldi a, (hl) | ld a, (hl)\\ inc hl | | ||
+ | | ldi b, (hl) | ld b, (hl)\\ inc hl | | ||
+ | | ldi c, (hl) | ld c, (hl)\\ inc hl | | ||
+ | | ldi d, (hl) | ld d, (hl)\\ inc hl | | ||
+ | | ldi e, (hl) | ld e, (hl)\\ inc hl | | ||
+ | | ldi h, (hl) | ld h, (hl)\\ inc hl | | ||
+ | | ldi l, (hl) | ld l, (hl)\\ inc hl | | ||
+ | | ldi a, (ix+NN) | ld a, (ix+nn)\\ inc ix | | ||
+ | | ldi b, (ix+NN) | ld b, (ix+nn)\\ inc ix | | ||
+ | | ldi c, (ix+NN) | ld c, (ix+nn)\\ inc ix | | ||
+ | | ldi d, (ix+NN) | ld d, (ix+nn)\\ inc ix | | ||
+ | | ldi e, (ix+NN) | ld e, (ix+nn)\\ inc ix | | ||
+ | | ldi h, (ix+NN) | ld h, (ix+nn)\\ inc ix | | ||
+ | | ldi l, (ix+NN) | ld l, (ix+nn)\\ inc ix | | ||
+ | | ldi a, (iy+NN) | ld a, (iy+nn)\\ inc iy | | ||
+ | | ldi b, (iy+NN) | ld b, (iy+nn)\\ inc iy | | ||
+ | | ldi c, (iy+NN) | ld c, (iy+nn)\\ inc iy | | ||
+ | | ldi d, (iy+NN) | ld d, (iy+nn)\\ inc iy | | ||
+ | | ldi e, (iy+NN) | ld e, (iy+nn)\\ inc iy | | ||
+ | | ldi h, (iy+NN) | ld h, (iy+nn)\\ inc iy | | ||
+ | | ldi l, (iy+NN) | ld l, (iy+nn)\\ inc iy | | ||
+ | | ldi (bc), a | ld (bc), a\\ inc bc | | ||
+ | | ldi (de), a | ld (de), a\\ inc de | | ||
+ | | ldi (hl), a | ld (hl), a\\ inc hl | | ||
+ | | ldi (hl), b | ld (hl), b\\ inc hl | | ||
+ | | ldi (hl), c | ld (hl), c\\ inc hl | | ||
+ | | ldi (hl), d | ld (hl), d\\ inc hl | | ||
+ | | ldi (hl), e | ld (hl), e\\ inc hl | | ||
+ | | ldi (hl), h | ld (hl), h\\ inc hl | | ||
+ | | ldi (hl), k | ld (hl), l\\ inc hl | | ||
+ | | ldi (ix+NN), a | ld (ix+nn), a\\ inc ix | | ||
+ | | ldi (ix+NN), b | ld (ix+nn), b\\ inc ix | | ||
+ | | ldi (ix+NN), c | ld (ix+nn), c\\ inc ix | | ||
+ | | ldi (ix+NN), d | ld (ix+nn), d\\ inc ix | | ||
+ | | ldi (ix+NN), e | ld (ix+nn), e\\ inc ix | | ||
+ | | ldi (ix+NN), h | ld (ix+nn), h\\ inc ix | | ||
+ | | ldi (ix+NN), l | ld (ix+nn), l\\ inc ix | | ||
+ | | ldi (iy+NN), a | ld (iy+nn), a\\ inc iy | | ||
+ | | ldi (iy+NN), b | ld (iy+nn), b\\ inc iy | | ||
+ | | ldi (iy+NN), c | ld (iy+nn), c\\ inc iy | | ||
+ | | ldi (iy+NN), d | ld (iy+nn), d\\ inc iy | | ||
+ | | ldi (iy+NN), e | ld (iy+nn), e\\ inc iy | | ||
+ | | ldi (iy+NN), h | ld (iy+nn), h\\ inc iy | | ||
+ | | ldi (iy+NN), l | ld (iy+nn), l\\ inc iy | | ||
+ | | ldi (hl), MM | ld (hl), MM\\ inc hl | | ||
+ | | ldi (ix+NN), MM | ld (ix+nn), MM\\ inc ix | | ||
+ | | ldi (iy+NN), MM | ld (iy+nn), MM\\ inc iy | | ||
+ | |< 50% 50% 50% >| | ||
+ | ^ Instrucción\\ no existente ^ Alternativa ^ | ||
+ | | ldd a, (bc) | ld a, (bc)\\ dec bc | | ||
+ | | ldd a, (de) | ld a, (de)\\ dec de | | ||
+ | | ldd a, (hl) | ld a, (hl)\\ dec hl | | ||
+ | | ldd b, (hl) | ld b, (hl)\\ dec hl | | ||
+ | | ldd c, (hl) | ld c, (hl)\\ dec hl | | ||
+ | | ldd d, (hl) | ld d, (hl)\\ dec hl | | ||
+ | | ldd e, (hl) | ld e, (hl)\\ dec hl | | ||
+ | | ldd h, (hl) | ld h, (hl)\\ dec hl | | ||
+ | | ldd l, (hl) | ld l, (hl)\\ dec hl | | ||
+ | | ldd a, (ix+NN) | ld a, (ix+nn)\\ dec ix | | ||
+ | | ldd b, (ix+NN) | ld b, (ix+nn)\\ dec ix | | ||
+ | | ldd c, (ix+NN) | ld c, (ix+nn)\\ dec ix | | ||
+ | | ldd d, (ix+NN) | ld d, (ix+nn)\\ dec ix | | ||
+ | | ldd e, (ix+NN) | ld e, (ix+nn)\\ dec ix | | ||
+ | | ldd h, (ix+NN) | ld h, (ix+nn)\\ dec ix | | ||
+ | | ldd l, (ix+NN) | ld l, (ix+nn)\\ dec ix | | ||
+ | | ldd a, (iy+NN) | ld a, (iy+nn)\\ dec iy | | ||
+ | | ldd b, (iy+NN) | ld b, (iy+nn)\\ dec iy | | ||
+ | | ldd c, (iy+NN) | ld c, (iy+nn)\\ dec iy | | ||
+ | | ldd d, (iy+NN) | ld d, (iy+nn)\\ dec iy | | ||
+ | | ldd e, (iy+NN) | ld e, (iy+nn)\\ dec iy | | ||
+ | | ldd h, (iy+NN) | ld h, (iy+nn)\\ dec iy | | ||
+ | | ldd l, (iy+NN) | ld l, (iy+nn)\\ dec iy | | ||
+ | | ldd (bc), a | ld (bc), a\\ dec bc | | ||
+ | | ldd (de), a | ld (de), a\\ dec de | | ||
+ | | ldd (hl), a | ld (hl), a\\ dec hl | | ||
+ | | ldd (hl), b | ld (hl), b\\ dec hl | | ||
+ | | ldd (hl), c | ld (hl), c\\ dec hl | | ||
+ | | ldd (hl), d | ld (hl), d\\ dec hl | | ||
+ | | ldd (hl), e | ld (hl), e\\ dec hl | | ||
+ | | ldd (hl), h | ld (hl), h\\ dec hl | | ||
+ | | ldd (hl), l | ld (hl), l\\ dec hl | | ||
+ | | ldd (ix+NN), a | ld (ix+nn), a\\ dec ix | | ||
+ | | ldd (ix+NN), b | ld (ix+nn), b\\ dec ix | | ||
+ | | ldd (ix+NN), c | ld (ix+nn), c\\ dec ix | | ||
+ | | ldd (ix+NN), d | ld (ix+nn), d\\ dec ix | | ||
+ | | ldd (ix+NN), e | ld (ix+nn), e\\ dec ix | | ||
+ | | ldd (ix+NN), h | ld (ix+nn), h\\ dec ix | | ||
+ | | ldd (ix+NN), k | ld (ix+nn), l\\ dec ix | | ||
+ | | ldd (iy+NN), a | ld (iy+nn), a\\ dec iy | | ||
+ | | ldd (iy+NN), b | ld (iy+nn), b\\ dec iy | | ||
+ | | ldd (iy+NN), c | ld (iy+nn), c\\ dec iy | | ||
+ | | ldd (iy+NN), d | ld (iy+nn), d\\ dec iy | | ||
+ | | ldd (iy+NN), e | ld (iy+nn), e\\ dec iy | | ||
+ | | ldd (iy+NN), h | ld (iy+nn), h\\ dec iy | | ||
+ | | ldd (iy+NN), l | ld (iy+nn), l\\ dec iy | | ||
+ | | ldd (hl), MM | ld (hl), MM\\ dec hl | | ||
+ | | ldd (ix+NN), MM | ld (ix+nn), MM\\ dec ix | | ||
+ | | ldd (iy+NN), MM | ld (iy+nn), MM\\ dec iy | | ||
- | * [[http:// | + | |< 50% 50% 50% >| |
- | * [[http:// | + | ^ Instrucción\\ no existente ^ Alternativa ^ |
+ | | ex bc, hl | push hl\\ ld l, c\\ ld h, b\\ pop bc | | ||
+ | | ex bc, hl | push bc\\ ex (sp), hl\\ pop bc | | ||
+ | | ex bc, ix | push bc\\ ex (sp), ix\\ pop bc | | ||
+ | | ex bc, iy | push bc\\ ex (sp), iy\\ pop bc | | ||
+ | | ex af, hl | push af\\ ex (sp), hl\\ pop af | | ||
+ | | ex af, ix | push af\\ ex (sp), ix\\ pop af | | ||
+ | | ex af, iy | push af\\ ex (sp), iy\\ pop af | | ||
+ | | ex de, ix | push de\\ ex (sp), ix\\ pop de | | ||
+ | | ex de, iy | push de\\ ex (sp), iy\\ pop de | | ||
+ | \\ | ||
+ | ===== De la teoría a la práctica ===== | ||
- | ===== LINKS ===== | + | Con este capítulo hemos cubierto el 99% de las instrucciones soportadas por el microprocesador Z80. Con la excepción de los //Modos de Interrupciones// |
- | * Puertos E/S: http:// | + | No obstante, todavía quedan por delante muchas horas de programación para dominar este lenguaje, así como diferentes técnicas, trucos, rutinas y mapas de memoria que nos permitan dibujar nuestros gráficos, realizar rutinas complejas, utilizar el sistema |
- | * Set de caracteres: http:// | + | |
- | * Web del Z80: http:// | + | |
- | * Z80 Reference | + | |
- | * Z80 Reference | + | |
- | * FAQ de Icarus Productions: | + | |
- | * Microfichas | + | |
- | * Tablas de ensamblado y t-estados: http:// | + | |
- | * Curso de ASM de z80.info: http:// | + | |
- | * Enlace a pasmo (url actual) | + | |
- | * Instrucciones no documentadas: | + | |
- | * http:// | + | |
+ | \\ | ||
+ | ===== Ficheros ===== | ||
+ | * {{cursos: | ||
+ | * {{cursos: | ||
+ | |||
+ | \\ | ||
+ | ===== Enlaces ===== | ||
+ | |||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * {{: | ||
+ | * {{: | ||
+ | |||
+ | \\ | ||
+ | **[ [[.: |