Diferencia entre revisiones de «R800»

De MadriSX wiki
Ir a la navegaciónIr a la búsqueda
Sin resumen de edición
 
Sin resumen de edición
 
Línea 1: Línea 1:
[[Imagen:R800 01.jpg|right|thumb|250px|[[Microprocesador]] [[RISC]] R800 ]]
[[Imagen:R800 01.jpg|right|thumb|250px|[[Microprocesador]] [[RISC]] R800 ]]
El '''R800''' es la [[CPU]] principal de los [[ordenador doméstico|ordenadores domésticos]] [[MSX Turbo-R]] (tienen además como CPU secundaria un [[Zilog Z80]]A). Fué diseñado por [[ASCII Corporation]] de [[Japón]], con el objetivo de tener la CPU más rápida posible, pero que mantuviera la [[compatibilidad]] con el [[hardware]] y [[software]] de los [[MSX]] existentes (basados en el [[Zilog Z80]]).
El '''R800''' es la [[CPU]] principal de los [[ordenador doméstico|ordenadores domésticos]] [[MSX Turbo-R]] (tienen además como CPU secundaria un [[Zilog Z80]]A). Fue diseñado por [[ASCII Corporation]] de [[Japón]], con el objetivo de tener la CPU más rápida posible, pero que mantuviera la [[compatibilidad]] con el [[hardware]] y [[software]] de los [[MSX]] existentes (basados en el [[Zilog Z80]]).


Para preservar la compatiblidad con el viejo software MSX, el R800 utiliza un superconjunto del [[conjunto de instrucciones]] del Z80. Además de todos los [[opcode]]s del Z80, se le añaden dos nuevas intrucciones de multiplicación, '''MULUB''' ([[8 bits]]), y '''MULUW''' ([[16 bits]]). Además, muchas de las intrucciones no documentadas del Z80 se convierten en oficiales, lo que incluye todos los opcodes que usan IX e IY como registros de 8 bits (IXh, IXl, IYh, IYl).
Para preservar la compatiblidad con el viejo software MSX, el R800 utiliza un superconjunto del [[conjunto de instrucciones]] del Z80. Además de todos los [[opcode]]s del Z80, se le añaden dos nuevas instrucciones de multiplicación, '''MULUB''' ([[8 bits]]), y '''MULUW''' ([[16 bits]]). Además, muchas de las instrucciones no documentadas del Z80 se convierten en oficiales, lo que incluye todos los opcodes que usan IX e IY como registros de 8 bits (IXh, IXl, IYh, IYl).


Puesto que el R800 no está basado directamente en el Z80, sino en la familia del [[Zilog Z800]], le faltan varias otras ''prestaciones no documentadas'' del Z80. Por ejemplo, la bandera indocumentada representada por los bits 3 y 5 del registro F no asume los mismos valores que en un Z80 (siendo la causa de fallar en los test [[ZEXALL]]) y el opcode indocumentado llamado '''SLL''' es reemplazado pr orto opcode indocumentado llamado '''TST'''.
Puesto que el R800 no está basado directamente en el Z80, sino en la familia del [[Zilog Z800]], le faltan varias otras ''prestaciones no documentadas'' del Z80. Por ejemplo, la bandera indocumentada representada por los bits 3 y 5 del registro F no asume los mismos valores que en un Z80 (siendo la causa de fallar en los test [[ZEXALL]]) y el opcode indocumentado llamado '''SLL''' es reemplazado por otro opcode indocumentado llamado '''TST'''.


En la parte hardware, se realizan cambios radicales. La [[ULA]] interna de 8 bits del Z80 es reemplazada por una nueva de 16 bits. Opcodes como '''ADD HL, BC''', que anteriormente ocupaban 11 ciclos de reloj, pasan a durar sólo un ciclo en determinadas condiciones. La [[frecuencia de reloj]] máxima se incrementa a 7,16 [[MHz]], el doble que los 3,57 MHz del Z80 usado en los MSX. El [[bus de datos]] permance de 8 bits para mantener la compatibilidad con el viejo hardware.
En la parte hardware, se realizan cambios radicales. La [[ULA]] interna de 8 bits del Z80 es reemplazada por una nueva de 16 bits. Opcodes como '''ADD HL, BC''', que anteriormente ocupaban 11 ciclos de reloj, pasan a durar sólo un ciclo en determinadas condiciones. La [[frecuencia de reloj]] máxima se incrementa a 7,16 [[MHz]], el doble que los 3,57 MHz del Z80 usado en los MSX. El [[bus de datos]] permanece de 8 bits para mantener la compatibilidad con el viejo hardware.


Además se hicieron cambios en el modo en que la CPU trata los opcodes. El Z80 original usa 4 ciclos para tratar una instrucción simple como '''OR A''', además de emplear un estado de espera adicional debido a la arquitectura MSX. Si revisamos el tratamiento del Z80 en un ambiente MSX comprenderemos mejor al R800:
Además se hicieron cambios en el modo en que la CPU trata los opcodes. El Z80 original usa 4 ciclos para tratar una instrucción simple como '''OR A''', además de emplear un estado de espera adicional debido a la arquitectura MSX. Si revisamos el tratamiento del Z80 en un ambiente MSX comprenderemos mejor al R800:
Línea 16: Línea 16:
*Z80, ciclo 5: refresco, parte 2
*Z80, ciclo 5: refresco, parte 2


Puesto que muchas implementaciones del MSX usan memoria [[RAM]] dispuesta en bloques de 256×256 bytes, se necesitan dos ciclos para componer la dirección a leer. El R800 evita esto recordando el último estado conocido de los 8 [[bit]]s más altos. Si la siguiente instrucción está en el mismo bloque de 256 [[byte]]s, los 8 bits superiores no se direccionan, ahorrando un ciclo. Sin embargo en el Z80, los ciclos de refresco destruyen la información de los bits altos por lo que es neceasrio un trabajo adicional.
Puesto que muchas implementaciones del MSX usan memoria [[RAM]] dispuesta en bloques de 256×256 bytes, se necesitan dos ciclos para componer la dirección a leer. El R800 evita esto recordando el último estado conocido de los 8 [[bit]]s más altos. Si la siguiente instrucción está en el mismo bloque de 256 [[byte]]s, los 8 bits superiores no se direccionan, ahorrando un ciclo. Sin embargo en el Z80, los ciclos de refresco destruyen la información de los bits altos por lo que es necesario un trabajo adicional.


La solución implementada en el R800 es refrescar bloques enteros de RAM, en lugar de refrescar una línea de RAM por instrucción publicada. Cada 30 us (microsegundos), la CPU se detiene por 4us,y este tiempo es usado para refrescar un bloque de la RAM. Puesto que no hay refresco entre el direccionamiento de dos instrucciones, y el estado de espera (waitstate) es removido debido a los chips de RAM más rápidos, las intrucciones simples son tratadas usando sólo un ciclo de reloj. Este ciclo sería el ciclo 2 del ejemplo anterior del Z80; el ciclo 1 deviene en opcional y sólo es utilizado cuando el programa cruza un límite de 256 bytes.
La solución implementada en el R800 es refrescar bloques enteros de RAM, en lugar de refrescar una línea de RAM por instrucción publicada. Cada 30 us (microsegundos), la CPU se detiene por 4us, y este tiempo es usado para refrescar un bloque de la RAM. Puesto que no hay refresco entre el direccionamiento de dos instrucciones, y el estado de espera (waitstate) es removido debido a los chips de RAM más rápidos, las instrucciones simples son tratadas usando sólo un ciclo de reloj. Este ciclo sería el ciclo 2 del ejemplo anterior del Z80; el ciclo 1 deviene en opcional y sólo es utilizado cuando el programa cruza un límite de 256 bytes.


Todo esto se aplica a la RAM rápida usada en los MSX Turbo-R. El hardware externo, conectado por los slots de cartuchos, utiliza tiempos similares a los del Z80. Ni siquiera la [[ROM]] interna de los Turbo-R es suficientemente rápida para este esquema, por lo que su utilizan chips adicionales para copiar la ROM en RAM, para hacer que se ejecute más rapidamente.
Todo esto se aplica a la RAM rápida usada en los MSX Turbo-R. El hardware externo, conectado por los slots de cartuchos, utiliza tiempos similares a los del Z80. Ni siquiera la [[ROM]] interna de los Turbo-R es suficientemente rápida para este esquema, por lo que su utilizan chips adicionales para copiar la ROM en RAM, para hacer que se ejecute más rápidamente.
<!---
<!---
{{zilog}}
{{zilog}}
== Enlaces a Wikipedia ==
*{{w|en|R800}}
*{{w|es|R800}}
*{{w|ja|R800}}
--->
--->


[[Categoría:Microprocesadores]]
[[Categoría:Microprocesadores]]
[[Categoría:MSX]]
[[Categoría:MSX]]
[[en:R800]]
[[es:R800]]
[[ja:R800]]
[[nl:ASCII R800]]
[[ru:ASCII R800]]
[[ko:ASCII R800]]

Revisión actual - 14:41 7 ene 2008

Microprocesador RISC R800

El R800 es la CPU principal de los ordenadores domésticos MSX Turbo-R (tienen además como CPU secundaria un Zilog Z80A). Fue diseñado por ASCII Corporation de Japón, con el objetivo de tener la CPU más rápida posible, pero que mantuviera la compatibilidad con el hardware y software de los MSX existentes (basados en el Zilog Z80).

Para preservar la compatiblidad con el viejo software MSX, el R800 utiliza un superconjunto del conjunto de instrucciones del Z80. Además de todos los opcodes del Z80, se le añaden dos nuevas instrucciones de multiplicación, MULUB (8 bits), y MULUW (16 bits). Además, muchas de las instrucciones no documentadas del Z80 se convierten en oficiales, lo que incluye todos los opcodes que usan IX e IY como registros de 8 bits (IXh, IXl, IYh, IYl).

Puesto que el R800 no está basado directamente en el Z80, sino en la familia del Zilog Z800, le faltan varias otras prestaciones no documentadas del Z80. Por ejemplo, la bandera indocumentada representada por los bits 3 y 5 del registro F no asume los mismos valores que en un Z80 (siendo la causa de fallar en los test ZEXALL) y el opcode indocumentado llamado SLL es reemplazado por otro opcode indocumentado llamado TST.

En la parte hardware, se realizan cambios radicales. La ULA interna de 8 bits del Z80 es reemplazada por una nueva de 16 bits. Opcodes como ADD HL, BC, que anteriormente ocupaban 11 ciclos de reloj, pasan a durar sólo un ciclo en determinadas condiciones. La frecuencia de reloj máxima se incrementa a 7,16 MHz, el doble que los 3,57 MHz del Z80 usado en los MSX. El bus de datos permanece de 8 bits para mantener la compatibilidad con el viejo hardware.

Además se hicieron cambios en el modo en que la CPU trata los opcodes. El Z80 original usa 4 ciclos para tratar una instrucción simple como OR A, además de emplear un estado de espera adicional debido a la arquitectura MSX. Si revisamos el tratamiento del Z80 en un ambiente MSX comprenderemos mejor al R800:

  • Z80, ciclo 1: se establecen los 8 bits superiores de una dirección
  • Z80, ciclo 2: se establecen los 8 bits inferiores de una dirección
  • Z80, ciclo 3: estado de espera (waitstate)
  • Z80, ciclo 4: refresco, parte 1
  • Z80, ciclo 5: refresco, parte 2

Puesto que muchas implementaciones del MSX usan memoria RAM dispuesta en bloques de 256×256 bytes, se necesitan dos ciclos para componer la dirección a leer. El R800 evita esto recordando el último estado conocido de los 8 bits más altos. Si la siguiente instrucción está en el mismo bloque de 256 bytes, los 8 bits superiores no se direccionan, ahorrando un ciclo. Sin embargo en el Z80, los ciclos de refresco destruyen la información de los bits altos por lo que es necesario un trabajo adicional.

La solución implementada en el R800 es refrescar bloques enteros de RAM, en lugar de refrescar una línea de RAM por instrucción publicada. Cada 30 us (microsegundos), la CPU se detiene por 4us, y este tiempo es usado para refrescar un bloque de la RAM. Puesto que no hay refresco entre el direccionamiento de dos instrucciones, y el estado de espera (waitstate) es removido debido a los chips de RAM más rápidos, las instrucciones simples son tratadas usando sólo un ciclo de reloj. Este ciclo sería el ciclo 2 del ejemplo anterior del Z80; el ciclo 1 deviene en opcional y sólo es utilizado cuando el programa cruza un límite de 256 bytes.

Todo esto se aplica a la RAM rápida usada en los MSX Turbo-R. El hardware externo, conectado por los slots de cartuchos, utiliza tiempos similares a los del Z80. Ni siquiera la ROM interna de los Turbo-R es suficientemente rápida para este esquema, por lo que su utilizan chips adicionales para copiar la ROM en RAM, para hacer que se ejecute más rápidamente.