-[ 0x0F ]-------------------------------------------------------------------- -[ Microprocesador Z80 ]----------------------------------------------------- -[ by elotro ]-------------------------------------------------------SET-32-- ... ..:nnnMMMMMMMMMMMMMMMMnxnnMMMMMn:. `!?MMMMMMMMMMMMMMMMMMMMMMM*!!"!<<<<<<<<< !!!!!?!!MMMM**"""<<<<<<<<<<<<<<<<<<<<<< !!!!!!!!!!<<<< !<<< !!!!!!!!!!<<<< MICROPROCESADOR !<<< !!!!!!!!!!!<<< Z80 !<<< '!!!!!!!!!!<<< !<<< !!!!!!!!!!<<< por elotro !<<< !!!!!!!!!!<<< elotro.ar@gmail.com '<<< !!!!!!!!!!<<< '<<< !!!!!!!!<<< .x+*<<< ..xnMMMMMMMX!!!!!<<< .:+!"!<<<<<<<<<<< !?MMMMMMMMMMMMMMH!!!:<<<"!<<<<<<<<<<<<<:xnMMMh. !!!MMMMMMMMMMMMMMX!!!<<<<<<<<<:xnHMMMMMMMMMMMMMM% '!!!!?MMMMMMMMMMMMMMXxnHMMMMMMMMMMMMMMM*!"<<<<<<< !!!!!!MMMMMMMMMMMMMMMMMMMMMMM*""<<<<<<<<<<<<<<<< !!!!!!!!MMMMMMMMMMMM*!!<<<<<<<<<<<<<<<<<<<<<<<<< `!!!!!!!!M*"!<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<.:n. !!!!!!!<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:xnMMMMMMMMMM. !!!!!!<<<<<<<<<<<<<<<<<<<<:nHMMMMMMMMMMMMMMMMMMMM. ~!!!!<<<<<<<<<<<<:xnMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM. !!!<<<<:nHMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMx !<<| ALU | | | |_____| | | |_____| /|---|\ | | | | < |(1)| >| (2) | \___/ \|---|/ | | .---------. | | | (5) | | | |_________| | | __ | | =====> Control /__\ |___________| CPU || | | | _||_ |+5V GND CLK | \__/ |------------| .-------. |Alimentacion| | (6) | |____________| |_______| __ /__\ || Bus de direcciones _||_ (8 bits) \__/ Referencias: """""""""""" (1) : Bus de las seniales de control (2) : Decodificador de instrucciones y control de la cpu (3) : Registro de Instruccion (4) : Bus de datos interno (5) : Registros Cpu (6) : Control del Bus CLK : Se¤al de clock 1.3 Terminales del encapsulado ========================== El uP Z80 se encuentra encapsulado en el formato DIP (Dual in line, doble en linea) de 40 terminales, como la mayoria de los uP de 8 bits. Las funciones de sus terminales son: * A0-A15 : Bus de direcciones compuesto de 16 bits para alcanzar 64 Kb de memoria. * D0-D7 : Bus de datos, compuesto de 8 bits * WR : (Memory Write). Cuando este terminal esta a cero el uP indica al exterior la operacion de escritura. * RD : (Memory Read). Cuando se hace cero indica la operacion de lectura. * MREQ : (Memory Request). Cuando se pone en estado bajo, indica al exterior que la direccion del bus de direcciones es valida para leer o escribir. * M1 : (Machine Cycle One) por este terminal el uP indica al exterior el primer tiempo de ejecucion de una instruccion (Ciclo de busqueda) * HALT : Cuando es cero, indica en que momento se detiene, como consecuencia de la instruccion HALT de un programa. * WAIT : Es por donde los perifericos y memorias lentas detienen al uP, para sincronizarse con el, esto ocurre cuando se lleva a cero. * RESET : Llevando a cero esta entrada se produce el borrado del contador del programa, de modo que al retirarse el uP arranca en la direccion 0000. * RFSH : Es una salida de refresco, cuando se hace cero indica que los 7 bits de menor peso del bus de direcciones contienen la direccion de refresco para las memorias dinamicas que se pueden conectar al uP. * IORQ : (Input/Output Request) Cuando esta en estado bajo indica que el uP no se dirige a la memoria principal, sino a los dispositivos de entrada/salida. * INT : (Interrupt Request) Entrada por donde los perifericos hacen la peticion de interrupcion al uP. Se produce cuando se lleva a cero logico. * NMI : Entrada de interrupcion no enmascarada. Se activa por flanco, concretamente con el flanco de bajada de la interrupcion que se aplique por este terminal. La interrupcion ingresada por este terminal tiene prioridad total sobre la anterior (INT). Cuando se activa la NMI, el uP termina la ejecucion de la instruccion en curso e independientemente del contenido del registro de estado, bifurca a la direccion 0066 en hexadecimal. Esta direccion es la primera linea en que ha de esta ubicada la subrutina de tratamiento de la interrupcion. * BUSRQ : (Bus Request) Entrada por donde se lleva a alta impedancia las salidas del bus de datos, de direcciones y las salidas de control. El uP lleva sus buses a alta impedancia despues de ejecutar la instruccion en curso. * BUSACK : (Bus Acknowledge) Salida por donde se indica al exterior que el uP esta desconectado como consecuencia de la instruccion anterior (BUSRQ). Esto ocurre cuando la salida se hace cero logico. * CLK : Entrada del reloj, que para este uP es de una sola fase. * Entradas de alimentacion: Es unica y de 5 voltios que habra de ser aplicada entre los pines 11 y 29. _____________________________________ / | | \ A11 <--- | 1 | | 40 | ---> A10 A12 <--- | 2 \ _____/ 39 | ---> A9 A13 <--- | 3 38 | ---> A8 A14 <--- | 4 37 | ---> A7 A15 <--- | 5 36 | ---> A6 CLK <--- | 6 35 | ---> A5 D4 <--> | 7 34 | ---> A4 D3 <--> | 8 33 | ---> A3 D5 <--> | 9 MMMM MMMM MMMM 32 | ---> A2 D6 <--> | 10 ;; M M M M 31 | ---> A1 +5V o--- | 11 ;; ::: MMMM M M 30 | ---> A0 D2 <--> | 12 ;; M M M M 29 | ---o GND D7 <--> | 13 MMMM MMMM MMMM 28 | ---> RFSH D0 <--> | 14 27 | ---> M1 D1 <--> | 15 26 | <--- RESET INT ---> | 16 25 | <--- BUS RQ NMI ---> | 17 24 | <--- WAIT HALT <--- | 18 23 | ---> BUS ACK MREQ <--- | 19 22 | ---> WR IORQ <--- | 20 21 | ---> RD \_____________________________________/ 2. Los registros internos del Z 80 =============================== Este uP cuenta con 22 registros disponibles para el usuario. Si se observa la figura en ascii, se podra apreciar que los de la izquierda estan duplicados con los de la derecha, es decir que el uP dispone de dos juegos completos de registros equivalentes. El programador puede trabajar con uno u otro grupo de registros, pasando de uno a otro con las correspondientes instrucciones de cambio. Sin embargo, los registros de uso general que son tres, pueden ser utilizados como registros de 8 o 16 bits segun lo indique la instruccion aplicada. 2.1.1 Registros de uso general ======================== Son utilizados a voluntad por el propio programador, son los registros acumuladores denominados A y A'. Por programa se indica a cual de los dos se desea acceder. Los registros B, C, D, E, H y L son registros de uso general, a los cuales se accede mediante la instruccion determinada. Tambien se dispone de B', C', D', E', H' y L' para el otro banco de registros. Como ya he dicho, estos registros pueden trabajar en forma de ocho bits o diesiceis. Cuando se desea trabajar de esta manera los registros se asocian asi: B-C, D-E, H-L y B'-C', D'-E' y H'-L'. 2.2 Diagrama de los registros ========================= RESET WAIT GND +5V | | | | v v v v .----------------------------------------------------- | .---.-.-PSW.---.-.-. .-.-.-.-PSW.---.-.-. | MREQ | |S|Z| |AC| |P/O|N|C| |S|Z| |AC| |P/O|N|C| | IORQ <-------- | |_|_|_|__|_|___|_|_| |_|_|_|__|_|___|_|_| | -------> | | | | | | | | DO-D7 | | | | | | À Acarreo | INT <-------> | | | | | À-- Sustraccion | <------- | | | | À----- Paridad o rebosamiento | A0-A15 | | | À----------- 1/2 Acarreo | NMI --------> | | À--------------- Cero | <------- | À------------------Signo | RD | .-----------. .-----------. | BUR RQ <-------- | | 8 A' | | 8 A' | | <------- | | 8 H'| 8 L'| | 8 H | 8 L | | WR | | 8 B'| 8 C'| | 8 B | 8 C | | BUS ACK <-------- | | 8 D'| 8 E'| | 8 D | 8 E | | -------> | |_____|_____| |_____|_____| | CLK | |16 PC| |16 IX| | RFSH --------> | |16 SP| |16 IY| | -------> | |_____| |_____| | M1 | | 8 I | | 8 R | | HALT <-------- | |_____| |_____| | -------> \_____________________________________________________/ 2.3 Registros de uso especifico en el Z80 ===================================== El Z80 dispone de 4 registros de uso especifico de 16 bits, denominados PC, SP, IY, IX, y otros dos especificos de ocho bits llamados I y R. Sus funciones son: * PC : (Program Counter) Es el registro del contador de programa, es de 16 bits y en el queda anotada la direccion de memoria de la instruccion en curso. Cuando acaba la ejecucion de esta, PC se incrementa en uno automaticamente. Cuando el programa presenta una instruccion de salto, indica la direccion de este para el PC, ejecutandose el salto y continuandose el programa a partir de esta nueva direccion. Es el cometido tipico de toda PC. * SP : (Stack Pointer) Es un registro de 16 bits cuya funcion es la de hacer de puntero para indicar en que direccion de la RAM esta ubicado el stack d subrutinas. Este stack esta tratado como una memoria LIFO (Last Input First Output), que quiere decir que el ultimo dato guardado es el primero en recuperarse. El uP dispone de dos instrucciones, llamadas PUSH y POP que se encargan de introducir y sacar datos de este stack. * IX,IY : Son dos registros indice independientes entre si y de 16 bits cada uno de ellos. Son usados por el uP como indice para ejecutar operaciones con direccionamiento indexado. Este modo de direccionamiento simplifica la confeccion de un programa en especial cuando se accede a tablas de datos. - Registro I : Denominado Interrupt Page Adress Register. Es un registro de ocho bits y puede ser usado donde una llamada indirecta a una posicion de memoria sea necesaria como consecuencia de una interrupcion. - Registro R : Denominado Memory Refresh Register. Tambien es de ocho bits y puede ser usado para acceder a memorias dinamicas. El contenido de este registro es automaticamente incrementado despues de cada instruccion de busqueda. Estos ocho bits pueden salir al exterior por la parte baja del bus de direcciones para refrescar continuamente la memoria RAM dinamica a donde se desea acceder. 2.3.1 El registro de estado ===================== En este uP el registro de estado es de 8 bits, de los cuales solo seis tienen significado propio. * Bit 0=C (Carry). Indica cuando existe acarreo en la parte mas alta del registro acumulador. Es usado en operaciones de adicion y de sustraccion, asi como en instrucciones de rotacion. * Bit 6=Z (Zero) Este bit es puesto a uno si la operacion ejecutada tiene como resultado cero o si ha sido cargado un cero en el acumulador, de lo contrario sera siempre cero. * Bit 7=S (Signe) Este bit indica el signo del dato contenido en el acumulador, se pondra a uno cuando el dato sea negativo, y a cero cuando sea positivo (un dato es negativo cuando su bit siente es un uno) * Bit 2=P/O (Parity/Overflow) Indica dos funciones distintas: la paridad de un resultado entregado en el acumulador cuando ha sido ejecutada una instruccion logica (Paridad Par=1, Impar=0) y el overflow o desbordamiento cuando ha ejecutado una operacion aritmetica. * Bit 4 (H) es el bit que indica el acarreo de medio byte cuando se opera en BCD. Es decir el acarreo de los cuatro bits de menor peso del byte. * Bit 1 (N) este bit indica que tipo de instruccion se ha ejecutado: suma o resta, operando en BCD. 4. Sistema minimo de componentes para el uP Z80 ============================================ El sistema minimo de componentes que se han de asociar al microprocesador para que este funcione, se ve representado en la figura en ASCII. El uP necesita, como es sabido, de un clock o reloj que se genera exteriormente al uP, que se le introduce por un solo terminal, el denominado CLK. Los buses de datos y direcciones son aplicados en paralelo a todo el sistema. Este primer bloque ha de estar compuesto por memorias ROM en las que resida el software especifico de la aplicacion del sistema y cuya direccion ha de ser de 0000 en adelante. El segundo bloque lo constituye la memoria RAM necesaria para los diversos usos de lectura y escritura de datos que requiera el programa. En el ejemplo del esquema es de tan solo 256 bytes (como?!?!?) El tercer bloque esta formado por un conjunto de registros dispuestos en forma de puerto para el acceso a perifericos. Lo mas interesante y especifico es el bus de control integrado por los terminales llamados MREQ, RD, WR, IORQ y M1, cuyas funciones ya fueron presentadas. MREQ es una senial de permiso de acceso a memoria, por tanto ira conectada a aquellos bloques cuya funcion sea la de memoria, como lo son la ROM y la RAM. La senial IORQ permite el acceso a perifericos, por tanto ira conectada a aquellos circuitos que permitan el acceso a estos, como lo son los PIO (Periferial Input/Outout) Estas dos seniales discriminan un cometido de otro: las seniales RD y WR son las que indican si la operacion es de lectura o escritura, por lo tanto accederan a la memoria, solo que a la ROM unicamente le hace falta RD, ya que solo es posible leerla. Por ultimo, la senial M1, que es una senial de sincronismo, ira conectada a aquellos circuitos que requieran una estrecha relacion con la propia ejecucion de la instruccion (recuerda que M1 aparece durante la primera parte de la ejecucion de una instruccion), como se ve en el sistema propuesto, la PIO necesita de la M1. .-----------. Bus de datos o | D0-D7 |---------------------------------------------------------> | | | /^\ /^\ /^\ | | | | | | .|.| * Z80 * | | \_/ \_/ |R|| | .-------------. .-------------. Clk .----------. |_|| | | ROM | | RAM |---->| PIO | <-> A |-´ RESET | | 1Kb | | 256*8 | Ú---|CE | <-> B (C)| | |CE1 A0/A9 CE2|.--|OD | o---|IORQ | Dos puer | | | |_o____^____o_||.-|R/W | | .-|M1 | tas de 8 -Á-| | | | A10| ||.|CE1 A0/A7 CE2| | | |C/OI B/A| bits | | | | | ||||______^______| | | |_^______^_| |(BD)A0/A15 |-----(----o----o--(((-------o-----o--(-(---o------o-----> | | (L) ||| | | A1 A10 | MREQ |-----o-(----------((o----------------(-(----------------o \ C | RD |-------o----------o(-----------------(-(----------------o | O | WR |-------------------o-----------------(-(----------------o | N | IORQ |-------------------------------------o-(----------------o | T | M1 |---------------------------------------o----------------o | R | | / O |_____^_____| L | .-----------. | OSCILADOR | |___________| (L) = OR 5. Las interrupciones en el Z80 ============================ El microprocesador Z80 tiene dos entradas de interrupcion: la entrada de interrupcion no enmascarable NMI y la entrada de interrupcion enmascarable INT. Cuando se haya producido una NMI, no puede ser desactivada por programa y sera aceptada siempre que un periferico la solicite. Esta interrupcion sera, generalmente, reservada para las funciones mas importantes que necesariamente tengan que ser atendidas en el momento de producirse, tal como un fallo de alimentacion. La interrupccion INT puede ser permitida o no, segun las necesidades, por el programa. Esto permite al programador no preocuparse de las interrupciones en zonas de su programa que no las requieran. Por supuesto que algun periferico conectado a INT podra pedir interrupcion en cualquier momento, pero esta no sera atendida si el programa ha bloqueado la posibilidad de acceso. La peticion de la interrupcion podra ser atendida siempre que por programa sea permitida de nuevo. En el interior del uP existe un biestable denominado IFF que puede ser alterado por programa usando la instruccion EI (Enable Interrupt) para ponerlo a 1, permitiendo las interrupciones, y la instruccion DI (Disable Interrupt), para ponerlo a 0, bloqueando asi la entrada de interrupciones. 5.1 Uso de las interrupciones ========================= Lo dicho sobre el biestable IFF es solo a nivel de concepto, ya que en realidad no es un biestable, sino que hay dos en el interior del uP. Estos son denominados IFFa o IFF1 , que es el que permite o no las interrupciones; y IFFb o IFF2, que puede ser considerado como una posicion de almacenamiento temporal del estado de IFFa. Cuando se produce un reset del uP para iniciar su funcionamiento, estos dos biestables son tambien puestos a cero y por lo tanto, las interrupciones seran bloqueadas. Cuando se ejecuta una instruccion EI, ambos biestables son puestos a uno, dando paso a las posibles interrupciones. Cuando llega una interrupcion, esta es atendida poniendo a cero ambos biestables. En este caso los dos funcionan simultaneamente y requieren ser puestos a uno por programa, tras cada tratamiento de una nueva interrupcion. La funcion de IFFb es guardar el contenido de IFFa antes de que sea borrado. Este juego de biestables permite saber en todo momento que interrupciones se han ejecutado y si queda alguna pendiente de tratamiento. 6. Tabla de instrucciones del uP Z80 ================================= En la tabla de instrucciones de este uP, los nombres dados en ingles son representativos y hacen referencia a la operacion que es capaz de cada instruccion. Las instrucciones son muy similares al assembler que estamos acostumbrados a tratar. El detalle de cada instruccion es: * LD: Load o carga consistente en transferir el dato de un registro a otro o de una posicion de memoria a un registro. * PUSH: Transfiere el dato de un registro al stack. * POP: Es el contrario de PUSH. * EX: Intercambia datos sin alterarlos de un registro a otro. * CP: Operacion de comparar. * ADD: Operacion de suma. * SUB: Operacion de resta. * AND: Operacion logica "Y" * OR: Operacion logica "O" * XOR: Operacion logica "Or exclusive" ( o exclusivo ) * INC: Incrementar. * DEC: Decrementar. * DAA: Operacion en BCD. * CPL: Operacion de complementacion o inversion. * NEG: Operacion de complemento a dos. * CCF: Operacion de complemento del bit carry (acarreo de bit) * SCF: Pone a uno el bit carry. * NOP: No operation (no operacion) * HALT: Detiene el uP. * DI, EI, IM0, IM1, IM2: Tratamiento de interrupciones. * RL, RR: Rotacion hacia izquierda o derecha. * BIT: Operacion de test o comprobacion. * SET: Operacion de puesta a uno (Saqueadores edicion tecnica???) * RES: Operacion de puesta a cero. * JP: Salto. * JR: Salto relativo. * DJNZ: Salta si no es cero. * CALL: Llamada a sub. * RET: Retorno desde sub. * IN: Entrada desde periferico * OUT: Salida hacia periferico ______________________________________________________________________ | Codigo | Nemotecnico | Codigo | Nemotecnico | |-----------------|-----------------|-----------------|----------------| | 00 | NOP | 56 | LD D,(HL) | | 01 yyy | LD BC,data16 | 5 lsss | LD E,reg | | 02 | LD (BC),A | 5E | LD E,(HL) | | 03 | INC BC | 6 0sss | LD H,reg | | 04 | INC B | 66 | LD H,(HL) | | 05 | DEC B | 6 lsss | LD L,reg | | 06 yy | LD B,data | 6E | LD L,(HL) | | 07 | RLCA | 7 0sss | LD (HL),reg | | 08 | EX AF,AF | 76 | HALT | | 09 | ADD HL,DC | 7 lsss | LD A,reg | | 0A | LD A,(BC) | 7E | LD A,(HL) | | 0B | DEC BC | 8 0rrr | ADD A,reg | | 0C | INC C | 86 | ADD A,(HL) | | 0D | DEC C | 8 lrrr | ADC A,reg | | 0E yy | LD C,data | 8E | ADC A,(HL) | | 0F | RRCA | 9 0rrr | SUB reg | | 10 disp2 | DJNZ disp | 96 | SUB (HL) | | 11 yyyy | LD DE,data16 | 9 lrrr | SBC A,reg | | 12 | LD (DE),A | 9E | SBC A,(HL) | | 13 | INC DE | A 0rrr | AND reg | | 14 | INC D | A6 | AND (HL) | | 15 | DEC D | A lrrr | XOR reg | | 16 yy | LD D,data | AE | XOR (HL) | | 17 | RLA | B 0rrr | OR reg | | 18 disp2 | JR disp | B6 | OR (HL) | | 19 | ADD HI,DE | B lrrr | CP reg | | 1A | LD A,(DE) | BE | CP (HL) | | 1B | DEC DE | C0 | RET NZ | | 1C | INC E | C1 | POP BC | | 1D | DEC E | C2 ppqp | JP NZ,ADDR | | 1E yy | LD E,data | C3 ppqp | JP ADDR | | 1F | RRA | C4 ppqp | CALL NZ,ADDR | | 20 disp2 | JR NZ,disp | C5 | PUSH BC | | 21 yyyy | LD HI,data16 | C6 yy | ADD A,data | | 22 ppqq | LD (ADDR),HL | C7 | RST 00H | | 23 | INC HL | C8 | RET Z | | 24 | INC H | C9 | RET | | 25 | DEC H | CA ppqp | JP z,ADDR | | 26 yy | LD H,data | CB 0 0rrr | RLC reg | | 27 | DAA | CB 06 | RLC (HL) | | 28 disp2 | JR Z,disp | CB 0 lrrr | RRC reg | | 29 | ADD HL,HL | CB 0E | RRC (HL) | | 2A ppqp | LD HL,(addr) | CB 1 0rrr | RL reg | | 2B | DEC HL | CB 16 | RL (HL) | | 2C | INC L | CB 1 lrrr | RR reg | | 2D | DEC L | CB 1E | RR (HL) | | 2E | LD L,data | CB 1 0rrr | SLA reg | | 2F | CPL | CB 26 | SLA (HL) | | 30 disp2 | JR NC,disp | CB 2 lrrr | SRA reg | | 31 yyyy | LD SP,data16 | CB 2E | SRA (HL) | | 32 ppqp | LD (addr),A | CB 3 lrrr | SRL reg | | 33 | INC SP | CB 3E | SRL (HL) | | 34 | INC (HL) | CB 01bbbrrr | BIT b,reg | | 35 | DEC (HL) | CB 01bbb110 | BIT b,(HL) | | 36 yy | LD (HL),data | CB 10bbbrrr | RES b,reg | | 37 | SCF | CB 10bbb110 | RES b,(HI) | | 38 | JR C,disp | CB 11bbbrrr | SET b,reg | | 39 | ADD HL,SP | CB 11bbb110 | SET b,(HL) | | 3A ppqp | LD A,(addr) | CC ppqp | CALL Z,addr | | 3B | DEC SP | CD ppqp | CALL addr | | 3C | INC A | CE yy | ADC A,data | | 3D | DEC A | CF | RST 08H | | 3E yy | LD A,data | D0 | RET NC | | 3F | CCF | D1 | POP DE | | 40 0sss | LD B,reg | D2 ppqp | JP NC,addr | | 46 | LD B,(HL) | D3 yy | OUT (port),A | | 4 lsss | LD C,reg | D4 ppqp | CALL NC,addr | | 4E | LD C,(HL) | D5 | PUSH DE | | 5 0sss | LD D,reg | D6 yy | SUB data | |_________________|_________________|_________________|________________| ____________________________________________________________________________ | Codigo | Nemotecnico | Codigo | Nemotecnico | |------------------|------------------|------------------|-------------------| | D7 | RST 10H | ED 67 | RRD | | D8 | RET C | ED 6F | RLD | | D9 | EXX | ED A0 | LDI | | DA ppqp | JP C,addr | ED A1 | CPI | | DB yy | IN A,(port) | ED A2 | INI | | DC ppqp | CALL C,addr | ED A3 | OUTI | | DD 00xx 9 | ADD IX,pp | ED A8 | LDD | | DD 21 yyyy | LD IX,data16 | ED A9 | CPD | | DD 22 ppqp | LD (addr),IX | ED AA | IND | | DD 23 | INC IX | ED AB | OUTD | | DD 2A ppqp | LD IX,(addr) | ED B0 | LDIR | | DD 2B | DEC IX | ED B1 | CPIR | | DD 34 disp | INC (IX+disp) | ED B2 | INIR | | DD 35 disp | DEC (IX+disp) | ED B3 | OTIR | | DD 36 disp yy | LD (IX+disp) | ED B8 | LDDR | | | ,data | | | | DD 01ddd110 disp | LD reg,(IX+disp)| ED B9 | CPDR | | DD 7 0sss disp | LD (IX+disp),reg| ED BA | INDR | | DD 86 disp | ADD A,(IX+disp)| ED BB | OTDR | | DD 8E disp | ADC A,(IX+disp)| EE yy | XOR data | | DD 96 disp | SUB (IX+disp) | EF | RST 28H | | DD 9E disp | SBC A,(IX+disp)| F0 | RET P | | DD A6 disp | AND (IX+disp) | F1 | POP AF | | DD AE disp | XOR (IX+disp) | F2 ppqp | JP P,addr | | DD B6 disp | OR (IX+disp) | F3 | DI | | DD BE disp | CP (IX+disp) | F4 ppqp | CALL P,addr | | DD CB disp 06 | RLC (IX+disp) | F5 | PUSH AF | | DD CB disp 0E | RRC (IX+disp) | F6 yy | OR data | | DD CB disp 16 | RL (IX+disp) | F7 | RST 30H | | DD CB disp 1E | RR (IX+disp) | F8 | RET M | | DD CB disp 26 | SLA (IX+disp) | F9 | LD SP,HL | | DD CB disp 2E | SRA (IX+disp) | FA ppqp | JP M,addr | | DD CB disp 3E | SRL (IX+disp) | FB | EI | | DD CBdisp01bbb110| BIT b,(IX+disp)| FC ppqp | CALL M,addr | | DD CBdisp10bbb111| RES b,(IX+disp)| FD 00xx9 | ADD 1Y,rr | | DD CBdisp11bbb110| SET B,(IX+disp)| FD 21 yyyy | LD 1Y,data 16 | | DD E1 | POP IX | FD 22 ppqp | LD (addr),1Y | | DD E3 | EX (SP),IX | FD 23 | INC 1Y | | DD E5 | PUSH IX | FD 2A ppqp | LD 1Y,(addr) | | DD E9 | JP (IX) | FD 2B | DEC 1Y | | DD F9 | LD SP,IX | FD 34 disp | INC (1Y,disp) | | DD yy | SBC A,data | FD 35 disp | DEC (1Y+disp) | | DF | RST 18H | FD 36 disp yy | LD (1Y+disp),data| | E0 | RET PO | FD 01ddd110 disp | LD reg,(1Y+disp) | | E1 | POP HL | FD 7 0sss disp | LD (1Y+disp),reg | | E2 ppqp | JP PO,addr | FD 86 disp | ADD A,(1Y+disp) | | E3 | EX (SP),HL | FD 8E disp | ADC A,(1Y+disp) | | E4 ppqp | CALL PO,addr | FD 96 disp | SUB (1Y+disp) | | E5 | PUSH HL | FD 9E disp | SBC A,(1Y+disp) | | E6 yy | AND data | FD A6 disp | AND (1Y+disp) | | E7 | RST 20H | FD AE disp | XOR (1Y+disp) | | E8 | RET PE | FD B6 disp | OR (1Y+disp) | | E9 | JP (HL) | FD BE disp | CP (1Y+disp) | | EA ppqp | JP PE,addr | FD CB disp 06 | RLC (1Y+disp) | | EB | EX DE,HL | FD CB disp 0E | RRC (1Y+disp) | | EC ppqp | CALL PE,addr | FD CB disp 16 | RL (1Y+disp) | | ED 01ddd000 | IN reg,(C) | FD CB disp 1E | SRL (1Y+disp) | | ED 01sss001 | OUT (C),reg | FD CB disp 26 | SRL (1Y+disp) | | ED 01xx2 | SBC HL,rp | FD CB disp 2E | SRL (1Y+disp) | | ED 01xx3 ppqp | LD (addr),rp | FD CB disp 3E | SRL (1Y+disp) | | ED 44 | NEG | FD CBdisp01bbb110| BIT b,(1Y+disp) | | ED 45 | RETN | FD CBdisp10bbb110| RES b,(1Y+disp) | | ED 010nn110 | IM m | FD CBdisp11bbb110| SET b,(1Y+disp) | | ED 47 | LD 1,A | FD E1 | POP 1Y | | ED 01xx A | ADC HL,rp | FD E5 | EX (SP),1Y | | ED 01xx B ppqp | LD rp,(addr) | FD E5 | PUSH 1Y | | ED 4D | RETI | FD E9 | JP (1Y) | | ED 4F | LD R,A | FD F9 | LD SP,1Y | | ED 57 | LD A,1 | FE yy | CP data | | ED ED 5F | LD A,R | FF | RST 38H | |__________________|__________________|__________________|___________________| 6.1 Tipos de direccionamientos ========================== El Z80 dispone de los siguientes modos de direccionamiento: * Inmediato """"""""" Es usado en instrucciones de dos bytes, el primero es el de la instruccion a tratar, y el segundo es el del operando o dato a tratar. * Inmediato Extendido """"""""""""""""""" Es usado en instrucciones de tres bytes, donde el operando ocupa dos de ellos. * Relativo """""""" Es usado para operar en las proximidades de la instruccion en curso. Esta relacionado con el contador del programa. Es de dos bytes. * Extendido """"""""" Es usado en instrucciones en que se determina la direccion efectiva. Es de tres bytes. * Indexado """""""" La direccion efectiva se obtiene sumando el contenido de los registros indice con el del tercer byte. Es de tres bytes. * De registros """""""""""" Es usado en operaciones de tratamiento de registros. * Indirecto """"""""" La direccion efectiva se encuentra en el lugar de memoria indicado por la instruccion. 7. Agradecimientos """"""""""""""" Al staff de SET, a Madfran que me alento a escribir el articulo. 8. Bibliografia """""""""""" 1. Biblioteca basica electronica Ediciones Nueva Lente - ISBN 84-7534-159-4 2. Construya una computadora basada en el Z80 Steve Ciarcia - Ed. McGraw-Hill 3. Z80 Programing & Hardware Manual Zilog. ***************************************************************************** ********************** PARTE DOS - TABLAS Y MAS TABLAS ******************** ***************************************************************************** Aqui esta la segunda parte de este (aburrido para algunos) articulo y la mayoria del contenido no ha cambiado. Haciendo alusion a la ezine, esta parte viene con MUCHA informacion tecnica. Recomiendo al que pueda (y consiga en algun remoto lugar), conseguir un Z80 junto con el 'Z80 Programing & Hardware manual', de la misma empresa: Zilog, y tratar de ensamblar un circuito minimo para ver su funcionamiento Tambien sirve visitar la pagina de la empresa: www.zilog.com Aqui encontraras mucha informacion y seguramente sera mas util que la que tienes aqui, asi que cualquier duda, ya te estas conectando a Inet. INDICE DE CONTENIDOS - Parte II 1 - Tabla de instrucciones LOAD de carga de bits 2 - Tabla de instrucciones de intercambio, transferencia y busqueda 3 - Tabla de instrucciones aritmeticas y logicas de 8 bits 4 - Tabla de instrucciones de control de CPU 5 - Tabla de instrucciones aritmeticas de 16 bits 6 - Tabla de instrucciones de tratamiento de subrutinas 7 - Tabla de instrucciones de salto 8 - Tabla de instrucciones de entrada/salida * * * PARTE II * * * 1. Tabla de instrucciones LOAD de carga de bits ============================================ ______________________________________________________________________________ | | Registro de | | | Nemotec- | Simbolo | estado | Codigo | N§ |Comentarios nico | de la |_________________| Maquina |Bytes| | operacion |7|6|5|4|3| 2 |1|0|_______________| | | |S|Z| |H| |P/V|N|C|76|543|210|HEX | | ____________|_____________|_|_|_|_|_|___|_|_|__|___|___|____|_____|___________ LD r,s | r<-s |# # X # X # # #|01 r s | | 1 |r,s Reg. LD r,n | r<-n |# # X # X # # #|00 r 110| | 2 |000 B | | | <-n-> | | |001 C LD r,(HL) | r<-(HL) |# # X # X # # #|01 r 110| | 1 |010 D LD r,(IX+d) | r<-(IX+d) |# # X # X # # #|11 011 101| DD | 3 |011 E | | |01 r 110| | |100 H | | | <-d-> | | |101 L LD r,(IY+d) | r<-(IY+d) |# # X # X # # #|11 111 101| FD | 3 |111 A | | |01 r 110| | | | | | <-d-> | | | LD (HL),r | (HL)<-r |# # X # X # # #|01 110 r | | 1 | LD (IX+d),r | (IX+D)<-r |# # X # X # # #|11 011 101| DD | 3 | | | |01 110 r | | | | | | <-d-> | | | LD (IY+d),r | (IY+d)<-r |# # X # X # # #|11 111 101| FD | 3 | | | |01 110 r | | | | | | <-d-> | | | LD (HL),n | (HL)<-n |# # X # X # # #|00 110 110| 36 | 2 | | | | <-d-> | | | LD (IX+d),n | (IX+d)<-n |# # X # X # # #|11 011 101| DD | 4 | | | |00 110 110| 36 | | | | | <-d-> | | | | | | <-n-> | | | LD (IY+d),n | (IY+d)<-n |# # X # X # # #|11 111 101| FD | 4 | | | |00 110 110| 36 | | | | | <-d-> | | | | | | <-n-> | | | LD A,(BC) | A<-(BC) |# # X # X # # #|00 001 010| 0A | 1 | LD A,(DE) | A<-(DE) |# # X # X # # #|00 011 010| 1A | 1 | LD A,(nn) | A<-(nn) |# # X # X # # #|00 111 010| 3A | 3 | | | | <-n-> | | | | | | <-n-> | | | LD (BC),A | (BC)<-A |# # X # X # # #|00 000 010| 02 | 1 | LD (DE),A | (DE)<-A |# # X # X # # #|00 010 010| 12 | 1 | LD (nn),A | (nn)<-A |# # X # X # # #|00 110 010| 32 | 3 | | | | <-n-> | | | | | | <-n-> | | | LD A,I | A<-I | # X # X # # #|11 101 101| ED | 2 | | | |01 010 111| 57 | | LD A,R | A<-R | # X # X # # #|11 101 101| ED | 2 | | | |01 011 111| 5F | | LD I,A | I<-A |# # X # X # # #|11 101 101| ED | 2 | | | |01 000 111| 47 | | LD R,A | R<-A |# # X # X # # #|11 101 101| ED | 2 | | | |01 001 111| 4F | | LD dd,nn | dd<-nn |# # X # X # # #|00 dd0 001| | 3 |dd Par | | | <-n-> | | |00 BC | | | <-n-> | | |01 DE LD IX,nn | IX<-nn |# # X # X # # #|11 011 101| DD | 4 |10 HL | | |00 100 001| 21 | |11 SP | | | <-n-> | | | | | | <-n-> | | | LD IY,nn | IY<-nn |# # X # X # # #|11 111 101| FD | 4 | | | |00 100 001| 21 | | | | | <-n-> | | | | | | <-n-> | | | LD (HL),nn | H<-(nn+l) |# # X # X # # #|00 101 010| 2A | 3 | | L<-(nn) | | <-n-> | | | | | | <-n-> | | | LD dd,(nn) | ddH<-(nn+l) |# # X # X # # #|11 101 101| ED | 4 | | ddL<-(nn) | |01 dd1 011| | | | | | <-n-> | | | | | | <-n-> | | | LD IX,(nn) | ixH<-(nn+l) |# # X # X # # #|11 011 101| DD | 4 | | ixL<-(nn) | |00 101 010| 2A | | | | | <-n-> | | | | | | <-n-> | | | LD IY,(nn) | iyH<-(nn+l) |# # X # X # # #|11 111 101| FD | 4 | | iyL<-(nn) | |00 101 010| 2A | | | | | <-n-> | | | | | | <-n-> | | | LD (nn),HL | (nn+l)<-H |# # X # X # # #|00 100 010| 22 | 3 | | (nn)<-L | | <-n-> | | | | | | <-n-> | | | LD (nn),dd | (nn+l)<-ddH |# # X # X # # #|11 101 101| ED | 4 | | (nn)<-ddL | |01 dd0 011| | | | | | <-n-> | | | | | | <-n-> | | | LD (nn),IX | (nn+l)<-ixH |# # X # X # # #|11 011 101| DD | 4 | | (nn)<-ixL | |00 100 010| 22 | | | | | <-n-> | | | | | | <-n-> | | | LD (nn),IY | (nn+l)<-iyH |# # X # X # # #|11 111 101| FD | 4 | | (nn)<-iyL | |00 100 010| 22 | | | | | <-n-> | | | | | | <-n-> | | | LD SP,HL | SP<-HL |# # X # X # # #|11 111 001| F9 | 1 | LD SP,IX | SP<-IX |# # X # X # # #|11 011 101| DD | 2 | | | |11 111 001| F9 | | LD SP,IY | SP<-IY |# # X # X # # #|11 111 101| FD | 2 |qq Par | | |11 111 001| F9 | |00 BC PUSH qq | (SP2)<-qqL |# # X # X # # #|11 qq0 101| | 1 |01 DE | (SP1)<-qqH | | <-n-> | | |10 HL PUSH IX | (SP2)<-ixL |# # X # X # # #|11 011 101| DD | 2 |11 AF | (SP1)<-ixH | |11 100 101| E5 | | PUSH IY | (SP2)<-iyL |# # X # X # # #|11 111 101| FD | 2 | | (SP1)<-iyH | |11 100 101| E5 | | POP qq | qqH<-(SP+1) |# # X # X # # #|11 qq0 001| | 1 | | qqL<-(SP) | | <-n-> | | | POP IX | ixH<-(SP+1) |# # X # X # # #|11 011 101| DD | 2 | | | |11 100 001| E1 | | POP IY | |# # X # X # # #|11 111 101| FD | 2 | | | |11 100 001| E1 | | ____________|_____________|_________________|__________|____|_____|__________ Referencias: r,s: Se refiere a cualquier registro: A, B, C, D, E, H, L """""""""""" # : Bit del status no afectado En el registro de estado, 0 es un bit borrado; y 1 es un bit puesto a este valor. dd : Se refiere a algun par de registros: BC, DE, HL, SP qq : Se refiere a los pares de registros AF, BC, DE, HL BCL: Por ejemplo, se refiere a un registro de ocho bits del par BC, concretamente en este el L, ya que el subindice L (low) se refiere al octeto mas bajo, al contrario que el subindice H (high) 2. Tabla de instrucciones de intercambio, transferencia y busqueda =============================================================== ______________________________________________________________________________ | | Registro de | | | Nemotec- | Simbolo | estado | Codigo | N§ |Comentarios nico | de la |_________________| Maquina |Bytes| | operacion |7|6|5|4|3| 2 |1|0|_______________| | | |S|Z| |H| |P/V|N|C|76|543|210|HEX | | ___________|_____________|_|_|_|_|_|___|_|_|__|___|___|____|_____|___________ EX DE,HL | DE<->HL |# # X # X # # #|11 101 011 EB | 1 |El banco de EX AF,AF | AF<->AF |# # X # X # # #|00 001 000 08 | 1 |regs y regs | | | | |auxiliares | | | | |se intercam | | | | |bian. EXX | BC<->BC' |# # X # X # # #|11 011 001 D9 | 1 | | DE<->DE' | | | | | HL<->HL | | | | | | | | | EX (SP),HL | H<->(SP+1) |# # X # X # # #|11 100 011 E3 | 1 | | L<->(SP) | | | | EX (SP),IX | ixL<->(SP) |# # X # X # # #|11 011 101 DD | 2 | | ixH<->(SP+1)| |11 100 011 E3 | | EX (SP),IY | iyL<->(SP) |# # X # X # # #|11 111 101 FD | 2 | | iyH<->(SP+1)| |11 100 011 E3 | | | | 1 | | | LDI | (DE)<-(HL) |# # X 0 X ? 0 #|11 101 101 ED | 2 |Cargar (HL) | DE<-DE+1 | |10 100 000 A0 | |en (DE) aum | HL<-HL+1 | | | |enta los | BC<-BC+1 | | | |punteros | | | | |decrementa | | | | |(BC) | | | | | LDIR | (DE)<-(HL) |# # X 0 X 0 0 #|11 101 101 ED | 2 |Si BC not 0 | DE<-DE+1 | |10 110 000 B0 | 2 |Si BC=0 | HL<-HL+1 | | | | | BC<-BC-1) | | | | | Repeat until| | | | | BC=0 | 1 | | | LDD | (DE)<-(HL) |# # X 0 X ? 0 #|11 101 101 ED | 2 | | DE<-DE-1 | |10 101 000 A8 | | | HL<-HL-1 | | | | | BC<-BC-1 | | | | LDDR | (DE)<-(HL) |# # X 0 X 0 0 #|11 101 101 ED | 2 |Si BC not 0 | DE<-DE-1 | |10 111 000 B8 | 2 |Si BC=0 | HL<-HL-1 | | | | | BC<-BC-1 | | | | | Rept until | | | | | BC=0 | | | | | A-(HL) | 2 1 | | | CPI | HL<-HL+1 |? ? X ? X ? 1 #|11 101 101 ED | 2 | | BC<-BC-1 | |10 100 001 A1 | | | | 2 1 | | | CPIR | A-(HL) |? ? X ? X ? 1 #|11 101 101 ED | 2 |Si BC =/ 0 | HL<-HL+1 | | | |y A =/ (HL) | BC<-BC-1 | | | | | Rept until | |10 110 001 B1 | 2 |Si BC = 0 | A=HL o | | | |y A = (HL) | BC=0 | | | | | | 2 1 | | | CPD | A-(HL) |? ? X ? X ? 1 #|11 101 101 11 | 2 | | HL<-HL-1 | |10 101 001 A9 | | | BC<-BC-1 | | | | | | 2 1 | | | CPDR | A-(HL) |? ? X ? X ? 1 #|11 101 101 ED | 2 |Si BC = 0 | HL<\-HL-1 | |10 111 001 B9 | 2 |y A =/ (HL) | BC<-BC-1 | | | | | Rept until | | | | | A=(HL) o | | | | | BC=0 | | | | ___________|_____________|_________________|_______________|_____|______________ Referencias: & : Une todos los procesos que se realizan en una operacion """""""""""" El bit P/V es puesto o 0 si el resultado de BC-1=0, si no; P/V sera 1. El bit Z es 1 si A=(HL), si no; Z=0 # : Bit no afectado 0 : Bit borrado 1 : Bit puesto a uno X : Bit indiferente (0 o 1) ? : El bit queda afectado segun el resultado de la operacion Repeat o : Indica que se repetira la operacion rept until hasta que se cumpla con alguna de las condiciones que la siguen. 3. Tabla de instrucciones aritmeticas y logicas de 8 bits ====================================================== ______________________________________________________________________________ | | Registro de | | | | Simbolo | estado | Codigo | N§ |Comenta Nemotecnico | de la |_________________| Maquina |Bytes| rios | operacion |7|6|5|4|3| 2 |1|0|_______________| | | |S|Z| |H| |P/V|N|C|76|543|210|HEX | | _____________|_______________|_|_|_|_|_|___|_|_|__|___|___|____|_____|________ ADD A,r | A <- A+r |? ? X ? X V 0 ?|10 000 r | | 1 |r Reg ADD A,n | A <- A+n |? ? X ? X V 0 ?|11 000 110| | 2 |000 B | | | <-n<- | | |001 C | | | | | |010 D ADD A,(HL) | A <- A+(HL) |? ? X ? X V 0 ?|10 000 110| | 1 |011 E ADD A,(IX+d) | A <- A+(IX+d) |? ? X ? X V 0 ?|11 011 101| DD | 3 |100 H | | |10 000 110| | |101 L | | | <-d<- | | |111 A ADD A,(IY+d) | A <- A+(IY+d) |? ? X ? X V 0 ?|11 111 101| FD | 3 | | | |10 000 110| | | | | | <-d<- | | | ADC A,s | A <- A+s+CY |? ? X ? X V 0 ?| 001 | | | SUB s | A <- A-s |? ? X ? X V 1 ?| 010 | | | SBC A,S | A <- A-s-CY |? ? X ? X V 1 ?| 011 | | | AND s | A <- A and s |? ? X 1 X P 0 0| 100 | | | OR s | A <- A or s |? ? X 0 X P 0 0| 110 | | | XOR s | A <- A (+) s |? ? X 0 X P 0 0| 101 | | | CP s | A - s |? ? X ? X V 1 ?| 111 | | | INC r | r <- r+l |? ? X ? X V 0 #|00 r 100| | 1 | INC (HL) | (HL) <- (HL)+1|? ? X ? X V 0 #|00 110 100| | 1 | INC (IX+d) | (IX+d) <- |? ? X ? X V 0 #|11 011 101| DD | 3 | | (IX+d)+1 | |00 110 100| | | | | | ->d-> | | | INC (IY+d) | (IY+d) <- |? ? X ? X V 0 #|11 111 101| FD | 3 | | (IY+d)+1 | |00 110 100| | | | | | ->d-> | | | DEC s | s <- s - 1 |? ? X ? X V 1 #| 101| | 1 | _____________|_______________|_________________|__________|____|_____|________ Referencias: El simbolo V en el bit P/V indica que este bit contiene el """""""""""" desbordamiento del resultado de la operacion. De igual forma el simbolo P indica la paridad V=1, significa desbordamiento. P=1, significa paridad par. P=0 significa paridad impar El bit P/V es puesto o 0 si el resultado de BC-1=0, si no; P/V sera 1. # : Bit no afectado 0 : Bit borrado 1 : Bit puesto a uno X : Bit indiferente (0 o 1) ? : El bit queda afectado segun el resultado de la operacion IFF indica permiso de interupcion CY indica bit de acarreo 4. Tabla de instrucciones de control de CPU ======================================== * Las aclaraciones se han dejado en ingles, porque al ser un lenguaje tecnico, se pierde mucho del sentido original al traducirlo. ______________________________________________________________________________ | | Registro de | | | | Simbolo | estado | Codigo | N§ |Comenta Nemotecnico | de la |_________________| Maquina |Bytes| rios | operacion |7|6|5|4|3| 2 |1|0|_______________| | | |S|Z| |H| |P/V|N|C|76|543|210|HEX | | _____________|_______________|_|_|_|_|_|___|_|_|__|___|___|____|_____|________ DAA | Converts acc, |? ? X ? X P # ?|00 100 111| 27 | |Ajuste | content into | | | | |decimal | packed BCD | | | | |del | following add | | | | |acumula | or substract | | | | |dor. | with packed | | | | | | BCD operands | | | | | | _ | | | | | CPL | A <- A |# # X 1 X # 1 #|00 101 111| 2F | 1 | | _ | | | | | NEG | A <- A + 1 |? ? X ? X V 1 ?|11 101 101| ED | 2 | | | |01 000 100| 44 | | | __ | | | | | CCF | CY <- CY |# # X X X # 0 ?|00 111 111| 3F | 1 |Complem | | | | | | ta el SCF | CY <- 1 |# # X 0 X # 0 1|00 110 111| 37 | 1 | acum. NOP | No operation |# # X # X # # #|00 000 000| 00 | 1 |Bit | | | | | |carry | | | | | |=1 HALT | Cpu halted |# # X # X # # #|01 110 111| 76 | 1 | DI* | IFF <- 0 |# # X # X # # #|11 110 011| F3 | 1 | EI* | IFF <- 1 |# # X # X # # #|11 111 011| FB | 1 | IM 0 | Set interrupt |# # X # X # # #|11 101 101| ED | 2 | | mode 0 | |01 000 110| 46 | | IM 1 | Set interrupt |# # X # X # # #|11 101 101| ED | 2 | | mode 1 | |01 010 110| 56 | | IM 2 | Set interrupt |# # X # X # # #|11 101 101| ED | 2 | | mode 2 | |01 011 110| 5E | | _____________|_______________|_________________|__________|____|_____|________ Referencias: El simbolo V en el bit P/V indica que este bit contiene el """""""""""" desbordamiento del resultado de la operacion. De igual forma el simbolo P indica la paridad V=1, significa desbordamiento. P=1, significa paridad par. P=0 significa paridad impar El bit P/V es puesto o 0 si el resultado de BC-1=0, si no; P/V sera 1. # : Bit no afectado 0 : Bit borrado 1 : Bit puesto a uno X : Bit indiferente (0 o 1) ? : El bit queda afectado segun el resultado de la operacion IFF indica permiso de interupcion CY indica bit de acarreo 5. Tabla de instrucciones aritmeticas de 16 bits ============================================= ______________________________________________________________________________ | | Registro de | | | | Simbolo | estado | Codigo | N§ |Comenta Nemotecnico | de la |_________________| Maquina |Bytes| rios | operacion |7|6|5|4|3| 2 |1|0|_______________| | | |S|Z| |H| |P/V|N|C|76|543|210|HEX | | _____________|_______________|_|_|_|_|_|___|_|_|__|___|___|____|_____|________ | | | | | |ss Reg ADD HL,ss | HL <-HL+ss |# # X X X # 0 ?|00 ss1 001| | 1 |00 BC | | | | | |01 DE ADC HL,ss | HL <-HL+ss+CY |? ? X X X V 0 ?|11 101 101| ED | 2 |10 HL | | |01 ss1 010| | |11 SP | | | | | | SBC HL,ss | HL <-HL-ss-CY |? ? X X X V 1 ?|11 101 101| ED | 2 | | | |01 ss0 010| | | ADD IX,pp | IX <-IX+pp |# # X X X # 0 ?|11 011 101| DD | 2 |pp Reg | | |00 pp1 001| | |00 BC | | | | | |01 DE | | | | | |10 IX | | | | | |11 SP ADD IY,rr | IY <-IY,rr |# # X X X # 0 ?|11 111 101| FD | 2 |rr Reg | | |00 rr1 001| | |00 BC | | | | | |01 DE | | | | | |10 IY | | | | | |11 SP | | | | | | INC ss | ss <-ss + 1 |# # X # X # # #|00 ss0 011| | 1 | INC IX | IX <-IX + 1 |# # X # X # # #|11 011 101| DD | 2 | | | |00 100 011| 23 | | INC IY | IY <-IY + 1 |# # X # X # # #|11 111 101| FD | 2 | | | |00 100 011| 23 | | DEC ss | ss <-ss - 1 |# # X # X # # #|00 ss1 011| | 1 | DEC IX | IX <-IX - 1 |# # X # X # # #|11 011 101| DD | 2 | | | |00 101 011| 2B | | DEC IY | IY <-IY - 1 |# # X # X # # #|11 111 101| FD | 2 | | | |00 101 011| 2B | | _____________|_______________|_________________|__________|____|_____|________ Referencias: El simbolo V en el bit P/V indica que este bit contiene el """""""""""" desbordamiento del resultado de la operacion. De igual forma el simbolo P indica la paridad V=1, significa desbordamiento. P=1, significa paridad par. P=0 significa paridad impar El bit P/V es puesto o 0 si el resultado de BC-1=0, si no; P/V sera 1. # : Bit no afectado 0 : Bit borrado 1 : Bit puesto a uno X : Bit indiferente (0 o 1) ? : El bit queda afectado segun el resultado de la operacion ss : Algun par de registros BC, DE, HL, SP pp : Algun par de registros BC, DE, IX, SP rr : Algun par de registros BC, DE, IY, SP 6. Tabla de instrucciones de tratamiento de subrutinas =================================================== ______________________________________________________________________________ | | Registro de | | | | Simbolo | estado | Codigo | N§ |Comentarios Nemo- | de la |_________________| Maquina |Bytes| tecnico | operacion |7|6|5|4|3| 2 |1|0|_______________| | | |S|Z| |H| |P/V|N|C|76|543|210|HEX | | _________|________________|_|_|_|_|_|___|_|_|__|___|___|____|_____|___________ | | | | | | CALL nn | (SP-1) <- PCh |# # X # X # # #|11 001 101| CD | 3 | | (SP-2) <- PCl | | <- n <- | | | | PC <- nn | | <- n <- | | | | | | | | | CALL cc |Si cc es falso, |# # X # X # # #|11 cc 100| | 3 |Si cc falso ,nn |continua, si no | | <- n <- | | |Si cc ver- |toma CALL nn | | <- n <- | | |dadero | | | | | 3 | RET |PCl <- (SP) |# # X # X # # #|11 001 001| C9 | 1 | |PCh <- (SP+1) | | | | | | | | | | | RET cc |Si cc es falso, |# # X # X # # #|11 cc 000| | 1 |Si cc falso |continua, si no | | | | 1 |Si cc ver- |toma ret | | | | |dadero | | | | | | | | | | | | | | | | | | | | | | | | RETI |Retorno de |# # X # X # # #|11 101 101| ED | 2 |cc Cond |interupt. | |01 00 101| 4D | |000 NZnot0 | | |11 101 101| ED | |001 Z=0 RETN(1) |Retorno de |# # X # X # # #|01 000 101| 45 | 2 |010 NCnoCY |interrupt | | | | |011 C CY |no enmascarable | | | | |100 POpIMP | | | | | |101 PEpPAR | | | | | |110 P=+ | | | | | |111 M=- RST p |(SP-1) <- PCh |# # X # X # # #|11 t 111| | 1 |t P |(SP-2) <- PCl | | | | |000 00H |PCh <- 0 | | | | |001 08H |PCl <- p | | | | |010 10H | | | | | |011 18H | | | | | |100 20H | | | | | |101 28H | | | | | |110 30H | | | | | |111 38H _________|________________|_________________|__________|____|_____|____________ Referencias: NCnoCY : NC no acarreo """""""""""" C CY : C acarreo POpIMP : PO paridad impar PEpPAR : PE paridad par P=+ : P signo positivo M=- : M signo negativo # : Bit no afectado 0 : Bit borrado 1 : Bit puesto a uno X : Bit indiferente (0 o 1) 7. Tabla de instrucciones de salto =============================== ______________________________________________________________________________ | | Registro de | | | | Simbolo | estado | Codigo | N§ |Comentarios Nemo- | de la |_________________| Maquina |Bytes| tecnico | operacion |7|6|5|4|3| 2 |1|0|_______________| | | |S|Z| |H| |P/V|N|C|76|543|210|HEX | | _________|________________|_|_|_|_|_|___|_|_|__|___|___|____|_____|___________ | | | | | | JP nn | PC <- nn |# # X # X # # #|11 000 011| C3 | 3 | | | | <-n<- | | | | | | <-n<- | | | JP cc,nn | Si cc verdadero|# # X # X # # #|11 cc 010| | 3 |cc Condcion | PC <- nn, si no| | <-n<- | | |000 NZnot0 | continua. | | <-n<- | | |001 Z=0 | | | | | |010 NCnoCY | | | | | |011 C CY | | | | | |100 POpIMP | | | | | |101 PEpPAR | | | | | |110 P=+ JR e | PC <- PC + e |# # X # X # # #|00 011 000| 18 | 2 |111 M=- | | | <-eú2<- | | | JR C,e | Si C=0, |# # X # X # # #|00 111 000| 38 | 2 |Segun cond | continua | | <-eú2<- | | | | Si C=0, | | | | 2 |Segun cond | PC <- PC + e | | | | | JR NC,e | Si C=1, |# # X # X # # #|00 110 000| 30 | 2 |Segun cond | continua | | <-eú2<- | | | | Si C=0, | | | | 2 |Segun cond | PC <- PC + e | | | | | JR Z,e | Si Z=0 |# # X # X # # #|00 101 000| 28 | 2 |Segun cond | continua | | <-eú2<- | | | | Si Z=1, | | | | 2 |Segun cond | PC <- PC + e | | | | | JR NZ,e | Si Z=1, |# # X # X # # #|00 100 000| 20 | 2 |Segun cond | continua | | <-eú2<- | | | | Si Z=0, | | | | 2 |Segun cond | PC <- PC + e | | | | | JP (HL) | PC <- HL |# # X # X # # #|11 101 001| E9 | 1 | JP (IX) | PC <- IX |# # X # X # # #|11 011 101| DD | 2 | | | |11 101 001| E9 | | JP (IY) | PC <- IY |# # X # X # # #|11 111 101| FD | 2 | | | |11 101 001| E9 | | DJNZ, E | B <- B-1 |# # X # X # # #|00 010 000| 10 | 2 |Si B=0 | Si B=0, | | <-eú2<- | | | | continua | | | | | | Si B not 0, | | | | 2 |Si B not 0 | PC <- PC + e | | | | | _________|________________|_________________|__________|____|_____|___________ Referencias: NCnoCY : NC no acarreo """""""""""" C CY : C acarreo POpIMP : PO paridad impar PEpPAR : PE paridad par P=+ : P signo positivo M=- : M signo negativo e : Representa la extension de direccionamiento relativo, es un signo de complemento a dos y cubre el rango <-126, 129> e ú 2 : En codigo maquina produce una direccion de PC, siendo PC incrementado en 2 antes de la suma de e. # : Bit no afectado 0 : Bit borrado 1 : Bit puesto a uno X : Bit indiferente (0 o 1) 8. Tabla de instrucciones de entrada/salida ======================================== ______________________________________________________________________________ | | Registro de | | | | Simbolo | estado | Codigo | N§ |Comentarios Nemo- | de la |_________________| Maquina |Bytes| tecnico | operacion |7|6|5|4|3| 2 |1|0|_______________| | | |S|Z| |H| |P/V|N|C|76|543|210|HEX | | _________|_______________|_|_|_|_|_|___|_|_|__|___|___|____|_____|____________ | | | | | | IN A,(n) | A <- (n) |# # X # X # # #|11 011 011| DB | 2 |n to A0~A7 | | | <- n <- | | |Acc toA8~A15 IN r,(C) | r <- (C) |? ? X ? X P # #|11 101 101| ED | 2 |C to A0~A7 | Si r=110, solo| |01 r 000| | |B to A8~A15 | C se vera afec| | | | | | tado | | | | | | | (1) | | | | INI | (HL) <- (C) |# ? X # X # 1 #|11 101 101| ED | 2 |C to A0~A7 | B <- B-1 | |10 100 010| A2 | |B to A8~A15 | HL <- HL + 1 | | | | | INIR | (HL) <- (C) |# 1 X X X X 1 #|11 101 101| ED | 2 |C to A0~A7 | B <- B - 1 | |10 110 010| B2 | |B to A8~A15 | HL <- HL + 1 | | | | | | repetir hasta | | | | | | que B=0 | | | | | | | (1) | | | | IND | (HL) <- (C) |# ? X X X X 1 #|11 101 101| ED | 2 |C to A0~A7 | B <- B - 1 | |10 101 010| AA | |B to A8~A15 | HL <- HL - 1 | | | | | INDR | (HL) <- (C) |# 1 X X X X 1 #|11 101 101| ED | 2 |C to A0~A7 | B <- B - 1 | |10 111 010| BA | |B to A8~A15 | HL <- HL - 1 | | | | | | repetir hasta | | | | | | que B=0 | | | | | | | | | | | OUT (n),A| (n) <- A |# # X # X # # #|11 010 011| D3 | 2 |C to A0~A7 | | | | | |B to A8~A15 OUT (C),r| (C) <- r |# # X # X # # #|11 101 101| ED | 2 |C to A0~A7 | | |01 r 001| | |B to A8~A15 | | (1) | | | | OUTI | (C) <- (HL) |# ? X X X X 1 #|11 101 101| ED | 2 |C to A0~A7 | B <- B - 1 | |10 100 011| A3 | |B to A8~A15 | HL <- HL +1 | | | | | OTIR | (C) <- (HL) |# 1 X X X X 1 #|11 101 101| ED | 2 |C to A0~A7 | B <- B - 1 | |10 100 011| B3 | |B to A8~A15 | HL <- HL + 1 | | | | | | repetir hasta | | | | | | que B=0 | | | | | | | | | | | | | (1) | | | | OUTD | (C) <- (HL) |# ? X X X X 1 #|11 101 101| ED | 2 |C to A0~A7 | B <- B - 1 | |10 110 011| AB | |B to A8~A15 | HL <- HL - 1 | | | | | OTDR | (C) <- (HL) |# 1 X X X X 1 #|11 101 101| ED | 2 |C to A0~A7 | B <- B - 1 | |10 111 011| BB | |B to A8~A15 | HL <- HL - | | | | | | repetir hasta | | | | | | que B=0 | | | | | _________|_______________|_________________|__________|____|_____|____________ Espero que hayan disfrutado este articulo, conociendo un poco la historia de la informatica y del hardware. Como ya mencione, agradezco a todo SET por publicar este articulo y a Madfran. Y por ultimo, a vos que leiste el articulo. Comentarios, criticas o cualquier cosa (si es dinero, mejor :)) elotro.ar@gmail.com