TI -990 - TI-990

Panel programátorů 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.

Zadejte pokyny 1

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)
Zadejte pokyny 2

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)
Zadejte pokyny 3

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)
Zadejte pokyny 4

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)
Zadejte pokyny 5

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ý)
Zadejte pokyny 6

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)
Zadejte pokyny 7

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)
Zadejte pokyny 8

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)
Zadejte pokyny 9

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)
Instrukce typu 10

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)
Zadejte pokyny 11

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)
Zadejte pokyny 12

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)
Zadejte pokyny 13

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)
Zadejte pokyny 14

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)
Instrukce typu 15

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í)
Zadejte pokyny 16

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)
Zadejte pokyny 17

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)
Zadejte pokyny 18

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)
Instrukce typu 19

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)
Zadejte 20 pokynů

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í)
Instrukce typu 21

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:

  • TI-990/4 - mikroprocesor TMS-9900 s pamětí 56 kB
  • TI-990/9-Původní implementace TTL

Operační systémy

Pro TI-990 bylo k dispozici několik operačních systémů

Od TI:

  • TX990/TXDS
  • DX10
  • DNOS distribuovaný síťový operační systém

Od třetích stran:

Prameny

externí odkazy