La CPU eZ80 ofrece dos modos de memoria. Esta aplicación describe los tipos de modos de memoria y proporciona una aplicación sencilla que demuestra cómo configurar correctamente la CPU eZ80 para el funcionamiento en modo de memoria mixta. Como resultado, es posible ejecutar bloques de código Z80 heredado desde el entorno de la CPU eZ80.
La CPU eZ80 ofrece dos modos de memoria: el modo Z80 y el modo Address Data Long (ADL). El modo Z80 proporciona compatibilidad con versiones anteriores de aplicaciones Z80 heredadas y el modo ADL proporciona direccionamiento lineal de 24 bits y registros de CPU de 24 bits. Los múltiples modos de memoria de estos procesadores eZ80 permiten a los desarrolladores migrar fácilmente el antiguo código Z80 o Z180 al nuevo código de modo ADL.
Descripción general de la arquitectura de la CPU eZ80
La CPU eZ80 es un microcontrolador de 8 bits que realiza operaciones de 16 o 24 bits. En el diagrama de bloques que se muestra en la Figura 1, la separación de los bloques de datos y de control es necesaria para comprender los modos de memoria Z80 y ADL de la CPU eZ80.
El bloque de control maneja el funcionamiento general de la CPU. En general, toma el código para ejecutarse y administra cómo los datos ingresan y salen de la CPU. Consiste en un bloque de búsqueda de instrucciones, un bloque de control de modo y un decodificador de código de operación. El bloque de búsqueda de instrucciones controla la lectura de los códigos de operación de la memoria y descarta las instrucciones completas cuando ocurre un evento de transferencia de control. El bloque de control de modo administra el modo actual del procesador (modos de parada, suspensión, interrupción, depuración y ADL). El bloque Opcode Decoder es donde se interpretan los códigos de operación.
Los bloques de datos actúan como memoria de la CPU. Además de almacenar valores relacionados, los registros de la CPU almacenan el contador del programa, el puntero de la pila y las banderas. La Unidad Lógica Aritmética (ALU) realiza operaciones aritméticas y lógicas en direcciones y datos pasados desde el bloque de control. El generador de direcciones crea direcciones para todas las operaciones de lectura y escritura de la memoria de la CPU. También contiene registros MBASE para manejar la traducción de direcciones en la operación del modo Z80. Los selectores de datos controlan la ruta de datos en función de la instrucción que se está ejecutando actualmente.
modo de memoria
La CPU eZ80 puede funcionar en dos modos: modo Z80 y modo ADL. El modo Z80 se proporciona para la compatibilidad con versiones anteriores del código Z80 heredado y utiliza direccionamiento lineal de 16 bits y registros de CPU de 16 bits. El modo ADL se proporciona para proporcionar cuatro veces el tiempo de ejecución de código de una CPU Z80 estándar que se ejecuta a la misma velocidad de reloj. El modo ADL utiliza direccionamiento lineal de 24 bits y registros de CPU de 24 bits.
Modo de memoria Z80
El modo de memoria de la CPU Z80 a veces se denomina modo no ADL. Tiene direccionamiento compatible con Z80 y registros de CPU. Después del reinicio, el modo Z80 es el modo operativo predeterminado para las CPU eZ80. Todos los registros, incluido el puntero de pila y el contador de programa, son de 16 bits cuando se opera en modo Z80. En el modo Z80, siempre se antepone un registro de dirección MBASE de 8 bits a la dirección de 16 bits, lo que permite que el código Z80 acceda a cualquier código dentro del espacio de direcciones de 16 MB de la CPU eZ80. Además, con este tipo de ubicación, 256 bloques de código únicos están disponibles dentro de un espacio de direcciones de 16 MB. Cuando MBASE se establece en cero, la CPU eZ80 se comporta de manera similar a las CPU Z80 tradicionales, utilizando direccionamiento de 16 bits de 0000h a FFFFh. Cuando se establece en otro valor, las direcciones de estilo Z80 de 16 bits se desplazan a diferentes páginas definidas por MBASE. Al aprovechar al máximo la función MBASE, se pueden colocar múltiples tareas Z80 en particiones Z80 separadas.
Modo de memoria larga de datos de dirección
En el modo Address Data Long (ADL), todas las direcciones y datos tienen una longitud de 24 bits, incluido el puntero de pila y el contador de programa. En el modo ADL, las aplicaciones de usuario pueden aprovechar el espacio de direcciones lineales de 16 MB de la CPU. Registros de CPU de 24 bits y conjunto de instrucciones mejorado. Cada operación de lectura/escritura pasa 3 bytes de datos hacia y desde la CPU. Por lo tanto, las instrucciones que funcionan en el modo ADL pueden requerir más ciclos de reloj para completarse que en el modo Z80. A diferencia del modo Z80, el modo ADL no utiliza particiones de memoria. Así que no se necesita ninguna página.
Para explicar más estos dos modos de memoria, las siguientes secciones describen cómo funcionan las operaciones de registro y direccionamiento de memoria cuando ambos modos de memoria funcionan simultáneamente.
registro de la CPU
Los registros de la CPU eZ80 se pueden agrupar en dos tipos: registros de trabajo y registros de control. Los registros de trabajo suelen estar disponibles para que la aplicación principal almacene datos para su procesamiento. Los registros de control, por otro lado, son utilizados por la CPU para controlar su funcionamiento.
Registros de trabajo de la CPU eZ80
Los registros BC, DE y HL tienen una longitud de 24 bits en modo ADL. El byte más significativo se denota por U para indicar el byte alto. Estos registros tienen una longitud de 16 bits en el modo Z80 y el byte alto (indicado por U) no es accesible. La Figura 2 muestra cómo los registros de trabajo de la CPU eZ80 difieren entre el modo Z80 y el modo ADL.

Los registros Accumulator (A) y Flags (F) siguen siendo cada uno de 8 bits, independientemente del modo de memoria de la CPU.
Registro de control de la CPU eZ80
El contador de programa (PC) tiene una longitud de 24 bits en modo ADL. En el modo Z80 tiene una longitud de 16 bits. La CPU utiliza MBASE junto con el contador de programa para acceder a la memoria mientras opera en modo Z80, lo que da como resultado una dirección de 24 bits compatible con el direccionamiento de memoria de la CPU eZ80 indicado por {MBASE, PC.[15:0]}. El registro MBASE no se usa para la generación de direcciones en modo ADL, pero este registro solo se puede modificar en modo ADL. Este registro es útil en el modo Z80.

En el modo ADL, el puntero de pila activo es el Stack Pointer Long (SPL) de 24 bits y se vuelve inactivo cuando el modo de memoria cambia al modo Z80. El puntero de pila activo es un puntero de pila corto (SPS) de 16 bits. Al igual que el contador del programa, el SPS se puede mapear en cualquier lugar de la memoria y se puede acceder a él mediante el registro MBASE, lo que produce efectivamente la dirección {MBASE, SPS}.
Los registros IX e IY, al igual que los registros de trabajo, tienen una longitud de 24 bits en modo ADL, con el byte más significativo indicado por U. En el modo Z80, el byte más significativo se vuelve inaccesible. Estos registros tienen una longitud de 16 bits.
El bit Address Data Long (ADL) indica el modo de memoria actual de la CPU. Restablecer este bit a 0 hace que la CPU funcione en modo Z80. Cuando se establece en 1, este bit indica que la CPU está funcionando en modo ADL. Un reinicio borra este bit a 0. Esto significa que el modo de memoria predeterminado de la CPU es el modo Z80. Los bits ADL no se pueden cambiar directamente. Para cambiar el valor de este bit, la aplicación del usuario debe ejecutar una instrucción de control especial como CALL, JP, RST, RET, RETI, RETN.
El bit Mixed ADL (MADL) se usa para configurar la CPU para ejecutar programas que contienen código que usa los modos de memoria ADL y Z80. Este bit puede establecerse en 1 con la instrucción STMIX y borrarse en 0 con la instrucción RSMIX.