# TOPS-20

Il TOPS-20 di Digital Equipment Corporation (DEC) era un software proprietario usato in alcuni mainframe computer DEC a 36 bit. L'Hardware Reference Manual era descritto come "DECsystem-10/DECSYSTEM-20 Processor" (riferendosi al DEC PDP-10 e al DECSYSTEM-20).
TOPS-20 iniziò ad essere usato nel 1969 come sistema operativo TENEX di Bolt, Beranek and Newman (BBN) e dal 1976 venne venduto per il DEC. Non ha quasi niente a che fare con il TOPS-10, ma venne fornito con la funzione di emulazione delle chiamate monitor PA1050 TOPS-10 che consentiva alla maggior parte, ma non a tutti, gli eseguibili TOPS-10 di funzionare senza modifiche. Per una questione di politica, il DEC non aggiornò PA1050 per supportare le successive aggiunte di TOPS-10 tranne dove richiesto dal software DEC.
TOPS-20 era in competizione, oltre che con TOPS-10, anche con ITS e WAITS—tutti disponibili per PDP-10 e noti sistemi di time sharing.

## TENEX

TOPS-20 era basato sul sistema operativo TENEX, creato da Bolt Beranek and Newman per i computer Digital PDP-10. Dopo che Digital iniziò lo sviluppo della versione KI-10 del PDP-10, sorse un problema: a questo punto TENEX era il sistema operativo PDP-10 più popolare scritto dai clienti , ma non avrebbe funzionato sui nuovi e più veloci KI-10. Per correggere questo problema, il responsabile delle vendite del DEC PDP-10 acquisì i diritti su TENEX da BBN e imbastì un progetto per portarlo sul nuovo computer. Alla fine, rimase molto poco del codice TENEX originale e Digital infine chiamò il sistema operativo risultante TOPS-20.

## PA1050

Parte di ciò che arrivò con TOPS-20 era semplicemente un'emulazione delle chiamate del sistema operativo TOPS-10. Queste erano conosciuti come UUO, acronimo di "Unmplemented User Operation" ed erano necessarie sia per l'esecuzione dei compilatori, che non erano specifici per il 20, sia per i programmi utente scritti in questi linguaggi. Il pacchetto mappato nello spazio degli indirizzi di un utente venne denominato "PA1050": PA come in PAT e come compatibilità; 10 come in DEC o PDP 10; 50 come in un modello PDP 10 50, 10/50, 1050.
Alcune volte PA1050 era definito PAT, un nome che si adattava bene al fatto che PA1050 "era semplicemente un codice in modalità utente non privilegiato" che "eseguiva l'azione richiesta, utilizzando le chiamate JSYS ove necessario."

## Capacità del TOPS-20

I modi principali per ottenere le capacità del TOPS-20, che lo resero importante, erano:
* comandi immessi tramite processore di comando, EXEC.EXE;
* chiamate JSYS ("Jump to System") da programmi MACro-language (.MAC).
L'"EXEC" completava il suo lavoro primariamente con:
* codici interni, anche con chiamate JSYS;
* servizi di componenti "GALAXY" (come spoolers).

### Processore di comando

Piuttosto avanzate per i tempi erano alcune funzionalità specifiche di TOPS-20:
* completamento di linee di comando;
* aiuti dinamici come:
** noise-words - digitando DIR e quindi premendo il tasto ESCape risultava
    DIRectory (dei files)
** digitando I e poi premendo Esc si aveva
    Information (about)
Si poteva premere ? quali operandi erano permessi o richiesti.

### Comandi

Il seguente elenco di comandi è supportato dal processore di comandi TOPS-20.
* ACCESS
* ADVISE
* APPEND
* ARCHIVE
* ASSIGN
* ATTACH
* BACKSPACE
* BLANK
* BREAK
* BUILD
* CANCEL
* CLOSE
* COMPILE
* CONNECT
* CONTINUE
* COPY
* CREATE
* CREF
* CSAVE
* DAYTIME
* DDT
* DEASSIGN
* DEBUG
* DEFINE
* DELETE
* DEPOSIT
* DETACH
* DIRECTORY
* DISABLE
* DISCARD
* DISMOUNT
* EDIT
* ENABLE
* END-ACCESS
* EOF
* ERUN
* EXAMINE
* EXECUTE
* EXPUNGE
* FDIRECTORY
* FORK
* FREEZE
* GET
* HELP
* INFORMATION
* KEEP
* LOAD
* LOGIN
* LOGOUT
* MERGE
* MODIFY
* MOUNT
* PERUSE
* PLOT
* POP
* PRINT
* PUNCH
* PUSH
* R
* RECEIVE
* REENTER
* REFUSE
* REMARK
* RENAME
* RESET
* RETRIEVE
* REWIND
* RUN
* SAVE
* SEND
* SET
* SET HOST
* SKIP
* START
* SUBMIT
* SYSTAT
* TAKE
* TALK
* TDIRECTORY
* TERMINAL
* TRANSLATE
* TYPE
* UNATTACH
* UNDELETE
* UNKEEP
* UNLOAD
* VDIRECTORY

### JSYS features

JSYS sta per Jump to SYStem. Gli operandi erano a volte indirizzi di memoria. "TOPS-20 consente di utilizzare indirizzi a 18 o 30 bit. Alcune chiamate monitor richiedono un tipo, altre l'altro; alcune chiamate ancora accettano entrambi i tipi. Alcune chiamate monitor utilizzano solo 18 bit per contenere un indirizzo. Queste chiamate interpretano gli indirizzi 18-bit come posizioni nella sezione corrente."
Internamente, i file sono prima identificati, utilizzando un JSYS GTJFN ("Get Job File Number"), quindi quel numero JFN viene utilizzato per aprire (OPENF) e manipolare il contenuto del file.

## PCL (Programmable Command Language)

PCL (Programmable Command Language) è un linguaggio di programmazione che funziona con TOPS-20. I programmi sorgente PCL sono, per impostazione predefinita, memorizzati con Filetype .PCL e consentono di estendere TOPS-20 EXEC tramite un verbo denominato DECLARE. I comandi appena compilati diventano quindi parte funzionalmente dell'EXEC.

### Caratteristiche dei linguaggi PCL

PCL include:
* controllo del flusso: DO While/Until, CASE/SELECT, IF-THEN-ELSE, GOTO;
* operazioni su stringhe di caratteri (lunghezza, sottostringa, concatenazione);
* accesso alle informazioni di sistema (data/ora, attributi dei file, caratteristiche del dispositivo).

## TOPS-20 oggi

Paul Allen mantenne diversi sistemi informatici storici pubblicamente accessibili prima della sua morte, incluso un XKL TOAD-2 con TOPS-20.