dbo:abstract
|
- El R800 es la CPU principal de los ordenadores domésticos (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 ) 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 4 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 solo 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 solo un ciclo de reloj. Este ciclo sería el ciclo 2 del ejemplo anterior del Z80; el ciclo 1 deviene en opcional y solo 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.
* Datos: Q1143490 (es)
- The R800 is the central processing unit used in the MSX Turbo-R home computer. The R800 was designed by ASCII Corporation of Japan and built by Mitsui & Co The goal was a modern and pipelined CPU binary compatible with the Z80, and therefore with MSX software, while also maintaining compatibility with older MSX Z80-based hardware. (en)
- R800은 1990년 아스키 사(ASCII Corporation)에서 개발한 Z80 호환 16비트 CPU로 에 사용되었다. (ko)
- L'ASCII R800 era un microprocessore a 16 bit prodotto da ASCII Corporation (Giappone) nel 1990 che fu usato come CPU nell'home computer MSX Turbo-R. Fu progettato con 2 obiettivi: realizzare la CPU più performante possibile mantenendo però la retrocompatibilità con l'hardware ed il software dei precedenti computer MSX basati sullo Zilog Z80. Per raggiungere quest'ultimo obiettivo l'R800 utilizzava un superinsieme del set di istruzioni dello Z80: in aggiunta a tutti gli opcode di questo, erano aggiunte 2 istruzioni per la moltiplicazione, MULUB (8 bit) e MULUW (16 bit), e tutte le istruzioni non documentate dello Z80 erano state rese ufficiali, compresi gli opcode che gestivano i registri IX e IY come contenitori ad 8 bit (IXh, IXl, IYh, IYl). Siccome l'R800 non era basato direttamente sullo Z80 ma derivava dalla famiglia dello Z800, non aveva alcune delle caratteristiche non documentate dello Z80, come, ad esempio, i flag nei bit 3 e 5 del registro F che non assumevano lo stesso valore di quelli dello Z80 (facendo così fallire i test di compatibilità ZEXALL); inoltre, l'opcode non documentato SLL era sostituito da un altro opcode non documentato chiamato TST. Sul lato costruttivo l'R800 era radicalmente differente: l'ALU ad 8 bit dello Z80 era stata sostituita da una nuova unità aritmetica a 16 bit. Come risultato di tale cambiamento gli opcode relativi alle operazioni matematiche, quali ADD HL, BC, che nella vecchia unità richiedevano 11 cicli per la loro esecuzione, potevano essere eseguiti in 1 solo ciclo (in determinate condizioni). Il clock era di 7,16 MHz, il doppio rispetto a quello dello Z80 dei precedenti MSX (3,57 MHz). Il bus dati rimaneva ad 8 bit per motivi di retrocompatibilità con il vecchio hardware. Fu modificato anche il modo in cui la CPU gestiva gli opcode. Nello Z80 erano richiesti 4 cicli per eseguire una semplice istruzione quale OR A, e nell'architettura MSX era presente anche uno stato d'attesa aggiuntivo. Per capire questa evoluzione del meccanismo di gestione degli opcode dell'R800 rispetto allo Z80 bisogna rivedere come tale gestione operava nell'architettura MSX:
* Z80, ciclo 1: la CPU impostava gli 8 bit più alti dell'indirizzo (la parte H dei registri)
* Z80, ciclo 2: la CPU impostava gli 8 bit più bassi dell'indirizzo (la parte L dei registri)
* Z80, ciclo 3: attesa
* Z80, ciclo 4: refresh, parte 1
* Z80, ciclo 5: refresh, parte 2 Dato che molte implementazioni dell'MSX usavano la RAM a blocchi di 256×256 byte, erano richiesti 2 cicli per impostare l'indirizzo da gestire. L'R800 eliminava questo difetto ricordando l'ultimo stato noto degli 8 bit più alti: se l'istruzione successiva operava nello stesso blocco di 256 byte gli 8 bit più alti non venivano impostati, saltando un ciclo. C'era però da risolvere un altro problema: il ciclo di refresh, sullo Z80, distruggeva le informazioni della parte alta per cui doveva essere studiato un metodo per aggirare questa cosa. La soluzione utilizzata nell'R800 fu quella di fare il refresh di un intero blocco di RAM piuttosto che una singola linea di RAM per ogni istruzione eseguita. Ogni 30 μs la CPU viene fermata per 4 µs durante i quali viene eseguito il refresh di un blocco di memoria. Siccome non c'è refresh tra l'esecuzione di 2 istruzioni e lo stato d'attesa è rimosso per velocizzare le risposte dei chip RAM, le istruzioni semplici possono essere eseguite impiegando solo 1 ciclo: nell'esempio precedente, questo periodo sarebbe stato sullo Z80 di 2 cicli. Il ciclo 1 diventa opzionale ed è eseguito solo quando il programma esce dai confini di un blocco da 256 byte di memoria. La soluzione descritta si applicava solo alla memoria RAM usata sull'MSX TurboR: l'hardware esterno, connesso tramite le porte per le cartucce, utilizzava timing simili a quelli dello Z80. Neanche la ROM interna del TurboR era tanto veloce da poter reggere questo schema di funzionamento per cui i chip addizionali del TurboR venivano replicati su RAM così da rendere l'accesso ai dati più veloci. (it)
- R800は、1990年に株式会社アスキーが開発し、アスキー三井物産セミコンダクタ株式会社(当時)が製造した、Z80バイナリ互換の命令セットを持つ16ビットプロセッサ。MSX turboRのCPUに採用された。外部ハードウェアデータバスは8ビットであり、DRAMインターフェイス、割込み制御、DMAコントローラーなどを備える。 (ja)
- De R800 is een door het Japanse ASCII ontwikkelde processor, die werd toegepast in MSX turbo-R-computers. De belangrijkste doelstelling tijdens de ontwerpfase was het ontwerpen van de snelst mogelijke processor maar met behoud van compatibiliteit met de Z80-processor, aangezien deze tot dan toe in MSX-hard- en software werd toegepast. Om softwarecompatibiliteit met MSX-software te behouden maakt de R800 gebruik van een superset van de Z80-instructieset. Naast alle bestaande Z80-opcodes werden twee vermenigvuldigingsinstructies toegevoegd, namelijk MULUB (8-bits) en MULUW (16-bits). Verder werden veel van de ongedocumenteerde Z80-instructies officieel gemaakt, waaronder zowel alle opcodes met betrekking tot IX en IY als 8-bits registers (IXh, IXl, IYh, IYl). Aangezien de R800 niet rechtstreeks op Z80 is gebaseerd maar feitelijk afstamt van de Z800-familie, ontbreken enkele van de andere ongedocumenteerde Z80 eigenschappen. Bijvoorbeeld, de ongedocumenteerde vlaggen in bit 3 en 5 van het F-register representeren niet dezelfde waarden als bij Z80 (dit veroorzaakt het mislukken van de ZEXALL-test) en de niet-gedocumenteerde opcode, vaak SLL genoemd is vervangen door een andere niet-gedocumenteerde opcode, TST. Aan de hardwarezijde werden radicale wijzigingen doorgevoerd. De interne 8-bits ALU van de Z80 werd vervangen door een 16-bits ALU. Opcodes als ADD HL,BC, die eerder 11 klokcycli in beslag namen kunnen nu, onder bepaalde voorwaarden, in slechts één cyclus worden uitgevoerd. Tevens werd de maximale kloksnelheid van de processor verhoogd naar 7,16 MHz, tweemaal zo snel als de oorspronkelijke snelheid van 3,56 MHz van de in MSX toegepaste Z80-processor. De gegevensbus bleef echter 8-bits om de compatibiliteit met oude hardware te behouden. Additionele wijzigingen werden aangebracht in de wijze waarop de processor opcodes ophaalt. De oorspronkelijke Z80 gebruikt 4 cycli om een eenvoudige instructie als OF op te halen, en een extra waitstate wordt uitgegeven op de MSX-architectuur. Een overzicht van het Z80-fetchmechanisme in een typische MSX-omgeving is noodzakelijk om de R800 te doorgronden:
* Z80, cyclus 1: instellen van de hogere 8 bits van het adres
* Z80, cyclus 2: instellen van de lagere 8 bits van het adres
* Z80, cyclus 3: waitstate
* Z80, cyclus 4: verversing, deel 1
* Z80, cyclus 5: verversing, deel 2 Aangezien de meeste MSX-toepassingen het RAM-geheugen gebruiken in een 256 × 256 bytesblokswijze, zijn twee cycli vereist om het adres voor de fetch te plaatsen. De R800 omzeilt dit door het onthouden van de laatst bekende status van de hogere 8 bits. Indien de volgende instructie in hetzelfde 256-byte-gebied plaatsvindt, worden deze hogere 8 bits niet geplaatst en wordt aldus een cyclus bespaard. Nochtans, op de Z80 vernietigen de ververscycli de informatie over de hogere bits, zodat een alternatieve actie noodzakelijk is. De oplossing die de R800 voor dit probleem toepast is het verversen van volledige geheugenblokken van het RAM-geheugen in plaats van het verversen van slechts RAM-regel bij het uitvoeren van iedere instructie. Elke 30μs wordt de processor voor 4μs opgehouden, een tijd die benut wordt om een blok RAM-geheugen te verversen. Aangezien er geen verversing plaatsvindt tussen ophaalinstructies (fetchinstructies) en de waitstate vanwege snellere RAM-chips achterwege blijft, kunnen de eenvoudige instructies in slechts één cyclus worden opgehaald. Deze cyclus zou in het hierboven weegegeven Z80-voorbeeld cyclus 2 zijn; cyclus 1 werd facultatief en wordt slechts uitgegeven wanneer het programma een 256-bytegrens kruist. Elk van de genoemde voorbeelden is slechts van toepassing op het snelle RAM-geheugen dat door de MSX turbo-R wordt gebruikt. Externe hardware, verbonden middels de cartridgesleuven, maakt gebruik van een timing die vergelijkbaar is met die van de Z80. Zelfs het interne RAM-geheugen van de MSX turbo-R is niet snel genoeg voor deze ophaalregeling, waardoor, op de MSX turbo-R aanwezige, extra geheugenchips de ROM-inhoud kunnen spiegelen naar het RAM-geheugen met als doel het geheel sneller te kunnen uitvoeren. (nl)
- ASCII R800 — частично 16-разрядный микропроцессор, разработанный компанией ASCII на основе Zilog Z800 и производимый ею специально для бытовых компьютеров стандарта . Основной целью создания процессора было получение максимальной производительности при сохранении обратной совместимости со старым программным и аппаратным обеспечением компьютеров стандарта MSX, использующих микропроцессор Zilog Z80. Для сохранения программной совместимости со старым программным обеспечением MSX, R800 использует расширенную систему команд процессора Z80. В обычный набор команд Z80 добавлены операции аппаратного умножения — MULUB (8-разрядное), и MULUW (16-разрядное). Также, многие из недокументированных возможностей Z80 сделаны официальными, например, операции с 8-разрядными половинами индексных регистровых пар (IXh, IXl, IYh, IYl). R800 является развитием процессоров Z800 (16-разрядные микропроцессоры совместимые с Z80), но в нём отсутствуют некоторые недокументированные возможности Z80. Например, состояние бит 3 и 4 флагового регистра F не соответствует состоянию этих бит для процессора Z80 (что приводит к непрохождению R800 теста ZEXALL). Также, недокументированная команда, обычно называемая SLL, заменена другой командой — TST, также недокументированной. Значительные изменения произошли с аппаратной стороны. Внутреннее 4-разрядное АЛУ процессора было заменено новым, 16-разрядным. Операции типа ADD HL,BC (сложение регистровых пар), выполнение которых ранее требовало 11 тактов, при определённых условиях могут выполняться на R800 за один такт. Максимальная тактовая частота повышена до 7.16 МГц, это вдвое больше по сравнению со стандартной частотой 3.57 МГц, на которой работал процессор Z80 в компьютерах MSX. Шина данных осталась 8-разрядной, для сохранения совместимости со старым аппаратным обеспечением. Дополнительные изменения были произведены в механизме выборки кода операции. Оригинальный Z80 использует 4 такта для выборки кода простых команд, типа OR A, в компьютерах MSX также добавляется один такт ожидания из-за особенностей их архитектуры. Механизм выборки для Z80 в типичном окружении MSX выглядит следующим образом:
* Z80, такт 1: установка старших 8 разрядов текущего адреса выполнения
* Z80, такт 2: установка младших 8 разрядов текущего адреса выполнения
* Z80, такт 3: такт ожидания
* Z80, такт 4: выборка кода команды, часть 1
* Z80, такт 5: выборка кода команды, часть 2 Так как большинство реализаций ОЗУ в компьютерах MSX имеют организацию в виде блока 256 x 256 байт, на установку адреса команды затрачивается два такта. R800 запоминает состояние старших 8 разрядов адреса, что позволяет экономить один такт в случае, если адрес следующей команды не пересекает границу 256-байтного блока. Однако, на процессоре Z80 значения старших 8 разрядов адреса теряются в процессе регенерации ОЗУ, что также требует решения. Решение, применённое на R800, представляет собой использование регенерации целых блоков ОЗУ, вместо регенерации одной строки при выполнении каждой инструкции. Каждые 30 микросекунд происходит останов процессора на 4 микросекунды, в течение которых выполняется регенерация блока ОЗУ. В этом случае не требуется выполнения процесса регенерации при обработке каждой команды. За счёт этого, а также из-за использования более быстродействующего ОЗУ, не требующего введения такта ожидания, простые команды могут выполняться всего за один такт. Однако, такое быстродействие может быть получено только при выполнении программы в ОЗУ компьютеров MSX Turbo R. Все обращения к внешней аппаратуре, например к устройствам, подключённым к слотам картриджа, требуют столько же времени, сколько и для процессора Z80. ПЗУ, используемое в Turbo R, также не обладает достаточным быстродействием для реализации подобной схемы выборки инструкций, поэтому, для повышения скорости выполнения кода из ПЗУ, его содержимое с помощью дополнительной аппаратуры Turbo R копируется в ОЗУ. (ru)
|