
El R800 es la unidad central de procesamiento utilizada en el ordenador doméstico MSX Turbo-R . El R800 fue diseñado por ASCII Corporation de Japón y construido por Mitsui & Co. El objetivo era una CPU moderna y segmentada que fuera compatible con el binario del Z80 y, por lo tanto, con el software MSX, manteniendo al mismo tiempo la compatibilidad con el hardware MSX más antiguo basado en el Z80 .
Compatibilidad
Durante el desarrollo del MSX Turbo R, ASCII Corporation consideró varios procesadores, tanto compatibles como incompatibles con el Z80, como candidatos. En ese momento, Kazuya Kishioka (岸岡和也) , un empleado de la empresa, estaba investigando y desarrollando un ASIC que fuera una versión de alta velocidad del Z80 y en gran medida personalizada para la arquitectura MSX. [1]
Para lograr compatibilidad con software MSX más antiguo, el R800 utiliza el mismo conjunto de instrucciones que el Z80, con solo agregados menores pero útiles, como las instrucciones de multiplicación de 8x8 bits y 16x16 bits llamadas MULUB ( 8 bits ) y MULUW ( 16 bits ). Además, muchas de las instrucciones no documentadas del Z80 se hicieron oficiales, incluidos todos los códigos de operación para instrucciones que tratan con IX e IY como registros de 8 bits (IXH, IXL, IYH, IYL).
Como el R800 no se basa directamente en el Z80, sino que proviene de la familia Z800 , carece de algunas de las otras características no documentadas del Z80. Por ejemplo, los indicadores no documentados representados por los bits 3 y 5 del registro F no tienen los mismos valores que en el Z80 (lo que hace que no supere las pruebas ZEXALL) y el código de operación no documentado, a menudo llamado SLL, es simplemente un alias de la instrucción SLA.
Cambios de hardware
Al ser un diseño mucho más nuevo, la implementación del R800 era bastante diferente del antiguo Z80. Los cambios eran similares a los de las líneas Z800 , Z280 , Z380 y eZ80 de procesadores compatibles con Z80. El Z80 original utiliza internamente un hardware ALU de 4 bits inusual, [2] una solución que de hecho puede competir con CPUs similares que utilizan lógica ALU de 8 bits completamente cableada (como su precursor inmediato, el Intel 8080 [3] ). Sin embargo, los diseñadores del R800 implementaron una ALU completa de 16 bits para mantenerse al día con su ejecución más segmentada. Las instrucciones como ADD HL,BC que toman 11 ciclos de reloj en el Z80 pueden, en algunas situaciones, ejecutarse en tan solo un ciclo de bus (1-2 relojes) en el R800, debido al grado de segmentación que hace posible esta ALU de ancho completo. La velocidad máxima del reloj de la CPU utilizada en este nuevo MSX era de 14,32 MHz (cuatro veces más rápida que la velocidad original de 3,57 MHz utilizada en el MSX anterior), mientras que el reloj del bus se incrementó a 7,16 MHz. El bus de datos siguió siendo de 8 bits para mantener la compatibilidad con el hardware antiguo.
Obteniendo códigos de operación
Se realizaron cambios adicionales en la forma en que la CPU obtiene los códigos de operación . El Z80 original utiliza dos ciclos para obtener una instrucción simple como OR A, más dos ciclos para la actualización. En la arquitectura MSX se emite un estado de espera adicional. Una revisión del mecanismo de obtención en un entorno MSX típico ayuda a explicar el R800:
- Z80, ciclo 1: establece los 8 bits superiores de la dirección
- Z80, ciclo 2: establece los 8 bits inferiores de la dirección
- Z80, ciclo 3: estado de espera
- Z80, ciclo 4: actualización, parte 1
- Z80, ciclo 5: actualización, parte 2
Dado que la mayoría de las implementaciones de MSX utilizan RAM dispuesta en un bloque de 256×256 bytes, se requieren dos ciclos para establecer la dirección de búsqueda. El R800 evita esto recordando el último estado conocido de los 8 bits superiores. Si la siguiente instrucción está en los mismos límites de 256 bytes, los 8 bits superiores no se establecen y se guarda un ciclo. Sin embargo, en el Z80, los ciclos de actualización destruyen la información de los bits superiores, por lo que se necesitaba una solución alternativa. [4]
La solución utilizada en el R800 fue refrescar bloques enteros de RAM, en lugar de refrescar una fila de RAM en cada instrucción emitida. Cada 30 μs , la CPU se detiene durante 4 μs, este tiempo se utiliza para refrescar un bloque de RAM. Dado que no hay refresco entre las instrucciones de búsqueda y el estado de espera se elimina debido a chips de RAM más rápidos, se pueden emitir instrucciones simples utilizando solo un ciclo. Este ciclo sería el ciclo 2 en el ejemplo Z80 anterior; el ciclo 1 se vuelve opcional y solo se emite cuando el programa cruza un límite de 256 bytes.
Hardware externo
Todo esto sólo se aplica a la rápida memoria RAM que se utiliza en el MSX Turbo-R. El hardware externo, conectado a través de ranuras para cartuchos, utiliza tiempos similares a los del Z80. Ni siquiera la ROM interna del Turbo-R es lo suficientemente rápida para este esquema de búsqueda, por lo que chips adicionales en el Turbo-R pueden reflejar el contenido de la ROM en la RAM para que funcione más rápido.
Referencias
- ^ "MSXturboR 開発秘話" [historia de desarrollo de MSXturboR]. MSX マ ガ ジ ン(en japonés). Noviembre de 1990. p. 70.
- ^ "El Z-80 tiene una ALU de 4 bits. Así es como funciona".
- ^ El 8080 fue diseñado por los mismos diseñadores (Faggin y Shima, entonces en Intel) y utilizaba una ALU de 8 bits. La implementación posterior de la ALU de 4 bits en el Z80 tenía como objetivo hacer que el Z80 fuera lo suficientemente diferente del diseño del 8080, evitando así una demanda de Intel. El rendimiento no se vio afectado demasiado: las instrucciones de 16 bits requerían 11 ciclos, en comparación con los 10 del 8080. Las instrucciones de 8 bits, de hecho, se volvieron más rápidas: 4 ciclos, en comparación con los 5 del 8080. (Junto con una duplicación aproximada de la frecuencia de reloj, eso le dio al Z80 una ventaja significativa sobre el 8080).
- ^ "R800 - Wiki MSX".