TI -990 - TI-990
TI-990 byla série 16-bitových minipočítačů prodávaných společností Texas Instruments (TI) v roce 1970 a 1980. TI-990 byla náhradou za dřívější minipočítačové systémy TI, TI-960 a TI-980. Měl několik jedinečných funkcí a programování bylo snazší než u jeho předchůdců. Mezi jeho základní koncepty patřila schopnost snadno podporovat multiprogramování pomocí softwarově přepínatelné sady registrů procesorů, které jí umožňovaly provádět rychlé přepínání kontextu mezi programy.
TI později implementoval TI-990 v jednočipové implementaci, TMS9900 , mezi prvními 16bitovými mikroprocesory . Určený pro použití v modelech nižší třídy TI-990, zachoval si model paměti 990 a systém hlavního paměťového registru. Tento design byl nakonec mnohem více široce používán v Texas Instruments TI-99/4A , kde detaily jeho paměťového modelu ve stylu minipočítače představovaly významné nevýhody.
Funkce
Pracovní prostory
Na TI-990 jsou registry uloženy v paměti a jsou odkazovány prostřednictvím pevného registru nazývaného ukazatel pracovního prostoru. Koncept pracovního prostoru spočívá v tom, že hlavní paměť byla založena na nových polovodičových čipech RAM, které TI vyvinul a běžel stejnou rychlostí jako CPU. To znamenalo, že nezáleželo na tom, zda „registry“ byly skutečné registry v CPU nebo zastoupeny v paměti. Když je ukazatel pracovního prostoru načten s adresou paměti, tato adresa je původem „registrů“.
V 990 jsou tři pevné registry; ukazatel pracovního prostoru (WP), programový čítač (PC) a stavový registr (ST). Kontextový přepínač znamenal uložení a obnovu pouze pevných registrů.
Prodloužená operace
TI-990 měl zařízení umožňující rozšířené operace pomocí zásuvného hardwaru. Pokud není k dispozici hardware, pasti procesoru umožňují softwaru provádět tuto funkci. Operační kód (XOP) povoluje 15 připojených zařízení v systému. I když je zařízení 15 podle konvence vyhrazeno pro použití jako vstup systémového volání pro uživatelské programy pro vyžádání systémových služeb.
Ortogonální instrukční sada
TI-990 používal docela ortogonální instrukční sadu . Základní formáty instrukcí umožňovaly instrukce s jedním, dvěma a třemi slovy. Model 990/12 CPU umožňoval čtyřslovnou instrukci s operacemi rozšířeného režimu.
Architektonické detaily
Obecné režimy adresování registrů
(R je obecný registr, 0 až 15.)
- 0. Register - hodnota je do nebo z registru: OPR R; R obsahuje operand
- 1. Nepřímý registr - registr se používá jako paměťová adresa pro čtení nebo zápis: OPR *R; R obsahuje adresu
- 2. Indexováno: OPR @MEM (R); R obsahuje hodnotu indexu, R0 se nepoužívá při indexování a umožňuje přímé adresování paměti
- 3. Automatické zvyšování: OPR *R+; R obsahuje adresu adresy, poté R zvýší o délku typu operandu
Několik registrů mělo speciální použití, která si vyhrazují použití, registr a jejich použití jsou:
- R0 - čítač řazení, čítač rozšířeného režimu, plovoucí desetinná čárka AC -0
- R1 - plovoucí desetinná čárka AC -1
- R2 - plovoucí desetinná čárka AC -2
- R3 - plovoucí desetinná čárka AC -3
- R11 - ukazatel XOP (režim jádra), zpětná vazba
- R12 - základní adresa CRU (režim jádra)
- R13 - Uložený ukazatel pracovního prostoru
- R14 - Počítadlo uložených programů
- R15 - uložený stav
Pokyny TI-990
Instrukční sady 990/4, 990/5, 990/9 sestávaly ze 69 instrukcí, 990/10 měla 72 instrukcí, 990/10A měla 77 instrukcí a 990/12 měla 144 instrukcí. Pokyny jsou rozděleny do typů, které mají podobné vlastnosti.
První část slova určuje operaci, která má být provedena, zbývající dvě části poskytují informace pro vyhledání operandů.
- MOV (přesunout slovo)
- MOVB (přesunout bajt)
- A (přidat slovo)
- AB (přidat bajt)
- S (odečíst slovo)
- SB (odečíst bajt)
- C (porovnat slovo)
- CB (porovnat bajt)
- SZC (nastavit nuly odpovídající slovo)
- SZCB (nastavit nuly odpovídající byte)
- SOC (nastavit odpovídající slovo)
- SOCB (nastavit ty odpovídající byte)
První část slova určuje operaci, která má být provedena, druhá část je relativní offset k tomu, kam jít, pro instrukce JMP, nebo relativní offset pro bitové adresování CRU.
- JMP (skok bezpodmínečně)
- JLT (skok, pokud je menší než nula)
- JLE (skok, pokud je menší nebo roven nule)
- JEQ (skok, pokud je nula)
- JHE (skok, pokud je logicky větší nebo roven nule)
- JGT (skok, pokud je větší než nula)
- JNE (skok, pokud není roven nule)
- JNC (skok při nošení volný)
- JOC (skok, pokud je přenášen)
- JNO (skok, pokud je přetečení jasné)
- JOP (skok, pokud lichá parita - relevantní pouze po bajtových operacích)
- JL (skok, pokud je logicky menší než nula)
- JH (skok, pokud je logicky větší než nula)
- SBO (nastavit bit CRU na jeden)
- SBZ (nastavit bit CRU na nulu)
- TB (test CRU bit)
Jedna část slova určuje operaci, druhá část poskytuje registr, třetí část poskytuje informace pro vyhledání druhého operandu.
- COC (porovnat odpovídající)
- CZC (porovnat odpovídající nuly)
- XOR (exkluzivní nebo)
- XOP (rozšířený provoz)
První část slova určuje operaci, která má být provedena, druhá část je bitová šířka operace, třetí část poskytuje informace pro lokalizaci druhého operandu.
- LDCR (načíst CRU)
- STCR (uložit CRU)
První část slova určuje operaci, která má být provedena, druhá část je počet posunů, třetí část určuje registr, který se má posunout.
- SRA (aritmetika posunu doprava)
- SRL (posun doprava logický)
- SLA (posun doleva aritmetika)
- SRC (posun vpravo kruhový)
První část určuje operaci, která má být provedena, druhá část poskytuje informace pro vyhledání druhého operandu.
- BLWP (ukazatel pracovního prostoru větve a načtení)
- B (větev)
- X ( spustit )
- CLR (jasné slovo)
- NEG (dvojice neguje komplement)
- INV (doplněk jedniček)
- INC (přírůstek)
- INCT (přírůstek o dva)
- DEC (dekrement)
- DECT (snížení o dva)
- BL (větev a odkaz)
- ABS (absolutní hodnota)
- SWPB (swap bytes)
- SETO (nastavit slovo na jedničky)
- LDS (dálkový zdroj, 990/10, 990/10A, 990/12)
- LDD (cíl na dlouhé vzdálenosti, 990/10, 990/10A, 990/12)
- BIND (nepřímá větev, 990/10A, 990/12)
- MPYS (vícenásobně podepsané, 990/10A, 990/12)
- DIVS (rozdělené podepsáno, 990/10A, 990/12)
- AR (přidat skutečný, 990/12)
- CIR (převést celé číslo na skutečné, 990/12)
- SR (odečíst skutečný, 990/12)
- MR (násobit skutečný, 990/12)
- DR (dělit skutečný, 990/12)
- LR (skutečné zatížení, 990/12)
- STR (uložit skutečné, 990/12)
- AD (přidat dvojitý, 990/12)
- CID (převést celé číslo na dvojnásobek, 990/12)
- SD (odečíst dvojnásobek, 990/12)
- MD (násobení dvojnásobek, 990/12)
- DD (dvojité dělení, 990/12)
- LD (dvojité zatížení, 990/12)
- STD (dvojité úložiště, 990/12)
Slovo určovalo operaci, která má být provedena.
- IDLE (CPU nečinný)
- RSET (reset CPU)
- RTWP (ukazatel zpětného pracovního prostoru)
- CKON (hodiny zapnuté)
- CKOF (hodiny vypnuté)
- LREX (načíst ROM a spustit)
- EMD (provést mikro diagnostiku, 990/12)
- EINT (povolit přerušení, 990/12)
- DINT (deaktivovat přerušení, 990/12)
- CRI (převést skutečné na celé číslo, 990/12)
- CDI (převést dvojité na celé číslo, 990/12)
- NEGR (negate real, 990/12)
- NEGD (negate double, 990/12)
- CRE (převést reálné na rozšířené celé číslo, 990/12)
- CDE (převést dvojité na rozšířené celé číslo, 990/12)
- CER (převést rozšířené celé číslo na skutečné, 990/12)
- CED (převést rozšířené celé číslo na dvojnásobek, 990/12)
- XIT (exit floating point - nop, 990/12)
První část určuje operaci, druhá část určuje registr nebo masku. Třetí část, pokud je k dispozici, určuje okamžitý operand ve druhém slově.
- LIMI (okamžitá maska přerušení načítání)
- LI (okamžité načtení)
- AI (přidat okamžitě)
- ANDI (a bezprostředně)
- ORI (nebo bezprostředně)
- CI (okamžitě porovnat)
- STWP (ukazatel pracovního prostoru obchodu)
- STST (stav obchodu)
- LWPI (ukazatel pracovního prostoru načíst okamžitě)
- BLSK (okamžitý odkaz větve na zásobník, 990/12)
Jedna část slova určuje operaci, druhá část poskytuje registr, třetí část poskytuje informace pro vyhledání druhého operandu.
- MPY (násobení bez znaménka)
- DIV (bez znaménka)
První část určuje operaci, druhá část určuje soubor mapy (0 = jádro, 1 = uživatel) a třetí určuje registr. Tato instrukce byla podporována u 990/10, 990/10A a 990/12.
- LMF (načíst soubor mapy)
První slovo je operační kód; první část druhého slova je pole počtu bajtů, druhá část je cílový operand a třetí část je zdrojový operand. Tyto pokyny jsou podporovány na 990/12.
- NRM (normalizovat)
- RTO (správný test pro ty)
- LTO (test vlevo pro jedničky)
- CNTO (počet jedniček)
- BDC (binární převod na desítkové)
- DBC (desítkové na binární převod)
- SWPM (swap multiple)
- XORM (x nebo násobek)
- ORM (nebo více)
- ANDM (a více)
- SM (odečíst více)
- AM (přidat více)
První část prvního slova je operační kód, druhá část prvního slova označuje registr kontrolního bodu; první část druhého slova je pole počtu bajtů, druhá část je cílový operand a třetí část je zdrojový operand. Tyto pokyny byly podporovány na 990/12.
- SNEB (vyhledávací řetězec pro nerovný bajt)
- CRC (cyklický výpočet redundančního kódu)
- TS (překladový řetězec)
- CS (porovnat řetězec)
- SEQB (vyhledávací řetězec pro stejný bajt)
- MOVS (přesunout řetězec)
- MVSR (přesunutí řetězce obráceno)
- MVSK (přesunutí řetězce ze zásobníku)
- POPS (popový řetězec ze zásobníku)
- PSHS (push string to stack)
První slovo je operační kód; první část druhého slova je pole počtu bajtů, druhá část je počet posunů a třetí část je zdrojový operand. Tyto pokyny jsou podporovány na 990/12.
- SRAM (posun vpravo aritmetický násobek)
- SLAM (posunutí aritmetického násobku doleva)
První slovo je operační kód; první část druhého slova je pole pozice a druhá část je zdrojový operand. Tyto pokyny jsou podporovány na 990/12.
- TMB (testovací paměťový bit)
- TCMB (bit pro testování a vymazání paměti)
- TSMB (otestovat a nastavit bit paměti)
První část prvního slova je operační kód, druhá část prvního slova označuje šířku; první část druhého slova je pozice, druhá část je zdrojový operand. Tato instrukce byla podporována na 990/12.
- IOF (obrácené pořadí polí)
První část prvního slova je operační kód, druhá část prvního slova označuje šířku; první část druhého slova je pozice, druhá část je cílový operand a třetí část je zdrojový operand. Tyto pokyny jsou podporovány na 990/12.
- INSF (vložte pole)
- XV (hodnota extraktu)
- XF (extrahovat pole)
První slovo je operační kód; první část druhého slova je pole hodnoty a druhá část je registr a třetí část je relativní posun. Tyto pokyny jsou podporovány na 990/12.
- SRJ (odečtěte hodnotu z registru a skoku)
- ARJ (přidaná hodnota pro registraci a skok)
První část slova je operační kód a druhá část je specifikace registru. Tyto pokyny jsou podporovány na 990/12.
- STPC (uložit počítač do registru)
- LIM (maska přerušení načítání z registru)
- LST (registr stavu zatížení)
- LWP (ukazatel pracovního prostoru načtení)
- LCS (úložiště řízení zátěže)
První slovo je operační kód; první část druhého slova je cílový operand a druhá část je zdrojový operand. Tato instrukce byla podporována na 990/12.
- MOVA (přesunout adresu)
První slovo je operační kód; první část druhého slova je pole kódu podmínky, druhá část je cílový operand a třetí část je zdrojový operand. Tyto pokyny jsou podporovány na 990/12.
- SLSL (logická adresa seznamu vyhledávání)
- SLSP (fyzická adresa seznamu vyhledávání)
První část prvního slova je operační kód, druhá část prvního slova určuje délku cíle; první část druhého slova určuje délku zdroje, druhá část je cílový operand a třetí část je zdrojový operand. Tato instrukce byla podporována na 990/12.
- EP (prodloužení přesnosti)
Příklad programování v jazyce Assembly
Kompletní program „ Hello, world! “ V assembleru TI-990, který poběží pod DX10 :
IDT 'HELLO' TITL 'HELLO - hello world program' * DXOP SVC,15 Define SVC TMLUNO EQU 0 Terminal LUNO * R0 EQU 0 R1 EQU 1 R2 EQU 2 R3 EQU 3 R4 EQU 4 R5 EQU 5 R6 EQU 6 R7 EQU 7 R8 EQU 8 R9 EQU 9 R10 EQU 10 R11 EQU 11 R12 EQU 12 R13 EQU 13 R14 EQU 14 R15 EQU 15 * DATA WP,ENTRY,0 * * Workspace (On the 990 we can "preload" registers) * WP DATA 0 R0 DATA 0 R1 DATA >1600 R2 - End of program SVC DATA >0000 R3 - Open I/O opcode DATA >0B00 R4 - Write I/O opcode DATA >0100 R5 - Close I/O opcode DATA STRING R6 - Message address DATA STRLEN R7 - Message length DATA 0 R8 DATA 0 R9 DATA 0 R10 DATA 0 R11 DATA 0 R12 DATA 0 R13 DATA 0 R14 DATA 0 R15 * * Terminal SVC block * TRMSCB BYTE 0 SVC op code (0 = I/O) TRMERR BYTE 0 Error code TRMOPC BYTE 0 I/O OP CODE TRMLUN BYTE TMLUNO LUNO TRMFLG DATA 0 Flags TRMBUF DATA $-$ Buffer address TRMLRL DATA $-$ Logical record length TRMCHC DATA $-$ Character count * * Message * STRING TEXT 'Hello world!' BYTE >D,>A STRLEN EQU $-STRING EVEN PAGE * * Main program entry * ENTRY MOVB R3,@TRMOPC Set open opcode in SCB SVC @TRMSCB Open terminal MOVB @TRMERR,R0 Check for error JNE EXIT MOVB R4,@TRMOPC Set write opcode MOV R6,@TRMBUF Set buffer address MOV R7,@TRMLRL Set logical record length MOV R7,@TRMCHC and character count SVC @TRMSCB Write message MOVB @TRMERR,R0 Check for error JNE CLOSE CLOSE MOVB R5,@TRMOPC Set close opcode SVC @TRMSCB Close terminal EXIT SVC R2 Exit program * END
Výše uvedené si můžete sami vyzkoušet na simulátoru TI-990. Simulátor Dave Pitts sim990 simuluje TI-990 a obsahuje softwarové sady pro nativní operační systémy (včetně DX10).
Následující program je samostatná verze, která tiskne na sériový terminál připojený k adrese CRU 0. Ilustruje propojení I/O CRU a pracovního prostoru pro podprogram PRINT.
IDT 'HELLO' TITL 'HELLO - hello world program' * R0 EQU 0 R1 EQU 1 R2 EQU 2 R3 EQU 3 R4 EQU 4 R5 EQU 5 R6 EQU 6 R7 EQU 7 R8 EQU 8 R9 EQU 9 R10 EQU 10 R11 EQU 11 R12 EQU 12 R13 EQU 13 R14 EQU 14 R15 EQU 15 * * Terminal CRU bits * TRMCRU EQU >0 Terminal device address XMIT EQU 8 DTR EQU 9 RTS EQU 10 WRQ EQU 11 RRQ EQU 12 NSF EQU 13 * PAGE * * Main program entry * ENTRY LWPI WP Load our workspace pointer BLWP @PRINT Call our print routine DATA STRING DATA STRLEN IDLE * WP BSS 32 Main program workspace * * Message * STRING TEXT 'Hello world!' BYTE >D,>A STRLEN EQU $-STRING EVEN PAGE * * Print a message * PRINT DATA PRWS,PRENT PRENT EQU $ MOV *R14+,R2 Get buffer address MOV *R14+,R1 Get message length SBO DTR Enable terminal ready SBO RTS PRI010 LDCR *R2+,8 Send out a character TB WRQ Wait until done JNE $-2 SBZ WRQ DEC R1 JGT PRI010 RTWP * PRWS DATA 0,0,0,0,0,0,0,0 DATA 0,0,0,0,TRMCRU,0,0,0 * END ENTRY
Modely TI-990
Procesory TI-990 spadaly do několika přirozených skupin v závislosti na původním návrhu, na kterém jsou založeny, a které I/O sběrnici použili.
Všechny modely podporovaly komunikační registrační jednotku (CRU), což je sériově bitově adresovatelná I/O sběrnice. Na modelech vyšší třídy byla podporována také sběrnice TILINE I/O, která je podobná populárnímu UNEC autobusu DEC . TILINE také podporoval vztah master/slave, který umožňoval více CPU desek ve společném šasi s arbitrážním řízením.
Modely TILINE/CRU
Následující modely používaly jako hlavní velkokapacitní sběrnici TILINE:
- TI-990/5 - mikroprocesor TMS-9900 s pamětí 64 kB
- TI-990/10-procesor TTL s podporou mapování paměti na 2 miliony bajtů paměti ECC
- TI-990/10A-mikroprocesor TMS-99000 s podporou mapování paměti na 1 MB bytů paměti
- TI-990/12-Schottky TTL procesor s mapováním paměti na 2M bajtů paměti ECC, ukládání do mezipaměti pracovního prostoru, hardwarová plovoucí desetinná čárka, pokyny pro rozšířený režim a zapisovatelný úložný prostor řízení
Modely pouze pro CRU
Následující modely používaly CRU jako hlavní sběrnici:
Operační systémy
Pro TI-990 bylo k dispozici několik operačních systémů
Od TI:
Od třetích stran:
Prameny
externí odkazy
- Stránka Dave Pitts 'TI 990 - obsahuje simulátor, cross assembler, cross linker, utility a obrázky operačního systému.
- Překladač SCI 990 do COBOL
- ti990.co.uk v internetovém archivu Stránka s podrobnostmi o zachování a restaurování minipočítačů řady TI 990