R800 | |
![]() | |
Gyártó | ASCII Corporation |
Az R800 az MSX Turbo-R otthoni számítógépekben használt fő CPU (másodlagos CPU-ként ugyanis ezekben a gépekben egy Zilog Z80A is van). Az R800-at a japán ASCII Corporation és a Mitsui & Co gyártotta 1990-től, az MSX számítógépsorozat 1993-as megszűnéséig. A cél a lehető leggyorsabb CPU megalkotása volt ezekhez a gépekhez, amely kód szinten kompatibilis a Zilog Z80-as processzorával, egyaránt fenntartva a meglévő MSX szoftverek és a régebbi MSX Z80-alapú hardverek kompatibilitását, és ezt az R800-ban egy új futószalagos megoldással érték el.
A fejlesztés történetéről igen kevés információ látott napvilágot, mert a japán vállalati kultúrától idegen az információk széles körű megosztása. Az ASCII Corporation az MSX Turbo R fejlesztése során több különböző – a Z80-nal kompatibilis és nem kompatibilis – processzort vizsgált meg lehetséges jelöltként. Abban az időben Kisioka Kazuja (岸岡和也; Hepburn: Kishioka Kazuya ), a cég alkalmazottja egy alkalmazásspecifikus integrált áramkört (ASIC) kutatott és fejlesztett, amely a Z80 nagy sebességű változata volt, és nagyrészt az MSX architektúrára lett szabva.[1]
A régebbi MSX szoftverekkel való szoftverkompatibilitás érdekében az R800 utasításkészlete tartalmazza a Z80-as processzor összes utasítását, ezen kívül a Z80 nem dokumentált / nem hivatalos utasításait hivatalossá tették, és a processzorban néhány új utasítást is megvalósítottak: 8×8 bites és 16×16 bites szorzóutasításokat, különböző címzésekkel, amelyek a MULUB
(bájtos, 8 bites szorzás) és a MULUW
(szavas, 16 bites szorzás) jelöléseket kapták.[2] A megvalósított, korábban nem hivatalos opkódok között találhatók az eredetileg oszthatatlan 16 bites IX és IY regisztereket két 8 bites regiszterként (IXH, IXL, IYH, IYL) kezelő utasítások.[3]
Mivel az R800 nem közvetlenül a Z80-on alapul, hanem a Z800 családra épül, hiányzik belőle számos más, nem dokumentált Z80 funkció. Például az F
regiszter 3. és 5. bitje, melyek eredetileg nem dokumentált jelzőbitek, nem ugyanazokat az értékeket veszik fel, mint a Z80-ban (emiatt a ZEXALL kompatibilitási teszt sikertelen ennél a processzornál), és az SLL
nevű dokumentálatlan műveleti kódot egy másik, TST
nevű dokumentálatlan műveleti kód váltja fel, illetve ez az SLA
utasítás szinonimája.
Újabb kialakítás lévén, az R800 implementációja nagyon eltért a régi Z80-asétól. A változtatások hasonlóak voltak a Z800, Z280, Z380 és eZ80 sorozatú Z80-kompatibilis processzorokban történtekhez. Az eredeti Z80 egy szokatlan, belsőleg 4 bites ALU hardvert használ (bővebben ld.: Z80 ALU),[4] és érdekes módon ez a megoldás valóban képes versenyezni a hasonló, de teljes 8 bites hardverfelépítésű ALU logikát alkalmazó CPU-kkal (ilyen például közvetlen elődje, az Intel 8080[5]). Az R800 tervezői azonban egy valódi 16 bites ALU-t implementáltak, hogy az lépést tudjon tartani a processzor nagyobb mértékben futószalagos utasításvégrehajtásával. Az olyan utasítások, mint az ADD HL,BC
, amelyek korábban 11 órajelciklust vettek igénybe a Z80-on, bizonyos feltételek mellett akár egy buszciklus (1-2 órajel) alatt is végrehajthatóak az R800-on, mivel ebben a teljes szélességű ALU lehetővé teszi a futószalagos működést. Az új MSX maximális CPU-órajele 14,32 MHz volt – négyszer olyan gyors, mint az eredeti MSX modellekben használt Z80 3,57 MHz-es órajele, míg a sín órajelét 7,16 MHz-re növelték. A adatsín továbbra is 8 bites maradt, a régi hardverrel való kompatibilitás fenntartása érdekében.
További változtatásokat hajtottak végre a CPU műveleti kódok kezelésének módjában is.
Az eredeti Z80 két ciklust használ az olyan egyszerű utasítások lekéréséhez, mint az OR A
, és két ciklust a frissítéshez. Az MSX architektúrában egy további várakozási állapot kerül kiadásra. A Z80-as feldolgozás MSX környezetben történő áttekintése mutatja az R800-as működését:
Mivel az MSX legtöbb megvalósítása 256×256 bájtos blokkokba szervezett RAM-ot használ, az olvasandó cím összeállításához két ciklusra van szükség. Az R800 ezt úgy kerüli el, hogy megjegyzi a címek felső 8 bites részének utolsó ismert állapotát. Ha a következő utasítás ugyanabban a 256 bájtos blokkban van, akkor a felső 8 bitet nem kell címezni, így egy ciklus megtakarítható. Azonban a Z80-on a frissítési ciklusok megsemmisítik a felső bitekben lévő információt, ezért kerülő megoldásra volt szükség.[6]
Az R800-ban alkalmazott megoldás a RAM teljes blokkjainak frissítése volt, ahelyett, hogy minden egyes utasításnál egy sornyi RAM-ot frissítene a processzor. 30 μs-onként a CPU 4 μs-os szünetet tart, és ezt az időt a RAM egy blokkjának frissítésére használja fel. Mivel nincs frissítés két utasítás címzése között, és a várakozási állapot a gyorsabb RAM csipek miatt megszűnik, az egyszerű utasítások kezelése csak egy órajelciklust vesz igénybe. Ez a ciklus a fenti Z80 példában a 2. ciklus lenne; az 1. ciklus opcionálissá válik, és csak akkor kerül kiadásra, ha a program átlép egy 256 bájtos határt.
Mindez csak az MSX Turbo-R-ben használt gyors RAM-ra vonatkozik. A bővítőkazetta-foglalatokon keresztül csatlakoztatható külső hardver a Z80-hoz hasonló időzítéseket használ. Még a Turbo-R belső ROM-ja sem elég gyors ehhez a rendszerhez, ezért a Turbo-R további csipjei képesek a ROM tartalmát a RAM-ba tükrözni (másolni), a gyorsabb működés érdekében.